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

Annotation of /jsampler/trunk/src/org/jsampler/view/classic/MainFrame.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 787 - (hide annotations) (download)
Mon Oct 10 16:03:12 2005 UTC (18 years, 6 months ago) by iliev
File size: 16647 byte(s)
* The first alpha-release of JSampler

1 iliev 787 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4     * Copyright (C) 2005 Grigor Kirilov Iliev
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.classic;
24    
25     import java.awt.BorderLayout;
26     import java.awt.Dimension;
27    
28     import java.awt.event.ActionEvent;
29     import java.awt.event.ActionListener;
30     import java.awt.event.KeyEvent;
31    
32     import java.util.Vector;
33    
34     import javax.swing.Action;
35     import javax.swing.ImageIcon;
36     import javax.swing.JCheckBoxMenuItem;
37     import javax.swing.JMenu;
38     import javax.swing.JMenuBar;
39     import javax.swing.JMenuItem;
40     import javax.swing.JPanel;
41     import javax.swing.JSplitPane;
42     import javax.swing.JTabbedPane;
43     import javax.swing.KeyStroke;
44    
45     import javax.swing.event.ChangeEvent;
46     import javax.swing.event.ChangeListener;
47     import javax.swing.event.ListSelectionEvent;
48     import javax.swing.event.ListSelectionListener;
49    
50     import net.sf.juife.NavigationPage;
51     import net.sf.juife.NavigationPane;
52    
53     import org.jsampler.CC;
54    
55     import org.jsampler.view.JSChannel;
56     import org.jsampler.view.JSChannelsPane;
57    
58     import static org.jsampler.view.classic.ClassicI18n.i18n;
59     import static org.jsampler.view.classic.LeftPane.getLeftPane;
60    
61    
62     /**
63     *
64     * @author Grigor Iliev
65     */
66     public class
67     MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {
68     public static ImageIcon applicationIcon = null;
69    
70     static {
71     String s = "org/jsampler/view/classic/res/icons/app-icon.png";
72     java.net.URL url = ClassLoader.getSystemClassLoader().getResource(s);
73     if(url != null) applicationIcon = new ImageIcon(url);
74     }
75    
76     private final Toolbar toolbar = new Toolbar();
77     private final Statusbar statusbar = new Statusbar();
78     private final JMenuBar menuBar = new JMenuBar();
79    
80     private final JSplitPane splitPane;
81    
82     private final JPanel mainPane = new JPanel();
83     private final JPanel channelsPane = new JPanel(new BorderLayout());
84    
85     private final JTabbedPane tabbedPane =
86     new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
87     private final JMenu tabsMenu = new JMenu(i18n.getMenuLabel("channels.MoveToTab"));
88     private final Vector<JMenuItem> miList = new Vector<JMenuItem>();
89    
90     /** Creates a new instance of JSMainFrame */
91     public
92     MainFrame() {
93     setTitle(i18n.getLabel("MainFrame.title"));
94    
95     initMainFrame();
96     getContentPane().add(toolbar, BorderLayout.NORTH);
97     getContentPane().add(mainPane);
98    
99     mainPane.setLayout(new BorderLayout());
100     mainPane.add(statusbar, BorderLayout.SOUTH);
101    
102     ChannelsPane p = new ChannelsPane("Untitled");
103     p.addListSelectionListener(this);
104     getChannelsPaneList().add(p);
105     miList.add(new JMenuItem(new A4n.MoveChannelsTo(p)));
106    
107     channelsPane.add(getChannelsPane(0));
108    
109     splitPane = new JSplitPane (
110     JSplitPane.HORIZONTAL_SPLIT,
111     true, // continuousLayout
112     getLeftPane(),
113     channelsPane
114     );
115    
116     splitPane.setOneTouchExpandable(true);
117    
118     mainPane.add(splitPane);
119    
120     if(applicationIcon != null) setIconImage(applicationIcon.getImage());
121    
122     pack();
123    
124     Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
125     double width = dimension.getWidth();
126     double height = dimension.getHeight();
127     setBounds(50, 100, (int) width - 100, (int) height - 200);
128     }
129    
130     private void
131     initMainFrame() {
132     addMenu();
133     handleEvents();
134     }
135    
136     private void
137     addMenu() {
138     JMenu m;
139     JMenu submenu;
140     JMenuItem mi;
141    
142     setJMenuBar(menuBar);
143    
144     // Actions
145     m = new JMenu(i18n.getMenuLabel("actions"));
146     menuBar.add(m);
147    
148     mi = new JMenuItem(A4n.connect);
149     mi.setIcon(null);
150     //mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));
151     m.add(mi);
152    
153     mi = new JMenuItem(A4n.refresh);
154     mi.setIcon(null);
155     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
156     m.add(mi);
157    
158     mi = new JMenuItem(A4n.resetSampler);
159     mi.setIcon(null);
160     m.add(mi);
161    
162     mi = new JMenuItem(A4n.samplerInfo);
163     mi.setIcon(null);
164     m.add(mi);
165    
166     m.addSeparator();
167    
168     mi = new JMenuItem(i18n.getMenuLabel("actions.exit"));
169     m.add(mi);
170     mi.addActionListener(new ActionListener() {
171     public void
172     actionPerformed(ActionEvent e) { CC.cleanExit(); }
173     });
174    
175     // Edit
176     m = new JMenu(i18n.getMenuLabel("edit"));
177     menuBar.add(m);
178    
179     m.addSeparator();
180    
181     mi = new JMenuItem(A4n.preferences);
182     mi.setIcon(null);
183     mi.setAccelerator(KeyStroke.getKeyStroke (
184     KeyEvent.VK_P, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
185     ));
186     m.add(mi);
187    
188     // View
189     m = new JMenu(i18n.getMenuLabel("view"));
190     menuBar.add(m);
191    
192     final JCheckBoxMenuItem cbmi =
193     new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbar"));
194    
195     m.add(cbmi);
196     cbmi.setState(true);
197     cbmi.addActionListener(new ActionListener() {
198     public void
199     actionPerformed(ActionEvent e) {
200     if(cbmi.getState())
201     getContentPane().add(toolbar, BorderLayout.NORTH);
202     else getContentPane().remove(toolbar);
203    
204     validate();
205     repaint();
206     }
207     });
208    
209     final JCheckBoxMenuItem cbmi1 =
210     new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));
211    
212     m.add(cbmi1);
213     cbmi1.setState(true);
214     cbmi1.addActionListener(new ActionListener() {
215     public void
216     actionPerformed(ActionEvent e) { showLeftPane(cbmi1.getState()); }
217     });
218    
219     final JCheckBoxMenuItem cbmi2 =
220     new JCheckBoxMenuItem(i18n.getMenuLabel("view.statusbar"));
221    
222     m.add(cbmi2);
223     cbmi2.setState(true);
224     cbmi2.addActionListener(new ActionListener() {
225     public void
226     actionPerformed(ActionEvent e) {
227     statusbar.setVisible(cbmi2.getState());
228     }
229     });
230    
231     // Channels
232     m = new JMenu(i18n.getMenuLabel("channels"));
233     menuBar.add(m);
234    
235     mi = new JMenuItem(A4n.newChannel);
236     mi.setIcon(null);
237     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));
238     m.add(mi);
239    
240     mi = new JMenuItem(A4n.newChannelWizard);
241     mi.setIcon(null);
242     mi.setAccelerator(KeyStroke.getKeyStroke (
243     KeyEvent.VK_N, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)
244     );
245     m.add(mi);
246    
247     mi = new JMenuItem(A4n.duplicateChannels);
248     mi.setIcon(null);
249     m.add(mi);
250    
251     m.addSeparator();
252    
253     mi = new JMenuItem(A4n.moveChannelsOnTop);
254     mi.setIcon(null);
255     mi.setAccelerator(KeyStroke.getKeyStroke (
256     KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
257     ));
258     m.add(mi);
259    
260     mi = new JMenuItem(A4n.moveChannelsUp);
261     mi.setIcon(null);
262     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));
263     m.add(mi);
264    
265     mi = new JMenuItem(A4n.moveChannelsDown);
266     mi.setIcon(null);
267     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));
268     m.add(mi);
269    
270     mi = new JMenuItem(A4n.moveChannelsAtBottom);
271     mi.setIcon(null);
272     mi.setAccelerator(KeyStroke.getKeyStroke (
273     KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
274     ));
275     m.add(mi);
276    
277     tabsMenu.setEnabled(false);
278     m.add(tabsMenu);
279    
280     m.addSeparator();
281    
282     mi = new JMenuItem(A4n.selectAllChannels);
283     mi.setIcon(null);
284     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
285     m.add(mi);
286    
287     mi = new JMenuItem(A4n.deselectChannels);
288     mi.setIcon(null);
289     mi.setAccelerator(KeyStroke.getKeyStroke (
290     KeyEvent.VK_A, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
291     ));
292     m.add(mi);
293    
294     m.addSeparator();
295    
296     mi = new JMenuItem(A4n.removeChannels);
297     mi.setIcon(null);
298     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));
299     m.add(mi);
300    
301    
302     // Tabs
303     m = new JMenu(i18n.getMenuLabel("tabs"));
304     menuBar.add(m);
305    
306     mi = new JMenuItem(A4n.newChannelsTab);
307     mi.setIcon(null);
308     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_MASK));
309     m.add(mi);
310    
311     mi = new JMenuItem(A4n.editTabTitle);
312     mi.setIcon(null);
313     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
314     m.add(mi);
315    
316     m.addSeparator();
317    
318     mi = new JMenuItem(A4n.moveTab2Beginning);
319     mi.setIcon(null);
320     mi.setAccelerator(KeyStroke.getKeyStroke (
321     KeyEvent.VK_LEFT, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
322     ));
323     m.add(mi);
324    
325     mi = new JMenuItem(A4n.moveTab2Left);
326     mi.setIcon(null);
327     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_MASK));
328     m.add(mi);
329    
330     mi = new JMenuItem(A4n.moveTab2Right);
331     mi.setIcon(null);
332     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK));
333     m.add(mi);
334    
335     mi = new JMenuItem(A4n.moveTab2End);
336     mi.setIcon(null);
337     mi.setAccelerator(KeyStroke.getKeyStroke (
338     KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
339     ));
340     m.add(mi);
341    
342     m.addSeparator();
343    
344     mi = new JMenuItem(A4n.closeChannelsTab);
345     mi.setIcon(null);
346     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.CTRL_MASK));
347     m.add(mi);
348    
349    
350     // Help
351     m = new JMenu(i18n.getMenuLabel("help"));
352     menuBar.add(m);
353    
354     mi = new JMenuItem(A4n.helpAbout);
355     mi.setIcon(null);
356     m.add(mi);
357     }
358    
359     private void
360     showLeftPane(boolean b) {
361     mainPane.remove(splitPane);
362     mainPane.remove(channelsPane);
363    
364     if(b) {
365     splitPane.setRightComponent(channelsPane);
366     mainPane.add(splitPane);
367     } else {
368     mainPane.add(channelsPane);
369     }
370    
371     validate();
372     repaint();
373     }
374    
375     private void
376     handleEvents() {
377     tabbedPane.addChangeListener(this);
378     }
379    
380     public void
381     addChannelsPane(JSChannelsPane chnPane) {
382     insertChannelsPane(chnPane, getChannelsPaneCount());
383     }
384    
385     public void
386     insertChannelsPane(JSChannelsPane chnPane, int idx) {
387     chnPane.addListSelectionListener(this);
388    
389     if(getChannelsPaneCount() == 1) {
390     channelsPane.remove(getChannelsPane(0));
391     channelsPane.add(tabbedPane);
392     tabbedPane.addTab(getChannelsPane(0).getTitle(), getChannelsPane(0));
393     A4n.closeChannelsTab.setEnabled(true);
394     A4n.editTabTitle.setEnabled(true);
395     }
396    
397     getChannelsPaneList().insertElementAt(chnPane, idx);
398     tabbedPane.insertTab(chnPane.getTitle(), null, chnPane, null, idx);
399     tabbedPane.setSelectedComponent(chnPane);
400     miList.insertElementAt(new JMenuItem(new A4n.MoveChannelsTo(chnPane)), idx);
401    
402     updateTabsMenu();
403     }
404    
405     public JSChannelsPane
406     getSelectedChannelsPane() {
407     if(getChannelsPaneList().size() == 1) return getChannelsPane(0);
408     return (JSChannelsPane)tabbedPane.getSelectedComponent();
409     }
410    
411     public void
412     setSelectedChannelsPane(JSChannelsPane pane) {
413     if(getChannelsPaneList().size() == 1) return;
414     tabbedPane.setSelectedComponent(pane);
415     }
416    
417     public boolean
418     removeChannelsPane(JSChannelsPane chnPane) {
419     chnPane.removeListSelectionListener(this);
420    
421     tabbedPane.remove(chnPane);
422     boolean b = super.removeChannelsPane(chnPane);
423     for(int i = 0; i < miList.size(); i++) {
424     A4n.MoveChannelsTo a = (A4n.MoveChannelsTo)miList.get(i).getAction();
425     if(a.getChannelsPane().equals(chnPane)) {
426     miList.remove(i);
427     break;
428     }
429     }
430    
431     updateTabsMenu();
432    
433     if(getChannelsPaneCount() == 1) {
434     A4n.closeChannelsTab.setEnabled(false);
435     A4n.editTabTitle.setEnabled(false);
436     tabbedPane.remove(getChannelsPane(0));
437     channelsPane.remove(tabbedPane);
438     channelsPane.add(getChannelsPane(0));
439     }
440    
441     return b;
442     }
443    
444     private void
445     updateTabsMenu() {
446     tabsMenu.removeAll();
447    
448     for(JMenuItem mi : miList) {
449     A4n.MoveChannelsTo a = (A4n.MoveChannelsTo)mi.getAction();
450     if(!a.getChannelsPane().equals(getSelectedChannelsPane())) tabsMenu.add(mi);
451     }
452    
453     }
454    
455     public void
456     updateTabTitle(JSChannelsPane chnPane) {
457     tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), chnPane.getTitle());
458     }
459    
460     private void
461     checkChannelSelection(JSChannelsPane pane) {
462     if(!pane.hasSelectedChannel()) {
463     A4n.duplicateChannels.putValue (
464     Action.NAME, i18n.getMenuLabel("channels.duplicate")
465     );
466     A4n.duplicateChannels.setEnabled(false);
467    
468     A4n.removeChannels.putValue (
469     Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
470     );
471     A4n.removeChannels.setEnabled(false);
472    
473     tabsMenu.setEnabled(false);
474    
475     A4n.moveChannelsOnTop.setEnabled(false);
476     A4n.moveChannelsUp.setEnabled(false);
477     A4n.moveChannelsDown.setEnabled(false);
478     A4n.moveChannelsAtBottom.setEnabled(false);
479    
480     return;
481     }
482    
483     A4n.duplicateChannels.setEnabled(true);
484     A4n.removeChannels.setEnabled(true);
485    
486     if(getChannelsPaneCount() > 1) tabsMenu.setEnabled(true);
487    
488     if(pane.getSelectedChannelCount() > 1) {
489     A4n.duplicateChannels.putValue (
490     Action.NAME, i18n.getMenuLabel("channels.duplicateChannels")
491     );
492     A4n.removeChannels.putValue (
493     Action.NAME, i18n.getMenuLabel("channels.RemoveChannels")
494     );
495     } else {
496     A4n.duplicateChannels.putValue (
497     Action.NAME, i18n.getMenuLabel("channels.duplicate")
498     );
499     A4n.removeChannels.putValue (
500     Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
501     );
502     }
503    
504     A4n.moveChannelsOnTop.setEnabled(false);
505     A4n.moveChannelsUp.setEnabled(true);
506     A4n.moveChannelsDown.setEnabled(true);
507     A4n.moveChannelsAtBottom.setEnabled(false);
508    
509     JSChannel[] chns = pane.getSelectedChannels();
510    
511     for(int i = 0; i < chns.length; i++) {
512     if(pane.getChannel(i) != chns[i]) {
513     A4n.moveChannelsOnTop.setEnabled(true);
514     break;
515     }
516     }
517    
518     if(chns[0] == pane.getFirstChannel()) A4n.moveChannelsUp.setEnabled(false);
519    
520     if(chns[chns.length - 1] == pane.getLastChannel())
521     A4n.moveChannelsDown.setEnabled(false);
522    
523     for(int i = chns.length - 1, j = pane.getChannelCount() - 1; i >= 0; i--, j--) {
524     if(pane.getChannel(j) != chns[i]) {
525     A4n.moveChannelsAtBottom.setEnabled(true);
526     break;
527     }
528     }
529     }
530    
531     private void
532     checkTabSelection() {
533     int si = tabbedPane.getSelectedIndex();
534    
535     if(si > 0) {
536     A4n.moveTab2Beginning.setEnabled(true);
537     A4n.moveTab2Left.setEnabled(true);
538     } else {
539     A4n.moveTab2Beginning.setEnabled(false);
540     A4n.moveTab2Left.setEnabled(false);
541     }
542    
543     if(si != -1 && si < tabbedPane.getTabCount() - 1) {
544     A4n.moveTab2Right.setEnabled(true);
545     A4n.moveTab2End.setEnabled(true);
546     } else {
547     A4n.moveTab2Right.setEnabled(false);
548     A4n.moveTab2End.setEnabled(false);
549     }
550     }
551    
552     /*public JTabbedPane
553     getTabbedPane() { return tabbedPane; }*/
554    
555     public JMenu
556     getTabsMenu() { return tabsMenu; }
557    
558     public void
559     stateChanged(ChangeEvent e) {
560     updateTabsMenu();
561     checkChannelSelection(getSelectedChannelsPane());
562     checkTabSelection();
563     }
564    
565     public void
566     valueChanged(ListSelectionEvent e) {
567     if(e.getValueIsAdjusting()) return;
568     if(e.getSource() != getSelectedChannelsPane()) return;
569    
570     checkChannelSelection(getSelectedChannelsPane());
571     }
572    
573     public void
574     moveTab2Beginning() {
575     int idx = tabbedPane.getSelectedIndex();
576     if(idx < 1) {
577     CC.getLogger().info("Can't move tab to beginning");
578     return;
579     }
580    
581     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
582     if(getChannelsPane(idx) != c)
583     CC.getLogger().warning("Channels pane indices don't match");
584     removeChannelsPane(c);
585     insertChannelsPane(c, 0);
586     tabbedPane.setSelectedComponent(c);
587     }
588    
589     public void
590     moveTab2Left() {
591     int idx = tabbedPane.getSelectedIndex();
592     if(idx < 1) {
593     CC.getLogger().info("Can't move tab to left");
594     return;
595     }
596    
597    
598     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
599     if(getChannelsPane(idx) != c)
600     CC.getLogger().warning("Channels pane indices don't match");
601     removeChannelsPane(c);
602     insertChannelsPane(c, idx - 1);
603     tabbedPane.setSelectedComponent(c);
604     }
605    
606     public void
607     moveTab2Right() {
608     int idx = tabbedPane.getSelectedIndex();
609     if(idx == -1 && idx >= tabbedPane.getTabCount()) {
610     CC.getLogger().info("Can't move tab to right");
611     return;
612     }
613    
614     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
615     if(getChannelsPane(idx) != c)
616     CC.getLogger().warning("Channels pane indices don't match");
617     removeChannelsPane(c);
618     insertChannelsPane(c, idx + 1);
619     tabbedPane.setSelectedComponent(c);
620     }
621    
622     public void
623     moveTab2End() {
624     int idx = tabbedPane.getSelectedIndex();
625     if(idx == -1 && idx >= tabbedPane.getTabCount()) {
626     CC.getLogger().info("Can't move tab to right");
627     return;
628     }
629    
630     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
631     if(getChannelsPane(idx) != c)
632     CC.getLogger().warning("Channels pane indices don't match");
633     removeChannelsPane(c);
634     addChannelsPane(c);
635     tabbedPane.setSelectedComponent(c);
636     }
637     }

  ViewVC Help
Powered by ViewVC