/[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 2288 - (hide annotations) (download)
Wed Nov 23 21:19:44 2011 UTC (12 years, 5 months ago) by iliev
File size: 34372 byte(s)
* Added option to select a sampler engine in Add/Edit Instrument dialog
* Moved all Swing dependent code outside the JSampler core

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

  ViewVC Help
Powered by ViewVC