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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 842 - (hide annotations) (download)
Thu Mar 16 18:08:34 2006 UTC (18 years, 1 month ago) by iliev
File size: 17925 byte(s)
Updating to version 0.2a

1 iliev 787 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4     * Copyright (C) 2005 Grigor Kirilov Iliev
5     *
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 842 import java.awt.BorderLayout;
26     import java.awt.Color;
27 iliev 787 import java.awt.Container;
28 iliev 842 import java.awt.Cursor;
29     import java.awt.Dialog;
30 iliev 787 import java.awt.Dimension;
31     import java.awt.GraphicsEnvironment;
32     import java.awt.Font;
33     import java.awt.Frame;
34     import java.awt.GridBagConstraints;
35     import java.awt.GridBagLayout;
36     import java.awt.Insets;
37    
38     import java.awt.event.ActionEvent;
39     import java.awt.event.ActionListener;
40 iliev 842 import java.awt.event.ItemEvent;
41     import java.awt.event.ItemListener;
42     import java.awt.event.MouseAdapter;
43     import java.awt.event.MouseEvent;
44 iliev 787
45     import java.util.Locale;
46 iliev 842 import java.util.Vector;
47 iliev 787
48     import javax.swing.BorderFactory;
49     import javax.swing.Box;
50     import javax.swing.BoxLayout;
51 iliev 842 import javax.swing.DefaultButtonModel;
52 iliev 787 import javax.swing.JButton;
53 iliev 842 import javax.swing.JCheckBox;
54     import javax.swing.JColorChooser;
55 iliev 787 import javax.swing.JComboBox;
56     import javax.swing.JLabel;
57     import javax.swing.JOptionPane;
58     import javax.swing.JPanel;
59     import javax.swing.JPasswordField;
60     import javax.swing.JTabbedPane;
61     import javax.swing.JTextField;
62    
63 iliev 842 import javax.swing.event.ChangeEvent;
64     import javax.swing.event.ChangeListener;
65    
66 iliev 787 import net.sf.juife.EnhancedDialog;
67     import net.sf.juife.JuifeUtils;
68 iliev 842 import net.sf.juife.LinkButton;
69     import net.sf.juife.OkCancelDialog;
70 iliev 787
71 iliev 842 import org.jsampler.CC;
72 iliev 787 import org.jsampler.HF;
73     import org.jsampler.JSI18n;
74     import org.jsampler.JSampler;
75     import org.jsampler.Prefs;
76    
77 iliev 842 import org.jsampler.task.SetServerAddress;
78    
79 iliev 787 import static org.jsampler.view.classic.ClassicI18n.i18n;
80    
81    
82     /**
83     *
84     * @author Grigor Iliev
85     */
86     public class PrefsDlg extends EnhancedDialog {
87     private final ViewPane viewPane = new ViewPane();
88     private final GeneralPane genPane = new GeneralPane();
89     private final ConnectionPane conPane = new ConnectionPane();
90    
91     private final JButton btnApply = new JButton(i18n.getButtonLabel("apply"));
92     private final JButton btnClose = new JButton(i18n.getButtonLabel("close"));
93    
94    
95     public
96     PrefsDlg(Frame frm) {
97     super(frm, i18n.getLabel("PrefsDlg"), true);
98    
99     initPrefsDlg();
100     handleEvents();
101     initPrefs();
102    
103     setLocation(JuifeUtils.centerLocation(this, frm));
104     }
105    
106     private void
107     initPrefsDlg() {
108     JTabbedPane tp = new JTabbedPane();
109     tp.addTab(i18n.getLabel("PrefsDlg.tabGeneral"), genPane);
110     tp.addTab(i18n.getLabel("PrefsDlg.tabView"), viewPane);
111     tp.addTab(i18n.getLabel("PrefsDlg.tabConnection"), conPane);
112     tp.setAlignmentX(RIGHT_ALIGNMENT);
113    
114     // Set preferred size for Apply & Exit buttons
115     Dimension d = JuifeUtils.getUnionSize(btnApply, btnClose);
116     btnApply.setPreferredSize(d);
117     btnClose.setPreferredSize(d);
118    
119     JPanel btnPane = new JPanel();
120     btnPane.setLayout(new BoxLayout(btnPane, BoxLayout.X_AXIS));
121     btnPane.add(btnApply);
122     btnPane.add(Box.createRigidArea(new Dimension(5, 0)));
123     btnPane.add(btnClose);
124     btnPane.setAlignmentX(RIGHT_ALIGNMENT);
125    
126     JPanel mainPane = new JPanel();
127     mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
128     mainPane.add(tp);
129     mainPane.add(Box.createRigidArea(new Dimension(0, 12)));
130     mainPane.add(btnPane);
131     mainPane.setBorder(BorderFactory.createEmptyBorder(11, 12, 12, 12));
132    
133     getContentPane().add(mainPane);
134    
135     pack();
136     setResizable(false);
137     }
138    
139     private void
140     handleEvents() {
141     btnApply.addActionListener(new ActionListener() {
142     public void
143     actionPerformed(ActionEvent e) { onApply(); }
144     });
145    
146     btnClose.addActionListener(new ActionListener() {
147     public void
148     actionPerformed(ActionEvent e) { onExit(); }
149     });
150     }
151    
152     protected void
153     onOk() { onApply(); }
154    
155     protected void
156     onCancel() { onExit(); }
157    
158     private void
159     initPrefs() {
160     setLSAddress(Prefs.getLSAddress());
161     setLSPort(Prefs.getLSPort());
162     }
163    
164     private void
165     onApply() {
166 iliev 842 genPane.apply();
167     viewPane.apply();
168 iliev 787
169     // CONNECTION
170     Prefs.setLSAddress(getLSAddress());
171    
172 iliev 842 boolean b = true;
173 iliev 787 String s = getLSPort();
174     try {
175     if(s.length() > 0) {
176     int port = Integer.parseInt(s);
177     if(port > 0 && port < 0xffff)
178 iliev 842 Prefs.setLSPort(port);
179 iliev 787 else b = false;
180 iliev 842 } else Prefs.setLSPort(-1); // -1 resets to default value
181 iliev 787 } catch(NumberFormatException x) {
182     b = false;
183     }
184    
185     if(!b) {
186     JOptionPane.showMessageDialog (
187     this,
188     i18n.getError("PrefsDlg.invalidPort", s),
189     i18n.getError("error"),
190     JOptionPane.ERROR_MESSAGE
191     );
192    
193     return;
194     }
195    
196 iliev 842 //CC.getClient().setServerAddress(Prefs.getLSAddress());
197     //CC.getClient().setServerPort(Prefs.getLSPort());
198     CC.getTaskQueue().add (
199     new SetServerAddress(Prefs.getLSAddress(), Prefs.getLSPort())
200     );
201    
202 iliev 787 setVisible(false);
203     }
204    
205     private void
206     onExit() { setVisible(false); }
207    
208     private String
209     getLSAddress() { return conPane.getLSAddress().trim(); }
210    
211     private void
212     setLSAddress(String s) { conPane.setLSAddress(s); }
213    
214     private String
215     getLSPort() { return conPane.getLSPort().trim(); }
216    
217     private void
218     setLSPort(int port) { conPane.setLSPort(String.valueOf(port)); }
219     }
220    
221     class GeneralPane extends JPanel {
222 iliev 842 private final JCheckBox checkWindowSizeAndLocation =
223     new JCheckBox(i18n.getLabel("GeneralPane.checkWindowSizeAndLocation"));
224    
225 iliev 787 public
226     GeneralPane() { initGeneralPane(); }
227    
228     private void
229     initGeneralPane() {
230 iliev 842 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
231     add(checkWindowSizeAndLocation);
232 iliev 787
233 iliev 842 checkWindowSizeAndLocation.setSelected(Prefs.getSaveWindowProperties());
234    
235     checkWindowSizeAndLocation.addItemListener(new ItemListener() {
236     public void
237     itemStateChanged(ItemEvent e) {
238     boolean b = e.getStateChange() == e.SELECTED;
239     checkWindowSizeAndLocation.setEnabled(b);
240     }
241     });
242    
243    
244 iliev 787 }
245 iliev 842
246     protected void
247     apply() {
248     Prefs.setSaveWindowProperties(checkWindowSizeAndLocation.isSelected());
249     }
250 iliev 787 }
251    
252     class ViewPane extends JPanel {
253     private final JLabel lIfaceLanguage =
254     new JLabel(i18n.getLabel("ViewPane.lIfaceLanguage"));
255     private final JComboBox cbIfaceLanguage = new JComboBox();
256    
257     private final JLabel lIfaceFont =
258     new JLabel(i18n.getLabel("ViewPane.lIfaceFont"));
259     private final JComboBox cbIfaceFont = new JComboBox();
260    
261 iliev 842 private final JCheckBox checkBorderColor =
262     new JCheckBox(i18n.getLabel("ViewPane.channelBorderColor"));
263     private final ColorButton btnBorderColor = new ColorButton(Color.WHITE);
264    
265 iliev 787 public
266     ViewPane() { initViewPane(); }
267    
268     private void
269     initViewPane() {
270     cbIfaceLanguage.setMaximumSize (
271     new Dimension(Short.MAX_VALUE, cbIfaceLanguage.getPreferredSize().height)
272     );
273    
274     for(Locale l : JSI18n.getAvailableLocales()) {
275     LocaleBox box = new LocaleBox(l);
276     cbIfaceLanguage.addItem(box);
277     if ( l.getLanguage().equals(Prefs.getInterfaceLanguage()) &&
278     l.getCountry().equals(Prefs.getInterfaceCountry())
279     ) cbIfaceLanguage.setSelectedItem(box);
280     }
281    
282     cbIfaceFont.setMaximumSize (
283     new Dimension(Short.MAX_VALUE, cbIfaceFont.getPreferredSize().height)
284     );
285    
286     cbIfaceFont.addItem("[Default]");
287    
288     String[] fontS =
289     GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
290    
291     for(String f : fontS) cbIfaceFont.addItem(f);
292    
293     if(Prefs.getInterfaceFont() == null) cbIfaceFont.setSelectedItem("[Default]");
294     else cbIfaceFont.setSelectedItem(Prefs.getInterfaceFont());
295    
296     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
297    
298     JPanel ifacePane = new JPanel();
299     ifacePane.setLayout(new BoxLayout(ifacePane, BoxLayout.X_AXIS));
300     ifacePane.add(lIfaceLanguage);
301     ifacePane.add(Box.createRigidArea(new Dimension(5, 0)));
302     ifacePane.add(cbIfaceLanguage);
303    
304     add(ifacePane);
305    
306     add(Box.createRigidArea(new Dimension(0, 6)));
307    
308     JPanel fontPane = new JPanel();
309     fontPane.setLayout(new BoxLayout(fontPane, BoxLayout.X_AXIS));
310     fontPane.add(lIfaceFont);
311     fontPane.add(Box.createRigidArea(new Dimension(5, 0)));
312     fontPane.add(cbIfaceFont);
313    
314     add(fontPane);
315 iliev 842 add(Box.createRigidArea(new Dimension(0, 6)));
316     add(createCustomColorsPane());
317    
318 iliev 787 setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
319     }
320    
321 iliev 842 private JPanel
322     createCustomColorsPane() {
323     JPanel ccp = new JPanel();
324     ccp.setAlignmentX(CENTER_ALIGNMENT);
325     ccp.setLayout(new BoxLayout(ccp, BoxLayout.Y_AXIS));
326    
327     JPanel p = new JPanel();
328     p.setAlignmentX(LEFT_ALIGNMENT);
329     p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
330     p.add(checkBorderColor);
331    
332     p.add(Box.createRigidArea(new Dimension(6, 0)));
333    
334     btnBorderColor.setColor(ClassicPrefs.getChannelBorderColor());
335     btnBorderColor.setEnabled(ClassicPrefs.getCustomChannelBorderColor());
336     p.add(btnBorderColor);
337    
338     checkBorderColor.setSelected(ClassicPrefs.getCustomChannelBorderColor());
339    
340     checkBorderColor.addItemListener(new ItemListener() {
341     public void
342     itemStateChanged(ItemEvent e) {
343     boolean b = e.getStateChange() == e.SELECTED;
344     btnBorderColor.setEnabled(b);
345     }
346     });
347    
348     /*btnBorderColor.addActionListener(new ActionListener() {
349     public void
350     actionPerformed(ActionEvent e) {
351     ClassicPrefs.setChannelBorderColor(btnBorderColor.getColor());
352     }
353     });*/
354    
355     ccp.add(p);
356    
357     JButton btnDefaults = new JButton("Reset to defaults");
358     btnDefaults.addActionListener(new ActionListener() {
359     public void
360     actionPerformed(ActionEvent e) {
361     ClassicPrefs.setChannelBorderColor(null);
362     btnBorderColor.setColor(ClassicPrefs.getChannelBorderColor());
363     }
364     });
365    
366     p = new JPanel();
367     p.setAlignmentX(LEFT_ALIGNMENT);
368     p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
369     p.setBorder(BorderFactory.createEmptyBorder(6, 0, 6, 6));
370     p.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
371    
372     p.add(Box.createGlue());
373     p.add(btnDefaults);
374     p.add(Box.createGlue());
375    
376     ccp.add(p);
377    
378     ccp.setBorder (
379     BorderFactory.createTitledBorder(i18n.getLabel("ViewPane.CustomColorsPane"))
380     );
381    
382     ccp.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
383    
384     return ccp;
385     }
386    
387     private String
388 iliev 787 getInterfaceLanguage() {
389     LocaleBox box = (LocaleBox)cbIfaceLanguage.getSelectedItem();
390     if(box == null) return null;
391     return box.getLocale().getLanguage();
392     }
393    
394 iliev 842 private String
395 iliev 787 getInterfaceCountry() {
396     LocaleBox box = (LocaleBox)cbIfaceLanguage.getSelectedItem();
397     if(box == null) return null;
398     return box.getLocale().getCountry();
399     }
400    
401 iliev 842 private String
402 iliev 787 getInterfaceFontName() { return cbIfaceFont.getSelectedItem().toString(); }
403    
404 iliev 842 protected void
405     apply() {
406     boolean b = Prefs.setInterfaceLanguage(getInterfaceLanguage());
407     boolean b2 = Prefs.setInterfaceCountry(getInterfaceCountry());
408     if (b || b2) JOptionPane.showMessageDialog (
409     this,
410     i18n.getMessage("PrefsDlg.ifaceChangeInfo", "JS Classic"),
411     null,
412     JOptionPane.INFORMATION_MESSAGE
413     );
414    
415     b = false;
416     String fontName = getInterfaceFontName();
417     if(fontName.equals("[Default]")) {
418     b = Prefs.setInterfaceFont(null);
419     } else if(Prefs.setInterfaceFont(fontName)) {
420     HF.setUIDefaultFont(fontName);
421     b = true;
422     }
423    
424     if(b) JOptionPane.showMessageDialog (
425     this,
426     i18n.getMessage("PrefsDlg.ifaceFontChangeInfo", "JS Classic"),
427     null,
428     JOptionPane.INFORMATION_MESSAGE
429     );
430    
431     ///***///
432    
433     b = checkBorderColor.isSelected();
434     ClassicPrefs.setCustomChannelBorderColor(b);
435     if(b) ClassicPrefs.setChannelBorderColor(btnBorderColor.getColor());
436    
437     Color c;
438     if(b) c = ClassicPrefs.getChannelBorderColor();
439     else c = ClassicPrefs.getDefaultChannelBorderColor();
440     Channel.setBorderColor(c);
441     }
442    
443 iliev 787 class LocaleBox {
444     private Locale locale;
445    
446     LocaleBox(Locale locale) { this.locale = locale; }
447    
448     public Locale
449     getLocale() { return locale; }
450    
451     public String
452     toString() { return locale.getDisplayLanguage(JSI18n.i18n.getCurrentLocale()); }
453     }
454 iliev 842
455     private class ColorButton extends JPanel {
456     private Color color;
457     private final Vector<ActionListener> listeners = new Vector<ActionListener>();
458    
459     ColorButton(Color c) {
460     color = c;
461    
462     //setBorderPainted(false);
463     setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
464     setPreferredSize(new Dimension(42, 16));
465     setMaximumSize(new Dimension(42, 16));
466     setBorder(BorderFactory.createLineBorder(Color.BLACK));
467    
468     addMouseListener(new MouseAdapter() {
469     public void
470     mouseClicked(MouseEvent e) {
471     if(!isEnabled()) return;
472     if(e.getButton() == e.BUTTON1) showColorChooser();
473     }
474     });
475     }
476    
477     /**
478     * Registers the specified listener to be
479     * notified when the current color is changed.
480     * @param l The <code>ActionListener</code> to register.
481     */
482     public void
483     addActionListener(ActionListener l) { listeners.add(l); }
484    
485     /**
486     * Removes the specified listener.
487     * @param l The <code>ActionListener</code> to remove.
488     */
489     public void
490     removeActionListener(ActionListener l) { listeners.remove(l); }
491    
492     /** Notifies listeners that the current color is changed. */
493     private void
494     fireActionPerformed() {
495     ActionEvent e = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null);
496     for(ActionListener l : listeners) l.actionPerformed(e);
497     }
498    
499     public void
500     setEnabled(boolean b) {
501     setOpaque(b);
502     if(b) setBorder(BorderFactory.createLineBorder(Color.BLACK));
503     else setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
504     //setBorderPainted(!b);
505     super.setEnabled(b);
506     }
507    
508     private void
509     showColorChooser() {
510     ColorDlg dlg = new ColorDlg(getColor());
511     dlg.setVisible(true);
512     if(!dlg.isCancelled()) {
513     setColor(dlg.getColor());
514     fireActionPerformed();
515     }
516     }
517    
518     public Color
519     getColor() { return color; }
520    
521     public void
522     setColor(Color c) {
523     color = c;
524     setBackground(color);
525     }
526     }
527    
528     private class ColorDlg extends OkCancelDialog {
529     private final JColorChooser colorChooser = new JColorChooser();
530    
531     ColorDlg() { this(Color.WHITE); }
532    
533     ColorDlg(Color c) {
534     super((Dialog)JuifeUtils.getWindow(ViewPane.this));
535    
536     colorChooser.setPreviewPanel(new JPanel());
537     colorChooser.setColor(c);
538    
539     JPanel mainPane = new JPanel();
540     mainPane.setLayout(new BoxLayout(mainPane, BoxLayout.Y_AXIS));
541     mainPane.add(colorChooser);
542    
543     mainPane.add(Box.createRigidArea(new Dimension(0, 6)));
544    
545     final JPanel p = new JPanel();
546     p.setBackground(c);
547     p.setBorder(BorderFactory.createLineBorder(Color.BLACK));
548     mainPane.add(p);
549    
550     p.setPreferredSize(new Dimension(48, 8));
551     p.setMaximumSize(new Dimension(Short.MAX_VALUE, 8));
552    
553     setMainPane(mainPane);
554    
555     colorChooser.getSelectionModel().addChangeListener(new ChangeListener() {
556     public void
557     stateChanged(ChangeEvent e) { p.setBackground(getColor()); }
558     });
559     }
560    
561     protected void
562     onOk() { setVisible(false); }
563    
564     protected void
565     onCancel() { setVisible(false); }
566    
567     public Color
568     getColor() { return colorChooser.getColor(); }
569     }
570 iliev 787 }
571    
572     class ConnectionPane extends JPanel {
573     final LSPrefsPane lsPrefsPane = new LSPrefsPane();
574    
575     public
576     ConnectionPane() { initConnectionPane(); }
577    
578     private void
579     initConnectionPane() {
580     setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
581    
582     add(lsPrefsPane);
583     add(Box.createGlue());
584     setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
585     }
586    
587     public String
588     getLSAddress() { return lsPrefsPane.getLSAddress(); }
589    
590     public void
591     setLSAddress(String address) { lsPrefsPane.setLSAddress(address); }
592    
593     public String
594     getLSPort() { return lsPrefsPane.getLSPort(); }
595    
596     public void
597     setLSPort(String port) { lsPrefsPane.setLSPort(port); }
598     }
599    
600     class LSPrefsPane extends JPanel {
601     private final JLabel lAddress = new JLabel(i18n.getLabel("LSPrefsPane.Address"));
602     private final JLabel lPort = new JLabel(i18n.getLabel("LSPrefsPane.Port"));
603     private final JTextField tfAddress = new JTextField();
604     private final JTextField tfPort = new JTextField();
605    
606    
607     public
608     LSPrefsPane() { initLSPrefsPane(); }
609    
610     private void
611     initLSPrefsPane() {
612     GridBagLayout gridbag = new GridBagLayout();
613     GridBagConstraints c = new GridBagConstraints();
614    
615     setLayout(gridbag);
616    
617     // Set preferred size for username & password fields
618     int w1 = (int) tfAddress.getMinimumSize().getWidth();
619     int h1 = (int) tfAddress.getMinimumSize().getHeight();
620     Dimension d = new Dimension(w1 > 150 ? w1 : 150, h1);
621     tfAddress.setMinimumSize(d);
622     tfAddress.setPreferredSize(d);
623    
624     w1 = (int) tfPort.getMinimumSize().getWidth();
625     h1 = (int) tfPort.getMinimumSize().getHeight();
626     d = new Dimension(w1 > 150 ? w1 : 150, h1);
627     tfPort.setMinimumSize(d);
628     tfPort.setPreferredSize(d);
629    
630     c.fill = GridBagConstraints.NONE;
631    
632     c.gridx = 0;
633     c.gridy = 0;
634     c.anchor = GridBagConstraints.EAST;
635     c.insets = new Insets(3, 3, 3, 3);
636     gridbag.setConstraints(lAddress, c);
637     add(lAddress);
638    
639     c.gridx = 0;
640     c.gridy = 1;
641     gridbag.setConstraints(lPort, c);
642     add(lPort);
643    
644     c.fill = GridBagConstraints.HORIZONTAL;
645     c.gridx = 1;
646     c.gridy = 0;
647     c.weightx = 1.0;
648     c.anchor = GridBagConstraints.WEST;
649     gridbag.setConstraints(tfAddress, c);
650     add(tfAddress);
651    
652     c.gridx = 1;
653     c.gridy = 1;
654     gridbag.setConstraints(tfPort, c);
655     add(tfPort);
656    
657     setBorder(BorderFactory.createTitledBorder(i18n.getLabel("LSPrefsPane")));
658 iliev 842 setMaximumSize(new Dimension(Short.MAX_VALUE, getPreferredSize().height));
659 iliev 787 }
660    
661     public String
662     getLSAddress() { return tfAddress.getText(); }
663    
664     public void
665     setLSAddress(String address) { tfAddress.setText(address); }
666    
667     public String
668     getLSPort() { return tfPort.getText(); }
669    
670     public void
671     setLSPort(String port) { tfPort.setText(port); }
672     }

  ViewVC Help
Powered by ViewVC