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

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

  ViewVC Help
Powered by ViewVC