1 |
/* |
/* |
2 |
* JSampler - a java front-end for LinuxSampler |
* JSampler - a java front-end for LinuxSampler |
3 |
* |
* |
4 |
* Copyright (C) 2005-2007 Grigor Iliev <grigor@grigoriliev.com> |
* Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com> |
5 |
* |
* |
6 |
* This file is part of JSampler. |
* This file is part of JSampler. |
7 |
* |
* |
30 |
import java.beans.PropertyChangeListener; |
import java.beans.PropertyChangeListener; |
31 |
|
|
32 |
import java.util.Comparator; |
import java.util.Comparator; |
33 |
|
import java.util.List; |
34 |
import java.util.Vector; |
import java.util.Vector; |
35 |
|
|
36 |
import javax.swing.DefaultCellEditor; |
import javax.swing.DefaultCellEditor; |
37 |
import javax.swing.JTable; |
import javax.swing.JTable; |
38 |
import javax.swing.JTextField; |
import javax.swing.JTextField; |
39 |
import javax.swing.JViewport; |
import javax.swing.JViewport; |
40 |
|
import javax.swing.RowSorter.SortKey; |
41 |
|
import javax.swing.SortOrder; |
42 |
|
|
43 |
import javax.swing.event.ChangeEvent; |
import javax.swing.event.ChangeEvent; |
44 |
import javax.swing.event.ListSelectionEvent; |
import javax.swing.event.ListSelectionEvent; |
45 |
|
import javax.swing.event.RowSorterEvent; |
46 |
|
import javax.swing.event.RowSorterListener; |
47 |
import javax.swing.event.TableColumnModelEvent; |
import javax.swing.event.TableColumnModelEvent; |
48 |
import javax.swing.event.TableColumnModelListener; |
import javax.swing.event.TableColumnModelListener; |
49 |
|
|
61 |
import org.linuxsampler.lscp.event.InstrumentsDbAdapter; |
import org.linuxsampler.lscp.event.InstrumentsDbAdapter; |
62 |
import org.linuxsampler.lscp.event.InstrumentsDbEvent; |
import org.linuxsampler.lscp.event.InstrumentsDbEvent; |
63 |
|
|
64 |
|
import static javax.swing.event.RowSorterEvent.Type.SORT_ORDER_CHANGED; |
65 |
|
|
66 |
|
|
67 |
/** |
/** |
68 |
* |
* |
79 |
|
|
80 |
private InstrumentsDbTableView view = null; |
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> |
* 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 AbstractInstrumentsDbTable() { |
public |
99 |
this(new InstrumentsDbTableModel()); |
AbstractInstrumentsDbTable(String tablePrefix) { |
100 |
|
this(new InstrumentsDbTableModel(), tablePrefix); |
101 |
} |
} |
102 |
|
|
103 |
/** |
/** |
104 |
* Creates a new instance of <code>AbstractInstrumentsDbTable</code> |
* Creates a new instance of <code>AbstractInstrumentsDbTable</code> |
105 |
*/ |
*/ |
106 |
public AbstractInstrumentsDbTable(InstrumentsDbTableModel model) { |
public AbstractInstrumentsDbTable(InstrumentsDbTableModel model, String tablePrefix) { |
107 |
super(model); |
super(model); |
108 |
setView(CC.getViewConfig().getInstrumentsDbTableView()); |
setView(CC.getViewConfig().getInstrumentsDbTableView()); |
109 |
|
|
110 |
String s; |
this.tablePrefix = tablePrefix; |
111 |
InstrumentsDbTableModel m = getModel(); |
loadColumnsVisibleState(); |
112 |
|
loadColumnWidths(); |
|
s = "DbInstrumentsTable.ShowSizeColumn"; |
|
|
m.setShowSizeColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowFormatFamilyColumn"; |
|
|
m.setShowFormatFamilyColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowFormatVersionColumn"; |
|
|
m.setShowFormatVersionColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowIsDrumColumn"; |
|
|
m.setShowIsDrumColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowCreatedColumn"; |
|
|
m.setShowCreatedColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowModifiedColumn"; |
|
|
m.setShowModifiedColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowProductColumn"; |
|
|
m.setShowProductColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowArtistsColumn"; |
|
|
m.setShowArtistsColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowInstrumentFileColumn"; |
|
|
m.setShowInstrumentFileColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowInstrumentNrColumn"; |
|
|
m.setShowInstrumentNrColumn(preferences().getBoolProperty(s)); |
|
|
s = "DbInstrumentsTable.ShowKeywordsColumn"; |
|
|
m.setShowKeywordsColumn(preferences().getBoolProperty(s)); |
|
113 |
|
|
114 |
setAutoResizeMode(AUTO_RESIZE_OFF); |
setAutoResizeMode(AUTO_RESIZE_OFF); |
115 |
|
|
116 |
rowSorter = new InstrumentsDbTableRowSorter(getModel()); |
rowSorter = new InstrumentsDbTableRowSorter(getModel()); |
117 |
setRowSorter(rowSorter); |
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); |
putClientProperty("JTable.autoStartsEdit", false); |
132 |
|
|
133 |
nameEditor = new DefaultCellEditor(tfEditor); |
nameEditor = new DefaultCellEditor(tfEditor); |
134 |
nameEditor.setClickCountToStart(5); |
nameEditor.setClickCountToStart(5); |
135 |
|
|
136 |
if(m.getShowDummyColumn()) { |
if( getModel().getShowDummyColumn()) { |
137 |
TableColumn dummy; |
TableColumn dummy; |
138 |
dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex()); |
dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex()); |
139 |
dummy.setPreferredWidth(10); |
dummy.setPreferredWidth(10); |
293 |
|
|
294 |
public void |
public void |
295 |
loadColumnWidths() { |
loadColumnWidths() { |
296 |
loadColumnWidths(""); |
loadColumnWidths(tablePrefix); |
297 |
} |
} |
298 |
|
|
299 |
public void |
public void |
372 |
|
|
373 |
public void |
public void |
374 |
saveColumnWidths() { |
saveColumnWidths() { |
375 |
saveColumnWidths(""); |
saveColumnWidths(tablePrefix); |
376 |
} |
} |
377 |
|
|
378 |
public void |
public void |
435 |
} |
} |
436 |
|
|
437 |
public void |
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() { |
saveColumnsVisibleState() { |
473 |
|
saveColumnsVisibleState(tablePrefix); |
474 |
|
} |
475 |
|
|
476 |
|
public void |
477 |
|
saveColumnsVisibleState(String prefix) { |
478 |
InstrumentsDbTableModel m = getModel(); |
InstrumentsDbTableModel m = getModel(); |
479 |
|
|
480 |
String s = "DbInstrumentsTable.ShowSizeColumn"; |
String s = prefix + "DbInstrumentsTable.ShowSizeColumn"; |
481 |
preferences().setBoolProperty(s, m.getShowSizeColumn()); |
preferences().setBoolProperty(s, m.getShowSizeColumn()); |
482 |
s = "DbInstrumentsTable.ShowFormatFamilyColumn"; |
s = prefix + "DbInstrumentsTable.ShowFormatFamilyColumn"; |
483 |
preferences().setBoolProperty(s, m.getShowFormatFamilyColumn()); |
preferences().setBoolProperty(s, m.getShowFormatFamilyColumn()); |
484 |
s = "DbInstrumentsTable.ShowFormatVersionColumn"; |
s = prefix + "DbInstrumentsTable.ShowFormatVersionColumn"; |
485 |
preferences().setBoolProperty(s, m.getShowFormatVersionColumn()); |
preferences().setBoolProperty(s, m.getShowFormatVersionColumn()); |
486 |
s = "DbInstrumentsTable.ShowIsDrumColumn"; |
s = prefix + "DbInstrumentsTable.ShowIsDrumColumn"; |
487 |
preferences().setBoolProperty(s, m.getShowIsDrumColumn()); |
preferences().setBoolProperty(s, m.getShowIsDrumColumn()); |
488 |
s = "DbInstrumentsTable.ShowCreatedColumn"; |
s = prefix + "DbInstrumentsTable.ShowCreatedColumn"; |
489 |
preferences().setBoolProperty(s, m.getShowCreatedColumn()); |
preferences().setBoolProperty(s, m.getShowCreatedColumn()); |
490 |
s = "DbInstrumentsTable.ShowModifiedColumn"; |
s = prefix + "DbInstrumentsTable.ShowModifiedColumn"; |
491 |
preferences().setBoolProperty(s, m.getShowModifiedColumn()); |
preferences().setBoolProperty(s, m.getShowModifiedColumn()); |
492 |
s = "DbInstrumentsTable.ShowProductColumn"; |
s = prefix + "DbInstrumentsTable.ShowProductColumn"; |
493 |
preferences().setBoolProperty(s, m.getShowProductColumn()); |
preferences().setBoolProperty(s, m.getShowProductColumn()); |
494 |
s = "DbInstrumentsTable.ShowArtistsColumn"; |
s = prefix + "DbInstrumentsTable.ShowArtistsColumn"; |
495 |
preferences().setBoolProperty(s, m.getShowArtistsColumn()); |
preferences().setBoolProperty(s, m.getShowArtistsColumn()); |
496 |
s = "DbInstrumentsTable.ShowInstrumentFileColumn"; |
s = prefix + "DbInstrumentsTable.ShowInstrumentFileColumn"; |
497 |
preferences().setBoolProperty(s, m.getShowInstrumentFileColumn()); |
preferences().setBoolProperty(s, m.getShowInstrumentFileColumn()); |
498 |
s = "DbInstrumentsTable.ShowInstrumentNrColumn"; |
s = prefix + "DbInstrumentsTable.ShowInstrumentNrColumn"; |
499 |
preferences().setBoolProperty(s, m.getShowInstrumentNrColumn()); |
preferences().setBoolProperty(s, m.getShowInstrumentNrColumn()); |
500 |
s = "DbInstrumentsTable.ShowKeywordsColumn"; |
s = prefix + "DbInstrumentsTable.ShowKeywordsColumn"; |
501 |
preferences().setBoolProperty(s, m.getShowKeywordsColumn()); |
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 |
/*public void |
537 |
columnMarginChanged(ChangeEvent e) { |
columnMarginChanged(ChangeEvent e) { |