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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1785 - (hide annotations) (download)
Tue Oct 7 00:07:14 2008 UTC (15 years, 7 months ago) by iliev
File size: 33883 byte(s)
* Fantasia: Implemented multiple channels panels
* Fantasia: Refactoring - all basic UI components moved to
  org.jsampler.view.fantasia.basic package

1 iliev 787 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1785 * Copyright (C) 2005-2008 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 787 *
6     * This file is part of JSampler.
7     *
8     * JSampler is free software; you can redistribute it and/or modify
9     * it under the terms of the GNU General Public License version 2
10     * as published by the Free Software Foundation.
11     *
12     * JSampler is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     * GNU General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with JSampler; if not, write to the Free Software
19     * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20     * MA 02111-1307 USA
21     */
22    
23     package org.jsampler.view.classic;
24    
25     import java.awt.BorderLayout;
26 iliev 911 import java.awt.Color;
27 iliev 1204 import java.awt.Dialog;
28 iliev 787 import java.awt.Dimension;
29 iliev 1204 import java.awt.Frame;
30 iliev 787
31     import java.awt.event.ActionEvent;
32     import java.awt.event.ActionListener;
33     import java.awt.event.KeyEvent;
34    
35 iliev 911 import java.io.BufferedReader;
36     import java.io.File;
37     import java.io.FileNotFoundException;
38     import java.io.FileReader;
39    
40 iliev 842 import java.util.logging.Level;
41 iliev 787 import java.util.Vector;
42    
43     import javax.swing.Action;
44     import javax.swing.ImageIcon;
45     import javax.swing.JCheckBoxMenuItem;
46 iliev 911 import javax.swing.JFileChooser;
47 iliev 787 import javax.swing.JMenu;
48     import javax.swing.JMenuBar;
49     import javax.swing.JMenuItem;
50     import javax.swing.JPanel;
51     import javax.swing.JSplitPane;
52     import javax.swing.JTabbedPane;
53     import javax.swing.KeyStroke;
54    
55     import javax.swing.event.ChangeEvent;
56     import javax.swing.event.ChangeListener;
57     import javax.swing.event.ListSelectionEvent;
58     import javax.swing.event.ListSelectionListener;
59    
60     import net.sf.juife.NavigationPage;
61    
62     import org.jsampler.CC;
63 iliev 911 import org.jsampler.HF;
64     import org.jsampler.LSConsoleModel;
65     import org.jsampler.OrchestraModel;
66 iliev 1688 import org.jsampler.Server;
67 iliev 787
68     import org.jsampler.view.JSChannel;
69     import org.jsampler.view.JSChannelsPane;
70 iliev 911 import org.jsampler.view.LscpFileFilter;
71 iliev 787
72 iliev 1688 import org.jsampler.view.std.JSConnectDlg;
73 iliev 1355 import org.jsampler.view.std.JSDetailedErrorDlg;
74 iliev 1567 import org.jsampler.view.std.JSQuitDlg;
75 iliev 1285 import org.jsampler.view.std.JSamplerHomeChooser;
76    
77     import static org.jsampler.view.classic.A4n.a4n;
78 iliev 787 import static org.jsampler.view.classic.ClassicI18n.i18n;
79 iliev 1285 import static org.jsampler.view.classic.ClassicPrefs.preferences;
80 iliev 787 import static org.jsampler.view.classic.LeftPane.getLeftPane;
81 iliev 1285 import static org.jsampler.view.std.StdPrefs.*;
82 iliev 787
83     /**
84     *
85     * @author Grigor Iliev
86     */
87     public class
88     MainFrame extends org.jsampler.view.JSMainFrame implements ChangeListener, ListSelectionListener {
89 iliev 1204 public static ImageIcon applicationIcon = Res.appIcon;
90 iliev 787
91 iliev 1143 private final ChannelsBar channelsBar = new ChannelsBar();
92 iliev 787 private final Statusbar statusbar = new Statusbar();
93     private final JMenuBar menuBar = new JMenuBar();
94 iliev 911 private final JMenu recentScriptsMenu =
95     new JMenu(i18n.getMenuLabel("actions.recentScripts"));
96     private final JMenu tabsMenu = new JMenu(i18n.getMenuLabel("channels.MoveToTab"));
97 iliev 787
98 iliev 911 private final JSplitPane vSplitPane;
99     private final JSplitPane hSplitPane;
100 iliev 787
101     private final JPanel mainPane = new JPanel();
102 iliev 1143 private final StandardBar standardBar = new StandardBar();
103 iliev 787 private final JPanel channelsPane = new JPanel(new BorderLayout());
104 iliev 911 private final JPanel rightPane = new JPanel();
105     private final JPanel bottomPane = new JPanel();
106     private final LSConsolePane lsConsolePane = new LSConsolePane(this);
107     private LSConsoleDlg lsConsoleDlg = null;
108 iliev 787
109     private final JTabbedPane tabbedPane =
110     new JTabbedPane(JTabbedPane.BOTTOM, JTabbedPane.SCROLL_TAB_LAYOUT);
111     private final Vector<JMenuItem> miList = new Vector<JMenuItem>();
112    
113 iliev 911 private final JCheckBoxMenuItem cbmiLeftPaneVisible =
114     new JCheckBoxMenuItem(i18n.getMenuLabel("view.leftPane"));
115    
116 iliev 1143 private final JCheckBoxMenuItem cbmiStandardBarVisible =
117     new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.standard"));
118    
119 iliev 911 private final JCheckBoxMenuItem cbmiLSConsoleShown =
120     new JCheckBoxMenuItem(i18n.getMenuLabel("view.lsconsole"));
121    
122     private boolean lsConsolePopOut;
123    
124     private final Vector<String> recentScripts = new Vector<String>();
125    
126    
127 iliev 1143 /** Creates a new instance of <code>MainFrame</code>. */
128 iliev 787 public
129     MainFrame() {
130     setTitle(i18n.getLabel("MainFrame.title"));
131    
132 iliev 1143 getContentPane().add(standardBar, BorderLayout.NORTH);
133 iliev 787 getContentPane().add(mainPane);
134    
135     mainPane.setLayout(new BorderLayout());
136     mainPane.add(statusbar, BorderLayout.SOUTH);
137    
138     ChannelsPane p = new ChannelsPane("Untitled");
139     p.addListSelectionListener(this);
140     getChannelsPaneList().add(p);
141     miList.add(new JMenuItem(new A4n.MoveChannelsTo(p)));
142    
143     channelsPane.add(getChannelsPane(0));
144    
145 iliev 911 bottomPane.setLayout(new BorderLayout());
146    
147     rightPane.setLayout(new BorderLayout());
148 iliev 1143
149     rightPane.add(channelsBar, BorderLayout.NORTH);
150 iliev 911 rightPane.add(channelsPane);
151    
152     hSplitPane = new JSplitPane (
153 iliev 787 JSplitPane.HORIZONTAL_SPLIT,
154     true, // continuousLayout
155     getLeftPane(),
156 iliev 911 rightPane
157 iliev 787 );
158    
159 iliev 911 hSplitPane.setOneTouchExpandable(true);
160     if(ClassicPrefs.getSaveWindowProperties()) {
161     hSplitPane.setDividerLocation(ClassicPrefs.getHSplitDividerLocation());
162     }
163 iliev 787
164 iliev 911 mainPane.add(hSplitPane);
165 iliev 787
166 iliev 911
167     vSplitPane = new JSplitPane (
168     JSplitPane.VERTICAL_SPLIT,
169     true, // continuousLayout
170     channelsPane,
171     bottomPane
172     );
173    
174     vSplitPane.setDividerSize(3);
175     vSplitPane.setDividerLocation(ClassicPrefs.getVSplitDividerLocation());
176    
177     rightPane.add(vSplitPane);
178    
179 iliev 787 if(applicationIcon != null) setIconImage(applicationIcon.getImage());
180    
181 iliev 842 initMainFrame();
182 iliev 911
183 iliev 787 pack();
184    
185 iliev 911 if(ClassicPrefs.getSaveWindowProperties()) setSavedSize();
186 iliev 842 else setDefaultSize();
187 iliev 911
188     if(ClassicPrefs.getSaveLeftPaneState()) {
189     NavigationPage page =
190     getLeftPane().getPages()[ClassicPrefs.getLeftPanePageIndex()];
191    
192     getLeftPane().getModel().addPage(page);
193     getLeftPane().getModel().clearHistory();
194    
195     int idx = ClassicPrefs.getCurrentOrchestraIndex();
196     if(idx >= 0 && idx < CC.getOrchestras().getOrchestraCount()) {
197     OrchestraModel om = CC.getOrchestras().getOrchestra(idx);
198     getLeftPane().getOrchestrasPage().setSelectedOrchestra(om);
199     }
200     }
201 iliev 1204
202     //CC.getInstrumentsDbTreeModel(); // used to initialize the db tree model
203 iliev 842 }
204    
205 iliev 911 /** Invoked when this window is about to close. */
206 iliev 1785 @Override
207 iliev 911 protected void
208     onWindowClose() {
209 iliev 1688 boolean b = preferences().getBoolProperty(CONFIRM_APP_QUIT);
210     if(b && CC.getSamplerModel().isModified()) {
211 iliev 1567 JSQuitDlg dlg = new JSQuitDlg(Res.iconQuestion32);
212     dlg.setVisible(true);
213     if(dlg.isCancelled()) return;
214     }
215    
216 iliev 911 if(ClassicPrefs.getSaveWindowProperties()) {
217     ClassicPrefs.setWindowMaximized (
218 iliev 1204 "Mainframe", (getExtendedState() & MAXIMIZED_BOTH) == MAXIMIZED_BOTH
219 iliev 911 );
220    
221     setVisible(false);
222 iliev 1204 if(ClassicPrefs.getWindowMaximized("Mainframe")) {
223 iliev 911 //setExtendedState(getExtendedState() & ~MAXIMIZED_BOTH);
224     CC.cleanExit();
225     return;
226     }
227    
228     java.awt.Point p = getLocation();
229     Dimension d = getSize();
230     StringBuffer sb = new StringBuffer();
231     sb.append(p.x).append(',').append(p.y).append(',');
232     sb.append(d.width).append(',').append(d.height);
233 iliev 1204 ClassicPrefs.setWindowSizeAndLocation("Mainframe", sb.toString());
234 iliev 911
235     ClassicPrefs.setHSplitDividerLocation(hSplitPane.getDividerLocation());
236     }
237    
238     if(ClassicPrefs.getSaveLeftPaneState()) {
239     int idx = 0;
240     for(int i = 0; i < getLeftPane().getPages().length; i++) {
241     if(getLeftPane().getPages()[i] == getLeftPane().getCurrentPage()) {
242     idx = i;
243     break;
244     }
245     }
246    
247     ClassicPrefs.setLeftPanePageIndex(idx);
248    
249     idx = getLeftPane().getOrchestrasPage().getCurrentOrchestraIndex();
250    
251     if(idx >= 0 && idx < CC.getOrchestras().getOrchestraCount())
252     ClassicPrefs.setCurrentOrchestraIndex(idx);
253     }
254    
255 iliev 1327 String[] list = recentScripts.toArray(new String[recentScripts.size()]);
256     preferences().setStringListProperty(RECENT_LSCP_SCRIPTS, list);
257 iliev 911
258 iliev 1285 if(preferences().getBoolProperty(SAVE_LS_CONSOLE_HISTORY)) {
259     lsConsolePane.saveConsoleHistory();
260     }
261 iliev 911
262     ClassicPrefs.setShowLSConsole(isLSConsoleShown());
263     ClassicPrefs.setLSConsolePopOut(isLSConsolePopOut());
264    
265     ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
266     super.onWindowClose();
267     }
268    
269 iliev 842 private void
270     initMainFrame() {
271     addMenu();
272     handleEvents();
273     }
274    
275     private void
276     setDefaultSize() {
277 iliev 787 Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
278     double width = dimension.getWidth();
279     double height = dimension.getHeight();
280     setBounds(50, 100, (int) width - 100, (int) height - 200);
281     }
282    
283     private void
284 iliev 842 setSavedSize() {
285 iliev 1204 String s = ClassicPrefs.getWindowSizeAndLocation("Mainframe");
286 iliev 842 if(s == null) {
287     setDefaultSize();
288     return;
289     }
290    
291     try {
292     int i = s.indexOf(',');
293     int x = Integer.parseInt(s.substring(0, i));
294    
295     s = s.substring(i + 1);
296     i = s.indexOf(',');
297     int y = Integer.parseInt(s.substring(0, i));
298    
299     s = s.substring(i + 1);
300     i = s.indexOf(',');
301     int width = Integer.parseInt(s.substring(0, i));
302    
303     s = s.substring(i + 1);
304     int height = Integer.parseInt(s);
305    
306     setBounds(x, y, width, height);
307     } catch(Exception x) {
308     String msg = "Parsing of window size and location string failed";
309     CC.getLogger().log(Level.INFO, msg, x);
310     setDefaultSize();
311     }
312    
313 iliev 1204 if(ClassicPrefs.getWindowMaximized("Mainframe"))
314 iliev 842 setExtendedState(getExtendedState() | MAXIMIZED_BOTH);
315 iliev 787 }
316    
317     private void
318     addMenu() {
319     JMenu m;
320     JMenuItem mi;
321    
322     setJMenuBar(menuBar);
323    
324     // Actions
325     m = new JMenu(i18n.getMenuLabel("actions"));
326     menuBar.add(m);
327    
328 iliev 1285 mi = new JMenuItem(a4n.refresh);
329 iliev 787 mi.setIcon(null);
330     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
331     m.add(mi);
332    
333 iliev 1688 mi = new JMenuItem(A4n.samplerInfo);
334 iliev 787 mi.setIcon(null);
335     m.add(mi);
336    
337 iliev 1688 mi = new JMenuItem(a4n.resetSampler);
338 iliev 787 mi.setIcon(null);
339     m.add(mi);
340    
341 iliev 1143 JMenu midiInstrMenu = new JMenu(i18n.getMenuLabel("actions.midiInstruments"));
342     m.add(midiInstrMenu);
343    
344     mi = new JMenuItem(A4n.addMidiInstrumentMap);
345     mi.setIcon(null);
346     midiInstrMenu.add(mi);
347    
348     mi = new JMenuItem(A4n.removeMidiInstrumentMap);
349     mi.setIcon(null);
350     midiInstrMenu.add(mi);
351    
352     mi = new JMenuItem(A4n.addMidiInstrumentWizard);
353     mi.setIcon(null);
354     midiInstrMenu.add(mi);
355    
356 iliev 787 m.addSeparator();
357    
358 iliev 1143 JMenu exportMenu = new JMenu(i18n.getMenuLabel("actions.export"));
359     m.add(exportMenu);
360    
361 iliev 1285 mi = new JMenuItem(a4n.exportSamplerConfig);
362 iliev 1143 mi.setIcon(null);
363     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK));
364     exportMenu.add(mi);
365    
366 iliev 1285 mi = new JMenuItem(a4n.exportMidiInstrumentMaps);
367 iliev 1143 mi.setIcon(null);
368     exportMenu.add(mi);
369    
370     m.addSeparator();
371    
372     mi = new JMenuItem(A4n.loadScript);
373 iliev 1688 mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
374 iliev 1143 mi.setIcon(null);
375 iliev 911 m.add(mi);
376    
377 iliev 1327 String[] list = preferences().getStringListProperty(RECENT_LSCP_SCRIPTS);
378     for(String s : list) recentScripts.add(s);
379 iliev 911
380     updateRecentScriptsMenu();
381    
382     m.add(recentScriptsMenu);
383    
384     m.addSeparator();
385    
386 iliev 1688 mi = new JMenuItem(a4n.changeBackend);
387     mi.setIcon(null);
388     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, KeyEvent.CTRL_MASK));
389     m.add(mi);
390    
391     m.addSeparator();
392    
393 iliev 787 mi = new JMenuItem(i18n.getMenuLabel("actions.exit"));
394     m.add(mi);
395     mi.addActionListener(new ActionListener() {
396     public void
397 iliev 1285 actionPerformed(ActionEvent e) { onWindowClose(); }
398 iliev 787 });
399    
400     // Edit
401     m = new JMenu(i18n.getMenuLabel("edit"));
402     menuBar.add(m);
403    
404 iliev 911 mi = new JMenuItem(i18n.getMenuLabel("edit.audioDevices"));
405     m.add(mi);
406     mi.addActionListener(new ActionListener() {
407     public void
408     actionPerformed(ActionEvent e) {
409     if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
410     LeftPane.getLeftPane().showAudioDevicesPage();
411     }
412     });
413    
414     mi = new JMenuItem(i18n.getMenuLabel("edit.midiDevices"));
415     m.add(mi);
416     mi.addActionListener(new ActionListener() {
417     public void
418     actionPerformed(ActionEvent e) {
419     if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
420     LeftPane.getLeftPane().showMidiDevicesPage();
421     }
422     });
423    
424     mi = new JMenuItem(i18n.getMenuLabel("edit.orchestras"));
425     m.add(mi);
426     mi.addActionListener(new ActionListener() {
427     public void
428     actionPerformed(ActionEvent e) {
429     if(!isLeftPaneVisible()) cbmiLeftPaneVisible.doClick(0);
430     LeftPane.getLeftPane().showManageOrchestrasPage();
431     }
432     });
433    
434 iliev 787 m.addSeparator();
435    
436     mi = new JMenuItem(A4n.preferences);
437     mi.setIcon(null);
438     mi.setAccelerator(KeyStroke.getKeyStroke (
439     KeyEvent.VK_P, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
440     ));
441     m.add(mi);
442    
443     // View
444     m = new JMenu(i18n.getMenuLabel("view"));
445     menuBar.add(m);
446    
447 iliev 1143 JMenu toolbarsMenu = new JMenu(i18n.getMenuLabel("view.toolbars"));
448     m.add(toolbarsMenu);
449    
450     toolbarsMenu.add(cbmiStandardBarVisible);
451     cbmiStandardBarVisible.addActionListener(new ActionListener() {
452     public void
453     actionPerformed(ActionEvent e) {
454     showStandardBar(cbmiStandardBarVisible.getState());
455     }
456     });
457    
458     boolean b = ClassicPrefs.shouldShowStandardBar();
459     cbmiStandardBarVisible.setSelected(b);
460     showStandardBar(b);
461    
462 iliev 787 final JCheckBoxMenuItem cbmi =
463 iliev 1143 new JCheckBoxMenuItem(i18n.getMenuLabel("view.toolbars.channels"));
464 iliev 787
465 iliev 1143 toolbarsMenu.add(cbmi);
466 iliev 787 cbmi.addActionListener(new ActionListener() {
467     public void
468 iliev 1143 actionPerformed(ActionEvent e) { showChannelsBar(cbmi.getState()); }
469 iliev 787 });
470    
471 iliev 1143 b = ClassicPrefs.shouldShowChannelsBar();
472 iliev 842 cbmi.setSelected(b);
473 iliev 1143 showChannelsBar(b);
474 iliev 842
475 iliev 911 m.add(cbmiLeftPaneVisible);
476     cbmiLeftPaneVisible.addActionListener(new ActionListener() {
477 iliev 787 public void
478 iliev 911 actionPerformed(ActionEvent e) {
479     showLeftPane(cbmiLeftPaneVisible.getState());
480     }
481 iliev 787 });
482    
483 iliev 842 b = ClassicPrefs.shouldShowLeftPane();
484 iliev 911 cbmiLeftPaneVisible.setSelected(b);
485 iliev 842 showLeftPane(b);
486    
487 iliev 787 final JCheckBoxMenuItem cbmi2 =
488     new JCheckBoxMenuItem(i18n.getMenuLabel("view.statusbar"));
489    
490     m.add(cbmi2);
491     cbmi2.addActionListener(new ActionListener() {
492     public void
493 iliev 842 actionPerformed(ActionEvent e) { showStatusbar(cbmi2.getState()); }
494 iliev 787 });
495 iliev 842 b = ClassicPrefs.shouldShowStatusbar();
496     cbmi2.setSelected(b);
497     showStatusbar(b);
498 iliev 787
499 iliev 911 m.addSeparator();
500    
501     setLSConsolePopOut(ClassicPrefs.isLSConsolePopOut());
502     cbmiLSConsoleShown.setSelected(ClassicPrefs.shouldShowLSConsole());
503     showLSConsole(ClassicPrefs.shouldShowLSConsole());
504    
505     cbmiLSConsoleShown.addActionListener(new ActionListener() {
506     public void
507     actionPerformed(ActionEvent e) {
508     showLSConsole(cbmiLSConsoleShown.isSelected());
509     }
510     });
511     m.add(cbmiLSConsoleShown);
512    
513     lsConsolePane.updateLSConsoleViewMode();
514    
515 iliev 787 // Channels
516     m = new JMenu(i18n.getMenuLabel("channels"));
517     menuBar.add(m);
518    
519     mi = new JMenuItem(A4n.newChannel);
520     mi.setIcon(null);
521     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_MASK));
522     m.add(mi);
523    
524     mi = new JMenuItem(A4n.newChannelWizard);
525     mi.setIcon(null);
526     mi.setAccelerator(KeyStroke.getKeyStroke (
527     KeyEvent.VK_N, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)
528     );
529     m.add(mi);
530    
531     mi = new JMenuItem(A4n.duplicateChannels);
532     mi.setIcon(null);
533     m.add(mi);
534    
535     m.addSeparator();
536    
537     mi = new JMenuItem(A4n.moveChannelsOnTop);
538     mi.setIcon(null);
539     mi.setAccelerator(KeyStroke.getKeyStroke (
540     KeyEvent.VK_UP, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
541     ));
542     m.add(mi);
543    
544     mi = new JMenuItem(A4n.moveChannelsUp);
545     mi.setIcon(null);
546     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.ALT_MASK));
547     m.add(mi);
548    
549     mi = new JMenuItem(A4n.moveChannelsDown);
550     mi.setIcon(null);
551     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.ALT_MASK));
552     m.add(mi);
553    
554     mi = new JMenuItem(A4n.moveChannelsAtBottom);
555     mi.setIcon(null);
556     mi.setAccelerator(KeyStroke.getKeyStroke (
557     KeyEvent.VK_DOWN, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
558     ));
559     m.add(mi);
560    
561     tabsMenu.setEnabled(false);
562     m.add(tabsMenu);
563    
564     m.addSeparator();
565    
566     mi = new JMenuItem(A4n.selectAllChannels);
567     mi.setIcon(null);
568     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
569     m.add(mi);
570    
571     mi = new JMenuItem(A4n.deselectChannels);
572     mi.setIcon(null);
573     mi.setAccelerator(KeyStroke.getKeyStroke (
574     KeyEvent.VK_A, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK
575     ));
576     m.add(mi);
577    
578     m.addSeparator();
579    
580     mi = new JMenuItem(A4n.removeChannels);
581     mi.setIcon(null);
582     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_MASK));
583     m.add(mi);
584    
585    
586     // Tabs
587     m = new JMenu(i18n.getMenuLabel("tabs"));
588     menuBar.add(m);
589    
590     mi = new JMenuItem(A4n.newChannelsTab);
591     mi.setIcon(null);
592     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, KeyEvent.CTRL_MASK));
593     m.add(mi);
594    
595     mi = new JMenuItem(A4n.editTabTitle);
596     mi.setIcon(null);
597     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
598     m.add(mi);
599    
600     m.addSeparator();
601    
602     mi = new JMenuItem(A4n.moveTab2Beginning);
603     mi.setIcon(null);
604     mi.setAccelerator(KeyStroke.getKeyStroke (
605     KeyEvent.VK_LEFT, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
606     ));
607     m.add(mi);
608    
609     mi = new JMenuItem(A4n.moveTab2Left);
610     mi.setIcon(null);
611     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.ALT_MASK));
612     m.add(mi);
613    
614     mi = new JMenuItem(A4n.moveTab2Right);
615     mi.setIcon(null);
616     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK));
617     m.add(mi);
618    
619     mi = new JMenuItem(A4n.moveTab2End);
620     mi.setIcon(null);
621     mi.setAccelerator(KeyStroke.getKeyStroke (
622     KeyEvent.VK_RIGHT, KeyEvent.ALT_MASK | KeyEvent.SHIFT_MASK
623     ));
624     m.add(mi);
625    
626     m.addSeparator();
627    
628     mi = new JMenuItem(A4n.closeChannelsTab);
629     mi.setIcon(null);
630     mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, KeyEvent.CTRL_MASK));
631     m.add(mi);
632    
633    
634 iliev 1204 // Window
635     m = new JMenu(i18n.getMenuLabel("window"));
636     menuBar.add(m);
637    
638     mi = new JMenuItem(A4n.windowInstrumentsDb);
639     mi.setIcon(null);
640     m.add(mi);
641    
642    
643 iliev 787 // Help
644     m = new JMenu(i18n.getMenuLabel("help"));
645    
646     mi = new JMenuItem(A4n.helpAbout);
647     mi.setIcon(null);
648     m.add(mi);
649 iliev 1496
650     m.addSeparator();
651    
652     mi = new JMenuItem(a4n.browseOnlineTutorial);
653     mi.setIcon(null);
654     m.add(mi);
655    
656     menuBar.add(m);
657 iliev 787 }
658    
659 iliev 911 private class RecentScriptHandler implements ActionListener {
660     private String script;
661    
662     RecentScriptHandler(String script) { this.script = script; }
663    
664 iliev 1785 @Override
665 iliev 911 public void
666     actionPerformed(ActionEvent e) { runScript(script); }
667     }
668    
669 iliev 787 private void
670 iliev 842 handleEvents() {
671     tabbedPane.addChangeListener(this);
672     }
673    
674     private void
675 iliev 1143 showChannelsBar(boolean b) {
676     channelsBar.setVisible(b);
677     ClassicPrefs.setShowChannelsBar(b);
678 iliev 842
679     validate();
680     repaint();
681     }
682    
683     private void
684     showStatusbar(boolean b) {
685     ClassicPrefs.setShowStatusbar(b);
686     statusbar.setVisible(b);
687     }
688    
689 iliev 911 protected boolean
690     isLeftPaneVisible() { return cbmiLeftPaneVisible.isSelected(); }
691    
692     protected void
693     setLeftPaneVisible(boolean b) {
694     if(b != cbmiLeftPaneVisible.isSelected()) cbmiLeftPaneVisible.doClick(0);
695     }
696    
697     protected boolean
698     isLSConsoleVisible() { return cbmiLSConsoleShown.isSelected(); }
699    
700     protected void
701     setLSConsoleVisible(boolean b) {
702     if(b != cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);
703     }
704    
705 iliev 842 private void
706 iliev 787 showLeftPane(boolean b) {
707 iliev 842 ClassicPrefs.setShowLeftPane(b);
708    
709 iliev 911 mainPane.remove(hSplitPane);
710     mainPane.remove(rightPane);
711 iliev 787
712     if(b) {
713 iliev 911 hSplitPane.setRightComponent(rightPane);
714     mainPane.add(hSplitPane);
715     if(ClassicPrefs.getSaveWindowProperties()) {
716     int i = ClassicPrefs.getHSplitDividerLocation();
717     hSplitPane.setDividerLocation(i);
718     }
719 iliev 787 } else {
720 iliev 911 mainPane.add(rightPane);
721 iliev 787 }
722    
723     validate();
724     repaint();
725     }
726    
727 iliev 911 private void
728 iliev 1143 showStandardBar(boolean b) {
729     ClassicPrefs.setShowStandardBar(b);
730     standardBar.setVisible(b);
731     validate();
732     repaint();
733     }
734    
735     private void
736 iliev 911 showBottomPane(boolean b) {
737     if(!b) ClassicPrefs.setVSplitDividerLocation(vSplitPane.getDividerLocation());
738    
739     rightPane.remove(vSplitPane);
740     rightPane.remove(channelsPane);
741    
742     if(b) {
743     vSplitPane.setTopComponent(channelsPane);
744     rightPane.add(vSplitPane);
745     vSplitPane.setDividerLocation(ClassicPrefs.getVSplitDividerLocation());
746     } else {
747     rightPane.add(channelsPane);
748     }
749    
750     validate();
751     repaint();
752     }
753    
754     protected void
755     setLSConsolePopOut(boolean b) {
756     if(b == lsConsolePopOut) return;
757    
758     lsConsolePopOut = b;
759    
760     if(isLSConsoleShown()) setLSConsolePopOut0(b);
761     }
762    
763     /**
764     * Changes the pop-out state of the LS Console.
765     * Invoke this method only when LS Console is shown.
766     */
767     private void
768     setLSConsolePopOut0(boolean b) {
769     if(b) {
770     bottomPane.remove(lsConsolePane);
771     showBottomPane(false);
772    
773     lsConsoleDlg = new LSConsoleDlg(this, lsConsolePane);
774     lsConsoleDlg.setVisible(true);
775     } else {
776     if(lsConsoleDlg != null) lsConsoleDlg.setVisible(false);
777     lsConsoleDlg = null;
778     bottomPane.add(lsConsolePane);
779     showBottomPane(true);
780     }
781     }
782    
783     protected boolean
784     isLSConsolePopOut() { return lsConsolePopOut; }
785    
786     protected boolean
787     isLSConsoleShown() { return cbmiLSConsoleShown.isSelected(); }
788    
789     protected void
790     setLSConsoleShown(boolean b) { cbmiLSConsoleShown.setSelected(b); }
791    
792     protected LSConsoleModel
793     getLSConsoleModel() { return lsConsolePane.getModel(); }
794    
795     /**
796     * Sets the text color of the LS Console.
797     * @param c The text color of the LS Console.
798     */
799     protected void
800     setLSConsoleTextColor(Color c) { lsConsolePane.setTextColor(c); }
801    
802     /**
803     * Sets the background color of the LS Console.
804     * @param c The background color of the LS Console.
805     */
806     protected void
807     setLSConsoleBackgroundColor(Color c) { lsConsolePane.setBackgroundColor(c); }
808    
809     /**
810     * Sets the notification messages' color of the LS Console.
811     * @param c The notification messages' color of the LS Console.
812     */
813     protected void
814     setLSConsoleNotifyColor(Color c) { lsConsolePane.setNotifyColor(c); }
815    
816     /**
817     * Sets the warning messages' color of the LS Console.
818     * @param c The warning messages' color of the LS Console.
819     */
820     protected void
821     setLSConsoleWarningColor(Color c) { lsConsolePane.setWarningColor(c); }
822    
823     /**
824     * Sets the error messages' color of the LS Console.
825     * @param c The error messages' color of the LS Console.
826     */
827     protected void
828     setLSConsoleErrorColor(Color c) { lsConsolePane.setErrorColor(c); }
829    
830     protected void
831     showLSConsole(boolean b) {
832     if(!b) {
833     showBottomPane(false);
834     if(lsConsoleDlg != null) lsConsoleDlg.setVisible(false);
835     lsConsolePane.hideAutoCompleteWindow();
836     return;
837     }
838    
839     setLSConsolePopOut0(isLSConsolePopOut());
840     }
841    
842     /**
843     * Adds the specified <code>JSChannelsPane</code> to the view.
844     * @param chnPane The <code>JSChannelsPane</code> to be added.
845     */
846 iliev 1785 @Override
847 iliev 787 public void
848     addChannelsPane(JSChannelsPane chnPane) {
849     insertChannelsPane(chnPane, getChannelsPaneCount());
850     }
851    
852 iliev 1785 @Override
853 iliev 787 public void
854     insertChannelsPane(JSChannelsPane chnPane, int idx) {
855     chnPane.addListSelectionListener(this);
856    
857     if(getChannelsPaneCount() == 1) {
858     channelsPane.remove(getChannelsPane(0));
859     channelsPane.add(tabbedPane);
860     tabbedPane.addTab(getChannelsPane(0).getTitle(), getChannelsPane(0));
861     A4n.closeChannelsTab.setEnabled(true);
862     A4n.editTabTitle.setEnabled(true);
863     }
864    
865     getChannelsPaneList().insertElementAt(chnPane, idx);
866     tabbedPane.insertTab(chnPane.getTitle(), null, chnPane, null, idx);
867     tabbedPane.setSelectedComponent(chnPane);
868     miList.insertElementAt(new JMenuItem(new A4n.MoveChannelsTo(chnPane)), idx);
869    
870     updateTabsMenu();
871     }
872    
873 iliev 911 /**
874     * Gets the <code>JSChannelsPane</code> that is currently shown.
875     * @return The currently shown <code>JSChannelsPane</code>.
876     */
877 iliev 1785 @Override
878 iliev 787 public JSChannelsPane
879     getSelectedChannelsPane() {
880     if(getChannelsPaneList().size() == 1) return getChannelsPane(0);
881     return (JSChannelsPane)tabbedPane.getSelectedComponent();
882     }
883    
884 iliev 911 /**
885     * Sets the <code>JSChannelsPane</code> to be selected.
886     * @param pane The <code>JSChannelsPane</code> to be shown.
887     */
888 iliev 1785 @Override
889 iliev 787 public void
890     setSelectedChannelsPane(JSChannelsPane pane) {
891     if(getChannelsPaneList().size() == 1) return;
892     tabbedPane.setSelectedComponent(pane);
893 iliev 1785 fireChannelsPaneSelectionChanged();
894 iliev 787 }
895    
896 iliev 911 /**
897     * Removes the specified <code>JSChannelsPane</code> from the view.
898     * @param chnPane The <code>JSChannelsPane</code> to be removed.
899     * @return <code>true</code> if the specified code>JSChannelsPane</code>
900     * is actually removed from the view, <code>false</code> otherwise.
901     */
902 iliev 1785 @Override
903 iliev 787 public boolean
904     removeChannelsPane(JSChannelsPane chnPane) {
905     chnPane.removeListSelectionListener(this);
906    
907     tabbedPane.remove(chnPane);
908     boolean b = super.removeChannelsPane(chnPane);
909     for(int i = 0; i < miList.size(); i++) {
910     A4n.MoveChannelsTo a = (A4n.MoveChannelsTo)miList.get(i).getAction();
911     if(a.getChannelsPane().equals(chnPane)) {
912     miList.remove(i);
913     break;
914     }
915     }
916    
917     updateTabsMenu();
918    
919     if(getChannelsPaneCount() == 1) {
920     A4n.closeChannelsTab.setEnabled(false);
921     A4n.editTabTitle.setEnabled(false);
922     tabbedPane.remove(getChannelsPane(0));
923     channelsPane.remove(tabbedPane);
924     channelsPane.add(getChannelsPane(0));
925     }
926    
927     return b;
928     }
929    
930     private void
931     updateTabsMenu() {
932     tabsMenu.removeAll();
933    
934     for(JMenuItem mi : miList) {
935     A4n.MoveChannelsTo a = (A4n.MoveChannelsTo)mi.getAction();
936     if(!a.getChannelsPane().equals(getSelectedChannelsPane())) tabsMenu.add(mi);
937     }
938    
939     }
940    
941     public void
942     updateTabTitle(JSChannelsPane chnPane) {
943     tabbedPane.setTitleAt(tabbedPane.getSelectedIndex(), chnPane.getTitle());
944     }
945    
946     private void
947     checkChannelSelection(JSChannelsPane pane) {
948     if(!pane.hasSelectedChannel()) {
949     A4n.duplicateChannels.putValue (
950     Action.NAME, i18n.getMenuLabel("channels.duplicate")
951     );
952     A4n.duplicateChannels.setEnabled(false);
953    
954     A4n.removeChannels.putValue (
955     Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
956     );
957     A4n.removeChannels.setEnabled(false);
958    
959     tabsMenu.setEnabled(false);
960    
961     A4n.moveChannelsOnTop.setEnabled(false);
962     A4n.moveChannelsUp.setEnabled(false);
963     A4n.moveChannelsDown.setEnabled(false);
964     A4n.moveChannelsAtBottom.setEnabled(false);
965    
966     return;
967     }
968    
969     A4n.duplicateChannels.setEnabled(true);
970     A4n.removeChannels.setEnabled(true);
971    
972     if(getChannelsPaneCount() > 1) tabsMenu.setEnabled(true);
973    
974     if(pane.getSelectedChannelCount() > 1) {
975     A4n.duplicateChannels.putValue (
976     Action.NAME, i18n.getMenuLabel("channels.duplicateChannels")
977     );
978     A4n.removeChannels.putValue (
979     Action.NAME, i18n.getMenuLabel("channels.RemoveChannels")
980     );
981     } else {
982     A4n.duplicateChannels.putValue (
983     Action.NAME, i18n.getMenuLabel("channels.duplicate")
984     );
985     A4n.removeChannels.putValue (
986     Action.NAME, i18n.getMenuLabel("channels.RemoveChannel")
987     );
988     }
989    
990     A4n.moveChannelsOnTop.setEnabled(false);
991     A4n.moveChannelsUp.setEnabled(true);
992     A4n.moveChannelsDown.setEnabled(true);
993     A4n.moveChannelsAtBottom.setEnabled(false);
994    
995     JSChannel[] chns = pane.getSelectedChannels();
996    
997     for(int i = 0; i < chns.length; i++) {
998     if(pane.getChannel(i) != chns[i]) {
999     A4n.moveChannelsOnTop.setEnabled(true);
1000     break;
1001     }
1002     }
1003    
1004     if(chns[0] == pane.getFirstChannel()) A4n.moveChannelsUp.setEnabled(false);
1005    
1006     if(chns[chns.length - 1] == pane.getLastChannel())
1007     A4n.moveChannelsDown.setEnabled(false);
1008    
1009     for(int i = chns.length - 1, j = pane.getChannelCount() - 1; i >= 0; i--, j--) {
1010     if(pane.getChannel(j) != chns[i]) {
1011     A4n.moveChannelsAtBottom.setEnabled(true);
1012     break;
1013     }
1014     }
1015     }
1016    
1017     private void
1018     checkTabSelection() {
1019     int si = tabbedPane.getSelectedIndex();
1020    
1021     if(si > 0) {
1022     A4n.moveTab2Beginning.setEnabled(true);
1023     A4n.moveTab2Left.setEnabled(true);
1024     } else {
1025     A4n.moveTab2Beginning.setEnabled(false);
1026     A4n.moveTab2Left.setEnabled(false);
1027     }
1028    
1029     if(si != -1 && si < tabbedPane.getTabCount() - 1) {
1030     A4n.moveTab2Right.setEnabled(true);
1031     A4n.moveTab2End.setEnabled(true);
1032     } else {
1033     A4n.moveTab2Right.setEnabled(false);
1034     A4n.moveTab2End.setEnabled(false);
1035     }
1036     }
1037    
1038     /*public JTabbedPane
1039     getTabbedPane() { return tabbedPane; }*/
1040    
1041     public JMenu
1042     getTabsMenu() { return tabsMenu; }
1043    
1044 iliev 1785 @Override
1045 iliev 787 public void
1046     stateChanged(ChangeEvent e) {
1047     updateTabsMenu();
1048     checkChannelSelection(getSelectedChannelsPane());
1049     checkTabSelection();
1050     }
1051    
1052 iliev 1785 @Override
1053 iliev 787 public void
1054     valueChanged(ListSelectionEvent e) {
1055     if(e.getValueIsAdjusting()) return;
1056     if(e.getSource() != getSelectedChannelsPane()) return;
1057    
1058     checkChannelSelection(getSelectedChannelsPane());
1059     }
1060    
1061     public void
1062     moveTab2Beginning() {
1063     int idx = tabbedPane.getSelectedIndex();
1064     if(idx < 1) {
1065     CC.getLogger().info("Can't move tab to beginning");
1066     return;
1067     }
1068    
1069     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
1070     if(getChannelsPane(idx) != c)
1071     CC.getLogger().warning("Channels pane indices don't match");
1072     removeChannelsPane(c);
1073     insertChannelsPane(c, 0);
1074     tabbedPane.setSelectedComponent(c);
1075     }
1076    
1077     public void
1078     moveTab2Left() {
1079     int idx = tabbedPane.getSelectedIndex();
1080     if(idx < 1) {
1081     CC.getLogger().info("Can't move tab to left");
1082     return;
1083     }
1084    
1085    
1086     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
1087     if(getChannelsPane(idx) != c)
1088     CC.getLogger().warning("Channels pane indices don't match");
1089     removeChannelsPane(c);
1090     insertChannelsPane(c, idx - 1);
1091     tabbedPane.setSelectedComponent(c);
1092     }
1093    
1094     public void
1095     moveTab2Right() {
1096     int idx = tabbedPane.getSelectedIndex();
1097     if(idx == -1 && idx >= tabbedPane.getTabCount()) {
1098     CC.getLogger().info("Can't move tab to right");
1099     return;
1100     }
1101    
1102     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
1103     if(getChannelsPane(idx) != c)
1104     CC.getLogger().warning("Channels pane indices don't match");
1105     removeChannelsPane(c);
1106     insertChannelsPane(c, idx + 1);
1107     tabbedPane.setSelectedComponent(c);
1108     }
1109    
1110     public void
1111     moveTab2End() {
1112     int idx = tabbedPane.getSelectedIndex();
1113     if(idx == -1 && idx >= tabbedPane.getTabCount()) {
1114     CC.getLogger().info("Can't move tab to right");
1115     return;
1116     }
1117    
1118     JSChannelsPane c = (JSChannelsPane)tabbedPane.getSelectedComponent();
1119     if(getChannelsPane(idx) != c)
1120     CC.getLogger().warning("Channels pane indices don't match");
1121     removeChannelsPane(c);
1122     addChannelsPane(c);
1123     tabbedPane.setSelectedComponent(c);
1124     }
1125 iliev 911
1126     protected void
1127     runScript() {
1128 iliev 1285 String s = preferences().getStringProperty("lastScriptLocation");
1129     JFileChooser fc = new JFileChooser(s);
1130 iliev 911 fc.setFileFilter(new LscpFileFilter());
1131     int result = fc.showOpenDialog(this);
1132     if(result != JFileChooser.APPROVE_OPTION) return;
1133    
1134 iliev 1143 String path = fc.getCurrentDirectory().getAbsolutePath();
1135 iliev 1285 preferences().setStringProperty("lastScriptLocation", path);
1136 iliev 1143
1137 iliev 911 runScript(fc.getSelectedFile());
1138     }
1139    
1140     private void
1141     runScript(String script) { runScript(new File(script)); }
1142    
1143     private void
1144     runScript(File script) {
1145     FileReader fr;
1146     try { fr = new FileReader(script); }
1147     catch(FileNotFoundException e) {
1148     HF.showErrorMessage(i18n.getMessage("FileNotFound!"));
1149     return;
1150     }
1151    
1152     BufferedReader br = new BufferedReader(fr);
1153    
1154     try {
1155     String s = br.readLine();
1156     while(s != null) {
1157     getLSConsoleModel().setCommandLineText(s);
1158     getLSConsoleModel().execCommand();
1159     s = br.readLine();
1160     }
1161     } catch(Exception e) {
1162     HF.showErrorMessage(e);
1163     return;
1164     }
1165    
1166 iliev 1285 if(preferences().getBoolProperty(SHOW_LS_CONSOLE_WHEN_RUN_SCRIPT)) {
1167     if(!cbmiLSConsoleShown.isSelected()) cbmiLSConsoleShown.doClick(0);
1168     }
1169 iliev 911
1170     String s = script.getAbsolutePath();
1171     recentScripts.remove(s);
1172     recentScripts.insertElementAt(s, 0);
1173    
1174     updateRecentScriptsMenu();
1175     }
1176    
1177     protected void
1178     clearRecentScripts() {
1179     recentScripts.removeAllElements();
1180     updateRecentScriptsMenu();
1181     }
1182    
1183     protected void
1184     updateRecentScriptsMenu() {
1185 iliev 1285 int size = preferences().getIntProperty(RECENT_LSCP_SCRIPTS_SIZE);
1186     while(recentScripts.size() > size) {
1187 iliev 911 recentScripts.removeElementAt(recentScripts.size() - 1);
1188     }
1189    
1190     recentScriptsMenu.removeAll();
1191    
1192     for(String script : recentScripts) {
1193     JMenuItem mi = new JMenuItem(script);
1194     recentScriptsMenu.add(mi);
1195     mi.addActionListener(new RecentScriptHandler(script));
1196     }
1197    
1198     recentScriptsMenu.setEnabled(recentScripts.size() != 0);
1199     }
1200 iliev 1143
1201 iliev 1785 @Override
1202 iliev 1143 public void
1203     installJSamplerHome() {
1204     JSamplerHomeChooser chooser = new JSamplerHomeChooser(this);
1205     chooser.setVisible(true);
1206     if(chooser.isCancelled()) return;
1207    
1208     CC.changeJSamplerHome(chooser.getJSamplerHome());
1209     }
1210 iliev 1204
1211 iliev 1785 @Override
1212 iliev 1204 public void
1213     showDetailedErrorMessage(Frame owner, String err, String details) {
1214 iliev 1355 JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1215     owner, Res.iconWarning32, i18n.getError("error"), err, details
1216     );
1217     dlg.setVisible(true);
1218 iliev 1204 }
1219    
1220 iliev 1785 @Override
1221 iliev 1204 public void
1222     showDetailedErrorMessage(Dialog owner, String err, String details) {
1223 iliev 1355 JSDetailedErrorDlg dlg = new JSDetailedErrorDlg (
1224     owner, Res.iconWarning32, i18n.getError("error"), err, details
1225     );
1226     dlg.setVisible(true);
1227 iliev 1204 }
1228 iliev 1688
1229     /**
1230     * Gets the server address to which to connect. If the server should be
1231     * manually selected, a dialog asking the user to choose a server is displayed.
1232     */
1233 iliev 1785 @Override
1234 iliev 1688 public Server
1235     getServer() {
1236     boolean b = preferences().getBoolProperty(MANUAL_SERVER_SELECT_ON_STARTUP);
1237     return getServer(b);
1238     }
1239    
1240     /**
1241     * Gets the server address to which to connect. If the server should be
1242     * manually selected, a dialog asking the user to choose a server is displayed.
1243     * @param manualSelect Determines whether the server should be manually selected.
1244     */
1245 iliev 1785 @Override
1246 iliev 1688 public Server
1247     getServer(boolean manualSelect) {
1248     if(manualSelect) {
1249     JSConnectDlg dlg = new JSConnectDlg();
1250     dlg.setVisible(true);
1251     return dlg.getSelectedServer();
1252     }
1253    
1254     int i = preferences().getIntProperty(SERVER_INDEX);
1255     int size = CC.getServerList().getServerCount();
1256     if(size == 0) return null;
1257     if(i >= size) return CC.getServerList().getServer(0);
1258    
1259     return CC.getServerList().getServer(i);
1260     }
1261 iliev 787 }

  ViewVC Help
Powered by ViewVC