Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/fm/gui/fmSettingsDialog.java


1   /****************************************************************************
2    * Copyright (c) 2003 Andrew Duka | aduka@users.sourceforge.net
3    * All right reserved.
4    *
5    * This program is free software; you can redistribute it and/or
6    * modify it under the terms of the GNU Lesser General Public
7    * License as published by the Free Software Foundation; either
8    * version 2.1 of the License, or (at your option) any later version.
9    *
10   ****************************************************************************/
11  package com.fm.gui;
12  
13  import com.fm.rss.ChannelStorage;
14  import com.fm.rss.rssParseException;
15  
16  import javax.swing.*;
17  import java.util.ResourceBundle;
18  import java.util.Properties;
19  import java.awt.event.*;
20  import java.awt.*;
21  import java.io.IOException;
22  import java.io.File;
23  
24  /**
25   * feedMan settings dialog
26   */
27  public class fmSettingsDialog extends JDialog
28  {
29      private static final int PREFFERED_WIDTH = 430;
30      private fmFrame parent;
31      /**
32       * Default constructor
33       */
34      public fmSettingsDialog(fmFrame p, Properties props)
35      {
36          super();
37  
38          setTitle(fmUITheme.getString("dialog.edit_settings"));
39  
40          //Dimension prefferedDimension = new Dimension(400,300);
41  
42          parent = p;
43          setLocationRelativeTo(p);
44  
45  
46          Container contentPane = this.getContentPane();
47          contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
48  
49          // Tabbed Pane
50          final JTabbedPane setsPagesPane = new JTabbedPane();
51  
52          setsPagesPane.setTabPlacement(JTabbedPane.TOP);
53          setsPagesPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
54          //setsPagesPane.setBorder(fmUITheme.FM_BUTTON_BORDER);
55  
56          // Fonts
57          fontsPanel fontSettings = new fontsPanel(props);
58          fontSettings.setToolTipText(fmUITheme.getString("pane.appearance.tooltip"));
59          setsPagesPane.addTab(fmUITheme.getString("pane.appearance.label"), fontSettings);
60  
61          // Browser Settings
62          browserSettingsPanel browserSettings = new browserSettingsPanel(props);
63          browserSettings.setToolTipText(fmUITheme.getString("pane.browser.tooltip"));
64          setsPagesPane.addTab(fmUITheme.getString("pane.browser.label"), browserSettings);
65          setsPagesPane.setAlignmentX(RIGHT_ALIGNMENT);
66  
67  
68          contentPane.add(setsPagesPane);
69  
70  
71          // bottom row buttons
72          JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
73          bottomPanel.setAlignmentX(RIGHT_ALIGNMENT);
74  
75  
76          // APPLY
77          JButton brButton = fmUITheme.getButtonInstance("button.ok_settings.label",
78                                                         "button.ok_settings.tooltip",
79                                                          KeyEvent.VK_O);
80          brButton.addActionListener(new ActionListener() {
81              public void actionPerformed(ActionEvent e)
82              {
83                  for (int i=0,n = setsPagesPane.getTabCount(); i < n; i++)
84                  {
85                      JPanel p = (JPanel) setsPagesPane.getComponentAt(i);
86                      if (p instanceof SettingsPanel) {
87                          try {
88                              ((SettingsPanel)p).apply();
89                          }
90                          catch (Exception ae) {
91                              ae.printStackTrace();
92                          }
93  
94                      }
95                  }
96                  parent.performLookAndFeelUpdate();
97                  setVisible(false);
98              }
99  
100         });
101         bottomPanel.add(brButton);
102 
103 
104         brButton = fmUITheme.getButtonInstance("button.apply.label",
105                                                "button.apply.tooltip",
106                                                 KeyEvent.VK_A);
107         brButton.addActionListener(new ActionListener() {
108             public void actionPerformed(ActionEvent e)
109             {
110                 JPanel p = (JPanel) setsPagesPane.getSelectedComponent();
111                 if (p instanceof SettingsPanel) {
112                     ((SettingsPanel)p).apply();
113                     parent.performLookAndFeelUpdate();
114                 }
115             }
116 
117         });
118         bottomPanel.add(brButton);
119 
120 
121         // CANCEL
122         brButton = fmUITheme.getButtonInstance("button.cancel.label",
123                                                "button.cancel.tooltip",
124                                                 KeyEvent.VK_C);
125         brButton.addActionListener(new ActionListener() {
126             public void actionPerformed(ActionEvent e)
127             {
128                 dispose();
129             }
130 
131         });
132         bottomPanel.add(brButton);
133 
134         contentPane.add(Box.createVerticalStrut(10));
135         contentPane.add(bottomPanel);
136 
137         addWindowListener(new WindowAdapter() {
138             public void windowClosing(WindowEvent e)
139             {
140                 dispose();
141             }
142         });
143 
144 
145 
146     }
147 
148     // Defines apply method which must be supported by all settings panels
149     private interface SettingsPanel {
150         /** Apply current settings */
151         public void apply();
152     }
153 
154 
155 
156     /**
157      * Panel with font settings
158      */
159     private class fontsPanel extends JPanel implements SettingsPanel
160     {
161         Properties runtimeProperties;
162         JComboBox treeFontFamily;
163         JComboBox treeFontSize;
164 
165         JComboBox contentFontFamily;
166         JComboBox contentFontSize;
167 
168         JComboBox headersFontFamily;
169         JComboBox headersFontSize;
170 
171         public fontsPanel(Properties runP) {
172 
173             super();
174             super.setPreferredSize(new Dimension(PREFFERED_WIDTH,250));
175             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
176             super.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
177 
178             String[]  fontFamilies = new String[]{"Serif","SansSerif", "Monospaced"};
179             Integer[] fontSizes = new Integer[]{new Integer(5),
180                                                 new Integer(7),
181                                                 new Integer(9),
182                                                 new Integer(10),
183                                                 new Integer(12),
184                                                 new Integer(13),
185                                                 new Integer(14),
186                                                 new Integer(15),
187                                                 new Integer(17),
188                                                 new Integer(19),
189                                                 new Integer(22)};
190 
191 
192 
193             runtimeProperties = runP;
194 
195             JPanel treeFontPanel = new JPanel();
196             treeFontPanel.setBorder(BorderFactory.createTitledBorder(fmUITheme.getString("label.tree_font")));
197             treeFontPanel.setLayout(new BoxLayout(treeFontPanel, BoxLayout.X_AXIS));
198 
199             treeFontFamily = new JComboBox(fontFamilies);
200             treeFontFamily.setMaximumSize(treeFontFamily.getPreferredSize());
201             treeFontFamily.setSelectedItem(fmUITheme.TREE_FONT.getFamily());
202 
203             treeFontSize = new JComboBox(fontSizes);
204             treeFontSize.setMaximumSize(treeFontSize.getPreferredSize());
205             treeFontSize.setSelectedItem(new Integer(fmUITheme.TREE_FONT.getSize()));
206 
207 
208 
209             treeFontPanel.add(Box.createHorizontalStrut(5));
210             treeFontPanel.add(new JLabel(fmUITheme.getString("label.family")));
211             treeFontPanel.add(Box.createHorizontalStrut(3));
212 
213             treeFontPanel.add(treeFontFamily);
214             treeFontPanel.add(Box.createHorizontalStrut(15));
215             //treeFontPanel.add(treeFontFace);
216             treeFontPanel.add(new JLabel(fmUITheme.getString("label.size")));
217             treeFontPanel.add(Box.createHorizontalStrut(3));
218             treeFontPanel.add(treeFontSize);
219             treeFontPanel.add(new JLabel(" " + fmUITheme.getString("label.pixels")));
220             treeFontPanel.add(Box.createHorizontalGlue());
221             treeFontPanel.add(Box.createVerticalGlue());
222 
223             // ADD TREE FONT PANEL
224             add(treeFontPanel);
225             add(Box.createVerticalStrut(10));
226 
227 
228             // CONTENT FONT
229             JPanel contentFontPanel = new JPanel();
230             contentFontPanel.setBorder(BorderFactory.createTitledBorder(fmUITheme.getString("label.content_font")));
231             contentFontPanel.setLayout(new BoxLayout(contentFontPanel, BoxLayout.X_AXIS));
232 
233             contentFontFamily = new JComboBox(fontFamilies);
234             contentFontFamily.setMaximumSize(contentFontFamily.getPreferredSize());
235 
236             contentFontSize = new JComboBox(fontSizes);
237             contentFontSize.setMaximumSize(contentFontSize.getPreferredSize());
238 
239             contentFontFamily.setSelectedItem(fmUITheme.CONTENT_FONT.getFamily());
240             contentFontSize.setSelectedItem(new Integer(fmUITheme.CONTENT_FONT.getSize()));
241 
242 
243             contentFontPanel.add(Box.createHorizontalStrut(5));
244             contentFontPanel.add(new JLabel(fmUITheme.getString("label.family")));
245             contentFontPanel.add(Box.createHorizontalStrut(3));
246 
247             contentFontPanel.add(contentFontFamily);
248             contentFontPanel.add(Box.createHorizontalStrut(15));
249             //contentFontPanel.add(contentFontFace);
250             contentFontPanel.add(new JLabel(fmUITheme.getString("label.size")));
251             contentFontPanel.add(Box.createHorizontalStrut(3));
252             contentFontPanel.add(contentFontSize);
253             contentFontPanel.add(new JLabel(" " + fmUITheme.getString("label.pixels")));
254             contentFontPanel.add(Box.createHorizontalGlue());
255             contentFontPanel.add(Box.createVerticalGlue());
256 
257             add(contentFontPanel);
258             add(Box.createVerticalStrut(10));
259 
260 
261 
262 
263             // CONTENT FONT
264             JPanel headersFontPanel = new JPanel();
265             headersFontPanel.setBorder(BorderFactory.createTitledBorder(fmUITheme.getString("label.headers_font")));
266             headersFontPanel.setLayout(new BoxLayout(headersFontPanel, BoxLayout.X_AXIS));
267 
268             headersFontFamily = new JComboBox(fontFamilies);
269             headersFontFamily.setMaximumSize(headersFontFamily.getPreferredSize());
270 
271             headersFontSize = new JComboBox(fontSizes);
272             headersFontSize.setMaximumSize(headersFontSize.getPreferredSize());
273 
274             headersFontFamily.setSelectedItem(fmUITheme.HEADERS_FONT.getFamily());
275             headersFontSize.setSelectedItem(new Integer(fmUITheme.HEADERS_FONT.getSize()));
276 
277             headersFontPanel.add(Box.createHorizontalStrut(5));
278             headersFontPanel.add(new JLabel(fmUITheme.getString("label.family")));
279             headersFontPanel.add(Box.createHorizontalStrut(3));
280 
281             headersFontPanel.add(headersFontFamily);
282             headersFontPanel.add(Box.createHorizontalStrut(15));
283             //headersFontPanel.add(headersFontFace);
284             headersFontPanel.add(new JLabel(fmUITheme.getString("label.size")));
285             headersFontPanel.add(Box.createHorizontalStrut(3));
286             headersFontPanel.add(headersFontSize);
287             headersFontPanel.add(new JLabel(" " + fmUITheme.getString("label.pixels")));
288             headersFontPanel.add(Box.createHorizontalGlue());
289             headersFontPanel.add(Box.createVerticalGlue());
290 
291 
292 
293             add(headersFontPanel);
294             add(Box.createVerticalStrut(10));
295         }
296 
297 
298         /**
299          * Apllies user input
300          */
301         public void apply() {
302 
303             fmUITheme.TREE_FONT  = new Font((String) treeFontFamily.getSelectedItem(),
304                                             Font.PLAIN,
305                                             ((Integer)treeFontSize.getSelectedItem()).intValue());
306 
307             fmUITheme.CONTENT_FONT  = new Font((String) contentFontFamily.getSelectedItem(),
308                                                         Font.PLAIN,
309                                                         ((Integer)contentFontSize.getSelectedItem()).intValue());
310 
311             fmUITheme.HEADERS_FONT  = new Font((String) headersFontFamily.getSelectedItem(),
312                                                         Font.PLAIN,
313                                                         ((Integer)headersFontSize.getSelectedItem()).intValue());
314 
315 
316             runtimeProperties.put(fmGuiConstants.TREE_FONT, fmUITheme.fontToString(fmUITheme.TREE_FONT,null));
317             runtimeProperties.put(fmGuiConstants.HEADERS_FONT, fmUITheme.fontToString(fmUITheme.HEADERS_FONT,null));
318             runtimeProperties.put(fmGuiConstants.CONTENT_FONT, fmUITheme.fontToString(fmUITheme.CONTENT_FONT,null));
319 
320 
321         }
322     }
323 
324     private class browserSettingsPanel extends JPanel implements SettingsPanel {
325 
326         Properties runtimeProperties;
327         JRadioButton internalButton;
328         JRadioButton nativeButton;
329         JRadioButton userDefinedButton;
330         JTextField   userDefinedPath;
331 
332         public browserSettingsPanel(Properties props) {
333 
334             super();
335 
336 
337             //setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
338             setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
339             setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
340 
341 
342             JPanel controlsPanel = new JPanel();
343 
344             runtimeProperties = props;
345 
346             internalButton = new JRadioButton(fmUITheme.getString("label.browser.built_in"));
347             internalButton.setMnemonic(KeyEvent.VK_B);
348             internalButton.setAlignmentX(LEFT_ALIGNMENT);
349             internalButton.setMaximumSize(internalButton.getPreferredSize());
350 
351             if (props.getProperty(fmGuiConstants.URL_HANDLING_CMD).equals(fmGuiConstants.INTERNAL_URL_HANDLER))
352                 internalButton.setSelected(true);
353 
354             nativeButton  = new JRadioButton(fmUITheme.getString("label.browser.native"));
355             nativeButton.setMnemonic(KeyEvent.VK_S);
356             nativeButton.setAlignmentX(LEFT_ALIGNMENT);
357             nativeButton.setMaximumSize(nativeButton.getPreferredSize());
358 
359 
360             if (props.getProperty(fmGuiConstants.URL_HANDLING_CMD).equals(fmGuiConstants.WIN32_URL_HANDLER))
361                 nativeButton.setSelected(true);
362             else {
363                       String s = System.getProperty("os.name");
364                       if (s != null && (s.startsWith("Windows") == false))
365                           nativeButton.setEnabled(false);
366             }
367 
368             userDefinedButton  = new JRadioButton(fmUITheme.getString("label.browser.user_defined"));
369             userDefinedButton.setMnemonic(KeyEvent.VK_U);
370             userDefinedButton.setAlignmentX(LEFT_ALIGNMENT);
371             userDefinedButton.setMaximumSize(userDefinedButton.getPreferredSize());
372 
373             JPanel pathPanel = new JPanel();
374             pathPanel.setLayout(new BoxLayout(pathPanel, BoxLayout.X_AXIS));
375             pathPanel.setAlignmentX(LEFT_ALIGNMENT);
376 
377             userDefinedPath = new JTextField(38);
378             userDefinedPath.setBorder(fmUITheme.FM_THIN_BORDER);
379             userDefinedPath.setMaximumSize(userDefinedPath.getPreferredSize());
380 
381 
382             final JEditorPane userDefinedHelp = new JEditorPane();
383             userDefinedHelp.setText(fmUITheme.getString("label.browser.user_defined.help"));
384             //userDefinedHelp.setMaximumSize(userDefinedHelp.getPreferredSize());
385             userDefinedHelp.setBackground(getBackground());
386             userDefinedHelp.setBorder(BorderFactory.createEmptyBorder());
387             userDefinedHelp.setAlignmentX(LEFT_ALIGNMENT);
388             userDefinedHelp.setEditable(false);
389             userDefinedHelp.setVisible(false);
390 
391 
392 
393 
394             final JButton pathButton = new JButton("...");
395             pathButton.setBorder(fmUITheme.FM_BUTTON_BORDER);
396             pathButton.setEnabled(false);
397 
398 
399             pathPanel.add(userDefinedButton);
400             pathPanel.add(userDefinedPath);
401             pathPanel.add(pathButton);
402             //pathPanel.add(Box.createHorizontalGlue());
403 
404 
405             if ((internalButton.isSelected() || nativeButton.isSelected()) == false)
406             {
407                 userDefinedButton.setSelected(true);
408                 pathButton.setEnabled(true);
409                 userDefinedPath.setEnabled(true);
410                 userDefinedHelp.setVisible(true);
411                 userDefinedPath.setText(props.getProperty(fmGuiConstants.URL_HANDLING_CMD));
412             }
413 
414             ///////////////////////////////////////////////////////////////////
415             // Radio button action listener
416             ActionListener al =  new ActionListener () {
417                 public void actionPerformed(ActionEvent e) {
418                     if ((e.getSource() == internalButton) || (e.getSource() == nativeButton)) {
419                         userDefinedPath.setEnabled(false);
420                         pathButton.setEnabled(false);
421                         userDefinedHelp.setVisible(false);
422                     }
423                     else {
424                         userDefinedPath.setEnabled(true);
425                         pathButton.setEnabled(true);
426                         userDefinedHelp.setVisible(true);
427                     }
428                 }
429             };
430             internalButton.addActionListener(al);
431             nativeButton.addActionListener(al);
432             userDefinedButton.addActionListener(al);
433 
434 
435             /////////////////////////////////////////////////////////////////////////////
436             // PATH BUTTON LISTENER
437             pathButton.addActionListener(new ActionListener() {
438                 public void actionPerformed(ActionEvent e) {
439 
440                     JFileChooser fc = new JFileChooser();
441                     int returnVal = fc.showOpenDialog(null);
442 
443                     if (returnVal == JFileChooser.APPROVE_OPTION)
444                     {
445                         File file = fc.getSelectedFile();
446                         String srcPath = file.getPath();
447                         userDefinedPath.setText(srcPath);
448                     }
449                 }
450             });
451             ButtonGroup group = new ButtonGroup();
452             group.add(internalButton);
453             group.add(nativeButton);
454             group.add(userDefinedButton);
455 
456             add(new JLabel(fmUITheme.getString("label.browser.help")));
457             add(internalButton);
458             add(nativeButton);
459             add(pathPanel);
460             add(Box.createVerticalStrut(20));
461             add(userDefinedHelp);
462         }
463 
464         public void apply() {
465 
466             if (internalButton.isSelected()) {
467                 runtimeProperties.put(fmGuiConstants.URL_HANDLING_CMD,
468                                       fmGuiConstants.INTERNAL_URL_HANDLER);
469             }
470             else if (nativeButton.isSelected()) {
471                 runtimeProperties.put(fmGuiConstants.URL_HANDLING_CMD,
472                                       fmGuiConstants.WIN32_URL_HANDLER);
473             }
474             else if (userDefinedPath.getText().length() > 0) {
475                 String path = userDefinedPath.getText();
476 
477                 if (path.matches(".*?%url.*?"))
478                     runtimeProperties.put(fmGuiConstants.URL_HANDLING_CMD, path);
479                 else
480                     runtimeProperties.put(fmGuiConstants.URL_HANDLING_CMD, path + " %url");
481             }
482             else {
483                 runtimeProperties.put(fmGuiConstants.URL_HANDLING_CMD,
484                         fmGuiConstants.INTERNAL_URL_HANDLER);
485             }
486 
487 
488 
489         }
490     }
491 
492     /**
493      * Overrides standard implementation
494      * @param isVisible
495      */
496     public void setVisible(boolean isVisible)
497     {
498         setLocationRelativeTo(parent);
499         super.setVisible(isVisible);
500     }
501 }
502