/[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 1752 - (show annotations) (download)
Mon Aug 11 22:51:24 2008 UTC (15 years, 8 months ago) by iliev
File size: 19744 byte(s)
* Added toolbar to the Database Instrument Chooser dialog
* Instrument Chooser and Database Instrument Chooser dialogs
  are now resizable
* Fantasia: Added toolbar to the Right-Side Pane's Instruments Database

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 }

  ViewVC Help
Powered by ViewVC