/[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 911 by iliev, Mon Aug 7 18:25:58 2006 UTC revision 1915 by iliev, Thu Jun 11 09:35:29 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, 2006 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 24  package org.jsampler.view.classic; Line 24  package org.jsampler.view.classic;
24    
25  import java.awt.BorderLayout;  import java.awt.BorderLayout;
26  import java.awt.Color;  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;
# Line 34  import java.io.BufferedReader; Line 37  import java.io.BufferedReader;
37  import java.io.File;  import java.io.File;
38  import java.io.FileNotFoundException;  import java.io.FileNotFoundException;
39  import java.io.FileReader;  import java.io.FileReader;
 import java.io.StringReader;  
40    
 import java.util.logging.Level;  
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;
 import javax.swing.JFileChooser;  
46  import javax.swing.JMenu;  import javax.swing.JMenu;
47  import javax.swing.JMenuBar;  import javax.swing.JMenuBar;
48  import javax.swing.JMenuItem;  import javax.swing.JMenuItem;
# Line 57  import javax.swing.event.ListSelectionEv Line 57  import javax.swing.event.ListSelectionEv
57  import javax.swing.event.ListSelectionListener;  import javax.swing.event.ListSelectionListener;
58    
59  import net.sf.juife.NavigationPage;  import net.sf.juife.NavigationPage;
 import net.sf.juife.NavigationPane;  
60    
61  import org.jsampler.CC;  import org.jsampler.CC;
62  import org.jsampler.HF;  import org.jsampler.HF;
63    import org.jsampler.JSUtils;
64  import org.jsampler.LSConsoleModel;  import org.jsampler.LSConsoleModel;
65  import org.jsampler.OrchestraModel;  import org.jsampler.OrchestraModel;
66  import org.jsampler.Prefs;  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;
 import org.jsampler.view.LscpFileFilter;  
72    
73    import org.jsampler.view.std.JSBackendLogFrame;
74    import org.jsampler.view.std.JSConnectDlg;
75    import org.jsampler.view.std.JSConnectionFailurePane;
76    import org.jsampler.view.std.JSDetailedErrorDlg;
77    import org.jsampler.view.std.JSQuitDlg;
78    import org.jsampler.view.std.JSamplerHomeChooser;
79    import org.jsampler.view.std.StdUtils;
80    
81    import static org.jsampler.view.classic.A4n.a4n;
82  import static org.jsampler.view.classic.ClassicI18n.i18n;  import static org.jsampler.view.classic.ClassicI18n.i18n;
83    import static org.jsampler.view.classic.ClassicPrefs.preferences;
84  import static org.jsampler.view.classic.LeftPane.getLeftPane;  import static org.jsampler.view.classic.LeftPane.getLeftPane;
85    import static org.jsampler.view.std.StdPrefs.*;
86    
87  /**  /**
88   *   *
# Line 79  import static org.jsampler.view.classic. Line 90  import static org.jsampler.view.classic.
90   */   */
91  public class  public class
92  MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {  MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {
93          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);  
         }  
94                    
95          private final Toolbar toolbar = new Toolbar();          private final ChannelsBar channelsBar = new ChannelsBar();
96          private final Statusbar statusbar = new Statusbar();          private final Statusbar statusbar = new Statusbar();
97          private final JMenuBar menuBar = new JMenuBar();          private final JMenuBar menuBar = new JMenuBar();
98          private final JMenu recentScriptsMenu =          private final JMenu recentScriptsMenu =
# Line 98  MainFrame extends org.jsampler.view.JSMa Line 103  MainFrame extends org.jsampler.view.JSMa
103          private final JSplitPane hSplitPane;          private final JSplitPane hSplitPane;
104                    
105          private final JPanel mainPane = new JPanel();          private final JPanel mainPane = new JPanel();
106            private final StandardBar standardBar = new StandardBar();
107          private final JPanel channelsPane = new JPanel(new BorderLayout());          private final JPanel channelsPane = new JPanel(new BorderLayout());
108          private final JPanel rightPane = new JPanel();          private final JPanel rightPane = new JPanel();
109          private final JPanel bottomPane = new JPanel();          private final JPanel bottomPane = new JPanel();
110          private final LSConsolePane lsConsolePane = new LSConsolePane(this);          private final LSConsolePane lsConsolePane = new LSConsolePane(this);
111          private LSConsoleDlg lsConsoleDlg = null;          private LSConsoleDlg lsConsoleDlg = null;
112            private final JSBackendLogFrame backendLogFrame = new JSBackendLogFrame();
113                    
114          private final JTabbedPane tabbedPane =          private final JTabbedPane tabbedPane =
115                  new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);                  new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
# Line 111  MainFrame extends org.jsampler.view.JSMa Line 118  MainFrame extends org.jsampler.view.JSMa
118          private final JCheckBoxMenuItem cbmiLeftPaneVisible =          private final JCheckBoxMenuItem cbmiLeftPaneVisible =
119                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));
120                    
121            private final JCheckBoxMenuItem cbmiStandardBarVisible =
122                            new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.standard"));
123            
124          private final JCheckBoxMenuItem cbmiLSConsoleShown =          private final JCheckBoxMenuItem cbmiLSConsoleShown =
125                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.lsconsole"));                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.lsconsole"));
126                    
# Line 119  MainFrame extends org.jsampler.view.JSMa Line 129  MainFrame extends org.jsampler.view.JSMa
129          private final Vector<String> recentScripts = new Vector<String>();          private final Vector<String> recentScripts = new Vector<String>();
130                                    
131                    
132          /** Creates a new instance of JSMainFrame */          /** Creates a new instance of <code>MainFrame</code>. */
133          public          public
134          MainFrame() {          MainFrame() {
135                  setTitle(i18n.getLabel("MainFrame.title"));                  setTitle(i18n.getLabel("MainFrame.title"));
136                                    
137                  getContentPane().add(toolbar, BorderLayout.NORTH);                  CC.setMainFrame(this); // TODO:
138                    
139                    getContentPane().add(standardBar, BorderLayout.NORTH);
140                  getContentPane().add(mainPane);                  getContentPane().add(mainPane);
141                                    
142                  mainPane.setLayout(new BorderLayout());                  mainPane.setLayout(new BorderLayout());
# Line 140  MainFrame extends org.jsampler.view.JSMa Line 152  MainFrame extends org.jsampler.view.JSMa
152                  bottomPane.setLayout(new BorderLayout());                  bottomPane.setLayout(new BorderLayout());
153                                    
154                  rightPane.setLayout(new BorderLayout());                  rightPane.setLayout(new BorderLayout());
155                    
156                    rightPane.add(channelsBar, BorderLayout.NORTH);
157                  rightPane.add(channelsPane);                  rightPane.add(channelsPane);
158                                    
159                  hSplitPane = new JSplitPane (                  hSplitPane = new JSplitPane (
# Line 191  MainFrame extends org.jsampler.view.JSMa Line 205  MainFrame extends org.jsampler.view.JSMa
205                                  getLeftPane().getOrchestrasPage().setSelectedOrchestra(om);                                  getLeftPane().getOrchestrasPage().setSelectedOrchestra(om);
206                          }                          }
207                  }                  }
208                    
209                    //CC.getInstrumentsDbTreeModel(); // used to initialize the db tree model
210          }          }
211                    
212          /** Invoked when this window is about to close. */          /** Invoked when this window is about to close. */
213          protected void          @Override
214            public void
215          onWindowClose() {          onWindowClose() {
216                    boolean b = preferences().getBoolProperty(CONFIRM_APP_QUIT);
217                    if(b && CC.getSamplerModel().isModified()) {
218                            JSQuitDlg dlg = new JSQuitDlg(Res.iconQuestion32);
219                            dlg.setVisible(true);
220                            if(dlg.isCancelled()) return;
221                    }
222                    
223                  if(ClassicPrefs.getSaveWindowProperties()) {                  if(ClassicPrefs.getSaveWindowProperties()) {
224                          ClassicPrefs.setWindowMaximized (                          ClassicPrefs.setWindowMaximized (
225                                  (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH                                  "Mainframe", (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH
226                          );                          );
227                                                    
228                          setVisible(false);                          setVisible(false);
229                          if(ClassicPrefs.getWindowMaximized()) {                          if(ClassicPrefs.getWindowMaximized("MainFrame")) {
230                                  //setExtendedState(getExtendedState() & ~MAXIMIZED_BOTH);                                  //setExtendedState(getExtendedState() & ~MAXIMIZED_BOTH);
231                                  CC.cleanExit();                                  CC.cleanExit();
232                                  return;                                  return;
233                          }                          }
234                                                    
235                          java.awt.Point p = getLocation();                          StdUtils.saveWindowBounds("MainFrame", getBounds());
                         Dimension d = getSize();  
                         StringBuffer sb = new StringBuffer();  
                         sb.append(p.x).append(',').append(p.y).append(',');  
                         sb.append(d.width).append(',').append(d.height);  
                         ClassicPrefs.setWindowSizeAndLocation(sb.toString());  
236                                                    
237                          ClassicPrefs.setHSplitDividerLocation(hSplitPane.getDividerLocation());                          ClassicPrefs.setHSplitDividerLocation(hSplitPane.getDividerLocation());
238                  }                  }
# Line 235  MainFrame extends org.jsampler.view.JSMa Line 254  MainFrame extends org.jsampler.view.JSMa
254                                  ClassicPrefs.setCurrentOrchestraIndex(idx);                                  ClassicPrefs.setCurrentOrchestraIndex(idx);
255                  }                  }
256                                    
257                  StringBuffer sb = new StringBuffer();                  String[] list = recentScripts.toArray(new String[recentScripts.size()]);
258                  for(String s : recentScripts) sb.append(s).append("\n");                  preferences().setStringListProperty(RECENT_LSCP_SCRIPTS, list);
259                  ClassicPrefs.setRecentScripts(sb.toString());                  
260                                    if(preferences().getBoolProperty(SAVE_LS_CONSOLE_HISTORY)) {
261                  LSConsoleModel model = getLSConsoleModel();                          lsConsolePane.saveConsoleHistory();
262                  sb = new StringBuffer();                  }
                 for(String s : model.getCommandHistory()) sb.append(s).append("\n");  
                 ClassicPrefs.setLSConsoleHistory(sb.toString());  
263                                    
264                  ClassicPrefs.setShowLSConsole(isLSConsoleShown());                  ClassicPrefs.setShowLSConsole(isLSConsoleShown());
265                  ClassicPrefs.setLSConsolePopOut(isLSConsolePopOut());                  ClassicPrefs.setLSConsolePopOut(isLSConsolePopOut());
266                                    
267                  ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());                  ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
268                    
269                    if(getBackendLogFrame() != null) getBackendLogFrame().stopTimer();
270                    if(lsConsolePane != null) lsConsolePane.disconnect();
271                  super.onWindowClose();                  super.onWindowClose();
272          }          }
273                    
274            @Override
275            public void
276            setVisible(boolean b) {
277                    if(b == isVisible()) return;
278                    
279                    super.setVisible(b);
280                    
281                    if(ClassicPrefs.getWindowMaximized("MainFrame")) {
282                            setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
283                    }
284            }
285            
286          private void          private void
287          initMainFrame() {          initMainFrame() {
288                  addMenu();                  addMenu();
# Line 267  MainFrame extends org.jsampler.view.JSMa Line 299  MainFrame extends org.jsampler.view.JSMa
299                    
300          private void          private void
301          setSavedSize() {          setSavedSize() {
302                  String s = ClassicPrefs.getWindowSizeAndLocation();                  Rectangle r = StdUtils.getWindowBounds("MainFrame");
303                  if(s == null) {                  if(r == null) {
304                          setDefaultSize();                          setDefaultSize();
305                          return;                          return;
306                  }                  }
307                                    
308                  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(ClassicPrefs.getWindowMaximized())  
                         setExtendedState(getExtendedState() | MAXIMIZED_BOTH);  
309          }          }
310                    
311          private void          private void
# Line 310  MainFrame extends org.jsampler.view.JSMa Line 319  MainFrame extends org.jsampler.view.JSMa
319                  m = new JMenu(i18n.getMenuLabel("actions"));                  m = new JMenu(i18n.getMenuLabel("actions"));
320                  menuBar.add(m);                  menuBar.add(m);
321                                    
322                  mi = new JMenuItem(A4n.connect);                  mi = new JMenuItem(a4n.refresh);
323                  mi.setIcon(null);                  mi.setIcon(null);
324                  //mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
325                  m.add(mi);                  m.add(mi);
326                                    
327                  mi = new JMenuItem(A4n.refresh);                  mi = new JMenuItem(A4n.samplerInfo);
328                  mi.setIcon(null);                  mi.setIcon(null);
                 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));  
329                  m.add(mi);                  m.add(mi);
330                                    
331                  mi = new JMenuItem(A4n.resetSampler);                  mi = new JMenuItem(a4n.resetSampler);
332                  mi.setIcon(null);                  mi.setIcon(null);
333                  m.add(mi);                  m.add(mi);
334                                    
335                  mi = new JMenuItem(A4n.samplerInfo);                  JMenu midiInstrMenu = new JMenu(i18n.getMenuLabel("actions.midiInstruments"));
336                    m.add(midiInstrMenu);
337                    
338                    mi = new JMenuItem(A4n.addMidiInstrumentMap);
339                  mi.setIcon(null);                  mi.setIcon(null);
340                  m.add(mi);                  midiInstrMenu.add(mi);
341                    
342                    mi = new JMenuItem(A4n.removeMidiInstrumentMap);
343                    mi.setIcon(null);
344                    midiInstrMenu.add(mi);
345                    
346                    mi = new JMenuItem(A4n.addMidiInstrumentWizard);
347                    mi.setIcon(null);
348                    midiInstrMenu.add(mi);
349                                    
350                  m.addSeparator();                  m.addSeparator();
351                                    
352                  mi = new JMenuItem(i18n.getMenuLabel("actions.runScript"));                  JMenu exportMenu = new JMenu(i18n.getMenuLabel("actions.export"));
353                  m.add(mi);                  m.add(exportMenu);
                 mi.addActionListener(new ActionListener() {  
                         public void  
                         actionPerformed(ActionEvent e) { runScript(); }  
                 });  
354                                    
355                  String s = ClassicPrefs.getRecentScripts();                  int modKey = CC.getViewConfig().getDefaultModKey();
356                  BufferedReader br = new BufferedReader(new StringReader(s));                  mi = new JMenuItem(a4n.exportSamplerConfig);
357                    mi.setIcon(null);
358                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, modKey));
359                    exportMenu.add(mi);
360                                    
361                  try {                  mi = new JMenuItem(a4n.exportMidiInstrumentMaps);
362                          s = br.readLine();                  mi.setIcon(null);
363                          while(s != null) {                  exportMenu.add(mi);
364                                  recentScripts.add(s);                  
365                                  s = br.readLine();                  m.addSeparator();
366                          }                  
367                  } catch(Exception x) {                  mi = new JMenuItem(A4n.loadScript);
368                          CC.getLogger().log(Level.INFO, HF.getErrorMessage(x), x);                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, modKey));
369                  }                  mi.setIcon(null);
370                    m.add(mi);
371                    
372                    String[] list = preferences().getStringListProperty(RECENT_LSCP_SCRIPTS);
373                    for(String s : list) recentScripts.add(s);
374                                    
375                  updateRecentScriptsMenu();                  updateRecentScriptsMenu();
376                                    
# Line 356  MainFrame extends org.jsampler.view.JSMa Line 378  MainFrame extends org.jsampler.view.JSMa
378                                    
379                  m.addSeparator();                  m.addSeparator();
380                                    
381                    mi = new JMenuItem(a4n.changeBackend);
382                    mi.setIcon(null);
383                    mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, modKey));
384                    m.add(mi);
385                    
386                    m.addSeparator();
387                    
388                  mi = new JMenuItem(i18n.getMenuLabel("actions.exit"));                  mi = new JMenuItem(i18n.getMenuLabel("actions.exit"));
389                  m.add(mi);                  m.add(mi);
390                  mi.addActionListener(new ActionListener() {                  mi.addActionListener(new ActionListener() {
391                          public void                          public void
392                          actionPerformed(ActionEvent e) { CC.cleanExit(); }                          actionPerformed(ActionEvent e) { onWindowClose(); }
393                  });                  });
394                                    
395                  // Edit                  // Edit
# Line 402  MainFrame extends org.jsampler.view.JSMa Line 431  MainFrame extends org.jsampler.view.JSMa
431                  mi = new JMenuItem(A4n.preferences);                  mi = new JMenuItem(A4n.preferences);
432                  mi.setIcon(null);                  mi.setIcon(null);
433                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
434                          KeyEvent.VK_P, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_P, modKey | KeyEvent.SHIFT_MASK
435                  ));                  ));
436                  m.add(mi);                  m.add(mi);
437                                    
# Line 410  MainFrame extends org.jsampler.view.JSMa Line 439  MainFrame extends org.jsampler.view.JSMa
439                  m = new JMenu(i18n.getMenuLabel("view"));                  m = new JMenu(i18n.getMenuLabel("view"));
440                  menuBar.add(m);                  menuBar.add(m);
441                                    
442                    JMenu toolbarsMenu = new JMenu(i18n.getMenuLabel("view.toolbars"));
443                    m.add(toolbarsMenu);
444                    
445                    toolbarsMenu.add(cbmiStandardBarVisible);
446                    cbmiStandardBarVisible.addActionListener(new ActionListener() {
447                            public void
448                            actionPerformed(ActionEvent e) {
449                                    showStandardBar(cbmiStandardBarVisible.getState());
450                            }
451                    });
452                    
453                    boolean b = ClassicPrefs.shouldShowStandardBar();
454                    cbmiStandardBarVisible.setSelected(b);
455                    showStandardBar(b);
456                    
457                  final JCheckBoxMenuItem cbmi =                  final JCheckBoxMenuItem cbmi =
458                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbar"));                          new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.channels"));
459                                    
460                  m.add(cbmi);                  toolbarsMenu.add(cbmi);
461                  cbmi.addActionListener(new ActionListener() {                  cbmi.addActionListener(new ActionListener() {
462                          public void                          public void
463                          actionPerformed(ActionEvent e) { showToolbar(cbmi.getState()); }                          actionPerformed(ActionEvent e) { showChannelsBar(cbmi.getState()); }
464                  });                  });
465                                    
466                  boolean b = ClassicPrefs.shouldShowToolbar();                  b = ClassicPrefs.shouldShowChannelsBar();
467                  cbmi.setSelected(b);                  cbmi.setSelected(b);
468                  showToolbar(b);                  showChannelsBar(b);
469                                    
470                  m.add(cbmiLeftPaneVisible);                  m.add(cbmiLeftPaneVisible);
471                  cbmiLeftPaneVisible.addActionListener(new ActionListener() {                  cbmiLeftPaneVisible.addActionListener(new ActionListener() {
# Line 469  MainFrame extends org.jsampler.view.JSMa Line 513  MainFrame extends org.jsampler.view.JSMa
513                                    
514                  mi = new JMenuItem(A4n.newChannel);                  mi = new JMenuItem(A4n.newChannel);
515                  mi.setIcon(null);                  mi.setIcon(null);
516                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, modKey));
517                  m.add(mi);                  m.add(mi);
518                                    
519                  mi = new JMenuItem(A4n.newChannelWizard);                  mi = new JMenuItem(A4n.newChannelWizard);
520                  mi.setIcon(null);                  mi.setIcon(null);
521                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
522                          KeyEvent.VK_N, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)                          KeyEvent.VK_N, modKey | KeyEvent.SHIFT_MASK)
523                  );                  );
524                  m.add(mi);                  m.add(mi);
525                                    
526                  mi = new JMenuItem(A4n.duplicateChannels);                  mi = new JMenuItem(a4n.duplicateChannels);
527                  mi.setIcon(null);                  mi.setIcon(null);
528                  m.add(mi);                  m.add(mi);
529                                    
530                  m.addSeparator();                  m.addSeparator();
531                                    
532                  mi = new JMenuItem(A4n.moveChannelsOnTop);                  mi = new JMenuItem(a4n.moveChannelsOnTop);
533                  mi.setIcon(null);                  mi.setIcon(null);
534                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
535                          KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
536                  ));                  ));
537                  m.add(mi);                  m.add(mi);
538                                    
539                  mi = new JMenuItem(A4n.moveChannelsUp);                  mi = new JMenuItem(a4n.moveChannelsUp);
540                  mi.setIcon(null);                  mi.setIcon(null);
541                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));
542                  m.add(mi);                  m.add(mi);
543                                    
544                  mi = new JMenuItem(A4n.moveChannelsDown);                  mi = new JMenuItem(a4n.moveChannelsDown);
545                  mi.setIcon(null);                  mi.setIcon(null);
546                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));
547                  m.add(mi);                  m.add(mi);
548                                    
549                  mi = new JMenuItem(A4n.moveChannelsAtBottom);                  mi = new JMenuItem(a4n.moveChannelsAtBottom);
550                  mi.setIcon(null);                  mi.setIcon(null);
551                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
552                          KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
# Line 514  MainFrame extends org.jsampler.view.JSMa Line 558  MainFrame extends org.jsampler.view.JSMa
558                                    
559                  m.addSeparator();                  m.addSeparator();
560                                    
561                  mi = new JMenuItem(A4n.selectAllChannels);                  mi = new JMenuItem(a4n.selectAllChannels);
562                  mi.setIcon(null);                  mi.setIcon(null);
563                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, modKey));
564                  m.add(mi);                  m.add(mi);
565                                    
566                  mi = new JMenuItem(A4n.deselectChannels);                  mi = new JMenuItem(a4n.deselectChannels);
567                  mi.setIcon(null);                  mi.setIcon(null);
568                  mi.setAccelerator(KeyStroke.getKeyStroke (                  mi.setAccelerator(KeyStroke.getKeyStroke (
569                          KeyEvent.VK_A, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK                          KeyEvent.VK_A, KeyEvent.SHIFT_MASK | modKey
570                  ));                  ));
571                  m.add(mi);                  m.add(mi);
572                                    
573                  m.addSeparator();                  m.addSeparator();
574                                    
575                  mi = new JMenuItem(A4n.removeChannels);                  mi = new JMenuItem(a4n.removeChannels);
576                  mi.setIcon(null);                  mi.setIcon(null);
577                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));
578                  m.add(mi);                  m.add(mi);
# Line 540  MainFrame extends org.jsampler.view.JSMa Line 584  MainFrame extends org.jsampler.view.JSMa
584                                    
585                  mi = new JMenuItem(A4n.newChannelsTab);                  mi = new JMenuItem(A4n.newChannelsTab);
586                  mi.setIcon(null);                  mi.setIcon(null);
587                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, modKey));
588                  m.add(mi);                  m.add(mi);
589                                    
590                  mi = new JMenuItem(A4n.editTabTitle);                  mi = new JMenuItem(A4n.editTabTitle);
# Line 578  MainFrame extends org.jsampler.view.JSMa Line 622  MainFrame extends org.jsampler.view.JSMa
622                                    
623                  mi = new JMenuItem(A4n.closeChannelsTab);                  mi = new JMenuItem(A4n.closeChannelsTab);
624                  mi.setIcon(null);                  mi.setIcon(null);
625                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.CTRL_MASK));                  mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, modKey));
626                  m.add(mi);                  m.add(mi);
627                                    
628                                    
629                    // Window
630                    m = new JMenu(i18n.getMenuLabel("window"));
631                    menuBar.add(m);
632                    
633                    mi = new JMenuItem(A4n.windowInstrumentsDb);
634                    mi.setIcon(null);
635                    m.add(mi);
636                    
637                    final JMenuItem mi2 = new JMenuItem(i18n.getMenuLabel("window.backendLog"));
638                    m.add(mi2);
639                    mi2.addActionListener(new ActionListener() {
640                            public void
641                            actionPerformed(ActionEvent e) {
642                                    if(getBackendLogFrame().isVisible()) {
643                                            getBackendLogFrame().setVisible(false);
644                                    }
645                                    
646                                    getBackendLogFrame().setVisible(true);
647                            }
648                    });
649                    
650                    mi2.setEnabled(CC.getBackendProcess() != null);
651                    
652                    CC.addBackendProcessListener(new ActionListener() {
653                            public void
654                            actionPerformed(ActionEvent e) {
655                                    mi2.setEnabled(CC.getBackendProcess() != null);
656                            }
657                    });
658                    
659                    
660                  // Help                  // Help
661                  m = new JMenu(i18n.getMenuLabel("help"));                  m = new JMenu(i18n.getMenuLabel("help"));
                 menuBar.add(m);  
662                                    
663                  mi = new JMenuItem(A4n.helpAbout);                  mi = new JMenuItem(A4n.helpAbout);
664                  mi.setIcon(null);                  mi.setIcon(null);
665                  m.add(mi);                  m.add(mi);
666                    
667                    m.addSeparator();
668                    
669                    mi = new JMenuItem(a4n.browseOnlineTutorial);
670                    mi.setIcon(null);
671                    m.add(mi);
672                    
673                    menuBar.add(m);
674          }          }
675                    
676          private class RecentScriptHandler implements ActionListener {          private class RecentScriptHandler implements ActionListener {
# Line 596  MainFrame extends org.jsampler.view.JSMa Line 678  MainFrame extends org.jsampler.view.JSMa
678                                    
679                  RecentScriptHandler(String script) { this.script = script; }                  RecentScriptHandler(String script) { this.script = script; }
680                                    
681                    @Override
682                  public void                  public void
683                  actionPerformed(ActionEvent e) {  runScript(script); }                  actionPerformed(ActionEvent e) {  runScript(script); }
684          }          }
# Line 606  MainFrame extends org.jsampler.view.JSMa Line 689  MainFrame extends org.jsampler.view.JSMa
689          }          }
690                    
691          private void          private void
692          showToolbar(boolean b) {          showChannelsBar(boolean b) {
693                  if(b) getContentPane().add(toolbar, BorderLayout.NORTH);                  channelsBar.setVisible(b);
694                  else getContentPane().remove(toolbar);                  ClassicPrefs.setShowChannelsBar(b);
                   
                 ClassicPrefs.setShowToolbar(b);  
695                                    
696                  validate();                  validate();
697                  repaint();                  repaint();
# Line 661  MainFrame extends org.jsampler.view.JSMa Line 742  MainFrame extends org.jsampler.view.JSMa
742          }          }
743                    
744          private void          private void
745            showStandardBar(boolean b) {
746                    ClassicPrefs.setShowStandardBar(b);
747                    standardBar.setVisible(b);
748                    validate();
749                    repaint();
750            }
751            
752            private void
753          showBottomPane(boolean b) {          showBottomPane(boolean b) {
754                  if(!b) ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());                  if(!b) ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
755                                    
# Line 717  MainFrame extends org.jsampler.view.JSMa Line 806  MainFrame extends org.jsampler.view.JSMa
806          protected void          protected void
807          setLSConsoleShown(boolean b) { cbmiLSConsoleShown.setSelected(b); }          setLSConsoleShown(boolean b) { cbmiLSConsoleShown.setSelected(b); }
808                    
809          protected LSConsoleModel          @Override
810            public LSConsoleModel
811          getLSConsoleModel() { return lsConsolePane.getModel(); }          getLSConsoleModel() { return lsConsolePane.getModel(); }
812                    
813            protected JSBackendLogFrame
814            getBackendLogFrame() { return backendLogFrame; }
815            
816          /**          /**
817           * Sets the text color of the LS Console.           * Sets the text color of the LS Console.
818           * @param c The text color of the LS Console.           * @param c The text color of the LS Console.
# Line 771  MainFrame extends org.jsampler.view.JSMa Line 864  MainFrame extends org.jsampler.view.JSMa
864           * Adds the specified <code>JSChannelsPane</code> to the view.           * Adds the specified <code>JSChannelsPane</code> to the view.
865           * @param chnPane The <code>JSChannelsPane</code> to be added.           * @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 800  MainFrame extends org.jsampler.view.JSMa Line 895  MainFrame extends org.jsampler.view.JSMa
895           * Gets the <code>JSChannelsPane</code> that is currently shown.           * Gets the <code>JSChannelsPane</code> that is currently shown.
896           * @return The currently shown <code>JSChannelsPane</code>.           * @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);
# Line 810  MainFrame extends org.jsampler.view.JSMa Line 906  MainFrame extends org.jsampler.view.JSMa
906           * Sets the <code>JSChannelsPane</code> to be selected.           * Sets the <code>JSChannelsPane</code> to be selected.
907           * @param pane The <code>JSChannelsPane</code> to be shown.           * @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          /**          /**
# Line 822  MainFrame extends org.jsampler.view.JSMa Line 920  MainFrame extends org.jsampler.view.JSMa
920           * @return <code>true</code> if the specified code>JSChannelsPane</code>           * @return <code>true</code> if the specified code>JSChannelsPane</code>
921           * is actually removed from the view, <code>false</code> otherwise.           * 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 868  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 963  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 970  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 1045  MainFrame extends org.jsampler.view.JSMa Line 1146  MainFrame extends org.jsampler.view.JSMa
1146                    
1147          protected void          protected void
1148          runScript() {          runScript() {
1149                  JFileChooser fc = new JFileChooser();                  File f = StdUtils.showOpenLscpFileChooser();
1150                  fc.setFileFilter(new LscpFileFilter());                  if(f == null) return;
1151                  int result = fc.showOpenDialog(this);                  runScript(f);
                 if(result != JFileChooser.APPROVE_OPTION) return;  
                   
                 runScript(fc.getSelectedFile());  
1152          }          }
1153                    
1154          private void          @Override
1155            public void
1156          runScript(String script) { runScript(new File(script)); }          runScript(String script) { runScript(new File(script)); }
1157                    
1158          private void          private void
# Line 1079  MainFrame extends org.jsampler.view.JSMa Line 1178  MainFrame extends org.jsampler.view.JSMa
1178                          return;                          return;
1179                  }                  }
1180                                    
1181                  if(!cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);                  if(preferences().getBoolProperty(SHOW_LS_CONSOLE_WHEN_RUN_SCRIPT)) {
1182                            if(!cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);
1183                    }
1184                                    
1185                  String s = script.getAbsolutePath();                  String s = script.getAbsolutePath();
1186                  recentScripts.remove(s);                  recentScripts.remove(s);
1187                  recentScripts.insertElementAt(s, 0);                  recentScripts.insertElementAt(s, 0);
1188                                    
                 while(recentScripts.size() > ClassicPrefs.getRecentScriptsSize()) {  
                         recentScripts.removeElementAt(recentScripts.size() - 1);  
                 }  
                   
1189                  updateRecentScriptsMenu();                  updateRecentScriptsMenu();
1190          }          }
1191                    
# Line 1100  MainFrame extends org.jsampler.view.JSMa Line 1197  MainFrame extends org.jsampler.view.JSMa
1197                    
1198          protected void          protected void
1199          updateRecentScriptsMenu() {          updateRecentScriptsMenu() {
1200                  while(recentScripts.size() > ClassicPrefs.getRecentScriptsSize()) {                  int size = preferences().getIntProperty(RECENT_LSCP_SCRIPTS_SIZE);
1201                    while(recentScripts.size() > size) {
1202                          recentScripts.removeElementAt(recentScripts.size() - 1);                          recentScripts.removeElementAt(recentScripts.size() - 1);
1203                  }                  }
1204                                    
# Line 1114  MainFrame extends org.jsampler.view.JSMa Line 1212  MainFrame extends org.jsampler.view.JSMa
1212                                    
1213                  recentScriptsMenu.setEnabled(recentScripts.size() != 0);                  recentScriptsMenu.setEnabled(recentScripts.size() != 0);
1214          }          }
1215            
1216            @Override
1217            public void
1218            installJSamplerHome() {
1219                    JSamplerHomeChooser chooser = new JSamplerHomeChooser(this);
1220                    chooser.setVisible(true);
1221                    if(chooser.isCancelled()) return;
1222                    
1223                    JSUtils.changeJSamplerHome(chooser.getJSamplerHome());
1224            }
1225            
1226            @Override
1227            public void
1228            showDetailedErrorMessage(Frame owner, String err, String details) {
1229                    JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1230                            owner, Res.iconWarning32, i18n.getError("error"), err, details
1231                    );
1232                    dlg.setVisible(true);
1233            }
1234            
1235            @Override
1236            public void
1237            showDetailedErrorMessage(Dialog owner, String err, String details) {
1238                    JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1239                            owner, Res.iconWarning32, i18n.getError("error"), err, details
1240                    );
1241                    dlg.setVisible(true);
1242            }
1243            
1244            /**
1245             * Gets the server address to which to connect. If the server should be
1246             * manually selected, a dialog asking the user to choose a server is displayed.
1247             */
1248            @Override
1249            public Server
1250            getServer() {
1251                    boolean b = preferences().getBoolProperty(MANUAL_SERVER_SELECT_ON_STARTUP);
1252                    return getServer(b);
1253            }
1254            
1255            /**
1256             * Gets the server address to which to connect. If the server should be
1257             * manually selected, a dialog asking the user to choose a server is displayed.
1258             * @param manualSelect Determines whether the server should be manually selected.
1259             */
1260            @Override
1261            public Server
1262            getServer(boolean manualSelect) {
1263                    if(manualSelect) {
1264                            JSConnectDlg dlg = new JSConnectDlg();
1265                            dlg.setVisible(true);
1266                            return dlg.getSelectedServer();
1267                    }
1268                    
1269                    int i = preferences().getIntProperty(SERVER_INDEX);
1270                    int size = CC.getServerList().getServerCount();
1271                    if(size == 0) return null;
1272                    if(i >= size) return CC.getServerList().getServer(0);
1273                    
1274                    return CC.getServerList().getServer(i);
1275            }
1276    
1277            private boolean processConnectionFailure = false;
1278    
1279            @Override
1280            public void
1281            handleConnectionFailure() {
1282                    if(processConnectionFailure) return;
1283                    processConnectionFailure = true;
1284                    CC.getTaskQueue().add(new Global.Disconnect());
1285                    JSConnectionFailurePane p = new JSConnectionFailurePane();
1286                    p.showDialog();
1287                    processConnectionFailure = false;
1288            }
1289  }  }

Legend:
Removed from v.911  
changed lines
  Added in v.1915

  ViewVC Help
Powered by ViewVC