/[svn]/jsampler/trunk/src/org/jsampler/view/AbstractInstrumentsDbTable.java
ViewVC logotype

Contents of /jsampler/trunk/src/org/jsampler/view/AbstractInstrumentsDbTable.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1285 - (show annotations) (download)
Fri Aug 10 19:55:03 2007 UTC (16 years, 8 months ago) by iliev
File size: 17056 byte(s)
* Updated to version 0.6a. The Fantasia distribution is now
  capable of controlling all features available in LinuxSampler

1 /*
2 * JSampler - a java front-end for LinuxSampler
3 *
4 * Copyright (C) 2005-2007 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.Vector;
34
35 import javax.swing.DefaultCellEditor;
36 import javax.swing.JTable;
37 import javax.swing.JTextField;
38 import javax.swing.JViewport;
39
40 import javax.swing.event.ChangeEvent;
41 import javax.swing.event.ListSelectionEvent;
42 import javax.swing.event.TableColumnModelEvent;
43 import javax.swing.event.TableColumnModelListener;
44
45 import javax.swing.table.TableCellEditor;
46 import javax.swing.table.TableColumn;
47 import javax.swing.table.TableColumnModel;
48 import javax.swing.table.TableRowSorter;
49
50 import org.jsampler.CC;
51 import org.jsampler.JSPrefs;
52
53 import org.linuxsampler.lscp.DbDirectoryInfo;
54 import org.linuxsampler.lscp.DbInstrumentInfo;
55
56 import org.linuxsampler.lscp.event.InstrumentsDbAdapter;
57 import org.linuxsampler.lscp.event.InstrumentsDbEvent;
58
59
60 /**
61 *
62 * @author Grigor Iliev
63 */
64 public abstract class AbstractInstrumentsDbTable extends JTable {
65 private final DefaultCellEditor nameEditor;
66 private final JTextField tfEditor = new JTextField();
67
68 private DbDirectoryTreeNode directoryNode;
69 private final InstrumentsDbTableRowSorter rowSorter;
70
71 private String createdDirectoryName = null;
72
73 private InstrumentsDbTableView view = null;
74
75 /**
76 * Creates a new instance of <code>AbstractInstrumentsDbTable</code>
77 */
78 public AbstractInstrumentsDbTable() {
79 this(new InstrumentsDbTableModel());
80 }
81
82 /**
83 * Creates a new instance of <code>AbstractInstrumentsDbTable</code>
84 */
85 public AbstractInstrumentsDbTable(InstrumentsDbTableModel model) {
86 super(model);
87 setView(CC.getViewConfig().getInstrumentsDbTableView());
88
89 String s;
90 InstrumentsDbTableModel m = getModel();
91
92 s = "DbInstrumentsTable.ShowSizeColumn";
93 m.setShowSizeColumn(preferences().getBoolProperty(s));
94 s = "DbInstrumentsTable.ShowFormatFamilyColumn";
95 m.setShowFormatFamilyColumn(preferences().getBoolProperty(s));
96 s = "DbInstrumentsTable.ShowFormatVersionColumn";
97 m.setShowFormatVersionColumn(preferences().getBoolProperty(s));
98 s = "DbInstrumentsTable.ShowIsDrumColumn";
99 m.setShowIsDrumColumn(preferences().getBoolProperty(s));
100 s = "DbInstrumentsTable.ShowCreatedColumn";
101 m.setShowCreatedColumn(preferences().getBoolProperty(s));
102 s = "DbInstrumentsTable.ShowModifiedColumn";
103 m.setShowModifiedColumn(preferences().getBoolProperty(s));
104 s = "DbInstrumentsTable.ShowProductColumn";
105 m.setShowProductColumn(preferences().getBoolProperty(s));
106 s = "DbInstrumentsTable.ShowArtistsColumn";
107 m.setShowArtistsColumn(preferences().getBoolProperty(s));
108 s = "DbInstrumentsTable.ShowInstrumentFileColumn";
109 m.setShowInstrumentFileColumn(preferences().getBoolProperty(s));
110 s = "DbInstrumentsTable.ShowInstrumentNrColumn";
111 m.setShowInstrumentNrColumn(preferences().getBoolProperty(s));
112 s = "DbInstrumentsTable.ShowKeywordsColumn";
113 m.setShowKeywordsColumn(preferences().getBoolProperty(s));
114
115 setAutoResizeMode(AUTO_RESIZE_OFF);
116
117 rowSorter = new InstrumentsDbTableRowSorter(getModel());
118 setRowSorter(rowSorter);
119
120 putClientProperty("JTable.autoStartsEdit", false);
121
122 nameEditor = new DefaultCellEditor(tfEditor);
123 nameEditor.setClickCountToStart(5);
124
125 if(m.getShowDummyColumn()) {
126 TableColumn dummy;
127 dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex());
128 dummy.setPreferredWidth(10);
129 }
130 }
131
132 public InstrumentsDbTableModel
133 getModel() { return (InstrumentsDbTableModel)super.getModel(); }
134
135 public TableCellEditor
136 getCellEditor(int row, int column) {
137 if(column == 0) return nameEditor;
138 return super.getCellEditor(row, column);
139 }
140
141 public DbDirectoryTreeNode
142 getSelectedDirectoryNode() {
143 int idx = getSelectedRow();
144 if(idx == -1) return null;
145 idx = convertRowIndexToModel(idx);
146 return getModel().getDirectoryNode(idx);
147 }
148
149 /**
150 * Selects the specified directory.
151 * The current selection is not altered if missing directory is specified.
152 * @param dir The name of the directory to select.
153 */
154 public void
155 setSelectedDirectory(String dir) {
156 int i = getModel().getDirectoryRowIndex(dir);
157 if(i == -1) return;
158 i = convertRowIndexToView(i);
159 if(i == -1) return;
160
161 getSelectionModel().setSelectionInterval(i, i);
162 }
163
164 /**
165 * Selects the specified instrument.
166 * The current selection is not altered if missing instrument is specified.
167 * @param instr The name of the instrument to select.
168 */
169 public void
170 setSelectedInstrument(String instr) {
171 int i = getModel().getInstrumentRowIndex(instr);
172 if(i == -1) return;
173 i = convertRowIndexToView(i);
174 if(i == -1) return;
175 getSelectionModel().setSelectionInterval(i, i);
176 }
177
178 /**
179 * Gets all selected directories.
180 */
181 public DbDirectoryInfo[]
182 getSelectedDirectories() {
183 int[] rows = getSelectedRows();
184 if(rows.length == 0) return new DbDirectoryInfo[0];
185
186 DbDirectoryTreeNode dir;
187 Vector<DbDirectoryInfo> v = new Vector<DbDirectoryInfo>();
188 for(int i : rows) {
189 dir = getModel().getDirectoryNode(convertRowIndexToModel(i));
190 if(dir != null) v.add(dir.getInfo());
191 }
192
193 return v.toArray(new DbDirectoryInfo[v.size()]);
194 }
195
196 /**
197 * Gets all selected instruments.
198 */
199 public DbInstrumentInfo[]
200 getSelectedInstruments() {
201 int[] rows = getSelectedRows();
202 if(rows.length == 0) return new DbInstrumentInfo[0];
203
204 DbInstrumentInfo instr;
205 Vector<DbInstrumentInfo> v = new Vector<DbInstrumentInfo>();
206 for(int i : rows) {
207 instr = getModel().getInstrument(convertRowIndexToModel(i));
208 if(instr != null) v.add(instr);
209 }
210
211 return v.toArray(new DbInstrumentInfo[v.size()]);
212 }
213
214 public boolean
215 editCellAt(int row, int column) {
216 if(!super.editCellAt(row, column)) return false;
217
218 Component c = getEditorComponent();
219 if(c != null) c.requestFocusInWindow();
220
221 return true;
222 }
223
224 /**
225 * Gets the directory node, which
226 * content is represented by this table.
227 */
228 public DbDirectoryTreeNode
229 getParentDirectoryNode() { return directoryNode; }
230
231 /**
232 * Sets the directory node, which
233 * content will be represented by this table.
234 */
235 public void
236 setParentDirectoryNode(DbDirectoryTreeNode node) {
237 getModel().setParentDirectoryNode(node);
238
239 if(directoryNode != null) directoryNode.removeInstrumentsDbListener(getHandler());
240 directoryNode = node;
241 if(directoryNode != null) directoryNode.addInstrumentsDbListener(getHandler());
242 }
243
244 /**
245 * Gets the name of the directory created by this frontend.
246 * This method is used to determine the directories created
247 * by this frontend.
248 * @return The name of the directory created by this frontend.
249 */
250 public String
251 getCreatedDirectoryName() { return createdDirectoryName; }
252
253 /**
254 * Sets the name of the created by this frontend.
255 * @param name The name of the directory created by this frontend.
256 */
257 public void
258 setCreatedDirectoryName(String name) { createdDirectoryName = name; }
259
260 public Object
261 getLeadObject() {
262 if(getSelectionModel().isSelectionEmpty()) return null;
263 int idx = getSelectionModel().getLeadSelectionIndex();
264 if(idx < 0) return null;
265 idx = this.convertRowIndexToModel(idx);
266
267 return getModel().getValueAt(idx, 0);
268 }
269
270 /** Sets the view to be used for retrieving UI information. */
271 public void
272 setView(InstrumentsDbTableView view) {
273 this.view = view;
274 }
275
276 /** Gets the view used to retrieve UI information. */
277 public InstrumentsDbTableView
278 getView() { return view; }
279
280 private JSPrefs
281 preferences() { return CC.getViewConfig().preferences(); }
282
283 public void
284 loadColumnWidths() {
285 InstrumentsDbTableModel m = getModel();
286 TableColumnModel tcm = getColumnModel();
287
288 for(int i = 0; i < m.getColumnCount(); i++) {
289 switch(m.getColumnType(i)) {
290 case NAME:
291 String s = "DbInstrumentsTable.nameColumnWidth";
292 int w = preferences().getIntProperty(s);
293 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
294 break;
295 case SIZE:
296 s = "DbInstrumentsTable.sizeColumnWidth";
297 w = preferences().getIntProperty(s);
298 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
299 break;
300 case FORMAT_FAMILY:
301 s = "DbInstrumentsTable.formatFamilyColumnWidth";
302 w = preferences().getIntProperty(s);
303 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
304 break;
305 case FORMAT_VERSION:
306 s = "DbInstrumentsTable.formatVersionColumnWidth";
307 w = preferences().getIntProperty(s);
308 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
309 break;
310 case IS_DRUM:
311 s = "DbInstrumentsTable.isDrumColumnWidth";
312 w = preferences().getIntProperty(s);
313 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
314 break;
315 case CREATED:
316 s = "DbInstrumentsTable.createdColumnWidth";
317 w = preferences().getIntProperty(s);
318 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
319 break;
320 case MODIFIED:
321 s = "DbInstrumentsTable.modifiedColumnWidth";
322 w = preferences().getIntProperty(s);
323 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
324 break;
325 case PRODUCT:
326 s = "DbInstrumentsTable.productColumnWidth";
327 w = preferences().getIntProperty(s);
328 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
329 break;
330 case ARTISTS:
331 s = "DbInstrumentsTable.artistsColumnWidth";
332 w = preferences().getIntProperty(s);
333 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
334 break;
335 case INSTRUMENT_FILE:
336 s = "DbInstrumentsTable.instrumentFileColumnWidth";
337 w = preferences().getIntProperty(s);
338 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
339 break;
340 case INSTRUMENT_NR:
341 s = "DbInstrumentsTable.instrumentNrColumnWidth";
342 w = preferences().getIntProperty(s);
343 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
344 break;
345 case KEYWORDS:
346 s = "DbInstrumentsTable.keywordsColumnWidth";
347 w = preferences().getIntProperty(s);
348 if(w > 0) tcm.getColumn(i).setPreferredWidth(w);
349 break;
350 case DUMMY:
351 tcm.getColumn(i).setPreferredWidth(10);
352 break;
353 }
354 }
355 }
356
357 public void
358 saveColumnWidths() {
359 InstrumentsDbTableModel m = getModel();
360 TableColumnModel tcm = getColumnModel();
361
362 for(int i = 0; i < m.getColumnCount(); i++) {
363 switch(m.getColumnType(i)) {
364 case NAME:
365 String s = "DbInstrumentsTable.nameColumnWidth";
366 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
367 break;
368 case SIZE:
369 s = "DbInstrumentsTable.sizeColumnWidth";
370 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
371 break;
372 case FORMAT_FAMILY:
373 s = "DbInstrumentsTable.formatFamilyColumnWidth";
374 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
375 break;
376 case FORMAT_VERSION:
377 s = "DbInstrumentsTable.formatVersionColumnWidth";
378 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
379 break;
380 case IS_DRUM:
381 s = "DbInstrumentsTable.isDrumColumnWidth";
382 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
383 break;
384 case CREATED:
385 s = "DbInstrumentsTable.createdColumnWidth";
386 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
387 break;
388 case MODIFIED:
389 s = "DbInstrumentsTable.modifiedColumnWidth";
390 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
391 break;
392 case PRODUCT:
393 s = "DbInstrumentsTable.productColumnWidth";
394 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
395 break;
396 case ARTISTS:
397 s = "DbInstrumentsTable.artistsColumnWidth";
398 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
399 break;
400 case INSTRUMENT_FILE:
401 s = "DbInstrumentsTable.instrumentFileColumnWidth";
402 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
403 break;
404 case INSTRUMENT_NR:
405 s = "DbInstrumentsTable.instrumentNrColumnWidth";
406 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
407 break;
408 case KEYWORDS:
409 s = "DbInstrumentsTable.keywordsColumnWidth";
410 preferences().setIntProperty(s, tcm.getColumn(i).getWidth());
411 break;
412
413 }
414 }
415 }
416
417 public void
418 saveColumnsVisibleState() {
419 InstrumentsDbTableModel m = getModel();
420
421 String s = "DbInstrumentsTable.ShowSizeColumn";
422 preferences().setBoolProperty(s, m.getShowSizeColumn());
423 s = "DbInstrumentsTable.ShowFormatFamilyColumn";
424 preferences().setBoolProperty(s, m.getShowFormatFamilyColumn());
425 s = "DbInstrumentsTable.ShowFormatVersionColumn";
426 preferences().setBoolProperty(s, m.getShowFormatVersionColumn());
427 s = "DbInstrumentsTable.ShowIsDrumColumn";
428 preferences().setBoolProperty(s, m.getShowIsDrumColumn());
429 s = "DbInstrumentsTable.ShowCreatedColumn";
430 preferences().setBoolProperty(s, m.getShowCreatedColumn());
431 s = "DbInstrumentsTable.ShowModifiedColumn";
432 preferences().setBoolProperty(s, m.getShowModifiedColumn());
433 s = "DbInstrumentsTable.ShowProductColumn";
434 preferences().setBoolProperty(s, m.getShowProductColumn());
435 s = "DbInstrumentsTable.ShowArtistsColumn";
436 preferences().setBoolProperty(s, m.getShowArtistsColumn());
437 s = "DbInstrumentsTable.ShowInstrumentFileColumn";
438 preferences().setBoolProperty(s, m.getShowInstrumentFileColumn());
439 s = "DbInstrumentsTable.ShowInstrumentNrColumn";
440 preferences().setBoolProperty(s, m.getShowInstrumentNrColumn());
441 s = "DbInstrumentsTable.ShowKeywordsColumn";
442 preferences().setBoolProperty(s, m.getShowKeywordsColumn());
443 }
444
445 /*public void
446 columnMarginChanged(ChangeEvent e) {
447 if(isEditing()) removeEditor();
448 TableColumn resizingColumn = null;
449 if(getTableHeader() != null) resizingColumn = getTableHeader().getResizingColumn();
450 if (resizingColumn != null && autoResizeMode == AUTO_RESIZE_OFF) {
451 resizingColumn.setPreferredWidth(resizingColumn.getWidth());
452 }
453 setAutoResizeMode();
454 resizeAndRepaint();
455 }
456
457 public boolean
458 getScrollableTracksViewportWidth() {
459 return getPreferredSize().width < getParent().getWidth();
460 }
461
462 private void
463 setAutoResizeMode() {
464 Container c = getParent();
465 if (!(c instanceof JViewport)) return;
466
467 JViewport vp = (JViewport)c;
468 int w = vp.getWidth();
469 TableColumn dummy = getColumnModel().getColumn(getModel().getDummyColumnIndex());
470 int i = w - (getColumnModel().getTotalColumnWidth() - dummy.getWidth());
471 if(i > 5) {
472 if(getAutoResizeMode() != AUTO_RESIZE_LAST_COLUMN)
473 setAutoResizeMode(AUTO_RESIZE_LAST_COLUMN);
474 } else {
475 if(getAutoResizeMode() != AUTO_RESIZE_OFF)
476 setAutoResizeMode(AUTO_RESIZE_OFF);
477 }
478 }*/
479
480 private class InstrumentsDbTableRowSorter extends TableRowSorter<InstrumentsDbTableModel> {
481 InstrumentsDbTableRowSorter(InstrumentsDbTableModel model) {
482 super(model);
483 }
484
485 public Comparator<?>
486 getComparator(int column) {
487 Comparator c = getModel().getComparator(column);
488 if(c != null) return c;
489
490 return super.getComparator(column);
491 }
492
493 protected boolean
494 useToString(int column) {
495 return getModel().getComparator(column) == null;
496 }
497
498 public boolean
499 isSortable(int column) {
500 return getModel().isSortable(column);
501 }
502 }
503
504 private final EventHandler eventHandler = new EventHandler();
505
506 private EventHandler
507 getHandler() { return eventHandler; }
508
509 private class EventHandler extends InstrumentsDbAdapter {
510
511 /**
512 * Invoked when the number of instrument
513 * directories in a specific directory has changed.
514 */
515 public void
516 directoryCountChanged(InstrumentsDbEvent e) {
517 String rd = getModel().getRenamedDirectory();
518 int idx = getModel().getDirectoryRowIndex(rd);
519 if(idx != -1) {
520 setSelectedDirectory(rd);
521 getModel().setRenamedDirectory(null);
522 }
523
524 idx = getModel().getDirectoryRowIndex(getCreatedDirectoryName());
525 if(idx != -1) {
526 idx = convertRowIndexToView(idx);
527 if(idx != -1) {
528 getSelectionModel().setSelectionInterval(idx, idx);
529 editCellAt(idx, 0);
530 Component c = nameEditor.getComponent();
531 if(c instanceof JTextField) ((JTextField)c).selectAll();
532 setCreatedDirectoryName(null);
533 }
534 }
535 }
536
537 /**
538 * Invoked when the number of instruments
539 * in a specific directory has changed.
540 */
541 public void
542 instrumentCountChanged(InstrumentsDbEvent e) {
543 String ri = getModel().getRenamedInstrument();
544 int idx = getModel().getInstrumentRowIndex(ri);
545 if(idx != -1) {
546 setSelectedInstrument(ri);
547 getModel().setRenamedInstrument(null);
548 }
549 }
550 }
551 }

  ViewVC Help
Powered by ViewVC