Subversion Repositories svn.mios

Rev

Rev 682 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
682 adamjking 1
import java.awt.event.ActionEvent;
2
import java.awt.event.ActionListener;
3
import java.awt.event.KeyEvent;
4
import java.awt.event.WindowAdapter;
5
import java.awt.event.WindowEvent;
6
import java.util.prefs.Preferences;
7
 
8
import javax.swing.JApplet;
9
import javax.swing.JFrame;
10
import javax.swing.JMenu;
11
import javax.swing.JMenuItem;
12
import javax.swing.JOptionPane;
13
 
684 adamjking 14
import org.midibox.apps.sidv2editor.gui.SIDV2EditorGUI;
682 adamjking 15
import org.midibox.utils.gui.DialogOwner;
16
import org.midibox.utils.gui.ImageLoader;
17
 
18
public class SIDV2Editor extends JApplet implements ActionListener {
19
 
684 adamjking 20
    private org.midibox.apps.sidv2editor.SIDV2Editor sidv2librarian;
682 adamjking 21
 
684 adamjking 22
    private SIDV2EditorGUI sidv2librarianGUI;
682 adamjking 23
 
24
    private Preferences prefs = Preferences.userRoot().node(
25
            "org/midibox/apps/SIDV2librarian");
26
 
27
    public SIDV2Editor() {
28
 
684 adamjking 29
        sidv2librarian = new org.midibox.apps.sidv2editor.SIDV2Editor();
682 adamjking 30
 
684 adamjking 31
        sidv2librarianGUI = new SIDV2EditorGUI(sidv2librarian);
682 adamjking 32
 
33
        setContentPane(sidv2librarianGUI);
34
 
35
        setJMenuBar(sidv2librarianGUI.createMenu());
36
 
37
        JMenu fileMenu = sidv2librarianGUI.getFileMenu();
38
 
39
        JMenu editMenu = sidv2librarianGUI.getEditMenu();
40
 
41
        fileMenu.addSeparator();
42
 
43
        JMenuItem menuItem = new JMenuItem("Exit", KeyEvent.VK_X);
44
        menuItem.setActionCommand("Exit");
45
        menuItem.addActionListener(this);
46
        fileMenu.add(menuItem);
47
 
48
        editMenu.addSeparator();
49
 
50
        menuItem = new JMenuItem("Preferences", KeyEvent.VK_R);
51
        menuItem.setActionCommand("Preferences");
52
        menuItem.addActionListener(this);
53
        editMenu.add(menuItem);
54
    }
55
 
56
    public void destroy() {
57
        super.destroy();
58
 
59
        tryExit();
60
    }
61
 
62
    public void init() {
63
        super.init();
64
 
65
        if (sidv2librarian.getMidiDeviceRouting().getMidiReadDevices().size() < 1) {
66
            JOptionPane
67
                    .showMessageDialog(
68
                            null,
69
                            "Your system does not appear to have any MIDI-devices connected (please close program)!.",
70
                            "Error", JOptionPane.OK_OPTION);
71
        } else {
72
            sidv2librarian.setInputDeviceIndex(0);
73
            sidv2librarian.setOutputDeviceIndex(0);
74
            sidv2librarian.getMidiDeviceRouting().connectDevices(
75
                    sidv2librarian.getInputMidiDevice(),
76
                    sidv2librarian.getLocalMidiDevice());
77
            sidv2librarian.getMidiDeviceRouting().connectDevices(
78
                    sidv2librarian.getLocalMidiDevice(),
79
                    sidv2librarian.getOutputMidiDevice());
80
        }
81
 
82
        recallConnections();
83
    }
84
 
85
    public static void main(String[] args) {
86
 
87
        final JFrame frame = new JFrame("MidiBox SID V2 Editor");
88
 
89
        DialogOwner.setFrame(frame);
90
 
91
        final SIDV2Editor sidV2Editor = new SIDV2Editor();
92
 
93
        frame.setContentPane(sidV2Editor);
94
 
95
        frame.setIconImage(ImageLoader.getImageIcon("sid.png").getImage());
96
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
97
        frame.addWindowListener(new WindowAdapter() {
98
            public void windowClosing(WindowEvent ev) {
99
                sidV2Editor.tryExit();
100
            }
101
        });
102
 
103
        frame.setResizable(false);
104
 
105
        frame.pack();
106
 
107
        frame.setVisible(true);
108
 
109
        sidV2Editor.init();
110
    }
111
 
112
    private void tryExit() {
113
        int n = JOptionPane.showConfirmDialog(null,
114
                "Are you sure you want to exit?", "Exit?",
115
                JOptionPane.YES_NO_OPTION);
116
        if (n == JOptionPane.YES_OPTION) {
117
 
118
            storeConnections();
119
            sidv2librarian.closeMidi();
120
 
121
            System.exit(0);
122
        }
123
    }
124
 
125
    private void recallConnections() {
126
        int input = prefs.getInt("INPUT_DEVICE", 0);
127
        int output = prefs.getInt("OUTPUT_DEVICE", 0);
128
        int in = sidv2librarian.findInputDeviceHash(input);
129
        int out = sidv2librarian.findOuputDeviceHash(output);
130
 
131
        if (in != -1 && out != -1) {
132
            sidv2librarian.setInputDeviceIndex(in);
133
            sidv2librarian.setOutputDeviceIndex(out);
134
        } else {
135
            JOptionPane
136
                    .showMessageDialog(
137
                            null,
138
                            "Your MIDI configuration has changed, please check connections!",
139
                            "MIDI configuration changed!",
140
                            JOptionPane.OK_OPTION);
141
 
142
            sidv2librarianGUI.showMidiDeviceRoutingDialog();
143
        }
144
    }
145
 
146
    private void storeConnections() {
147
        int input = sidv2librarian.getInputDeviceHash();
148
        int output = sidv2librarian.getOutputDeviceHash();
149
        prefs.putInt("INPUT_DEVICE", input);
150
        prefs.putInt("OUTPUT_DEVICE", output);
151
    }
152
 
153
    public void actionPerformed(ActionEvent ae) {
154
        if (ae.getActionCommand().equals("Preferences")) {
155
            sidv2librarianGUI.showMidiDeviceRoutingDialog();
156
        } else if (ae.getActionCommand().equals("Exit")) {
157
            tryExit();
158
        }
159
    }
160
}