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

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

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

revision 842 by iliev, Thu Mar 16 18:08:34 2006 UTC revision 1864 by iliev, Sat Mar 14 20:44:58 2009 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 Grigor Kirilov Iliev   *   Copyright (C) 2005-2009 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.classic;  package org.jsampler.view.classic;
24    
25  import java.awt.BorderLayout;  import java.awt.BorderLayout;
26    import java.awt.Color;
27    import java.awt.Dialog;
28  import java.awt.Dimension;  import java.awt.Dimension;
29    import java.awt.Frame;
30    import java.awt.Rectangle;
31    
32  import java.awt.event.ActionEvent;  import java.awt.event.ActionEvent;
33  import java.awt.event.ActionListener;  import java.awt.event.ActionListener;
34  import java.awt.event.KeyEvent;  import java.awt.event.KeyEvent;
35    
36  import java.util.logging.Level;  import java.io.BufferedReader;
37    import java.io.File;
38    import java.io.FileNotFoundException;
39    import java.io.FileReader;
40    
41  import java.util.Vector;  import java.util.Vector;
42    
43  import javax.swing.Action;  import javax.swing.Action;
44  import javax.swing.ImageIcon;  import javax.swing.ImageIcon;
45  import javax.swing.JCheckBoxMenuItem;  import javax.swing.JCheckBoxMenuItem;
46    import javax.swing.JFileChooser;
47  import javax.swing.JMenu;  import javax.swing.JMenu;
48  import javax.swing.JMenuBar;  import javax.swing.JMenuBar;
49  import javax.swing.JMenuItem;  import javax.swing.JMenuItem;
# Line 49  import javax.swing.event.ListSelectionEv Line 58  import javax.swing.event.ListSelectionEv
58  import javax.swing.event.ListSelectionListener;  import javax.swing.event.ListSelectionListener;
59    
60  import net.sf.juife.NavigationPage;  import net.sf.juife.NavigationPage;
 import net.sf.juife.NavigationPane;  
61    
62  import org.jsampler.CC;  import org.jsampler.CC;
63  import org.jsampler.Prefs;  import org.jsampler.HF;
64    import org.jsampler.LSConsoleModel;
65    import org.jsampler.OrchestraModel;
66    import org.jsampler.Server;
67    
68  import org.jsampler.view.JSChannel;  import org.jsampler.view.JSChannel;
69  import org.jsampler.view.JSChannelsPane;  import org.jsampler.view.JSChannelsPane;
70    import org.jsampler.view.LscpFileFilter;
71    
72    import org.jsampler.view.std.JSBackendLogFrame;
73    import org.jsampler.view.std.JSConnectDlg;
74    import org.jsampler.view.std.JSDetailedErrorDlg;
75    import org.jsampler.view.std.JSQuitDlg;
76    import org.jsampler.view.std.JSamplerHomeChooser;
77    import org.jsampler.view.std.StdUtils;
78    
79    import static org.jsampler.view.classic.A4n.a4n;
80  import static org.jsampler.view.classic.ClassicI18n.i18n;  import static org.jsampler.view.classic.ClassicI18n.i18n;
81    import static org.jsampler.view.classic.ClassicPrefs.preferences;
82  import static org.jsampler.view.classic.LeftPane.getLeftPane;  import static org.jsampler.view.classic.LeftPane.getLeftPane;
83    import static org.jsampler.view.std.StdPrefs.*;
84    
85  /**  /**
86   *   *
# Line 67  import static org.jsampler.view.classic. Line 88  import static org.jsampler.view.classic.
88   */   */
89  public class  public class
90  MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {  MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {
91          public static ImageIcon applicationIcon = null;          public static ImageIcon applicationIcon = Res.appIcon;
           
         static {  
                 String s = "org/jsampler/view/classic/res/icons/app-icon.png";  
                 java.net.URL url = ClassLoader.getSystemClassLoader().getResource(s);  
                 if(url != null) applicationIcon = new ImageIcon(url);  
         }  
92                    
93          private final Toolbar toolbar = new Toolbar();          private final ChannelsBar channelsBar = new ChannelsBar();
94          private final Statusbar statusbar = new Statusbar();          private final Statusbar statusbar = new Statusbar();
95          private final JMenuBar menuBar = new JMenuBar();          private final JMenuBar menuBar = new JMenuBar();
96            private final JMenu recentScriptsMenu =
97                    new JMenu(i18n.getMenuLabel("actions.recentScripts"));
98            private final JMenu tabsMenu = new JMenu(i18n.getMenuLabel("channels.MoveToTab"));
99                    
100          private final JSplitPane splitPane;          private final JSplitPane vSplitPane;
101            private final JSplitPane hSplitPane;
102                    
103          private final JPanel mainPane = new JPanel();          private final JPanel mainPane = new JPanel();
104            private final StandardBar standardBar = new StandardBar();
105          private final JPanel channelsPane = new JPanel(new BorderLayout());          private final JPanel channelsPane = new JPanel(new BorderLayout());
106            private final JPanel rightPane = new JPanel();
107            private final JPanel bottomPane = new JPanel();
108            private final LSConsolePane lsConsolePane = new LSConsolePane(this);
109            private LSConsoleDlg lsConsoleDlg = null;
110            private final JSBackendLogFrame backendLogFrame = new JSBackendLogFrame();
111                    
112          private final JTabbedPane tabbedPane =          private final JTabbedPane tabbedPane =
113                  new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);                  new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
         private final JMenu tabsMenu = new JMenu(i18n.getMenuLabel("channels.MoveToTab"));  
114          private final Vector<JMenuItem> miList = new Vector<JMenuItem>();          private final Vector<JMenuItem> miList = new Vector<JMenuItem>();
115                    
116          /** Creates a new instance of JSMainFrame */          private final JCheckBoxMenuItem cbmiLeftPaneVisible =
117                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));
118            
119            private final JCheckBoxMenuItem cbmiStandardBarVisible =
120                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.standard"));
121            
122            private final JCheckBoxMenuItem cbmiLSConsoleShown =
123                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.lsconsole"));
124            
125            private boolean lsConsolePopOut;
126            
127            private final Vector<String> recentScripts = new Vector<String>();
128                    
129            
130            /** Creates a new instance of <code>MainFrame</code>. */
131          public          public
132          MainFrame() {          MainFrame() {
133                  setTitle(i18n.getLabel("MainFrame.title"));                  setTitle(i18n.getLabel("MainFrame.title"));
134                                    
135                  getContentPane().add(toolbar, BorderLayout.NORTH);                  CC.setMainFrame(this); // TODO:
136                    
137                    getContentPane().add(standardBar, BorderLayout.NORTH);
138                  getContentPane().add(mainPane);                  getContentPane().add(mainPane);
139                                    
140                  mainPane.setLayout(new BorderLayout());                  mainPane.setLayout(new BorderLayout());
# Line 107  MainFrame extends org.jsampler.view.JSMa Line 147  MainFrame extends org.jsampler.view.JSMa
147                                    
148                  channelsPane.add(getChannelsPane(0));                  channelsPane.add(getChannelsPane(0));
149                                    
150                  splitPane = new JSplitPane (                  bottomPane.setLayout(new BorderLayout());
151                    
152                    rightPane.setLayout(new BorderLayout());
153                    
154                    rightPane.add(channelsBar, BorderLayout.NORTH);
155                    rightPane.add(channelsPane);
156                    
157                    hSplitPane = new JSplitPane (
158                          JSplitPane.HORIZONTAL_SPLIT,                          JSplitPane.HORIZONTAL_SPLIT,
159                          true,   // continuousLayout                          true,   // continuousLayout
160                          getLeftPane(),                          getLeftPane(),
161                          channelsPane                          rightPane
162                  );                  );
163                                    
164                  splitPane.setOneTouchExpandable(true);                  hSplitPane.setOneTouchExpandable(true);
165                    if(ClassicPrefs.getSaveWindowProperties()) {
166                            hSplitPane.setDividerLocation(ClassicPrefs.getHSplitDividerLocation());
167                    }
168                    
169                    mainPane.add(hSplitPane);
170                    
171                    
172                    vSplitPane = new JSplitPane (
173                            JSplitPane.VERTICAL_SPLIT,
174                            true,   // continuousLayout
175                            channelsPane,
176                            bottomPane
177                    );
178                                    
179                  mainPane.add(splitPane);                  vSplitPane.setDividerSize(3);
180                    vSplitPane.setDividerLocation(ClassicPrefs.getVSplitDividerLocation());
181                    
182                    rightPane.add(vSplitPane);
183                                    
184                  if(applicationIcon != null) setIconImage(applicationIcon.getImage());                  if(applicationIcon != null) setIconImage(applicationIcon.getImage());
185                                    
186                  initMainFrame();                  initMainFrame();
187                    
188                  pack();                  pack();
189                                    
190                  if(Prefs.getSaveWindowProperties()) setSavedSize();                  if(ClassicPrefs.getSaveWindowProperties()) setSavedSize();
191                  else setDefaultSize();                  else setDefaultSize();
192                    
193                    if(ClassicPrefs.getSaveLeftPaneState()) {
194                            NavigationPage page =
195                                    getLeftPane().getPages()[ClassicPrefs.getLeftPanePageIndex()];
196                            
197                            getLeftPane().getModel().addPage(page);
198                            getLeftPane().getModel().clearHistory();
199                            
200                            int idx = ClassicPrefs.getCurrentOrchestraIndex();
201                            if(idx >= 0 && idx < CC.getOrchestras().getOrchestraCount()) {
202                                    OrchestraModel om = CC.getOrchestras().getOrchestra(idx);
203                                    getLeftPane().getOrchestrasPage().setSelectedOrchestra(om);
204                            }
205                    }
206                    
207                    //CC.getInstrumentsDbTreeModel(); // used to initialize the db tree model
208            }
209            
210            /** Invoked when this window is about to close. */
211            @Override
212            public void
213            onWindowClose() {
214                    boolean b = preferences().getBoolProperty(CONFIRM_APP_QUIT);
215                    if(b && CC.getSamplerModel().isModified()) {
216                            JSQuitDlg dlg = new JSQuitDlg(Res.iconQuestion32);
217                            dlg.setVisible(true);
218                            if(dlg.isCancelled()) return;
219                    }
220                    
221                    if(ClassicPrefs.getSaveWindowProperties()) {
222                            ClassicPrefs.setWindowMaximized (
223                                    "Mainframe", (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH
224                            );
225                            
226                            setVisible(false);
227                            if(ClassicPrefs.getWindowMaximized("MainFrame")) {
228                                    //setExtendedState(getExtendedState() & ~MAXIMIZED_BOTH);
229                                    CC.cleanExit();
230                                    return;
231                            }
232                            
233                            StdUtils.saveWindowBounds("MainFrame", getBounds());
234                            
235                            ClassicPrefs.setHSplitDividerLocation(hSplitPane.getDividerLocation());
236                    }
237                    
238                    if(ClassicPrefs.getSaveLeftPaneState()) {
239                            int idx = 0;
240                            for(int i = 0; i < getLeftPane().getPages().length; i++) {
241                                    if(getLeftPane().getPages()[i] == getLeftPane().getCurrentPage()) {
242                                            idx = i;
243                                            break;
244                                    }
245                            }
246                            
247                            ClassicPrefs.setLeftPanePageIndex(idx);
248                            
249                            idx = getLeftPane().getOrchestrasPage().getCurrentOrchestraIndex();
250                            
251                            if(idx >= 0 && idx < CC.getOrchestras().getOrchestraCount())
252                                    ClassicPrefs.setCurrentOrchestraIndex(idx);
253                    }
254                    
255                    String[] list = recentScripts.toArray(new String[recentScripts.size()]);
256                    preferences().setStringListProperty(RECENT_LSCP_SCRIPTS, list);
257                    
258                    if(preferences().getBoolProperty(SAVE_LS_CONSOLE_HISTORY)) {
259                            lsConsolePane.saveConsoleHistory();
260                    }
261                    
262                    ClassicPrefs.setShowLSConsole(isLSConsoleShown());
263                    ClassicPrefs.setLSConsolePopOut(isLSConsolePopOut());
264                    
265                    ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
266                    
267                    if(getBackendLogFrame() != null) getBackendLogFrame().stopTimer();
268                    if(lsConsolePane != null) lsConsolePane.disconnect();
269                    super.onWindowClose();
270            }
271            
272            @Override
273            public void
274            setVisible(boolean b) {
275                    if(b == isVisible()) return;
276                    
277                    super.setVisible(b);
278                    
279                    if(ClassicPrefs.getWindowMaximized("MainFrame")) {
280                            setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
281                    }
282          }          }
283                    
284          private void          private void
# Line 143  MainFrame extends org.jsampler.view.JSMa Line 297  MainFrame extends org.jsampler.view.JSMa
297                    
298          private void          private void
299          setSavedSize() {          setSavedSize() {
300                  String s = Prefs.getWindowSizeAndLocation();                  Rectangle r = StdUtils.getWindowBounds("MainFrame");
301                  if(s == null) {                  if(r == null) {
302                          setDefaultSize();                          setDefaultSize();
303                          return;                          return;
304                  }                  }
305                                    
306                  try {                  setBounds(r);
                         int i = s.indexOf(',');  
                         int x = Integer.parseInt(s.substring(0, i));  
                           
                         s = s.substring(i + 1);  
                         i = s.indexOf(',');  
                         int y = Integer.parseInt(s.substring(0, i));  
                           
                         s = s.substring(i + 1);  
                         i = s.indexOf(',');  
                         int width = Integer.parseInt(s.substring(0, i));  
                           
                         s = s.substring(i + 1);  
                         int height = Integer.parseInt(s);  
                           
                         setBounds(x, y, width, height);  
                 } catch(Exception x) {  
                         String msg = "Parsing of window size and location string failed";  
                         CC.getLogger().log(Level.INFO, msg, x);  
                         setDefaultSize();  
                 }  
                   
                 if(Prefs.getWindowMaximized())  
                         setExtendedState(getExtendedState() | MAXIMIZED_BOTH);  
307          }          }
308                    
309          private void          private void
310          addMenu() {          addMenu() {
311                  JMenu m;                  JMenu m;
                 JMenu submenu;  
312                  JMenuItem mi;                  JMenuItem mi;
313                                    
314                  setJMenuBar(menuBar);                  setJMenuBar(menuBar);
# Line 187  MainFrame extends org.jsampler.view.JSMa Line 317  MainFrame extends org.jsampler.view.JSMa
317                  m = new JMenu(i18n.getMenuLabel("actions"));                  m = new JMenu(i18n.getMenuLabel("actions"));
318                  menuBar.add(m);                  menuBar.add(m);
319                                    
320                  mi = new JMenuItem(A4n.connect);                  mi = new JMenuItem(a4n.refresh);
321                  mi.setIcon(null);                  mi.setIcon(null);
322                  //mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
323                  m.add(mi);                  m.add(mi);
324                                    
325                  mi = new JMenuItem(A4n.refresh);                  mi = new JMenuItem(A4n.samplerInfo);
326                  mi.setIcon(null);                  mi.setIcon(null);
                 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));  
327                  m.add(mi);                  m.add(mi);
328                                    
329                  mi = new JMenuItem(A4n.resetSampler);                  mi = new JMenuItem(a4n.resetSampler);
330                  mi.setIcon(null);                  mi.setIcon(null);
331                  m.add(mi);                  m.add(mi);
332                                    
333                  mi = new JMenuItem(A4n.samplerInfo);                  JMenu midiInstrMenu = new JMenu(i18n.getMenuLabel("actions.midiInstruments"));
334                    m.add(midiInstrMenu);
335                    
336                    mi = new JMenuItem(A4n.addMidiInstrumentMap);
337                    mi.setIcon(null);
338                    midiInstrMenu.add(mi);
339                    
340                    mi = new JMenuItem(A4n.removeMidiInstrumentMap);
341                    mi.setIcon(null);
342                    midiInstrMenu.add(mi);
343                    
344                    mi = new JMenuItem(A4n.addMidiInstrumentWizard);
345                    mi.setIcon(null);
346                    midiInstrMenu.add(mi);
347                    
348                    m.addSeparator();
349                    
350                    JMenu exportMenu = new JMenu(i18n.getMenuLabel("actions.export"));
351                    m.add(exportMenu);
352                    
353                    int modKey = CC.getViewConfig().getDefaultModKey();
354                    mi = new JMenuItem(a4n.exportSamplerConfig);
355                    mi.setIcon(null);
356                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, modKey));
357                    exportMenu.add(mi);
358                    
359                    mi = new JMenuItem(a4n.exportMidiInstrumentMaps);
360                    mi.setIcon(null);
361                    exportMenu.add(mi);
362                    
363                    m.addSeparator();
364                    
365                    mi = new JMenuItem(A4n.loadScript);
366                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, modKey));
367                    mi.setIcon(null);
368                    m.add(mi);
369                    
370                    String[] list = preferences().getStringListProperty(RECENT_LSCP_SCRIPTS);
371                    for(String s : list) recentScripts.add(s);
372                    
373                    updateRecentScriptsMenu();
374                    
375                    m.add(recentScriptsMenu);
376                    
377                    m.addSeparator();
378                    
379                    mi = new JMenuItem(a4n.changeBackend);
380                  mi.setIcon(null);                  mi.setIcon(null);
381                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, modKey));
382                  m.add(mi);                  m.add(mi);
383                                    
384                  m.addSeparator();                  m.addSeparator();
# Line 211  MainFrame extends org.jsampler.view.JSMa Line 387  MainFrame extends org.jsampler.view.JSMa
387                  m.add(mi);                  m.add(mi);
388                  mi.addActionListener(new ActionListener() {                  mi.addActionListener(new ActionListener() {
389                          public void                          public void
390                          actionPerformed(ActionEvent e) { CC.cleanExit(); }                          actionPerformed(ActionEvent e) { onWindowClose(); }
391                  });                  });
392                                    
393                  // Edit                  // Edit
394                  m = new JMenu(i18n.getMenuLabel("edit"));                  m = new JMenu(i18n.getMenuLabel("edit"));
395                  menuBar.add(m);                  menuBar.add(m);
396                                    
397                    mi = new JMenuItem(i18n.getMenuLabel("edit.audioDevices"));
398                    m.add(mi);
399                    mi.addActionListener(new ActionListener() {
400                            public void
401                            actionPerformed(ActionEvent e) {
402                                    if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
403                                    LeftPane.getLeftPane().showAudioDevicesPage();
404                            }
405                    });
406                    
407                    mi = new JMenuItem(i18n.getMenuLabel("edit.midiDevices"));
408                    m.add(mi);
409                    mi.addActionListener(new ActionListener() {
410                            public void
411                            actionPerformed(ActionEvent e) {
412                                    if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
413                                    LeftPane.getLeftPane().showMidiDevicesPage();
414                            }
415                    });
416                    
417                    mi = new JMenuItem(i18n.getMenuLabel("edit.orchestras"));
418                    m.add(mi);
419                    mi.addActionListener(new ActionListener() {
420                            public void
421                            actionPerformed(ActionEvent e) {
422                                    if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
423                                    LeftPane.getLeftPane().showManageOrchestrasPage();
424                            }
425                    });
426                    
427                  m.addSeparator();                  m.addSeparator();
428                                    
429                  mi = new JMenuItem(A4n.preferences);                  mi = new JMenuItem(A4n.preferences);
430                  mi.setIcon(null);                  mi.setIcon(null);
431                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
432                          KeyEvent.VK_P, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_P, modKey | KeyEvent.SHIFT_MASK
433                  ));                  ));
434                  m.add(mi);                  m.add(mi);
435                                    
# Line 231  MainFrame extends org.jsampler.view.JSMa Line 437  MainFrame extends org.jsampler.view.JSMa
437                  m = new JMenu(i18n.getMenuLabel("view"));                  m = new JMenu(i18n.getMenuLabel("view"));
438                  menuBar.add(m);                  menuBar.add(m);
439                                    
440                    JMenu toolbarsMenu = new JMenu(i18n.getMenuLabel("view.toolbars"));
441                    m.add(toolbarsMenu);
442                    
443                    toolbarsMenu.add(cbmiStandardBarVisible);
444                    cbmiStandardBarVisible.addActionListener(new ActionListener() {
445                            public void
446                            actionPerformed(ActionEvent e) {
447                                    showStandardBar(cbmiStandardBarVisible.getState());
448                            }
449                    });
450                    
451                    boolean b = ClassicPrefs.shouldShowStandardBar();
452                    cbmiStandardBarVisible.setSelected(b);
453                    showStandardBar(b);
454                    
455                  final JCheckBoxMenuItem cbmi =                  final JCheckBoxMenuItem cbmi =
456                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbar"));                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.channels"));
457                                    
458                  m.add(cbmi);                  toolbarsMenu.add(cbmi);
459                  cbmi.addActionListener(new ActionListener() {                  cbmi.addActionListener(new ActionListener() {
460                          public void                          public void
461                          actionPerformed(ActionEvent e) { showToolbar(cbmi.getState()); }                          actionPerformed(ActionEvent e) { showChannelsBar(cbmi.getState()); }
462                  });                  });
463                                    
464                  boolean b = ClassicPrefs.shouldShowToolbar();                  b = ClassicPrefs.shouldShowChannelsBar();
465                  cbmi.setSelected(b);                  cbmi.setSelected(b);
466                  showToolbar(b);                  showChannelsBar(b);
467                                    
468                  final JCheckBoxMenuItem cbmi1 =                  m.add(cbmiLeftPaneVisible);
469                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));                  cbmiLeftPaneVisible.addActionListener(new ActionListener() {
                   
                 m.add(cbmi1);  
                 cbmi1.addActionListener(new ActionListener() {  
470                          public void                          public void
471                          actionPerformed(ActionEvent e) { showLeftPane(cbmi1.getState()); }                          actionPerformed(ActionEvent e) {
472                                    showLeftPane(cbmiLeftPaneVisible.getState());
473                            }
474                  });                  });
475                                    
476                  b = ClassicPrefs.shouldShowLeftPane();                  b = ClassicPrefs.shouldShowLeftPane();
477                  cbmi1.setSelected(b);                  cbmiLeftPaneVisible.setSelected(b);
478                  showLeftPane(b);                  showLeftPane(b);
479                                    
480                  final JCheckBoxMenuItem cbmi2 =                  final JCheckBoxMenuItem cbmi2 =
# Line 269  MainFrame extends org.jsampler.view.JSMa Line 489  MainFrame extends org.jsampler.view.JSMa
489                  cbmi2.setSelected(b);                  cbmi2.setSelected(b);
490                  showStatusbar(b);                  showStatusbar(b);
491                                    
492                    m.addSeparator();
493                    
494                    setLSConsolePopOut(ClassicPrefs.isLSConsolePopOut());
495                    cbmiLSConsoleShown.setSelected(ClassicPrefs.shouldShowLSConsole());
496                    showLSConsole(ClassicPrefs.shouldShowLSConsole());
497                    
498                    cbmiLSConsoleShown.addActionListener(new ActionListener() {
499                            public void
500                            actionPerformed(ActionEvent e) {
501                                    showLSConsole(cbmiLSConsoleShown.isSelected());
502                            }
503                    });
504                    m.add(cbmiLSConsoleShown);
505                    
506                    lsConsolePane.updateLSConsoleViewMode();
507                    
508                  // Channels                  // Channels
509                  m = new JMenu(i18n.getMenuLabel("channels"));                  m = new JMenu(i18n.getMenuLabel("channels"));
510                  menuBar.add(m);                  menuBar.add(m);
511                                    
512                  mi = new JMenuItem(A4n.newChannel);                  mi = new JMenuItem(A4n.newChannel);
513                  mi.setIcon(null);                  mi.setIcon(null);
514                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, modKey));
515                  m.add(mi);                  m.add(mi);
516                                    
517                  mi = new JMenuItem(A4n.newChannelWizard);                  mi = new JMenuItem(A4n.newChannelWizard);
518                  mi.setIcon(null);                  mi.setIcon(null);
519                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
520                          KeyEvent.VK_N, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)                          KeyEvent.VK_N, modKey | KeyEvent.SHIFT_MASK)
521                  );                  );
522                  m.add(mi);                  m.add(mi);
523                                    
524                  mi = new JMenuItem(A4n.duplicateChannels);                  mi = new JMenuItem(a4n.duplicateChannels);
525                  mi.setIcon(null);                  mi.setIcon(null);
526                  m.add(mi);                  m.add(mi);
527                                    
528                  m.addSeparator();                  m.addSeparator();
529                                    
530                  mi = new JMenuItem(A4n.moveChannelsOnTop);                  mi = new JMenuItem(a4n.moveChannelsOnTop);
531                  mi.setIcon(null);                  mi.setIcon(null);
532                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
533                          KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
534                  ));                  ));
535                  m.add(mi);                  m.add(mi);
536                                    
537                  mi = new JMenuItem(A4n.moveChannelsUp);                  mi = new JMenuItem(a4n.moveChannelsUp);
538                  mi.setIcon(null);                  mi.setIcon(null);
539                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));
540                  m.add(mi);                  m.add(mi);
541                                    
542                  mi = new JMenuItem(A4n.moveChannelsDown);                  mi = new JMenuItem(a4n.moveChannelsDown);
543                  mi.setIcon(null);                  mi.setIcon(null);
544                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));
545                  m.add(mi);                  m.add(mi);
546                                    
547                  mi = new JMenuItem(A4n.moveChannelsAtBottom);                  mi = new JMenuItem(a4n.moveChannelsAtBottom);
548                  mi.setIcon(null);                  mi.setIcon(null);
549                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
550                          KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
# Line 320  MainFrame extends org.jsampler.view.JSMa Line 556  MainFrame extends org.jsampler.view.JSMa
556                                    
557                  m.addSeparator();                  m.addSeparator();
558                                    
559                  mi = new JMenuItem(A4n.selectAllChannels);                  mi = new JMenuItem(a4n.selectAllChannels);
560                  mi.setIcon(null);                  mi.setIcon(null);
561                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, modKey));
562                  m.add(mi);                  m.add(mi);
563                                    
564                  mi = new JMenuItem(A4n.deselectChannels);                  mi = new JMenuItem(a4n.deselectChannels);
565                  mi.setIcon(null);                  mi.setIcon(null);
566                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
567                          KeyEvent.VK_A, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_A, KeyEvent.SHIFT_MASK | modKey
568                  ));                  ));
569                  m.add(mi);                  m.add(mi);
570                                    
571                  m.addSeparator();                  m.addSeparator();
572                                    
573                  mi = new JMenuItem(A4n.removeChannels);                  mi = new JMenuItem(a4n.removeChannels);
574                  mi.setIcon(null);                  mi.setIcon(null);
575                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));
576                  m.add(mi);                  m.add(mi);
# Line 346  MainFrame extends org.jsampler.view.JSMa Line 582  MainFrame extends org.jsampler.view.JSMa
582                                    
583                  mi = new JMenuItem(A4n.newChannelsTab);                  mi = new JMenuItem(A4n.newChannelsTab);
584                  mi.setIcon(null);                  mi.setIcon(null);
585                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, modKey));
586                  m.add(mi);                  m.add(mi);
587                                    
588                  mi = new JMenuItem(A4n.editTabTitle);                  mi = new JMenuItem(A4n.editTabTitle);
# Line 384  MainFrame extends org.jsampler.view.JSMa Line 620  MainFrame extends org.jsampler.view.JSMa
620                                    
621                  mi = new JMenuItem(A4n.closeChannelsTab);                  mi = new JMenuItem(A4n.closeChannelsTab);
622                  mi.setIcon(null);                  mi.setIcon(null);
623                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, modKey));
624                  m.add(mi);                  m.add(mi);
625                                    
626                                    
627                    // Window
628                    m = new JMenu(i18n.getMenuLabel("window"));
629                    menuBar.add(m);
630                    
631                    mi = new JMenuItem(A4n.windowInstrumentsDb);
632                    mi.setIcon(null);
633                    m.add(mi);
634                    
635                    final JMenuItem mi2 = new JMenuItem(i18n.getMenuLabel("window.backendLog"));
636                    m.add(mi2);
637                    mi2.addActionListener(new ActionListener() {
638                            public void
639                            actionPerformed(ActionEvent e) {
640                                    if(getBackendLogFrame().isVisible()) {
641                                            getBackendLogFrame().setVisible(false);
642                                    }
643                                    
644                                    getBackendLogFrame().setVisible(true);
645                            }
646                    });
647                    
648                    mi2.setEnabled(CC.getBackendProcess() != null);
649                    
650                    CC.addBackendProcessListener(new ActionListener() {
651                            public void
652                            actionPerformed(ActionEvent e) {
653                                    mi2.setEnabled(CC.getBackendProcess() != null);
654                            }
655                    });
656                    
657                    
658                  // Help                  // Help
659                  m = new JMenu(i18n.getMenuLabel("help"));                  m = new JMenu(i18n.getMenuLabel("help"));
                 menuBar.add(m);  
660                                    
661                  mi = new JMenuItem(A4n.helpAbout);                  mi = new JMenuItem(A4n.helpAbout);
662                  mi.setIcon(null);                  mi.setIcon(null);
663                  m.add(mi);                  m.add(mi);
664                    
665                    m.addSeparator();
666                    
667                    mi = new JMenuItem(a4n.browseOnlineTutorial);
668                    mi.setIcon(null);
669                    m.add(mi);
670                    
671                    menuBar.add(m);
672            }
673            
674            private class RecentScriptHandler implements ActionListener {
675                    private String script;
676                    
677                    RecentScriptHandler(String script) { this.script = script; }
678                    
679                    @Override
680                    public void
681                    actionPerformed(ActionEvent e) {  runScript(script); }
682          }          }
683                    
684          private void          private void
# Line 403  MainFrame extends org.jsampler.view.JSMa Line 687  MainFrame extends org.jsampler.view.JSMa
687          }          }
688                    
689          private void          private void
690          showToolbar(boolean b) {          showChannelsBar(boolean b) {
691                  if(b) getContentPane().add(toolbar, BorderLayout.NORTH);                  channelsBar.setVisible(b);
692                  else getContentPane().remove(toolbar);                  ClassicPrefs.setShowChannelsBar(b);
                   
                 ClassicPrefs.setShowToolbar(b);  
693                                    
694                  validate();                  validate();
695                  repaint();                  repaint();
# Line 419  MainFrame extends org.jsampler.view.JSMa Line 701  MainFrame extends org.jsampler.view.JSMa
701                  statusbar.setVisible(b);                  statusbar.setVisible(b);
702          }          }
703                    
704            protected boolean
705            isLeftPaneVisible() { return cbmiLeftPaneVisible.isSelected(); }
706            
707            protected void
708            setLeftPaneVisible(boolean b) {
709                    if(b != cbmiLeftPaneVisible.isSelected()) cbmiLeftPaneVisible.doClick(0);
710            }
711            
712            protected boolean
713            isLSConsoleVisible() { return cbmiLSConsoleShown.isSelected(); }
714            
715            protected void
716            setLSConsoleVisible(boolean b) {
717                    if(b != cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);
718            }
719            
720          private void          private void
721          showLeftPane(boolean b) {          showLeftPane(boolean b) {
722                  ClassicPrefs.setShowLeftPane(b);                  ClassicPrefs.setShowLeftPane(b);
723                                    
724                  mainPane.remove(splitPane);                  mainPane.remove(hSplitPane);
725                  mainPane.remove(channelsPane);                  mainPane.remove(rightPane);
726                                    
727                  if(b) {                  if(b) {
728                          splitPane.setRightComponent(channelsPane);                          hSplitPane.setRightComponent(rightPane);
729                          mainPane.add(splitPane);                          mainPane.add(hSplitPane);
730                            if(ClassicPrefs.getSaveWindowProperties()) {
731                                    int i = ClassicPrefs.getHSplitDividerLocation();
732                                    hSplitPane.setDividerLocation(i);
733                            }
734                  } else {                  } else {
735                          mainPane.add(channelsPane);                          mainPane.add(rightPane);
736                  }                  }
737                                    
738                  validate();                  validate();
739                  repaint();                  repaint();
740          }          }
741                    
742            private void
743            showStandardBar(boolean b) {
744                    ClassicPrefs.setShowStandardBar(b);
745                    standardBar.setVisible(b);
746                    validate();
747                    repaint();
748            }
749            
750            private void
751            showBottomPane(boolean b) {
752                    if(!b) ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
753                    
754                    rightPane.remove(vSplitPane);
755                    rightPane.remove(channelsPane);
756                    
757                    if(b) {
758                            vSplitPane.setTopComponent(channelsPane);
759                            rightPane.add(vSplitPane);
760                            vSplitPane.setDividerLocation(ClassicPrefs.getVSplitDividerLocation());
761                    } else {
762                            rightPane.add(channelsPane);
763                    }
764                    
765                    validate();
766                    repaint();
767            }
768            
769            protected void
770            setLSConsolePopOut(boolean b) {
771                    if(b == lsConsolePopOut) return;
772                    
773                    lsConsolePopOut = b;
774                    
775                    if(isLSConsoleShown()) setLSConsolePopOut0(b);
776            }
777            
778            /**
779             * Changes the pop-out state of the LS Console.
780             * Invoke this method only when LS Console is shown.
781             */
782            private void
783            setLSConsolePopOut0(boolean b) {
784                    if(b) {
785                            bottomPane.remove(lsConsolePane);
786                            showBottomPane(false);
787                            
788                            lsConsoleDlg = new LSConsoleDlg(this, lsConsolePane);
789                            lsConsoleDlg.setVisible(true);
790                    } else {
791                            if(lsConsoleDlg != null) lsConsoleDlg.setVisible(false);
792                            lsConsoleDlg = null;
793                            bottomPane.add(lsConsolePane);
794                            showBottomPane(true);
795                    }
796            }
797            
798            protected boolean
799            isLSConsolePopOut() { return lsConsolePopOut; }
800            
801            protected boolean
802            isLSConsoleShown() { return cbmiLSConsoleShown.isSelected(); }
803            
804            protected void
805            setLSConsoleShown(boolean b) { cbmiLSConsoleShown.setSelected(b); }
806            
807            protected LSConsoleModel
808            getLSConsoleModel() { return lsConsolePane.getModel(); }
809            
810            protected JSBackendLogFrame
811            getBackendLogFrame() { return backendLogFrame; }
812            
813            /**
814             * Sets the text color of the LS Console.
815             * @param c The text color of the LS Console.
816             */
817            protected void
818            setLSConsoleTextColor(Color c) { lsConsolePane.setTextColor(c); }
819            
820            /**
821             * Sets the background color of the LS Console.
822             * @param c The background color of the LS Console.
823             */
824            protected void
825            setLSConsoleBackgroundColor(Color c) { lsConsolePane.setBackgroundColor(c); }
826            
827            /**
828             * Sets the notification messages' color of the LS Console.
829             * @param c The notification messages' color of the LS Console.
830             */
831            protected void
832            setLSConsoleNotifyColor(Color c) { lsConsolePane.setNotifyColor(c); }
833            
834            /**
835             * Sets the warning messages' color of the LS Console.
836             * @param c The warning messages' color of the LS Console.
837             */
838            protected void
839            setLSConsoleWarningColor(Color c) { lsConsolePane.setWarningColor(c); }
840            
841            /**
842             * Sets the error messages' color of the LS Console.
843             * @param c The error messages' color of the LS Console.
844             */
845            protected void
846            setLSConsoleErrorColor(Color c) { lsConsolePane.setErrorColor(c); }
847            
848            protected void
849            showLSConsole(boolean b) {
850                    if(!b) {
851                            showBottomPane(false);
852                            if(lsConsoleDlg != null) lsConsoleDlg.setVisible(false);
853                            lsConsolePane.hideAutoCompleteWindow();
854                            return;
855                    }
856                    
857                    setLSConsolePopOut0(isLSConsolePopOut());
858            }
859            
860            /**
861             * Adds the specified <code>JSChannelsPane</code> to the view.
862             * @param chnPane The <code>JSChannelsPane</code> to be added.
863             */
864            @Override
865          public void          public void
866          addChannelsPane(JSChannelsPane chnPane) {          addChannelsPane(JSChannelsPane chnPane) {
867                  insertChannelsPane(chnPane, getChannelsPaneCount());                  insertChannelsPane(chnPane, getChannelsPaneCount());
868          }          }
869                    
870            @Override
871          public void          public void
872          insertChannelsPane(JSChannelsPane chnPane, int idx) {          insertChannelsPane(JSChannelsPane chnPane, int idx) {
873                  chnPane.addListSelectionListener(this);                  chnPane.addListSelectionListener(this);
# Line 462  MainFrame extends org.jsampler.view.JSMa Line 888  MainFrame extends org.jsampler.view.JSMa
888                  updateTabsMenu();                  updateTabsMenu();
889          }          }
890                    
891            /**
892             * Gets the <code>JSChannelsPane</code> that is currently shown.
893             * @return The currently shown <code>JSChannelsPane</code>.
894             */
895            @Override
896          public JSChannelsPane          public JSChannelsPane
897          getSelectedChannelsPane() {          getSelectedChannelsPane() {
898                  if(getChannelsPaneList().size() == 1) return getChannelsPane(0);                  if(getChannelsPaneList().size() == 1) return getChannelsPane(0);
899                  return (JSChannelsPane)tabbedPane.getSelectedComponent();                  return (JSChannelsPane)tabbedPane.getSelectedComponent();
900          }          }
901                    
902            /**
903             * Sets the <code>JSChannelsPane</code> to be selected.
904             * @param pane The <code>JSChannelsPane</code> to be shown.
905             */
906            @Override
907          public void          public void
908          setSelectedChannelsPane(JSChannelsPane pane) {          setSelectedChannelsPane(JSChannelsPane pane) {
909                  if(getChannelsPaneList().size() == 1) return;                  if(getChannelsPaneList().size() == 1) return;
910                  tabbedPane.setSelectedComponent(pane);                  tabbedPane.setSelectedComponent(pane);
911                    fireChannelsPaneSelectionChanged();
912          }          }
913                    
914            /**
915             * Removes the specified <code>JSChannelsPane</code> from the view.
916             * @param chnPane The <code>JSChannelsPane</code> to be removed.
917             * @return <code>true</code> if the specified code>JSChannelsPane</code>
918             * is actually removed from the view, <code>false</code> otherwise.
919             */
920            @Override
921          public boolean          public boolean
922          removeChannelsPane(JSChannelsPane chnPane) {          removeChannelsPane(JSChannelsPane chnPane) {
923                  chnPane.removeListSelectionListener(this);                  chnPane.removeListSelectionListener(this);
# Line 520  MainFrame extends org.jsampler.view.JSMa Line 964  MainFrame extends org.jsampler.view.JSMa
964          private void          private void
965          checkChannelSelection(JSChannelsPane pane) {          checkChannelSelection(JSChannelsPane pane) {
966                  if(!pane.hasSelectedChannel()) {                  if(!pane.hasSelectedChannel()) {
967                          A4n.duplicateChannels.putValue (                          a4n.duplicateChannels.putValue (
968                                  Action.NAME, i18n.getMenuLabel("channels.duplicate")                                  Action.NAME, i18n.getMenuLabel("channels.duplicate")
969                          );                          );
970                          A4n.duplicateChannels.setEnabled(false);                          a4n.duplicateChannels.setEnabled(false);
971                                                                    
972                          A4n.removeChannels.putValue (                          a4n.removeChannels.putValue (
973                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
974                          );                          );
975                          A4n.removeChannels.setEnabled(false);                          a4n.removeChannels.setEnabled(false);
976                                                    
977                          tabsMenu.setEnabled(false);                          tabsMenu.setEnabled(false);
978                                                    
979                          A4n.moveChannelsOnTop.setEnabled(false);                          a4n.moveChannelsOnTop.setEnabled(false);
980                          A4n.moveChannelsUp.setEnabled(false);                          a4n.moveChannelsUp.setEnabled(false);
981                          A4n.moveChannelsDown.setEnabled(false);                          a4n.moveChannelsDown.setEnabled(false);
982                          A4n.moveChannelsAtBottom.setEnabled(false);                          a4n.moveChannelsAtBottom.setEnabled(false);
983                                                    
984                          return;                          return;
985                  }                  }
986                                    
987                  A4n.duplicateChannels.setEnabled(true);                  a4n.duplicateChannels.setEnabled(true);
988                  A4n.removeChannels.setEnabled(true);                  a4n.removeChannels.setEnabled(true);
989                                    
990                  if(getChannelsPaneCount() > 1) tabsMenu.setEnabled(true);                  if(getChannelsPaneCount() > 1) tabsMenu.setEnabled(true);
991                                    
992                  if(pane.getSelectedChannelCount() > 1) {                  if(pane.getSelectedChannelCount() > 1) {
993                          A4n.duplicateChannels.putValue (                          a4n.duplicateChannels.putValue (
994                                  Action.NAME, i18n.getMenuLabel("channels.duplicateChannels")                                  Action.NAME, i18n.getMenuLabel("channels.duplicateChannels")
995                          );                          );
996                          A4n.removeChannels.putValue (                          a4n.removeChannels.putValue (
997                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannels")                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannels")
998                          );                          );
999                  } else {                  } else {
1000                          A4n.duplicateChannels.putValue (                          a4n.duplicateChannels.putValue (
1001                                  Action.NAME, i18n.getMenuLabel("channels.duplicate")                                  Action.NAME, i18n.getMenuLabel("channels.duplicate")
1002                          );                          );
1003                          A4n.removeChannels.putValue (                          a4n.removeChannels.putValue (
1004                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")                                  Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
1005                          );                          );
1006                  }                  }
1007                                    
1008                  A4n.moveChannelsOnTop.setEnabled(false);                  a4n.moveChannelsOnTop.setEnabled(false);
1009                  A4n.moveChannelsUp.setEnabled(true);                  a4n.moveChannelsUp.setEnabled(true);
1010                  A4n.moveChannelsDown.setEnabled(true);                  a4n.moveChannelsDown.setEnabled(true);
1011                  A4n.moveChannelsAtBottom.setEnabled(false);                  a4n.moveChannelsAtBottom.setEnabled(false);
1012                                    
1013                  JSChannel[] chns = pane.getSelectedChannels();                  JSChannel[] chns = pane.getSelectedChannels();
1014                                    
1015                  for(int i = 0; i < chns.length; i++) {                  for(int i = 0; i < chns.length; i++) {
1016                          if(pane.getChannel(i) != chns[i]) {                          if(pane.getChannel(i) != chns[i]) {
1017                                  A4n.moveChannelsOnTop.setEnabled(true);                                  a4n.moveChannelsOnTop.setEnabled(true);
1018                                  break;                                  break;
1019                          }                          }
1020                  }                  }
1021                                    
1022                  if(chns[0] == pane.getFirstChannel()) A4n.moveChannelsUp.setEnabled(false);                  if(chns[0] == pane.getFirstChannel()) a4n.moveChannelsUp.setEnabled(false);
1023                                    
1024                  if(chns[chns.length - 1] == pane.getLastChannel())                  if(chns[chns.length - 1] == pane.getLastChannel())
1025                          A4n.moveChannelsDown.setEnabled(false);                          a4n.moveChannelsDown.setEnabled(false);
1026                                    
1027                  for(int i = chns.length - 1, j = pane.getChannelCount() - 1; i >= 0; i--, j--) {                  for(int i = chns.length - 1, j = pane.getChannelCount() - 1; i >= 0; i--, j--) {
1028                          if(pane.getChannel(j) != chns[i]) {                          if(pane.getChannel(j) != chns[i]) {
1029                                  A4n.moveChannelsAtBottom.setEnabled(true);                                  a4n.moveChannelsAtBottom.setEnabled(true);
1030                                  break;                                  break;
1031                          }                          }
1032                  }                  }
# Line 615  MainFrame extends org.jsampler.view.JSMa Line 1059  MainFrame extends org.jsampler.view.JSMa
1059          public JMenu          public JMenu
1060          getTabsMenu() { return tabsMenu; }          getTabsMenu() { return tabsMenu; }
1061                    
1062            @Override
1063          public void          public void
1064          stateChanged(ChangeEvent e) {          stateChanged(ChangeEvent e) {
1065                  updateTabsMenu();                  updateTabsMenu();
# Line 622  MainFrame extends org.jsampler.view.JSMa Line 1067  MainFrame extends org.jsampler.view.JSMa
1067                  checkTabSelection();                  checkTabSelection();
1068          }          }
1069                    
1070            @Override
1071          public void          public void
1072          valueChanged(ListSelectionEvent e) {          valueChanged(ListSelectionEvent e) {
1073                  if(e.getValueIsAdjusting()) return;                  if(e.getValueIsAdjusting()) return;
# Line 694  MainFrame extends org.jsampler.view.JSMa Line 1140  MainFrame extends org.jsampler.view.JSMa
1140                  addChannelsPane(c);                  addChannelsPane(c);
1141                  tabbedPane.setSelectedComponent(c);                  tabbedPane.setSelectedComponent(c);
1142          }          }
1143            
1144            protected void
1145            runScript() {
1146                    String s = preferences().getStringProperty("lastScriptLocation");
1147                    JFileChooser fc = new JFileChooser(s);
1148                    fc.setFileFilter(new LscpFileFilter());
1149                    int result = fc.showOpenDialog(this);
1150                    if(result != JFileChooser.APPROVE_OPTION) return;
1151                    
1152                    String path = fc.getCurrentDirectory().getAbsolutePath();
1153                    preferences().setStringProperty("lastScriptLocation", path);
1154                                            
1155                    runScript(fc.getSelectedFile());
1156            }
1157            
1158            @Override
1159            public void
1160            runScript(String script) { runScript(new File(script)); }
1161            
1162            private void
1163            runScript(File script) {
1164                    FileReader fr;
1165                    try { fr = new FileReader(script); }
1166                    catch(FileNotFoundException e) {
1167                            HF.showErrorMessage(i18n.getMessage("FileNotFound!"));
1168                            return;
1169                    }
1170                    
1171                    BufferedReader br = new BufferedReader(fr);
1172                    
1173                    try {
1174                            String s = br.readLine();
1175                            while(s != null) {
1176                                    getLSConsoleModel().setCommandLineText(s);
1177                                    getLSConsoleModel().execCommand();
1178                                    s = br.readLine();
1179                            }
1180                    } catch(Exception e) {
1181                            HF.showErrorMessage(e);
1182                            return;
1183                    }
1184                    
1185                    if(preferences().getBoolProperty(SHOW_LS_CONSOLE_WHEN_RUN_SCRIPT)) {
1186                            if(!cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);
1187                    }
1188                    
1189                    String s = script.getAbsolutePath();
1190                    recentScripts.remove(s);
1191                    recentScripts.insertElementAt(s, 0);
1192                    
1193                    updateRecentScriptsMenu();
1194            }
1195            
1196            protected void
1197            clearRecentScripts() {
1198                    recentScripts.removeAllElements();
1199                    updateRecentScriptsMenu();
1200            }
1201            
1202            protected void
1203            updateRecentScriptsMenu() {
1204                    int size = preferences().getIntProperty(RECENT_LSCP_SCRIPTS_SIZE);
1205                    while(recentScripts.size() > size) {
1206                            recentScripts.removeElementAt(recentScripts.size() - 1);
1207                    }
1208                    
1209                    recentScriptsMenu.removeAll();
1210                    
1211                    for(String script : recentScripts) {
1212                            JMenuItem mi = new JMenuItem(script);
1213                            recentScriptsMenu.add(mi);
1214                            mi.addActionListener(new RecentScriptHandler(script));
1215                    }
1216                    
1217                    recentScriptsMenu.setEnabled(recentScripts.size() != 0);
1218            }
1219            
1220            @Override
1221            public void
1222            installJSamplerHome() {
1223                    JSamplerHomeChooser chooser = new JSamplerHomeChooser(this);
1224                    chooser.setVisible(true);
1225                    if(chooser.isCancelled()) return;
1226                    
1227                    CC.changeJSamplerHome(chooser.getJSamplerHome());
1228            }
1229            
1230            @Override
1231            public void
1232            showDetailedErrorMessage(Frame owner, String err, String details) {
1233                    JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1234                            owner, Res.iconWarning32, i18n.getError("error"), err, details
1235                    );
1236                    dlg.setVisible(true);
1237            }
1238            
1239            @Override
1240            public void
1241            showDetailedErrorMessage(Dialog owner, String err, String details) {
1242                    JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1243                            owner, Res.iconWarning32, i18n.getError("error"), err, details
1244                    );
1245                    dlg.setVisible(true);
1246            }
1247            
1248            /**
1249             * Gets the server address to which to connect. If the server should be
1250             * manually selected, a dialog asking the user to choose a server is displayed.
1251             */
1252            @Override
1253            public Server
1254            getServer() {
1255                    boolean b = preferences().getBoolProperty(MANUAL_SERVER_SELECT_ON_STARTUP);
1256                    return getServer(b);
1257            }
1258            
1259            /**
1260             * Gets the server address to which to connect. If the server should be
1261             * manually selected, a dialog asking the user to choose a server is displayed.
1262             * @param manualSelect Determines whether the server should be manually selected.
1263             */
1264            @Override
1265            public Server
1266            getServer(boolean manualSelect) {
1267                    if(manualSelect) {
1268                            JSConnectDlg dlg = new JSConnectDlg();
1269                            dlg.setVisible(true);
1270                            return dlg.getSelectedServer();
1271                    }
1272                    
1273                    int i = preferences().getIntProperty(SERVER_INDEX);
1274                    int size = CC.getServerList().getServerCount();
1275                    if(size == 0) return null;
1276                    if(i >= size) return CC.getServerList().getServer(0);
1277                    
1278                    return CC.getServerList().getServer(i);
1279            }
1280  }  }

Legend:
Removed from v.842  
changed lines
  Added in v.1864

  ViewVC Help
Powered by ViewVC