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

Diff of /jsampler/trunk/src/org/jsampler/view/fantasia/MainFrame.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1143 by iliev, Mon Apr 2 21:18:31 2007 UTC revision 1776 by iliev, Thu Sep 11 18:48:36 2008 UTC
# Line 1  Line 1 
1  /*  /*
2   *   JSampler - a java front-end for LinuxSampler   *   JSampler - a java front-end for LinuxSampler
3   *   *
4   *   Copyright (C) 2005-2006 Grigor Iliev <grigor@grigoriliev.com>   *   Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com>
5   *   *
6   *   This file is part of JSampler.   *   This file is part of JSampler.
7   *   *
# Line 23  Line 23 
23  package org.jsampler.view.fantasia;  package org.jsampler.view.fantasia;
24    
25  import java.awt.BorderLayout;  import java.awt.BorderLayout;
26    import java.awt.Dialog;
27  import java.awt.Dimension;  import java.awt.Dimension;
28  import java.awt.Point;  import java.awt.Frame;
29    import java.awt.Graphics;
30    import java.awt.GridBagConstraints;
31    import java.awt.GridBagLayout;
32    import java.awt.Insets;
33    
34  import java.awt.event.ActionEvent;  import java.awt.event.ActionEvent;
35  import java.awt.event.ActionListener;  import java.awt.event.ActionListener;
36  import java.awt.event.MouseAdapter;  import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;  
37    
38    import java.io.BufferedReader;
39    import java.io.File;
40    import java.io.FileNotFoundException;
41    import java.io.FileReader;
42    
43    import java.util.Vector;
44  import java.util.logging.Level;  import java.util.logging.Level;
45    
46  import javax.swing.Box;  import javax.swing.BorderFactory;
 import javax.swing.BoxLayout;  
47  import javax.swing.JCheckBoxMenuItem;  import javax.swing.JCheckBoxMenuItem;
48    import javax.swing.JFileChooser;
49  import javax.swing.JMenu;  import javax.swing.JMenu;
50    import javax.swing.JMenuBar;
51  import javax.swing.JMenuItem;  import javax.swing.JMenuItem;
52  import javax.swing.JPanel;  import javax.swing.JPanel;
53  import javax.swing.JPopupMenu;  import javax.swing.JSplitPane;
54  import javax.swing.JToggleButton;  import javax.swing.KeyStroke;
55  import javax.swing.UIManager;  import javax.swing.SwingUtilities;
56  import javax.swing.plaf.synth.SynthLookAndFeel;  import javax.swing.Timer;
   
 import net.sf.juife.TitleBar;  
57    
58  import org.jsampler.CC;  import org.jsampler.CC;
59  import org.jsampler.HF;  import org.jsampler.HF;
60    import org.jsampler.LSConsoleModel;
61    import org.jsampler.Server;
62    
 import org.jsampler.view.JSChannel;  
63  import org.jsampler.view.JSChannelsPane;  import org.jsampler.view.JSChannelsPane;
64  import org.jsampler.view.JSMainFrame;  import org.jsampler.view.JSMainFrame;
65    import org.jsampler.view.LscpFileFilter;
66    
67    import org.jsampler.view.std.JSConnectDlg;
68    import org.jsampler.view.std.JSDetailedErrorDlg;
69    import org.jsampler.view.std.JSQuitDlg;
70    import org.jsampler.view.std.JSamplerHomeChooser;
71    
72    import static org.jsampler.view.fantasia.A4n.a4n;
73  import static org.jsampler.view.fantasia.FantasiaI18n.i18n;  import static org.jsampler.view.fantasia.FantasiaI18n.i18n;
74    import static org.jsampler.view.fantasia.FantasiaPrefs.preferences;
75    import static org.jsampler.view.std.StdPrefs.*;
76    
77    
78  /**  /**
# Line 61  import static org.jsampler.view.fantasia Line 80  import static org.jsampler.view.fantasia
80   * @author Grigor Iliev   * @author Grigor Iliev
81   */   */
82  public class MainFrame extends JSMainFrame {  public class MainFrame extends JSMainFrame {
83          private final static int TITLE_BAR_WIDTH = 420;          private final StandardBar standardBar = new StandardBar();
84          private final static int TITLE_BAR_HEIGHT = 29;          private final FantasiaMenuBar menuBar = new FantasiaMenuBar();
85            private final JPanel rootPane = new JPanel();
86            private final MainPane mainPane = new MainPane();
87            private final PianoKeyboardPane pianoKeyboardPane;
88            
89            private final JMenu recentScriptsMenu =
90                    new JMenu(i18n.getMenuLabel("actions.recentScripts"));
91            
92            private final JSplitPane hSplitPane;
93            private final JSplitPane pianoRollSplitPane;
94            
95            private final LeftSidePane leftSidePane = new LeftSidePane();
96            private final RightSidePane rightSidePane = new RightSidePane();
97            private final JPanel rightPane;
98            
99            //private final StatusBar statusBar = new StatusBar();
100                    
101          private final ChannelsPane channelsPane = new ChannelsPane("");          private final LSConsoleFrame lsConsoleFrame = new LSConsoleFrame();
102            private final Vector<String> recentScripts = new Vector<String>();
103                    
104            
105            private final JCheckBoxMenuItem cbmiToolBarVisible =
106                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolBar"));
107            
108            private final JCheckBoxMenuItem cbmiLeftSidePaneVisible =
109                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftSidePane"));
110            
111            private final JCheckBoxMenuItem cbmiRightSidePaneVisible =
112                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.rightSidePane"));
113            
114            private final JCheckBoxMenuItem cbmiMidiKeyboardVisible =
115                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.midiKeyboard"));
116            
117            private final Timer guiTimer = new Timer(1000, null);
118                    
119          /** Creates a new instance of <code>MainFrame</code> */          /** Creates a new instance of <code>MainFrame</code> */
120          public          public
121          MainFrame() {          MainFrame() {
                 try {  
                         SynthLookAndFeel synth = new SynthLookAndFeel();  
                         synth.load(MainFrame.class.getResourceAsStream("gui.xml"), MainFrame.class);  
                         UIManager.setLookAndFeel(synth);  
                 } catch(Exception e) {  
                         CC.getLogger().log(Level.INFO, HF.getErrorMessage(e), e);  
                 }  
                   
122                  setTitle(i18n.getLabel("MainFrame.title"));                  setTitle(i18n.getLabel("MainFrame.title"));
                 addChannelsPane(channelsPane);  
                 add(channelsPane);  
                 setUndecorated(true);  
                   
                 JToggleButton btn = new PixmapToggleButton(Res.iconPowerOff, Res.iconPowerOn) {  
                         public boolean  
                         contains(int x, int y) {  
                                 return (x - 11)*(x - 11) + (y - 11)*(y - 11) < 71;  
                         }  
                 };  
123                                    
124                  btn.setSelected(true);                  if(Res.iconAppIcon != null) setIconImage(Res.iconAppIcon.getImage());
                 btn.setAlignmentX(JPanel.LEFT_ALIGNMENT);  
                 btn.addActionListener(new ActionListener() {  
                         public void  
                         actionPerformed(ActionEvent e) { onWindowClose(); }  
                 });  
125                                    
126                    getContentPane().add(standardBar, BorderLayout.NORTH);
127                    //getContentPane().add(statusBar, BorderLayout.SOUTH);
128                                    
129                  FantasiaTitleBar tb = new FantasiaTitleBar();                  rightPane = createRightPane();
                 tb.setName("FantasiaTitleBar");  
                 tb.setLayout(new BoxLayout(tb, BoxLayout.X_AXIS));  
                 tb.setOpaque(true);  
                 tb.add(Box.createRigidArea(new Dimension(4, 0)));  
                 tb.add(btn);  
                 tb.add(Box.createRigidArea(new Dimension(3, 0)));  
130                                    
131                    hSplitPane = new JSplitPane (
132                            JSplitPane.HORIZONTAL_SPLIT,
133                            true,   // continuousLayout
134                            leftSidePane, rightPane
135                    );
136                    hSplitPane.setResizeWeight(0.5);
137                                    
138                    addChannelsPane(mainPane.getChannelsPane());
139                                    
140                  tb.add(createVSeparator());                  pianoKeyboardPane = new PianoKeyboardPane();
141                    getChannelsPane(0).addListSelectionListener(pianoKeyboardPane);
142                                    
143                  tb.add(Box.createRigidArea(new Dimension(275, 0)));                  pianoRollSplitPane = new JSplitPane (
144                            JSplitPane.VERTICAL_SPLIT,
145                            true,   // continuousLayout
146                            rootPane, pianoKeyboardPane
147                    );
148                                    
149                  tb.add(createVSeparator());                  pianoRollSplitPane.setResizeWeight(0.5);
150                                    
151                  tb.add(Box.createRigidArea(new Dimension(29, 0)));                  rootPane.setLayout(new BorderLayout());
152                    rootPane.setBorder(BorderFactory.createEmptyBorder(6, 0, 0, 0));
153                    rootPane.setOpaque(false);
154                    rootPane.add(hSplitPane);
155                                    
156                  tb.add(createVSeparator());                  addMenu();
157                                    
158                  tb.add(Box.createRigidArea(new Dimension(40, 0)));                  getContentPane().add(pianoRollSplitPane);
159                                    
160                  tb.add(createVSeparator());                  int i = preferences().getIntProperty("MainFrame.hSplitDividerLocation", 220);
161                    hSplitPane.setDividerLocation(i);
162                                    
163                  tb.setPreferredSize(new Dimension(TITLE_BAR_WIDTH, TITLE_BAR_HEIGHT));                  setSavedSize();
                 tb.setMinimumSize(tb.getPreferredSize());  
                 tb.setMaximumSize(tb.getPreferredSize());  
                 add(tb, BorderLayout.SOUTH);  
164                                    
165                  getContentPane().setBackground(new java.awt.Color(0x818181));                  guiTimer.start();
166                  getRootPane().setOpaque(false);          }
167                  getLayeredPane().setOpaque(false);          
168                  //getContentPane().setVisible(false);          private JPanel
169            createRightPane() {
170                    JPanel p = new JPanel();
171                    GridBagLayout gridbag = new GridBagLayout();
172                    GridBagConstraints c = new GridBagConstraints();
173                                    
174                  setAlwaysOnTop(FantasiaPrefs.isAlwaysOnTop());                  p.setLayout(gridbag);
175                  pack();                  
176                    c.fill = GridBagConstraints.BOTH;
177                                    
178                  String s = FantasiaPrefs.getWindowLocation();                  c.gridx = 1;
179                    c.gridy = 0;
180                    c.weightx = 1.0;
181                    c.weighty = 1.0;
182                    c.insets = new Insets(0, 3, 0, 0);
183                    gridbag.setConstraints(rightSidePane, c);
184                    p.add(rightSidePane);
185                    
186                    c.gridx = 0;
187                    c.gridy = 0;
188                    c.weightx = 0.0;
189                    c.weighty = 1.0;
190                    c.insets = new Insets(0, 3, 0, 3);
191                    c.fill = GridBagConstraints.VERTICAL;
192                    gridbag.setConstraints(mainPane, c);
193                    p.add(mainPane);
194                                    
195                    return p;
196            }
197            
198            private void
199            setSavedSize() {
200                    String s = preferences().getStringProperty("MainFrame.sizeAndLocation");
201                    if(s == null) {
202                            setDefaultSizeAndLocation();
203                            return;
204                    }
205                    pack();
206                  try {                  try {
207                          if(s == null) {                          int i = s.indexOf(',');
208                                  setDefaultLocation();                          int x = Integer.parseInt(s.substring(0, i));
                         } else {  
                                 int i = s.indexOf(',');  
                                 int x = Integer.parseInt(s.substring(0, i));  
209                                                    
210                                  s = s.substring(i + 1);                          s = s.substring(i + 1);
211                                  int y = Integer.parseInt(s);                          i = s.indexOf(',');
212                            int y = Integer.parseInt(s.substring(0, i));
213                                                    
214                                  setLocation(x, y);                          s = s.substring(i + 1);
215                          }                          i = s.indexOf(',');
216                            int width = Integer.parseInt(s.substring(0, i));
217                            
218                            s = s.substring(i + 1);
219                            int height = Integer.parseInt(s);
220                            
221                            setBounds(x, y, width, height);
222                  } catch(Exception x) {                  } catch(Exception x) {
223                          String msg = "Parsing of window size and location string failed";                          String msg = "Parsing of window size and location string failed";
224                          CC.getLogger().log(Level.INFO, msg, x);                          CC.getLogger().log(Level.INFO, msg, x);
225                          setDefaultLocation();                          setDefaultSizeAndLocation();
226                    }
227                    
228                    if(preferences().getBoolProperty("MainFrame.windowMaximized")) {
229                            setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
230                  }                  }
231          }          }
232                    
233          private void          private void
234          setDefaultLocation() {          setDefaultSizeAndLocation() {
235                  Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize();                  setPreferredSize(new Dimension(900, 600));
236                  setLocation((d.width - TITLE_BAR_WIDTH) / 2, (d.height - TITLE_BAR_HEIGHT) / 2);                  pack();
237                    setLocationRelativeTo(null);
238          }          }
239                    
240                    
241          /** Invoked when this window is about to close. */          /** Invoked when this window is about to close. */
242          protected void          protected void
243          onWindowClose() {          onWindowClose() {
244                  FantasiaPrefs.setAlwaysOnTop(isAlwaysOnTop());                  boolean b = preferences().getBoolProperty(CONFIRM_APP_QUIT);
245                    if(b && CC.getSamplerModel().isModified()) {
246                            JSQuitDlg dlg = new JSQuitDlg(Res.iconQuestion32);
247                            dlg.setVisible(true);
248                            if(dlg.isCancelled()) return;
249                    }
250                    
251                    leftSidePane.savePreferences();
252                    rightSidePane.savePreferences();
253                    
254                    int i = hSplitPane.getDividerLocation();
255                    preferences().setIntProperty("MainFrame.hSplitDividerLocation", i);
256                    
257                    preferences().setBoolProperty (
258                            "MainFrame.windowMaximized",
259                            (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH
260                    );
261                    
262                    if(preferences().getBoolProperty("MainFrame.windowMaximized")) {
263                            super.onWindowClose();
264                            return;
265                    }
266                                    
267                  java.awt.Point p = getLocation();                  java.awt.Point p = getLocation();
268                  Dimension d = getSize();                  Dimension d = getSize();
269                  StringBuffer sb = new StringBuffer();                  StringBuffer sb = new StringBuffer();
270                  sb.append(p.x).append(',').append(p.y + getSize().height - TITLE_BAR_HEIGHT);                  sb.append(p.x).append(',').append(p.y).append(',');
271                  FantasiaPrefs.setWindowLocation(sb.toString());                  sb.append(d.width).append(',').append(d.height);
272                    preferences().setStringProperty("MainFrame.sizeAndLocation", sb.toString());
273                    
274                    String[] list = recentScripts.toArray(new String[recentScripts.size()]);
275                    preferences().setStringListProperty(RECENT_LSCP_SCRIPTS, list);
276                    
277                    if(preferences().getBoolProperty(SAVE_LS_CONSOLE_HISTORY)) {
278                            if(lsConsoleFrame != null) getLSConsolePane().saveConsoleHistory();
279                    }
280                                    
281                  super.onWindowClose();                  super.onWindowClose();
282          }          }
283                    
284          private JPanel          private void
285          createVSeparator() {          addMenu() {
286                  JPanel p = new JPanel();                  JMenu m;
287                  p.setName("VSeparator");                  JMenuItem mi;
288                  p.setOpaque(false);                  
289                  p.setPreferredSize(new Dimension(2, 29));                  setJMenuBar(menuBar);
290                  p.setMinimumSize(p.getPreferredSize());                  
291                  p.setMaximumSize(p.getPreferredSize());                  // Actions
292                  return p;                  m = new FantasiaMenu(i18n.getMenuLabel("actions"));
293                    
294                    mi = new JMenuItem(a4n.refresh);
295                    mi.setIcon(null);
296                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
297                    m.add(mi);
298                    
299                    mi = new JMenuItem(a4n.samplerInfo);
300                    mi.setIcon(null);
301                    m.add(mi);
302                    
303                    mi = new JMenuItem(a4n.resetSampler);
304                    mi.setIcon(null);
305                    m.add(mi);
306                    
307                    m.addSeparator();
308                    
309                    JMenu exportMenu = new JMenu(i18n.getMenuLabel("actions.export"));
310                    m.add(exportMenu);
311                    
312                    mi = new JMenuItem(a4n.exportSamplerConfig);
313                    mi.setIcon(null);
314                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK));
315                    exportMenu.add(mi);
316                    
317                    mi = new JMenuItem(a4n.exportMidiInstrumentMaps);
318                    mi.setIcon(null);
319                    exportMenu.add(mi);
320                    
321                    m.addSeparator();
322                    
323                    mi = new JMenuItem(a4n.loadScript);
324                    mi.setIcon(null);
325                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
326                    m.add(mi);
327                    
328                    String[] list = preferences().getStringListProperty(RECENT_LSCP_SCRIPTS);
329                    for(String s : list) recentScripts.add(s);
330                    
331                    updateRecentScriptsMenu();
332                    
333                    m.add(recentScriptsMenu);
334                    
335                    m.addSeparator();
336                    
337                    mi = new JMenuItem(a4n.changeBackend);
338                    mi.setIcon(null);
339                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK));
340                    m.add(mi);
341                    
342                    m.addSeparator();
343                    
344                    mi = new JMenuItem(i18n.getMenuLabel("actions.exit"));
345                    m.add(mi);
346                    mi.addActionListener(new ActionListener() {
347                            public void
348                            actionPerformed(ActionEvent e) { onWindowClose(); }
349                    });
350                    
351                    menuBar.add(m);
352                    
353                    
354                    // Edit
355                    m = new FantasiaMenu(i18n.getMenuLabel("edit"));
356                    menuBar.add(m);
357                    
358                    mi = new JMenuItem(i18n.getMenuLabel("edit.addChannel"));
359                    m.add(mi);
360                    mi.addActionListener(new ActionListener() {
361                            public void
362                            actionPerformed(ActionEvent e) {
363                                    CC.getSamplerModel().addBackendChannel();
364                            }
365                    });
366                    
367                    m.addSeparator();
368                    
369                    mi = new JMenuItem(a4n.createMidiDevice);
370                    mi.setIcon(null);
371                    m.add(mi);
372                    
373                    mi = new JMenuItem(a4n.createAudioDevice);
374                    mi.setIcon(null);
375                    m.add(mi);
376                    
377                    m.addSeparator();
378                    
379                    mi = new JMenuItem(a4n.editPreferences);
380                    mi.setIcon(null);
381                    mi.setAccelerator(KeyStroke.getKeyStroke (
382                            KeyEvent.VK_P, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
383                    ));
384                    m.add(mi);
385                    
386                    // View
387                    m = new FantasiaMenu(i18n.getMenuLabel("view"));
388                    menuBar.add(m);
389                    
390                    m.add(cbmiToolBarVisible);
391                    
392                    cbmiToolBarVisible.addActionListener(new ActionListener() {
393                            public void
394                            actionPerformed(ActionEvent e) {
395                                    showToolBar(cbmiToolBarVisible.getState());
396                            }
397                    });
398                    
399                    boolean b = preferences().getBoolProperty("toolBar.visible");
400                    cbmiToolBarVisible.setSelected(b);
401                    showToolBar(b);
402                    
403                    cbmiLeftSidePaneVisible.setAccelerator(KeyStroke.getKeyStroke (
404                            KeyEvent.VK_L, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
405                    ));
406                    m.add(cbmiLeftSidePaneVisible);
407                    
408                    cbmiLeftSidePaneVisible.addActionListener(new ActionListener() {
409                            public void
410                            actionPerformed(ActionEvent e) {
411                                    showSidePane(cbmiLeftSidePaneVisible.getState());
412                            }
413                    });
414                    
415                    b = preferences().getBoolProperty("leftSidePane.visible");
416                    cbmiLeftSidePaneVisible.setSelected(b);
417                    showSidePane(b);
418                    
419                    cbmiRightSidePaneVisible.setAccelerator(KeyStroke.getKeyStroke (
420                            KeyEvent.VK_R, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
421                    ));
422                    m.add(cbmiRightSidePaneVisible);
423                    
424                    cbmiRightSidePaneVisible.addActionListener(new ActionListener() {
425                            public void
426                            actionPerformed(ActionEvent e) {
427                                    showDevicesPane(cbmiRightSidePaneVisible.getState());
428                            }
429                    });
430                    
431                    b = preferences().getBoolProperty("rightSidePane.visible");
432                    cbmiRightSidePaneVisible.setSelected(b);
433                    showDevicesPane(b);
434                    
435                    m.addSeparator();
436                    
437                    m.add(cbmiMidiKeyboardVisible);
438                    
439                    cbmiMidiKeyboardVisible.addActionListener(new ActionListener() {
440                            public void
441                            actionPerformed(ActionEvent e) {
442                                    showMidiKeyboard(cbmiMidiKeyboardVisible.getState());
443                            }
444                    });
445                    
446                    b = preferences().getBoolProperty("midiKeyboard.visible");
447                    cbmiMidiKeyboardVisible.setSelected(b);
448                    showMidiKeyboard(b);
449                    
450                    
451                    // Window
452                    m = new FantasiaMenu(i18n.getMenuLabel("window"));
453                    menuBar.add(m);
454                    
455                    mi = new JMenuItem(a4n.windowLSConsole);
456                    mi.setIcon(null);
457                    m.add(mi);
458                    
459                    mi = new JMenuItem(a4n.windowInstrumentsDb);
460                    mi.setIcon(null);
461                    m.add(mi);
462                    
463                    
464                    // Help
465                    m = new FantasiaMenu(i18n.getMenuLabel("help"));
466                    
467                    mi = new JMenuItem(a4n.browseOnlineTutorial);
468                    mi.setIcon(null);
469                    m.add(mi);
470                    
471                    m.addSeparator();
472                    
473                    mi = new JMenuItem(a4n.helpAbout);
474                    mi.setIcon(null);
475                    m.add(mi);
476                    
477                    menuBar.add(m);
478          }          }
479                    
480            public RightSidePane
481            getRightSidePane() { return rightSidePane; }
482            
483          /**          /**
484           * This method does nothing, because <b>Fantasia</b> has exactly           * This method does nothing, because <b>Fantasia</b> has exactly
485           * one pane containing sampler channels, which can not be changed.           * one pane containing sampler channels, which can not be changed.
486           */           */
487          public void          public void
488          insertChannelsPane(JSChannelsPane pane, int idx) {          insertChannelsPane(JSChannelsPane pane, int idx) {
489                  getChannelsPaneList().removeAllElements();                  
                 addChannelsPane(pane);  
490          }          }
491                    
492          /**          /**
# Line 212  public class MainFrame extends JSMainFra Line 504  public class MainFrame extends JSMainFra
504          public void          public void
505          setSelectedChannelsPane(JSChannelsPane pane) { }          setSelectedChannelsPane(JSChannelsPane pane) { }
506                    
507          public static void          public void
508          repack(JSMainFrame frame) {          installJSamplerHome() {
509                  int y = frame.getLocation().y;                  JSamplerHomeChooser chooser = new JSamplerHomeChooser(this);
510                  int height = frame.getSize().height;                  chooser.setVisible(true);
511                  y += (height - frame.getPreferredSize().height);                  if(chooser.isCancelled()) return;
512                                    
513                  if((height - frame.getPreferredSize().height) > 0) {                  CC.changeJSamplerHome(chooser.getJSamplerHome());
                         frame.pack();  
                         frame.setLocation(frame.getLocation().x, y);  
                 } else {  
                         frame.setLocation(frame.getLocation().x, y);  
                         frame.pack();  
                 }  
514          }          }
515                    
516          public void          public void
517          installJSamplerHome() { }          showDetailedErrorMessage(Frame owner, String err, String details) {
518  }                  JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
519                            owner, Res.iconWarning32, i18n.getError("error"), err, details
520  class FantasiaTitleBar extends TitleBar {                  );
521          FantasiaTitleBar() { this.addMouseListener(new ContextMenu()); }                  dlg.setVisible(true);
522            }
523            
524            public void
525            showDetailedErrorMessage(Dialog owner, String err, String details) {
526                    JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
527                            owner, Res.iconWarning32, i18n.getError("error"), err, details
528                    );
529                    dlg.setVisible(true);
530            }
531            
532            /**
533             * Gets the server address to which to connect. If the server should be
534             * manually selected, a dialog asking the user to choose a server is displayed.
535             */
536            public Server
537            getServer() {
538                    boolean b = preferences().getBoolProperty(MANUAL_SERVER_SELECT_ON_STARTUP);
539                    return getServer(b);
540            }
541                    
542          class ContextMenu extends MouseAdapter {          /**
543                  private final JPopupMenu cmenu = new JPopupMenu();           * Gets the server address to which to connect. If the server should be
544             * manually selected, a dialog asking the user to choose a server is displayed.
545             * @param manualSelect Determines whether the server should be manually selected.
546             */
547            public Server
548            getServer(boolean manualSelect) {
549                    if(manualSelect) {
550                            JSConnectDlg dlg = new JSConnectDlg();
551                            dlg.setVisible(true);
552                            return dlg.getSelectedServer();
553                    }
554                                    
555                  ContextMenu() {                  int i = preferences().getIntProperty(SERVER_INDEX);
556                          JMenuItem mi;                  int size = CC.getServerList().getServerCount();
557                                            if(size == 0) return null;
558                          final JCheckBoxMenuItem cmi = new JCheckBoxMenuItem (                  if(i >= size) return CC.getServerList().getServer(0);
559                                  i18n.getMenuLabel("FantasiaTitleBar.AlwaysOnTop")                  
560                          );                  return CC.getServerList().getServer(i);
561                          cmi.setIcon(null);          }
562                          cmi.setSelected(FantasiaPrefs.isAlwaysOnTop());          
563                                    public Timer
564                          cmenu.add(cmi);          getGuiTimer() { return guiTimer; }
565                                    
566                          cmi.addActionListener(new ActionListener() {          protected LSConsoleModel
567                                  public void          getLSConsoleModel() { return getLSConsolePane().getModel(); }
568                                  actionPerformed(ActionEvent e) {          
569                                          CC.getMainFrame().setAlwaysOnTop(cmi.isSelected());          protected LSConsolePane
570                                  }          getLSConsolePane() {
571                          });                  return getLSConsoleFrame().getLSConsolePane();
572            }
573            
574            protected LSConsoleFrame
575            getLSConsoleFrame() { return lsConsoleFrame; }
576            
577            protected boolean
578            runScript() {
579                    String s = preferences().getStringProperty("lastScriptLocation");
580                    JFileChooser fc = new JFileChooser(s);
581                    fc.setFileFilter(new LscpFileFilter());
582                    int result = fc.showOpenDialog(this);
583                    if(result != JFileChooser.APPROVE_OPTION) return false;
584                    
585                    String path = fc.getCurrentDirectory().getAbsolutePath();
586                    preferences().setStringProperty("lastScriptLocation", path);
587                                            
588                    runScript(fc.getSelectedFile());
589                    
590                    return true;
591            }
592            
593            private void
594            runScript(String script) { runScript(new File(script)); }
595            
596            private void
597            runScript(File script) {
598                    FileReader fr;
599                    try { fr = new FileReader(script); }
600                    catch(FileNotFoundException e) {
601                            HF.showErrorMessage(i18n.getMessage("FileNotFound!"));
602                            return;
603                    }
604                    
605                    BufferedReader br = new BufferedReader(fr);
606                    
607                    try {
608                            String s = br.readLine();
609                            while(s != null) {
610                                    getLSConsoleModel().setCommandLineText(s);
611                                    getLSConsoleModel().execCommand();
612                                    s = br.readLine();
613                            }
614                    } catch(Exception e) {
615                            HF.showErrorMessage(e);
616                            return;
617                    }
618                    
619                    String s = script.getAbsolutePath();
620                    recentScripts.remove(s);
621                    recentScripts.insertElementAt(s, 0);
622                    
623                    updateRecentScriptsMenu();
624            }
625            
626            protected void
627            clearRecentScripts() {
628                    recentScripts.removeAllElements();
629                    updateRecentScriptsMenu();
630            }
631            
632            protected void
633            updateRecentScriptsMenu() {
634                    int size = preferences().getIntProperty(RECENT_LSCP_SCRIPTS_SIZE);
635                    while(recentScripts.size() > size) {
636                            recentScripts.removeElementAt(recentScripts.size() - 1);
637                    }
638                    
639                    recentScriptsMenu.removeAll();
640                    
641                    for(String script : recentScripts) {
642                            JMenuItem mi = new JMenuItem(script);
643                            recentScriptsMenu.add(mi);
644                            mi.addActionListener(new RecentScriptHandler(script));
645                    }
646                    
647                    recentScriptsMenu.setEnabled(recentScripts.size() != 0);
648            }
649            
650            private void
651            showToolBar(boolean b) {
652                    preferences().setBoolProperty("toolBar.visible", b);
653                    standardBar.setVisible(b);
654            }
655            
656            private void
657            showSidePane(boolean b) {
658                    preferences().setBoolProperty("leftSidePane.visible", b);
659                    rootPane.remove(rightPane);
660                    rootPane.remove(hSplitPane);
661                    
662                    if(b) {
663                            hSplitPane.setRightComponent(rightPane);
664                            rootPane.add(hSplitPane);
665                            int i = preferences().getIntProperty("MainFrame.hSplitDividerLocation", 220);
666                                                    
667                          /*mi = new JMenuItem(A4n.moveChannelsUp);                          hSplitPane.setDividerLocation(i);
668                          mi.setIcon(null);                          hSplitPane.validate();
669                          cmenu.add(mi);                  } else {
670                            rootPane.add(rightPane);
671                                                    
672                          cmenu.addSeparator();                  }
673                    
674                    int w = getPreferredSize().width;
675                    int h = getSize().height;
676                    setSize(new Dimension(w, h));
677                    
678                    rootPane.revalidate();
679                    rootPane.validate();
680                    rootPane.repaint();
681                    
682                    SwingUtilities.invokeLater(new Runnable() {
683                            public void
684                            run() { sidePanesVisibilityChanged(); }
685                    });
686            }
687            
688            private void
689            showDevicesPane(boolean b) {
690                    preferences().setBoolProperty("rightSidePane.visible", b);
691                    
692                    int width = leftSidePane.getWidth();
693                    int height = leftSidePane.getPreferredSize().height;
694                    if(width != 0) leftSidePane.setPreferredSize(new Dimension(width, height));
695                    
696                    if(b) {
697                            int w = preferences().getIntProperty("devicesPane.width", 200);
698                                                    
699                          mi = new JMenuItem(A4n.removeChannels);                          int h = rightSidePane.getPreferredSize().height;
700                          mi.setIcon(null);                          rightSidePane.setPreferredSize(new Dimension(w, h));
701                          cmenu.add(mi);*/                  } else {
702                            int w = rightSidePane.getWidth();
703                            if(w > 0 && w < 200) w = 200;
704                            if(w != 0) preferences().setIntProperty("devicesPane.width", w);
705                  }                  }
706                                    
707                  public void                  hSplitPane.setResizeWeight(0.0);
708                  mousePressed(MouseEvent e) {                  rightSidePane.setVisible(b);
709                          if(e.isPopupTrigger()) show(e);                  hSplitPane.resetToPreferredSizes();
710                    
711                    int w = getPreferredSize().width;
712                    int h = getSize().height;
713                    setSize(new Dimension(w, h));
714                    
715                    rootPane.validate();
716                    rootPane.repaint();
717                    //hSplitPane.validate();
718                    
719                    SwingUtilities.invokeLater(new Runnable() {
720                            public void
721                            run() { sidePanesVisibilityChanged(); }
722                    });
723            }
724            
725            private void
726            showMidiKeyboard(boolean b) {
727                    preferences().setBoolProperty("midiKeyboard.visible", b);
728                    if(b) {
729                            getContentPane().remove(rootPane);
730                            pianoRollSplitPane.setTopComponent(rootPane);
731                            getContentPane().add(pianoRollSplitPane);
732                    } else {
733                            getContentPane().remove(pianoRollSplitPane);
734                            pianoRollSplitPane.remove(rootPane);
735                            getContentPane().add(rootPane);
736                  }                  }
737                    
738                    getContentPane().validate();
739                    getContentPane().repaint();
740            }
741                    
742            private void
743            sidePanesVisibilityChanged() {
744                    boolean leftSidePaneVisible = cbmiLeftSidePaneVisible.isSelected();
745                    boolean rightSidePaneVisible = cbmiRightSidePaneVisible.isSelected();
746                    
747                    if(leftSidePaneVisible && rightSidePaneVisible) {
748                            hSplitPane.setResizeWeight(0.5);
749                    } else if(leftSidePaneVisible && !rightSidePaneVisible) {
750                            hSplitPane.setResizeWeight(1.0);
751                    }
752                    
753                    if(!leftSidePaneVisible && !rightSidePaneVisible) {
754                            standardBar.showFantasiaLogo(false);
755                            if(isResizable()) setResizable(false);
756                    } else {
757                            standardBar.showFantasiaLogo(true);
758                            if(!isResizable()) setResizable(true);
759                    }
760            }
761            
762            private class RecentScriptHandler implements ActionListener {
763                    private String script;
764                    
765                    RecentScriptHandler(String script) { this.script = script; }
766                    
767                  public void                  public void
768                  mouseReleased(MouseEvent e) {                  actionPerformed(ActionEvent e) {
769                          if(e.isPopupTrigger()) show(e);                          runScript(script);
770                            if(preferences().getBoolProperty(SHOW_LS_CONSOLE_WHEN_RUN_SCRIPT)) {
771                                    a4n.windowLSConsole.actionPerformed(null);
772                            }
773                  }                  }
774            }
775                    
776                  void          private static class FantasiaMenu extends JMenu {
777                  show(MouseEvent e) {                  FantasiaMenu(String s) {
778                          cmenu.show(e.getComponent(), e.getX(), e.getY());                          super(s);
779                            setFont(getFont().deriveFont(java.awt.Font.BOLD));
780                            setOpaque(false);
781                            setContentAreaFilled(false);
782                    }
783            }
784    
785            private class FantasiaMenuBar extends JMenuBar {
786                    private Insets pixmapInsets = new Insets(6, 6, 0, 6);
787                    private Insets pixmapInsets2 = new Insets(6, 6, 6, 6);
788                    
789                    FantasiaMenuBar() {
790                            setOpaque(false);
791                    }
792                    
793                    protected void
794                    paintComponent(Graphics g) {
795                            super.paintComponent(g);
796                            if(standardBar.isVisible()) {
797                                    PixmapPane.paintComponent(this, g, Res.gfxMenuBarBg, pixmapInsets);
798                            } else {
799                                    PixmapPane.paintComponent(this, g, Res.gfxRoundBg14, pixmapInsets2);
800                            }
801                  }                  }
802          }          }
803  }  }

Legend:
Removed from v.1143  
changed lines
  Added in v.1776

  ViewVC Help
Powered by ViewVC