Source code: com/memoire/bu/BuGenericPreferencesModel.java
1 /**
2 * @modification $Date: 2001/12/03 16:28:07 $
3 * @statut unstable
4 * @file BuGenericPreferencesModel.java
5 * @version 0.36
6 * @author Guillaume Desnoix
7 * @email guillaume@desnoix.com
8 * @license GNU General Public License 2 (GPL2)
9 * @copyright 1998-2001 Guillaume Desnoix
10 */
11
12 package com.memoire.bu;
13
14 import com.memoire.bu.*;
15 import com.memoire.fu.*;
16
17 /**
18 * @creation 2001-03-06
19 * @modification 2001-03-06
20 * @statut unstable
21 */
22
23 import java.awt.*;
24 import java.awt.event.*;
25 import java.util.*;
26
27 import javax.swing.*;
28 import javax.swing.border.*;
29 import javax.swing.event.*;
30 import javax.swing.table.*;
31
32 /**
33 * A table model for the user preferences.
34 * any
35 */
36 public class BuGenericPreferencesModel
37 implements TableModel
38 {
39 private Vector listeners_;
40 private FuPreferences options_;
41 private String[] keys_;
42 private int size_;
43 private String mask_;
44 private boolean editable_,growable_;
45
46 public BuGenericPreferencesModel(FuPreferences _options)
47 {
48 this(_options,"",true,false);
49 }
50
51 public BuGenericPreferencesModel
52 (FuPreferences _options, String _mask,
53 boolean _editable, boolean _growable)
54 {
55 listeners_=new Vector();
56 options_ =_options;
57 keys_ =new String[0];
58 size_ =0;
59 editable_ =_editable;
60 growable_ =_growable;
61
62 setMask(_mask);
63 }
64
65 public String getMask()
66 {
67 return mask_;
68 }
69
70 public void setMask(String _mask)
71 {
72 if(_mask==null) _mask="";
73 mask_=_mask;
74 build();
75 }
76
77 protected void build()
78 {
79 synchronized(options_)
80 {
81 keys_=new String[options_.size()];
82
83 Enumeration e=options_.keys();
84 int i=0;
85 while(e.hasMoreElements())
86 {
87 String s=(String)e.nextElement();
88 if(s.startsWith(mask_))
89 {
90 keys_[i]=s;
91 i++;
92 }
93 }
94 size_=i;
95 }
96 FuSort.sort(keys_,0,size_);
97 fireTableChanged();
98 }
99
100 public Class getColumnClass(int column)
101 {
102 Class r=null;
103 switch(column)
104 {
105 case 0: r=String.class; break; // name
106 case 1: r=String.class; break; // value
107 default: r=Object.class; break;
108 }
109 return r;
110 }
111
112 public int getColumnCount()
113 { return 2; }
114
115 public String getColumnName(int column)
116 {
117 String r="";
118
119 switch(column)
120 {
121 case 0: r=BuResource.BU.getString("Clef"); break;
122 case 1: r=BuResource.BU.getString("Valeur"); break;
123 default: r="undefined"; break;
124 }
125
126 return r;
127 }
128
129 public int getRowCount()
130 {
131 return size_+(growable_ ? 1 : 0);
132 }
133
134 public Object getValueAt(int row, int column)
135 {
136 Object r=null;
137
138 switch(column)
139 {
140 case 0: r=((row==size_) ? ""
141 : keys_[row]); break;
142 case 1: r=((row==size_) ? ""
143 : options_.getStringProperty(keys_[row])); break;
144 default: r="default"; break;
145 }
146
147 if(!(r instanceof String)) r=""+r;
148 return r;
149 }
150
151 public boolean isCellEditable(int row, int column)
152 {
153 return (editable_&&(column==1))
154 ||(growable_&&(row==size_)&&(column==0));
155 }
156
157 public void setValueAt(Object value, int row, int column)
158 {
159 if(!(value instanceof String)) value=""+value;
160
161 if(column==0)
162 {
163 String k=(String)value;
164 k=k.toLowerCase().trim();
165 if(!"".equals(k)&&k.startsWith(mask_))
166 {
167 String v=options_.getStringProperty(k,"");
168 options_.putStringProperty(k,v);
169 build();
170 }
171 }
172 else
173 if(column==1)
174 {
175 options_.putStringProperty(keys_[row],(String)value);
176 fireRowChanged(row);
177 }
178 }
179
180 public void fireRowChanged(int row)
181 {
182 TableModelEvent e=new TableModelEvent(this,row);
183 Enumeration l=listeners_.elements();
184 while(l.hasMoreElements())
185 ((TableModelListener)l.nextElement()).tableChanged(e);
186 }
187
188 public void fireTableChanged()
189 {
190 TableModelEvent e=new TableModelEvent(this);
191 Enumeration l=listeners_.elements();
192 while(l.hasMoreElements())
193 ((TableModelListener)l.nextElement()).tableChanged(e);
194 }
195
196 public void addTableModelListener(TableModelListener _l)
197 { listeners_.addElement(_l); }
198
199 public void removeTableModelListener(TableModelListener _l)
200 { listeners_.removeElement(_l); }
201 }