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

Annotation of /jsampler/trunk/src/org/jsampler/view/OrchestraTable.java

Parent Directory Parent Directory | Revision Log Revision Log


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

1 iliev 913 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1285 * Copyright (C) 2005-2007 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 913 *
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.event.ActionEvent;
26     import java.awt.event.KeyEvent;
27 iliev 1285 import java.awt.event.MouseAdapter;
28     import java.awt.event.MouseEvent;
29 iliev 913
30     import javax.swing.AbstractAction;
31     import javax.swing.Action;
32     import javax.swing.JComponent;
33     import javax.swing.JTable;
34     import javax.swing.ListSelectionModel;
35     import javax.swing.KeyStroke;
36    
37     import org.jsampler.DefaultOrchestraListModel;
38     import org.jsampler.OrchestraModel;
39    
40     import javax.swing.table.TableCellRenderer;
41    
42     import static javax.swing.KeyStroke.*;
43    
44    
45     /**
46     * A table for representing orchestras.
47     * @author Grigor Iliev
48     */
49     public class OrchestraTable extends JTable {
50    
51     /** Creates a new instance of <code>OrchestraTable</code>. */
52     public
53     OrchestraTable() {
54     this(new OrchestraTableModel(new DefaultOrchestraListModel()));
55     }
56    
57     /**
58     * Creates a new instance of <code>OrchestraTable</code> using the specified data model.
59     * @param dataModel The data model to be represented by this table.
60     */
61     public
62     OrchestraTable(OrchestraTableModel dataModel) {
63     super(dataModel);
64    
65     setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
66 iliev 1285 setFillsViewportHeight(true);
67 iliev 913 installKeyboardListeners();
68 iliev 1285
69     addMouseListener(new MouseAdapter() {
70     public void
71     mouseClicked(MouseEvent e) {
72     if(e.getButton() != e.BUTTON1) return;
73     int r = rowAtPoint(e.getPoint());
74     if(r == -1) {
75     clearSelection();
76     return;
77     }
78     }
79     });
80 iliev 913 }
81    
82     private void
83     installKeyboardListeners() {
84     KeyStroke k = getKeyStroke(KeyEvent.VK_ESCAPE, 0);
85     getInputMap(JComponent.WHEN_FOCUSED).put(k, Actions.CLEAR_SELECTION);
86     getActionMap().put(Actions.CLEAR_SELECTION, new Actions(Actions.CLEAR_SELECTION));
87    
88     k = getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK);
89     getInputMap(JComponent.WHEN_FOCUSED).put(k, Actions.MOVE_ON_TOP);
90     getActionMap().put(Actions.MOVE_ON_TOP, new Actions(Actions.MOVE_ON_TOP));
91    
92     k = getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK);
93     getInputMap(JComponent.WHEN_FOCUSED).put(k, Actions.MOVE_UP);
94     getActionMap().put(Actions.MOVE_UP, new Actions(Actions.MOVE_UP));
95    
96     k = getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK);
97     getInputMap(JComponent.WHEN_FOCUSED).put(k, Actions.MOVE_DOWN);
98     getActionMap().put(Actions.MOVE_DOWN, new Actions(Actions.MOVE_DOWN));
99    
100     k = getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK);
101     getInputMap(JComponent.WHEN_FOCUSED).put(k, Actions.MOVE_AT_BOTTOM);
102     getActionMap().put(Actions.MOVE_AT_BOTTOM, new Actions(Actions.MOVE_AT_BOTTOM));
103     }
104    
105     /**
106     * Gets the <code>OrchestraTableModel</code> that
107     * provides the data displayed by this <code>OrchestraTable</code>.
108     * @return The <code>OrchestraTableModel</code> that
109     * provides the data displayed by this <code>OrchestraTable</code>.
110     */
111     public OrchestraTableModel
112     getModel() { return (OrchestraTableModel) super.getModel(); }
113    
114     /**
115     * Sets the data model for this table to <code>dataModel</code>.
116     * @param dataModel The new data source for this table.
117     */
118     public void
119     setModel(OrchestraTableModel dataModel) {
120     super.setModel(dataModel);
121     }
122    
123     /**
124     * Gets the selected orchestra.
125     * @return The selected orchestra, or <code>null</code> if no orchestra is selected.
126     */
127     public OrchestraModel
128     getSelectedOrchestra() {
129     int i = getSelectedRow();
130     if(i == -1) return null;
131     return getModel().getOrchestraListModel().getOrchestra(i);
132     }
133    
134     /**
135     * Selects the specified orchestra. If <code>orchestra</code> is
136     * <code>null</code> or is not in the table the current selection is cleared.
137     * @param orchestra The orchestra to select.
138     */
139     public void
140     setSelectedOrchestra(OrchestraModel orchestra) {
141     int i = getModel().getOrchestraListModel().getOrchestraIndex(orchestra);
142     if(i < 0) {
143     clearSelection();
144     return;
145     }
146    
147     setRowSelectionInterval(i, i);
148     }
149    
150     /**
151     * Returns an appropriate renderer for the cell specified by
152     * <code>row</code> and <code>column</code>.
153     * @param row The row of the cell to render, where 0 is the first row.
154     * @param column The column of the cell to render, where 0 is the first column.
155     */
156     public TableCellRenderer
157     getCellRenderer(int row, int column) {
158     TableCellRenderer r = super.getCellRenderer(row, column);
159     if(r instanceof JComponent) {
160     String s;
161     s = getModel().getOrchestraListModel().getOrchestra(row).getDescription();
162     if(s != null && s.length() == 0) s = null;
163     ((JComponent)r).setToolTipText(s);
164     }
165    
166     return r;
167     }
168    
169     private class Actions extends AbstractAction {
170     private static final String CLEAR_SELECTION = "clearSelection";
171     private static final String MOVE_ON_TOP = "moveOrchestraOnTop";
172     private static final String MOVE_UP = "moveOrchestraUp";
173     private static final String MOVE_DOWN = "moveOrchestraDown";
174     private static final String MOVE_AT_BOTTOM = "moveOrchestraAtBottom";
175    
176     Actions(String name) { super(name); }
177    
178     public void
179     actionPerformed(ActionEvent e) {
180     String key = getValue(Action.NAME).toString();
181    
182     if(key == CLEAR_SELECTION) {
183     clearSelection();
184     } else if(key == MOVE_ON_TOP) {
185     OrchestraModel om = getSelectedOrchestra();
186     getModel().getOrchestraListModel().moveOrchestraOnTop(om);
187     setSelectedOrchestra(om);
188     } else if(key == MOVE_UP) {
189     OrchestraModel om = getSelectedOrchestra();
190     getModel().getOrchestraListModel().moveOrchestraUp(om);
191     setSelectedOrchestra(om);
192     } else if(key == MOVE_DOWN) {
193     OrchestraModel om = getSelectedOrchestra();
194     getModel().getOrchestraListModel().moveOrchestraDown(om);
195     setSelectedOrchestra(om);
196     } else if(key == MOVE_AT_BOTTOM) {
197     OrchestraModel om = getSelectedOrchestra();
198     getModel().getOrchestraListModel().moveOrchestraAtBottom(om);
199     setSelectedOrchestra(om);
200     }
201     }
202     }
203     }

  ViewVC Help
Powered by ViewVC