1 |
/* |
2 |
* JSampler - a java front-end for LinuxSampler |
3 |
* |
4 |
* Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com> |
5 |
* |
6 |
* This file is part of JSampler. |
7 |
* |
8 |
* JSampler is free software; you can redistribute it and/or modify |
9 |
* it under the terms of the GNU General Public License version 2 |
10 |
* as published by the Free Software Foundation. |
11 |
* |
12 |
* JSampler is distributed in the hope that it will be useful, |
13 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 |
* GNU General Public License for more details. |
16 |
* |
17 |
* You should have received a copy of the GNU General Public License |
18 |
* along with JSampler; if not, write to the Free Software |
19 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
20 |
* MA 02111-1307 USA |
21 |
*/ |
22 |
|
23 |
package org.jsampler.view; |
24 |
|
25 |
import java.awt.Component; |
26 |
import java.awt.Container; |
27 |
import java.awt.Dimension; |
28 |
|
29 |
import java.beans.PropertyChangeEvent; |
30 |
import java.beans.PropertyChangeListener; |
31 |
|
32 |
import java.util.Comparator; |
33 |
import java.util.List; |
34 |
import java.util.Vector; |
35 |
|
36 |
import javax.swing.DefaultCellEditor; |
37 |
import javax.swing.JTable; |
38 |
import javax.swing.JTextField; |
39 |
import javax.swing.JViewport; |
40 |
import javax.swing.RowSorter.SortKey; |
41 |
import javax.swing.SortOrder; |
42 |
|
43 |
import javax.swing.event.ChangeEvent; |
44 |
import javax.swing.event.ListSelectionEvent; |
45 |
import javax.swing.event.RowSorterEvent; |
46 |
import javax.swing.event.RowSorterListener; |
47 |
import javax.swing.event.TableColumnModelEvent; |
48 |
import javax.swing.event.TableColumnModelListener; |
49 |
|
50 |
import javax.swing.table.TableCellEditor; |
51 |
import javax.swing.table.TableColumn; |
52 |
import javax.swing.table.TableColumnModel; |
53 |
import javax.swing.table.TableRowSorter; |
54 |
|
55 |
import org.jsampler.CC; |
56 |
import org.jsampler.JSPrefs; |
57 |
|
58 |
import org.linuxsampler.lscp.DbDirectoryInfo; |
59 |
import org.linuxsampler.lscp.DbInstrumentInfo; |
60 |
|
61 |
import org.linuxsampler.lscp.event.InstrumentsDbAdapter; |
62 |
import org.linuxsampler.lscp.event.InstrumentsDbEvent; |
63 |
|
64 |
import static javax.swing.event.RowSorterEvent.Type.SORT_ORDER_CHANGED; |
65 |
|
66 |
|
67 |
/** |
68 |
* |
69 |
* @author Grigor Iliev |
70 |
*/ |
71 |
public abstract class AbstractInstrumentsDbTable extends JTable { |
72 |
private final DefaultCellEditor nameEditor; |
73 |
private final JTextField tfEditor = new JTextField(); |
74 |
|
75 |
private DbDirectoryTreeNode directoryNode; |
76 |
private final InstrumentsDbTableRowSorter rowSorter; |
77 |
|
78 |
private String createdDirectoryName = null; |
79 |
|
80 |
private InstrumentsDbTableView view = null; |
81 |
|
82 |
private final String tablePrefix; |
83 |
|
84 |
/** |
85 |
* Creates a new instance of <code>AbstractInstrumentsDbTable</code> |
86 |
*/ |
87 |
public |
88 |
AbstractInstrumentsDbTable() { |
89 |
this(""); |
90 |
} |
91 |
|
92 |
/** |
93 |
* Creates a new instance of <code>AbstractInstrumentsDbTable</code> |
94 |
* @param tablePrefix Used to create unique property names for storing |
95 |
* the column preferences for different tables e.g. for DbInstrumentChooser, |
96 |
* InstrumentsDbFrame. |
97 |
*/ |
98 |
public |
99 |
AbstractInstrumentsDbTable(String tablePrefix) { |
100 |
this(new InstrumentsDbTableModel(), tablePrefix); |
101 |
} |
102 |
|
103 |
/** |
104 |
* Creates a new instance of <code>AbstractInstrumentsDbTable</code> |
105 |
*/ |
106 |
public AbstractInstrumentsDbTable(InstrumentsDbTableModel model, String tablePrefix) { |
107 |
super(model); |
108 |
setView(CC.getViewConfig().getInstrumentsDbTableView()); |
109 |
|
110 |
this.tablePrefix = tablePrefix; |
111 |
loadColumnsVisibleState(); |
112 |
loadColumnWidths(); |
113 |
|
114 |
setAutoResizeMode(AUTO_RESIZE_OFF); |
115 |
|
116 |
rowSorter = new InstrumentsDbTableRowSorter(getModel()); |
117 |
setRowSorter(rowSorter); |
118 |
|
119 |
loadSortOrder(); |
120 |
|
121 |
RowSorterListener l = new RowSorterListener() { |
122 |
public void |
123 |
sorterChanged(RowSorterEvent e) { |
124 |
if(e.getType() != SORT_ORDER_CHANGED) return; |
125 |
rowSorterChanged(); |
126 |
} |
127 |
}; |
128 |
|
129 |
getRowSorter().addRowSorterListener(l); |
130 |
|
131 |
putClientProperty("JTable.autoStartsEdit", false); |
132 |
|
133 |
nameEditor = new DefaultCellEditor(tfEditor); |
134 |
nameEditor.setClickCountToStart(5); |
135 |
|
136 |
if( getModel().getShowDummyColumn()) { |
137 |
TableColumn dummy; |
138 |
dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex()); |
139 |
dummy.setPreferredWidth(10); |
140 |
} |
141 |
} |
142 |
|
143 |
public InstrumentsDbTableModel |
144 |
getModel() { return (InstrumentsDbTableModel)super.getModel(); } |
145 |
|
146 |
public TableCellEditor |
147 |
getCellEditor(int row, int column) { |
148 |
if(column == 0) return nameEditor; |
149 |
return super.getCellEditor(row, column); |
150 |
} |
151 |
|
152 |
public DbDirectoryTreeNode |
153 |
getSelectedDirectoryNode() { |
154 |
int idx = getSelectedRow(); |
155 |
if(idx == -1) return null; |
156 |
idx = convertRowIndexToModel(idx); |
157 |
return getModel().getDirectoryNode(idx); |
158 |
} |
159 |
|
160 |
/** |
161 |
* Selects the specified directory. |
162 |
* The current selection is not altered if missing directory is specified. |
163 |
* @param dir The name of the directory to select. |
164 |
*/ |
165 |
public void |
166 |
setSelectedDirectory(String dir) { |
167 |
int i = getModel().getDirectoryRowIndex(dir); |
168 |
if(i == -1) return; |
169 |
i = convertRowIndexToView(i); |
170 |
if(i == -1) return; |
171 |
|
172 |
getSelectionModel().setSelectionInterval(i, i); |
173 |
} |
174 |
|
175 |
/** |
176 |
* Selects the specified instrument. |
177 |
* The current selection is not altered if missing instrument is specified. |
178 |
* @param instr The name of the instrument to select. |
179 |
*/ |
180 |
public void |
181 |
setSelectedInstrument(String instr) { |
182 |
int i = getModel().getInstrumentRowIndex(instr); |
183 |
if(i == -1) return; |
184 |
i = convertRowIndexToView(i); |
185 |
if(i == -1) return; |
186 |
getSelectionModel().setSelectionInterval(i, i); |
187 |
} |
188 |
|
189 |
/** |
190 |
* Gets all selected directories. |
191 |
*/ |
192 |
public DbDirectoryInfo[] |
193 |
getSelectedDirectories() { |
194 |
int[] rows = getSelectedRows(); |
195 |
if(rows.length == 0) return new DbDirectoryInfo[0]; |
196 |
|
197 |
DbDirectoryTreeNode dir; |
198 |
Vector<DbDirectoryInfo> v = new Vector<DbDirectoryInfo>(); |
199 |
for(int i : rows) { |
200 |
dir = getModel().getDirectoryNode(convertRowIndexToModel(i)); |
201 |
if(dir != null) v.add(dir.getInfo()); |
202 |
} |
203 |
|
204 |
return v.toArray(new DbDirectoryInfo[v.size()]); |
205 |
} |
206 |
|
207 |
/** |
208 |
* Gets all selected instruments. |
209 |
*/ |
210 |
public DbInstrumentInfo[] |
211 |
getSelectedInstruments() { |
212 |
int[] rows = getSelectedRows(); |
213 |
if(rows.length == 0) return new DbInstrumentInfo[0]; |
214 |
|
215 |
DbInstrumentInfo instr; |
216 |
Vector<DbInstrumentInfo> v = new Vector<DbInstrumentInfo>(); |
217 |
for(int i : rows) { |
218 |
instr = getModel().getInstrument(convertRowIndexToModel(i)); |
219 |
if(instr != null) v.add(instr); |
220 |
} |
221 |
|
222 |
return v.toArray(new DbInstrumentInfo[v.size()]); |
223 |
} |
224 |
|
225 |
public boolean |
226 |
editCellAt(int row, int column) { |
227 |
if(!super.editCellAt(row, column)) return false; |
228 |
|
229 |
Component c = getEditorComponent(); |
230 |
if(c != null) c.requestFocusInWindow(); |
231 |
|
232 |
return true; |
233 |
} |
234 |
|
235 |
/** |
236 |
* Gets the directory node, which |
237 |
* content is represented by this table. |
238 |
*/ |
239 |
public DbDirectoryTreeNode |
240 |
getParentDirectoryNode() { return directoryNode; } |
241 |
|
242 |
/** |
243 |
* Sets the directory node, which |
244 |
* content will be represented by this table. |
245 |
*/ |
246 |
public void |
247 |
setParentDirectoryNode(DbDirectoryTreeNode node) { |
248 |
getModel().setParentDirectoryNode(node); |
249 |
|
250 |
if(directoryNode != null) directoryNode.removeInstrumentsDbListener(getHandler()); |
251 |
directoryNode = node; |
252 |
if(directoryNode != null) directoryNode.addInstrumentsDbListener(getHandler()); |
253 |
} |
254 |
|
255 |
/** |
256 |
* Gets the name of the directory created by this frontend. |
257 |
* This method is used to determine the directories created |
258 |
* by this frontend. |
259 |
* @return The name of the directory created by this frontend. |
260 |
*/ |
261 |
public String |
262 |
getCreatedDirectoryName() { return createdDirectoryName; } |
263 |
|
264 |
/** |
265 |
* Sets the name of the created by this frontend. |
266 |
* @param name The name of the directory created by this frontend. |
267 |
*/ |
268 |
public void |
269 |
setCreatedDirectoryName(String name) { createdDirectoryName = name; } |
270 |
|
271 |
public Object |
272 |
getLeadObject() { |
273 |
if(getSelectionModel().isSelectionEmpty()) return null; |
274 |
int idx = getSelectionModel().getLeadSelectionIndex(); |
275 |
if(idx < 0) return null; |
276 |
idx = this.convertRowIndexToModel(idx); |
277 |
|
278 |
return getModel().getValueAt(idx, 0); |
279 |
} |
280 |
|
281 |
/** Sets the view to be used for retrieving UI information. */ |
282 |
public void |
283 |
setView(InstrumentsDbTableView view) { |
284 |
this.view = view; |
285 |
} |
286 |
|
287 |
/** Gets the view used to retrieve UI information. */ |
288 |
public InstrumentsDbTableView |
289 |
getView() { return view; } |
290 |
|
291 |
private JSPrefs |
292 |
preferences() { return CC.getViewConfig().preferences(); } |
293 |
|
294 |
public void |
295 |
loadColumnWidths() { |
296 |
loadColumnWidths(tablePrefix); |
297 |
} |
298 |
|
299 |
public void |
300 |
loadColumnWidths(String prefix) { |
301 |
InstrumentsDbTableModel m = getModel(); |
302 |
TableColumnModel tcm = getColumnModel(); |
303 |
|
304 |
for(int i = 0; i < m.getColumnCount(); i++) { |
305 |
switch(m.getColumnType(i)) { |
306 |
case NAME: |
307 |
String s = prefix + "DbInstrumentsTable.nameColumnWidth"; |
308 |
int w = preferences().getIntProperty(s); |
309 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
310 |
break; |
311 |
case SIZE: |
312 |
s = prefix + "DbInstrumentsTable.sizeColumnWidth"; |
313 |
w = preferences().getIntProperty(s); |
314 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
315 |
break; |
316 |
case FORMAT_FAMILY: |
317 |
s = prefix + "DbInstrumentsTable.formatFamilyColumnWidth"; |
318 |
w = preferences().getIntProperty(s); |
319 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
320 |
break; |
321 |
case FORMAT_VERSION: |
322 |
s = prefix + "DbInstrumentsTable.formatVersionColumnWidth"; |
323 |
w = preferences().getIntProperty(s); |
324 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
325 |
break; |
326 |
case IS_DRUM: |
327 |
s = prefix + "DbInstrumentsTable.isDrumColumnWidth"; |
328 |
w = preferences().getIntProperty(s); |
329 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
330 |
break; |
331 |
case CREATED: |
332 |
s = prefix + "DbInstrumentsTable.createdColumnWidth"; |
333 |
w = preferences().getIntProperty(s); |
334 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
335 |
break; |
336 |
case MODIFIED: |
337 |
s = prefix + "DbInstrumentsTable.modifiedColumnWidth"; |
338 |
w = preferences().getIntProperty(s); |
339 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
340 |
break; |
341 |
case PRODUCT: |
342 |
s = prefix + "DbInstrumentsTable.productColumnWidth"; |
343 |
w = preferences().getIntProperty(s); |
344 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
345 |
break; |
346 |
case ARTISTS: |
347 |
s = prefix + "DbInstrumentsTable.artistsColumnWidth"; |
348 |
w = preferences().getIntProperty(s); |
349 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
350 |
break; |
351 |
case INSTRUMENT_FILE: |
352 |
s = prefix + "DbInstrumentsTable.instrumentFileColumnWidth"; |
353 |
w = preferences().getIntProperty(s); |
354 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
355 |
break; |
356 |
case INSTRUMENT_NR: |
357 |
s = prefix + "DbInstrumentsTable.instrumentNrColumnWidth"; |
358 |
w = preferences().getIntProperty(s); |
359 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
360 |
break; |
361 |
case KEYWORDS: |
362 |
s = prefix + "DbInstrumentsTable.keywordsColumnWidth"; |
363 |
w = preferences().getIntProperty(s); |
364 |
if(w > 0) tcm.getColumn(i).setPreferredWidth(w); |
365 |
break; |
366 |
case DUMMY: |
367 |
tcm.getColumn(i).setPreferredWidth(10); |
368 |
break; |
369 |
} |
370 |
} |
371 |
} |
372 |
|
373 |
public void |
374 |
saveColumnWidths() { |
375 |
saveColumnWidths(tablePrefix); |
376 |
} |
377 |
|
378 |
public void |
379 |
saveColumnWidths(String prefix) { |
380 |
InstrumentsDbTableModel m = getModel(); |
381 |
TableColumnModel tcm = getColumnModel(); |
382 |
|
383 |
for(int i = 0; i < m.getColumnCount(); i++) { |
384 |
switch(m.getColumnType(i)) { |
385 |
case NAME: |
386 |
String s = prefix + "DbInstrumentsTable.nameColumnWidth"; |
387 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
388 |
break; |
389 |
case SIZE: |
390 |
s = prefix + "DbInstrumentsTable.sizeColumnWidth"; |
391 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
392 |
break; |
393 |
case FORMAT_FAMILY: |
394 |
s = prefix + "DbInstrumentsTable.formatFamilyColumnWidth"; |
395 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
396 |
break; |
397 |
case FORMAT_VERSION: |
398 |
s = prefix + "DbInstrumentsTable.formatVersionColumnWidth"; |
399 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
400 |
break; |
401 |
case IS_DRUM: |
402 |
s = prefix + "DbInstrumentsTable.isDrumColumnWidth"; |
403 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
404 |
break; |
405 |
case CREATED: |
406 |
s = prefix + "DbInstrumentsTable.createdColumnWidth"; |
407 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
408 |
break; |
409 |
case MODIFIED: |
410 |
s = prefix + "DbInstrumentsTable.modifiedColumnWidth"; |
411 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
412 |
break; |
413 |
case PRODUCT: |
414 |
s = prefix + "DbInstrumentsTable.productColumnWidth"; |
415 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
416 |
break; |
417 |
case ARTISTS: |
418 |
s = prefix + "DbInstrumentsTable.artistsColumnWidth"; |
419 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
420 |
break; |
421 |
case INSTRUMENT_FILE: |
422 |
s = prefix + "DbInstrumentsTable.instrumentFileColumnWidth"; |
423 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
424 |
break; |
425 |
case INSTRUMENT_NR: |
426 |
s = prefix + "DbInstrumentsTable.instrumentNrColumnWidth"; |
427 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
428 |
break; |
429 |
case KEYWORDS: |
430 |
s = prefix + "DbInstrumentsTable.keywordsColumnWidth"; |
431 |
preferences().setIntProperty(s, tcm.getColumn(i).getWidth()); |
432 |
break; |
433 |
} |
434 |
} |
435 |
} |
436 |
|
437 |
public void |
438 |
loadColumnsVisibleState() { |
439 |
loadColumnsVisibleState(tablePrefix); |
440 |
} |
441 |
|
442 |
public void |
443 |
loadColumnsVisibleState(String prefix) { |
444 |
String s; |
445 |
InstrumentsDbTableModel m = getModel(); |
446 |
|
447 |
s = prefix + "DbInstrumentsTable.ShowSizeColumn"; |
448 |
m.setShowSizeColumn(preferences().getBoolProperty(s)); |
449 |
s = prefix + "DbInstrumentsTable.ShowFormatFamilyColumn"; |
450 |
m.setShowFormatFamilyColumn(preferences().getBoolProperty(s)); |
451 |
s = prefix + "DbInstrumentsTable.ShowFormatVersionColumn"; |
452 |
m.setShowFormatVersionColumn(preferences().getBoolProperty(s)); |
453 |
s = prefix + "DbInstrumentsTable.ShowIsDrumColumn"; |
454 |
m.setShowIsDrumColumn(preferences().getBoolProperty(s)); |
455 |
s = prefix + "DbInstrumentsTable.ShowCreatedColumn"; |
456 |
m.setShowCreatedColumn(preferences().getBoolProperty(s)); |
457 |
s = prefix + "DbInstrumentsTable.ShowModifiedColumn"; |
458 |
m.setShowModifiedColumn(preferences().getBoolProperty(s)); |
459 |
s = prefix + "DbInstrumentsTable.ShowProductColumn"; |
460 |
m.setShowProductColumn(preferences().getBoolProperty(s)); |
461 |
s = prefix + "DbInstrumentsTable.ShowArtistsColumn"; |
462 |
m.setShowArtistsColumn(preferences().getBoolProperty(s)); |
463 |
s = prefix + "DbInstrumentsTable.ShowInstrumentFileColumn"; |
464 |
m.setShowInstrumentFileColumn(preferences().getBoolProperty(s)); |
465 |
s = prefix + "DbInstrumentsTable.ShowInstrumentNrColumn"; |
466 |
m.setShowInstrumentNrColumn(preferences().getBoolProperty(s)); |
467 |
s = prefix + "DbInstrumentsTable.ShowKeywordsColumn"; |
468 |
m.setShowKeywordsColumn(preferences().getBoolProperty(s)); |
469 |
} |
470 |
|
471 |
public void |
472 |
saveColumnsVisibleState() { |
473 |
saveColumnsVisibleState(tablePrefix); |
474 |
} |
475 |
|
476 |
public void |
477 |
saveColumnsVisibleState(String prefix) { |
478 |
InstrumentsDbTableModel m = getModel(); |
479 |
|
480 |
String s = prefix + "DbInstrumentsTable.ShowSizeColumn"; |
481 |
preferences().setBoolProperty(s, m.getShowSizeColumn()); |
482 |
s = prefix + "DbInstrumentsTable.ShowFormatFamilyColumn"; |
483 |
preferences().setBoolProperty(s, m.getShowFormatFamilyColumn()); |
484 |
s = prefix + "DbInstrumentsTable.ShowFormatVersionColumn"; |
485 |
preferences().setBoolProperty(s, m.getShowFormatVersionColumn()); |
486 |
s = prefix + "DbInstrumentsTable.ShowIsDrumColumn"; |
487 |
preferences().setBoolProperty(s, m.getShowIsDrumColumn()); |
488 |
s = prefix + "DbInstrumentsTable.ShowCreatedColumn"; |
489 |
preferences().setBoolProperty(s, m.getShowCreatedColumn()); |
490 |
s = prefix + "DbInstrumentsTable.ShowModifiedColumn"; |
491 |
preferences().setBoolProperty(s, m.getShowModifiedColumn()); |
492 |
s = prefix + "DbInstrumentsTable.ShowProductColumn"; |
493 |
preferences().setBoolProperty(s, m.getShowProductColumn()); |
494 |
s = prefix + "DbInstrumentsTable.ShowArtistsColumn"; |
495 |
preferences().setBoolProperty(s, m.getShowArtistsColumn()); |
496 |
s = prefix + "DbInstrumentsTable.ShowInstrumentFileColumn"; |
497 |
preferences().setBoolProperty(s, m.getShowInstrumentFileColumn()); |
498 |
s = prefix + "DbInstrumentsTable.ShowInstrumentNrColumn"; |
499 |
preferences().setBoolProperty(s, m.getShowInstrumentNrColumn()); |
500 |
s = prefix + "DbInstrumentsTable.ShowKeywordsColumn"; |
501 |
preferences().setBoolProperty(s, m.getShowKeywordsColumn()); |
502 |
} |
503 |
|
504 |
public void |
505 |
loadSortOrder() { |
506 |
loadSortOrder(tablePrefix); |
507 |
} |
508 |
|
509 |
public void |
510 |
loadSortOrder(String prefix) { |
511 |
int i = preferences().getIntProperty(tablePrefix + "sortOrder"); |
512 |
boolean descending = i < 0; |
513 |
if(i < 0) i *= -1; |
514 |
i--; |
515 |
|
516 |
if(i < 0 || i >= getModel().getColumnCount()) { |
517 |
getRowSorter().toggleSortOrder(0); |
518 |
CC.getLogger().warning("Unknown table column: " + i); |
519 |
} else { |
520 |
getRowSorter().toggleSortOrder(i); |
521 |
if(descending) getRowSorter().toggleSortOrder(i); |
522 |
} |
523 |
} |
524 |
|
525 |
private void |
526 |
rowSorterChanged() { |
527 |
List<? extends SortKey> list = getRowSorter().getSortKeys(); |
528 |
if(list.isEmpty()) return; |
529 |
SortKey k = list.get(0); |
530 |
int i = k.getColumn() + 1; |
531 |
if(k.getSortOrder() == SortOrder.UNSORTED) return; |
532 |
if(k.getSortOrder() == SortOrder.DESCENDING) i *= -1; |
533 |
preferences().setIntProperty(tablePrefix + "sortOrder", i); |
534 |
} |
535 |
|
536 |
/*public void |
537 |
columnMarginChanged(ChangeEvent e) { |
538 |
if(isEditing()) removeEditor(); |
539 |
TableColumn resizingColumn = null; |
540 |
if(getTableHeader() != null) resizingColumn = getTableHeader().getResizingColumn(); |
541 |
if (resizingColumn != null && autoResizeMode == AUTO_RESIZE_OFF) { |
542 |
resizingColumn.setPreferredWidth(resizingColumn.getWidth()); |
543 |
} |
544 |
setAutoResizeMode(); |
545 |
resizeAndRepaint(); |
546 |
} |
547 |
|
548 |
public boolean |
549 |
getScrollableTracksViewportWidth() { |
550 |
return getPreferredSize().width < getParent().getWidth(); |
551 |
} |
552 |
|
553 |
private void |
554 |
setAutoResizeMode() { |
555 |
Container c = getParent(); |
556 |
if (!(c instanceof JViewport)) return; |
557 |
|
558 |
JViewport vp = (JViewport)c; |
559 |
int w = vp.getWidth(); |
560 |
TableColumn dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex()); |
561 |
int i = w - (getColumnModel().getTotalColumnWidth() - dummy.getWidth()); |
562 |
if(i > 5) { |
563 |
if(getAutoResizeMode() != AUTO_RESIZE_LAST_COLUMN) |
564 |
setAutoResizeMode(AUTO_RESIZE_LAST_COLUMN); |
565 |
} else { |
566 |
if(getAutoResizeMode() != AUTO_RESIZE_OFF) |
567 |
setAutoResizeMode(AUTO_RESIZE_OFF); |
568 |
} |
569 |
}*/ |
570 |
|
571 |
private class InstrumentsDbTableRowSorter extends TableRowSorter<InstrumentsDbTableModel> { |
572 |
InstrumentsDbTableRowSorter(InstrumentsDbTableModel model) { |
573 |
super(model); |
574 |
} |
575 |
|
576 |
public Comparator<?> |
577 |
getComparator(int column) { |
578 |
Comparator c = getModel().getComparator(column); |
579 |
if(c != null) return c; |
580 |
|
581 |
return super.getComparator(column); |
582 |
} |
583 |
|
584 |
protected boolean |
585 |
useToString(int column) { |
586 |
return getModel().getComparator(column) == null; |
587 |
} |
588 |
|
589 |
public boolean |
590 |
isSortable(int column) { |
591 |
return getModel().isSortable(column); |
592 |
} |
593 |
} |
594 |
|
595 |
private final EventHandler eventHandler = new EventHandler(); |
596 |
|
597 |
private EventHandler |
598 |
getHandler() { return eventHandler; } |
599 |
|
600 |
private class EventHandler extends InstrumentsDbAdapter { |
601 |
|
602 |
/** |
603 |
* Invoked when the number of instrument |
604 |
* directories in a specific directory has changed. |
605 |
*/ |
606 |
public void |
607 |
directoryCountChanged(InstrumentsDbEvent e) { |
608 |
String rd = getModel().getRenamedDirectory(); |
609 |
int idx = getModel().getDirectoryRowIndex(rd); |
610 |
if(idx != -1) { |
611 |
setSelectedDirectory(rd); |
612 |
getModel().setRenamedDirectory(null); |
613 |
} |
614 |
|
615 |
idx = getModel().getDirectoryRowIndex(getCreatedDirectoryName()); |
616 |
if(idx != -1) { |
617 |
idx = convertRowIndexToView(idx); |
618 |
if(idx != -1) { |
619 |
getSelectionModel().setSelectionInterval(idx, idx); |
620 |
editCellAt(idx, 0); |
621 |
Component c = nameEditor.getComponent(); |
622 |
if(c instanceof JTextField) ((JTextField)c).selectAll(); |
623 |
setCreatedDirectoryName(null); |
624 |
} |
625 |
} |
626 |
} |
627 |
|
628 |
/** |
629 |
* Invoked when the number of instruments |
630 |
* in a specific directory has changed. |
631 |
*/ |
632 |
public void |
633 |
instrumentCountChanged(InstrumentsDbEvent e) { |
634 |
String ri = getModel().getRenamedInstrument(); |
635 |
int idx = getModel().getInstrumentRowIndex(ri); |
636 |
if(idx != -1) { |
637 |
setSelectedInstrument(ri); |
638 |
getModel().setRenamedInstrument(null); |
639 |
} |
640 |
} |
641 |
} |
642 |
} |