Subversion Repositories svn.mios

Rev

Rev 683 | Rev 722 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 683 Rev 721
Line 36... Line 36...
36
import java.awt.event.MouseListener;
36
import java.awt.event.MouseListener;
37
import java.awt.event.WindowAdapter;
37
import java.awt.event.WindowAdapter;
38
import java.awt.event.WindowEvent;
38
import java.awt.event.WindowEvent;
39
import java.beans.PropertyChangeEvent;
39
import java.beans.PropertyChangeEvent;
40
import java.beans.PropertyChangeListener;
40
import java.beans.PropertyChangeListener;
-
 
41
import java.io.File;
41
import java.net.URL;
42
import java.net.URL;
-
 
43
import java.util.Observable;
-
 
44
import java.util.Observer;
42
import java.util.Vector;
45
import java.util.Vector;
43
46
44
import javax.swing.Box;
47
import javax.swing.Box;
45
import javax.swing.Icon;
48
import javax.swing.Icon;
46
import javax.swing.ImageIcon;
49
import javax.swing.ImageIcon;
47
import javax.swing.JButton;
50
import javax.swing.JButton;
48
import javax.swing.JCheckBoxMenuItem;
51
import javax.swing.JCheckBoxMenuItem;
49
import javax.swing.JComponent;
52
import javax.swing.JComponent;
50
import javax.swing.JDesktopPane;
53
import javax.swing.JDesktopPane;
51
import javax.swing.JDialog;
54
import javax.swing.JDialog;
-
 
55
import javax.swing.JFileChooser;
52
import javax.swing.JFrame;
56
import javax.swing.JFrame;
53
import javax.swing.JInternalFrame;
57
import javax.swing.JInternalFrame;
54
import javax.swing.JLabel;
58
import javax.swing.JLabel;
55
import javax.swing.JMenu;
59
import javax.swing.JMenu;
56
import javax.swing.JMenuBar;
60
import javax.swing.JMenuBar;
Line 65... Line 69...
65
import javax.swing.UIManager;
69
import javax.swing.UIManager;
66
import javax.swing.event.MenuEvent;
70
import javax.swing.event.MenuEvent;
67
import javax.swing.event.MenuListener;
71
import javax.swing.event.MenuListener;
68
72
69
import org.midibox.apps.miosstudio.MIOSStudio;
73
import org.midibox.apps.miosstudio.MIOSStudio;
-
 
74
import org.midibox.apps.miosstudio.xml.MIOSStudioXML;
70
import org.midibox.midi.MidiFilterDevice;
75
import org.midibox.midi.MidiFilterDevice;
71
import org.midibox.midi.MidiKeyboardControllerDevice;
76
import org.midibox.midi.MidiKeyboardControllerDevice;
72
import org.midibox.midi.MidiRouterDevice;
77
import org.midibox.midi.MidiRouterDevice;
73
import org.midibox.midi.SysexSendReceiveDevice;
78
import org.midibox.midi.SysexSendReceiveDevice;
74
import org.midibox.midi.gui.MidiDeviceManagerGUI;
79
import org.midibox.midi.gui.MidiDeviceManagerGUI;
Line 84... Line 89...
84
import org.midibox.utils.ResourceLoader;
89
import org.midibox.utils.ResourceLoader;
85
import org.midibox.utils.gui.DialogOwner;
90
import org.midibox.utils.gui.DialogOwner;
86
import org.midibox.utils.gui.FontLoader;
91
import org.midibox.utils.gui.FontLoader;
87
import org.midibox.utils.gui.HelpPane;
92
import org.midibox.utils.gui.HelpPane;
88
import org.midibox.utils.gui.ImageLoader;
93
import org.midibox.utils.gui.ImageLoader;
-
 
94
import org.midibox.utils.gui.SimpleFileChooserFilter;
89
95
90
public class MIOSStudioGUI extends JPanel implements ActionListener,
96
public class MIOSStudioGUI extends JPanel implements ActionListener,
91
        MouseListener, PropertyChangeListener, MenuListener {
97
        MouseListener, PropertyChangeListener, MenuListener, Observer {
92
98
93
    protected MIOSStudio miosStudio;
99
    protected MIOSStudio miosStudio;
94
100
95
    private JDesktopPane desktop;
101
    private JDesktopPane desktop;
96
102
Line 170... Line 176...
170
176
171
    protected JMenu helpMenu;
177
    protected JMenu helpMenu;
172
178
173
    private JMenuItem midiThruMenuItem;
179
    private JMenuItem midiThruMenuItem;
174
180
175
    private JMenuItem showInternalMenuItem;
181
    private JCheckBoxMenuItem showInternalMenuItem;
176
182
177
    private JMenu lookAndFeelMenu;
183
    private JMenu lookAndFeelMenu;
178
184
179
    private String lookAndFeel;
185
    private String lookAndFeel;
180
186
181
    private boolean defaultDecoratedFrames;
187
    private boolean defaultDecoratedFrames;
182
188
183
    private JLabel commentLabel;
189
    private JLabel commentLabel;
-
 
190
   
-
 
191
    private String workspaceTag = "miosStudio";
-
 
192
   
-
 
193
    private static String currentDirectory = "";
-
 
194
-
 
195
    private static JFileChooser fc = null;
184
196
185
    public MIOSStudioGUI(MIOSStudio miosStudio) {
197
    public MIOSStudioGUI(MIOSStudio miosStudio) {
186
198
187
        super(new BorderLayout());
199
        super(new BorderLayout());
188
200
189
        this.miosStudio = miosStudio;
201
        this.miosStudio = miosStudio;
-
 
202
       
-
 
203
        miosStudio.addObserver(this);
190
204
191
        lookAndFeel = UIManager.getLookAndFeel().getClass().getName();
205
        lookAndFeel = UIManager.getLookAndFeel().getClass().getName();
192
        defaultDecoratedFrames = JFrame.isDefaultLookAndFeelDecorated();
206
        defaultDecoratedFrames = JFrame.isDefaultLookAndFeelDecorated();
193
207
194
        add(createToolBar(), BorderLayout.NORTH);
208
        add(createToolBar(), BorderLayout.NORTH);
Line 454... Line 468...
454
468
455
    protected void createFileMenu() {
469
    protected void createFileMenu() {
456
470
457
        fileMenu = new JMenu("File");
471
        fileMenu = new JMenu("File");
458
        fileMenu.setMnemonic(KeyEvent.VK_F);
472
        fileMenu.setMnemonic(KeyEvent.VK_F);
-
 
473
       
-
 
474
        JMenuItem menuItem = new JMenuItem("Open Workspace");
-
 
475
        menuItem.setActionCommand("open_workspace");
-
 
476
        menuItem.addActionListener(this);
-
 
477
        fileMenu.add(menuItem);
-
 
478
       
-
 
479
        menuItem = new JMenuItem("Save Workspace");
-
 
480
        menuItem.setActionCommand("save_workspace");
-
 
481
        menuItem.addActionListener(this);
-
 
482
        fileMenu.add(menuItem);
459
    }
483
    }
460
484
461
    protected void createMIDIMenu() {
485
    protected void createMIDIMenu() {
462
        midiMenu = new JMenu("MIDI");
486
        midiMenu = new JMenu("MIDI");
463
        midiMenu.setMnemonic(KeyEvent.VK_M);
487
        midiMenu.setMnemonic(KeyEvent.VK_M);
Line 473... Line 497...
473
        menuItem = new JMenuItem("MIDI Filters");
497
        menuItem = new JMenuItem("MIDI Filters");
474
        menuItem.setMnemonic(KeyEvent.VK_F);
498
        menuItem.setMnemonic(KeyEvent.VK_F);
475
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
499
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,
476
                ActionEvent.CTRL_MASK));
500
                ActionEvent.CTRL_MASK));
477
        menuItem.setActionCommand("midi_filters");
501
        menuItem.setActionCommand("midi_filters");
478
        menuItem.addActionListener(this);
-
 
479
        midiMenu.add(menuItem);
-
 
480
-
 
481
        menuItem = new JMenuItem("MIDI Device Routing");
-
 
482
        menuItem.setMnemonic(KeyEvent.VK_R);
-
 
483
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
-
 
484
                ActionEvent.CTRL_MASK));
-
 
485
        menuItem.setActionCommand("midi_routing");
-
 
486
        menuItem.addActionListener(this);
502
        menuItem.addActionListener(this);
487
        midiMenu.add(menuItem);
503
        midiMenu.add(menuItem);
488
504
489
        menuItem = new JMenuItem("MIDI Monitor: OUT");
505
        menuItem = new JMenuItem("MIDI Monitor: OUT");
490
        menuItem.setMnemonic(KeyEvent.VK_O);
506
        menuItem.setMnemonic(KeyEvent.VK_O);
Line 560... Line 576...
560
576
561
    protected void createOptionsMenu() {
577
    protected void createOptionsMenu() {
562
578
563
        optionsMenu = new JMenu("Options");
579
        optionsMenu = new JMenu("Options");
564
        optionsMenu.setMnemonic(KeyEvent.VK_P);
580
        optionsMenu.setMnemonic(KeyEvent.VK_P);
-
 
581
       
-
 
582
-
 
583
        JMenuItem menuItem = new JMenuItem("MIDI Device Routing");
-
 
584
        menuItem.setMnemonic(KeyEvent.VK_R);
-
 
585
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
-
 
586
                ActionEvent.CTRL_MASK));
-
 
587
        menuItem.setActionCommand("midi_routing");
-
 
588
        menuItem.addActionListener(this);
-
 
589
        optionsMenu.add(menuItem);
565
590
566
        showInternalMenuItem = new JCheckBoxMenuItem("Show Internal Routing",
591
        showInternalMenuItem = new JCheckBoxMenuItem("Show Internal Routing",
567
                miosStudio.isRouteIndividualDevices());
592
                miosStudio.isRouteIndividualDevices());
568
        showInternalMenuItem.setActionCommand("route_internal");
593
        showInternalMenuItem.setActionCommand("route_internal");
569
        showInternalMenuItem.addActionListener(this);
594
        showInternalMenuItem.addActionListener(this);
570
        optionsMenu.add(showInternalMenuItem);
595
        optionsMenu.add(showInternalMenuItem);
571
596
572
        JMenuItem menuItem = new JMenuItem("Restore Default Internal Routing");
597
        menuItem = new JMenuItem("Restore Default Internal Routing");
573
        menuItem.setActionCommand("restore_default");
598
        menuItem.setActionCommand("restore_default");
574
        menuItem.addActionListener(this);
599
        menuItem.addActionListener(this);
575
        optionsMenu.add(menuItem);
600
        optionsMenu.add(menuItem);
576
601
577
        optionsMenu.addSeparator();
602
        optionsMenu.addSeparator();
Line 580... Line 605...
580
        midiThruMenuItem = new JCheckBoxMenuItem("Send MIDI Thru via Out Port");
605
        midiThruMenuItem = new JCheckBoxMenuItem("Send MIDI Thru via Out Port");
581
        midiThruMenuItem.setActionCommand("midi_thru");
606
        midiThruMenuItem.setActionCommand("midi_thru");
582
        midiThruMenuItem.addActionListener(this);
607
        midiThruMenuItem.addActionListener(this);
583
        thruMenu.add(midiThruMenuItem);
608
        thruMenu.add(midiThruMenuItem);
584
609
585
        menuItem = new JMenuItem("Show MIDI Thru Filter");
610
        menuItem = new JMenuItem("MIDI Thru Filter");
586
        menuItem.setActionCommand("midi_thru_filter");
611
        menuItem.setActionCommand("midi_thru_filter");
587
        menuItem.addActionListener(this);
612
        menuItem.addActionListener(this);
588
        thruMenu.add(menuItem);
613
        thruMenu.add(menuItem);
589
614
590
        /*
615
        /*
Line 664... Line 689...
664
689
665
        createMIOSButtons();
690
        createMIOSButtons();
666
691
667
        toolBar.addSeparator();
692
        toolBar.addSeparator();
668
693
669
        createHelpButtons();
694
        createOptionsButtons();
670
695
671
        toolBar.addSeparator();
696
        toolBar.addSeparator();
-
 
697
-
 
698
        createHelpButtons();       
672
699
673
        toolBarMenu = new JPopupMenu();
700
        toolBarMenu = new JPopupMenu();
674
        JMenuItem addButton = new JMenuItem("Add External Command Button");
701
        JMenuItem addButton = new JMenuItem("Add External Command Button");
675
        addButton.setActionCommand("add_command_button");
702
        addButton.setActionCommand("add_command_button");
676
        addButton.addActionListener(this);
703
        addButton.addActionListener(this);
Line 694... Line 721...
694
        toolBar.add(button);
721
        toolBar.add(button);
695
722
696
        button = new JButton(ImageLoader.getImageIcon("filter.png"));
723
        button = new JButton(ImageLoader.getImageIcon("filter.png"));
697
        button.setToolTipText("MIDI Filters");
724
        button.setToolTipText("MIDI Filters");
698
        button.setActionCommand("midi_filters");
725
        button.setActionCommand("midi_filters");
699
        button.addActionListener(this);
-
 
700
        button.setMargin(insets);
-
 
701
        toolBar.add(button);
-
 
702
-
 
703
        toolBar.addSeparator();
-
 
704
-
 
705
        button = new JButton(ImageLoader.getImageIcon("midiRouting.png"));
-
 
706
        button.setToolTipText("MIDI Device Routing");
-
 
707
        button.setActionCommand("midi_routing");
-
 
708
        button.addActionListener(this);
726
        button.addActionListener(this);
709
        button.setMargin(insets);
727
        button.setMargin(insets);
710
        toolBar.add(button);
728
        toolBar.add(button);
711
729
712
        button = new JButton(ImageLoader.getImageIcon("midiOut.png"));
730
        button = new JButton(ImageLoader.getImageIcon("midiOut.png"));
Line 765... Line 783...
765
        toolBar.add(button);
783
        toolBar.add(button);
766
784
767
        button = new JButton(ImageLoader.getImageIcon("miosTerminal.png"));
785
        button = new JButton(ImageLoader.getImageIcon("miosTerminal.png"));
768
        button.setToolTipText("MIOS Terminal");
786
        button.setToolTipText("MIOS Terminal");
769
        button.setActionCommand("mios_terminal");
787
        button.setActionCommand("mios_terminal");
-
 
788
        button.addActionListener(this);
-
 
789
        button.setMargin(insets);
-
 
790
        toolBar.add(button);
-
 
791
    }
-
 
792
   
-
 
793
    protected void createOptionsButtons() {
-
 
794
       
-
 
795
        Insets insets = new Insets(2, 2, 2, 2);
-
 
796
-
 
797
        JButton button = new JButton(ImageLoader.getImageIcon("midiRouting.png"));
-
 
798
        button.setToolTipText("MIDI Device Routing");
-
 
799
        button.setActionCommand("midi_routing");
770
        button.addActionListener(this);
800
        button.addActionListener(this);
771
        button.setMargin(insets);
801
        button.setMargin(insets);
772
        toolBar.add(button);
802
        toolBar.add(button);
773
    }
803
    }
774
804
Line 1067... Line 1097...
1067
        return miosTerminalWindow;
1097
        return miosTerminalWindow;
1068
    }
1098
    }
1069
1099
1070
    public MIOSStudioInternalFrame getHelpWindow() {
1100
    public MIOSStudioInternalFrame getHelpWindow() {
1071
        return helpWindow;
1101
        return helpWindow;
-
 
1102
    }
-
 
1103
   
-
 
1104
    protected void openWorkspace() {
-
 
1105
       
-
 
1106
        if (fc == null) {
-
 
1107
            fc = new JFileChooser(currentDirectory);
-
 
1108
            SimpleFileChooserFilter fileFilter = new SimpleFileChooserFilter(
-
 
1109
                    "XML files", "xml", "XML Workspace Definition");
-
 
1110
            fc.addChoosableFileFilter(fileFilter);
-
 
1111
            fc.setAcceptAllFileFilterUsed(false);
-
 
1112
        }
-
 
1113
-
 
1114
        File noFile = new File("");
-
 
1115
        File noFiles[] = { noFile };
-
 
1116
        fc.setSelectedFile(noFile);
-
 
1117
        fc.setSelectedFiles(noFiles);
-
 
1118
-
 
1119
        int nRetVal = fc.showOpenDialog(this);
-
 
1120
-
 
1121
        if (nRetVal == JFileChooser.APPROVE_OPTION) {
-
 
1122
            File file = fc.getSelectedFile();
-
 
1123
-
 
1124
            MIOSStudioXML miosStudioXML = new MIOSStudioXML(miosStudio, workspaceTag);
-
 
1125
           
-
 
1126
            miosStudioXML.loadXML(file);
-
 
1127
-
 
1128
            currentDirectory = fc.getCurrentDirectory().toString();
-
 
1129
        }
-
 
1130
    }
-
 
1131
   
-
 
1132
    protected void saveWorkspace() {
-
 
1133
       
-
 
1134
        if (fc == null) {
-
 
1135
            fc = new JFileChooser(currentDirectory);
-
 
1136
            SimpleFileChooserFilter fileFilter = new SimpleFileChooserFilter(
-
 
1137
                    "XML files", "xml", "XML Workspace Definition");
-
 
1138
            fc.addChoosableFileFilter(fileFilter);
-
 
1139
            fc.setAcceptAllFileFilterUsed(false);
-
 
1140
        }
-
 
1141
-
 
1142
        File noFile = new File("");
-
 
1143
        File noFiles[] = { noFile };
-
 
1144
        fc.setSelectedFile(noFile);
-
 
1145
        fc.setSelectedFiles(noFiles);
-
 
1146
-
 
1147
        int nRetVal = fc.showSaveDialog(this);
-
 
1148
-
 
1149
        if (nRetVal == JFileChooser.APPROVE_OPTION) {
-
 
1150
            File file = fc.getSelectedFile();
-
 
1151
-
 
1152
            MIOSStudioXML miosStudioXML = new MIOSStudioXML(miosStudio, workspaceTag);
-
 
1153
           
-
 
1154
            miosStudioXML.saveXML(file);
-
 
1155
-
 
1156
            currentDirectory = fc.getCurrentDirectory().toString();
-
 
1157
        }
1072
    }
1158
    }
1073
1159
1074
    /*
1160
    /*
1075
     * public MIOSStudioInternalFrame getSysexSendReceiveDeviceManagerWindow() {
1161
     * public MIOSStudioInternalFrame getSysexSendReceiveDeviceManagerWindow() {
1076
     * return sysexSendReceiveDeviceManagerWindow; }
1162
     * return sysexSendReceiveDeviceManagerWindow; }
Line 1128... Line 1214...
1128
1214
1129
        if (source == windowMenu) {
1215
        if (source == windowMenu) {
1130
            windowMenu.buildChildMenus();
1216
            windowMenu.buildChildMenus();
1131
        } else if (source == lookAndFeelMenu) {
1217
        } else if (source == lookAndFeelMenu) {
1132
            buildLookAndFeel();
1218
            buildLookAndFeel();
-
 
1219
        }
-
 
1220
    }
-
 
1221
-
 
1222
    public void update(Observable observable, Object object) {
-
 
1223
       
-
 
1224
        if (object == MIOSStudio.ROUTE_INDIVIDUAL_DEVICES) {
-
 
1225
           
-
 
1226
            showInternalMenuItem.setSelected(miosStudio.isRouteIndividualDevices());
-
 
1227
           
-
 
1228
        } else if (object == MIOSStudio.MIDI_THRU_OUT_PORT) {
-
 
1229
           
-
 
1230
            midiThruMenuItem.setSelected(miosStudio.isMidiThruOutPort());
1133
        }
1231
        }
1134
    }
1232
    }
1135
1233
1136
    public void actionPerformed(ActionEvent ae) {
1234
    public void actionPerformed(ActionEvent ae) {
1137
1235
Line 1195... Line 1293...
1195
            addExternalCommandButton("[empty]", "");
1293
            addExternalCommandButton("[empty]", "");
1196
1294
1197
        } else if (ae.getActionCommand().equals("dialogs")) {
1295
        } else if (ae.getActionCommand().equals("dialogs")) {
1198
            defaultDecoratedFrames = ((JCheckBoxMenuItem) ae.getSource())
1296
            defaultDecoratedFrames = ((JCheckBoxMenuItem) ae.getSource())
1199
                    .isSelected();
1297
                    .isSelected();
-
 
1298
           
-
 
1299
        } else if (ae.getActionCommand().equals("open_workspace")) {
-
 
1300
            openWorkspace();
-
 
1301
           
-
 
1302
        }  else if (ae.getActionCommand().equals("save_workspace")) {
-
 
1303
            saveWorkspace();
1200
        }
1304
        }
1201
    }
1305
    }
1202
1306
1203
    public class MIOSStudioInternalFrame extends JInternalFrame {
1307
    public class MIOSStudioInternalFrame extends JInternalFrame {
1204
        public MIOSStudioInternalFrame(String name, boolean resizeable,
1308
        public MIOSStudioInternalFrame(String name, boolean resizeable,