KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > profiles > ProfileChooserDialog


1 //The contents of this file are subject to the Mozilla Public License Version
2
//1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
//Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18

19 package org.columba.core.gui.profiles;
20
21 import java.awt.BorderLayout JavaDoc;
22 import java.awt.Color JavaDoc;
23 import java.awt.Component JavaDoc;
24 import java.awt.Dimension JavaDoc;
25 import java.awt.GridBagConstraints JavaDoc;
26 import java.awt.GridBagLayout JavaDoc;
27 import java.awt.GridLayout JavaDoc;
28 import java.awt.HeadlessException JavaDoc;
29 import java.awt.event.ActionEvent JavaDoc;
30 import java.awt.event.ActionListener JavaDoc;
31 import java.awt.event.KeyEvent JavaDoc;
32 import java.awt.event.MouseEvent JavaDoc;
33 import java.awt.event.MouseListener JavaDoc;
34 import java.io.File JavaDoc;
35
36 import javax.swing.BorderFactory JavaDoc;
37 import javax.swing.Box JavaDoc;
38 import javax.swing.BoxLayout JavaDoc;
39 import javax.swing.DefaultListModel JavaDoc;
40 import javax.swing.JButton JavaDoc;
41 import javax.swing.JCheckBox JavaDoc;
42 import javax.swing.JComponent JavaDoc;
43 import javax.swing.JDialog JavaDoc;
44 import javax.swing.JFileChooser JavaDoc;
45 import javax.swing.JFrame JavaDoc;
46 import javax.swing.JLabel JavaDoc;
47 import javax.swing.JList JavaDoc;
48 import javax.swing.JOptionPane JavaDoc;
49 import javax.swing.JPanel JavaDoc;
50 import javax.swing.JScrollPane JavaDoc;
51 import javax.swing.KeyStroke JavaDoc;
52 import javax.swing.SwingConstants JavaDoc;
53 import javax.swing.event.ListSelectionEvent JavaDoc;
54 import javax.swing.event.ListSelectionListener JavaDoc;
55
56 import org.columba.core.gui.base.ButtonWithMnemonic;
57 import org.columba.core.gui.base.CheckBoxWithMnemonic;
58 import org.columba.core.gui.base.SingleSideEtchedBorder;
59 import org.columba.core.help.HelpManager;
60 import org.columba.core.resourceloader.GlobalResourceLoader;
61 import org.columba.core.xml.XmlElement;
62
63 /**
64  * Profile chooser dialog.
65  * <p>
66  * User can choose a profile from a list. Add a new profile or edit and existing
67  * profiles's properties.
68  * <p>
69  * Additionally, the user can choose to hide this dialog on next startup.
70  *
71  * @author fdietz
72  */

73 public class ProfileChooserDialog extends JDialog JavaDoc
74 implements ActionListener JavaDoc, ListSelectionListener JavaDoc, MouseListener JavaDoc {
75     private static final String JavaDoc RESOURCE_PATH = "org.columba.core.i18n.dialog";
76     
77     protected JButton JavaDoc okButton;
78     protected JButton JavaDoc cancelButton;
79     protected JButton JavaDoc helpButton;
80     protected JButton JavaDoc addButton;
81     protected JButton JavaDoc editButton;
82     //protected JButton defaultButton;
83
private DefaultListModel JavaDoc model;
84     protected JList JavaDoc list;
85     protected String JavaDoc selection;
86     protected JLabel JavaDoc nameLabel;
87     protected JCheckBox JavaDoc checkBox;
88     
89     public ProfileChooserDialog() throws HeadlessException JavaDoc {
90         super((JFrame JavaDoc)null, GlobalResourceLoader.getString(RESOURCE_PATH,
91             "profiles", "chooser.title"), true);
92         
93         initComponents();
94         
95         layoutComponents();
96         
97         pack();
98         setLocationRelativeTo(null);
99         setVisible(true);
100     }
101     
102     protected void layoutComponents() {
103         JPanel JavaDoc mainPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
104         mainPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
105         
106         // top panel
107
JPanel JavaDoc topPanel = new JPanel JavaDoc();
108         
109         topPanel.setLayout(new BoxLayout JavaDoc(topPanel, BoxLayout.X_AXIS));
110         
111         GridBagLayout JavaDoc gridBagLayout = new GridBagLayout JavaDoc();
112         GridBagConstraints JavaDoc c = new GridBagConstraints JavaDoc();
113         
114         //topPanel.setLayout( );
115
JPanel JavaDoc topBorderPanel = new JPanel JavaDoc();
116         topBorderPanel.setLayout(new BorderLayout JavaDoc());
117         
118         //topBorderPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 5,
119
// 0));
120
topBorderPanel.add(topPanel);
121         
122         //mainPanel.add( topBorderPanel, BorderLayout.NORTH );
123

124         topPanel.add(nameLabel);
125         
126         topPanel.add(Box.createRigidArea(new Dimension JavaDoc(10, 0)));
127         topPanel.add(Box.createHorizontalGlue());
128         
129         Component JavaDoc glue = Box.createVerticalGlue();
130         c.anchor = GridBagConstraints.EAST;
131         c.gridwidth = GridBagConstraints.REMAINDER;
132         
133         //c.fill = GridBagConstraints.HORIZONTAL;
134
gridBagLayout.setConstraints(glue, c);
135         
136         gridBagLayout = new GridBagLayout JavaDoc();
137         c = new GridBagConstraints JavaDoc();
138         
139         JPanel JavaDoc eastPanel = new JPanel JavaDoc(gridBagLayout);
140         mainPanel.add(eastPanel, BorderLayout.EAST);
141         
142         c.fill = GridBagConstraints.HORIZONTAL;
143         c.weightx = 1.0;
144         c.gridwidth = GridBagConstraints.REMAINDER;
145         gridBagLayout.setConstraints(addButton, c);
146         eastPanel.add(addButton);
147         
148         Component JavaDoc strut1 = Box.createRigidArea(new Dimension JavaDoc(30, 5));
149         gridBagLayout.setConstraints(strut1, c);
150         eastPanel.add(strut1);
151         
152         gridBagLayout.setConstraints(editButton, c);
153         eastPanel.add(editButton);
154         
155         /*
156          * Component strut2 = Box.createRigidArea(new Dimension(30, 5));
157          * gridBagLayout.setConstraints(strut2, c); eastPanel.add(strut2);
158          *
159          * gridBagLayout.setConstraints(defaultButton, c);
160          * eastPanel.add(defaultButton);
161          */

162         
163         glue = Box.createVerticalGlue();
164         c.fill = GridBagConstraints.BOTH;
165         c.weighty = 1.0;
166         gridBagLayout.setConstraints(glue, c);
167         eastPanel.add(glue);
168         
169         // centerpanel
170
JPanel JavaDoc centerPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
171         centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 6));
172         
173         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(list);
174         scrollPane.setPreferredSize(new Dimension JavaDoc(250, 150));
175         scrollPane.getViewport().setBackground(Color.white);
176         centerPanel.add(scrollPane, BorderLayout.CENTER);
177         
178         centerPanel.add(checkBox, BorderLayout.SOUTH);
179         
180         mainPanel.add(topPanel, BorderLayout.NORTH);
181         
182         mainPanel.add(centerPanel);
183         getContentPane().add(mainPanel, BorderLayout.CENTER);
184         
185         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
186         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
187         
188         JPanel JavaDoc buttonPanel = new JPanel JavaDoc(new GridLayout JavaDoc(1, 3, 6, 0));
189         buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
190         
191         buttonPanel.add(okButton);
192         buttonPanel.add(cancelButton);
193         buttonPanel.add(helpButton);
194         bottomPanel.add(buttonPanel, BorderLayout.EAST);
195         getContentPane().add(bottomPanel, BorderLayout.SOUTH);
196     }
197     
198     protected void initComponents() {
199         addButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(
200             RESOURCE_PATH, "profiles", "add"));
201         addButton.setActionCommand("ADD");
202         addButton.addActionListener(this);
203         addButton.setEnabled(false);
204         
205         editButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(
206             RESOURCE_PATH, "profiles", "edit"));
207         editButton.setActionCommand("EDIT");
208         editButton.addActionListener(this);
209         editButton.setEnabled(false);
210         
211         nameLabel = new JLabel JavaDoc(GlobalResourceLoader.getString(RESOURCE_PATH,
212             "profiles", "label"));
213         
214         checkBox = new CheckBoxWithMnemonic(GlobalResourceLoader.getString(
215             RESOURCE_PATH, "profiles", "dont_ask"));
216         
217         okButton = new ButtonWithMnemonic(GlobalResourceLoader.getString("",
218             "", "ok"));
219         okButton.setActionCommand("OK");
220         okButton.addActionListener(this);
221         
222         cancelButton = new ButtonWithMnemonic(GlobalResourceLoader.getString(
223             "", "", "cancel"));
224         cancelButton.setActionCommand("CANCEL");
225         cancelButton.addActionListener(this);
226         
227         helpButton = new ButtonWithMnemonic(GlobalResourceLoader.getString("",
228             "", "help"));
229         
230         // associate with JavaHelp
231
HelpManager.getInstance().enableHelpOnButton(helpButton,
232             "extending_columba_2");
233         HelpManager.getInstance().enableHelpKey(getRootPane(),
234             "extending_columba_2");
235         
236         XmlElement profiles = ProfileManager.getInstance().getProfiles();
237         model = new DefaultListModel JavaDoc();
238         model.addElement("Default");
239         
240         for (int i = 0; i < profiles.count(); i++) {
241             XmlElement p = profiles.getElement(i);
242             String JavaDoc name = p.getAttribute("name");
243             model.addElement(name);
244         }
245         
246         list = new JList JavaDoc(model);
247         list.addListSelectionListener(this);
248         list.addMouseListener(this);
249         
250         String JavaDoc selected = ProfileManager.getInstance().getSelectedProfile();
251         if (selected != null) {
252             list.setSelectedValue(selected, true);
253         }
254         
255         getRootPane().setDefaultButton(okButton);
256         getRootPane().registerKeyboardAction(this, "CANCEL",
257             KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
258             JComponent.WHEN_IN_FOCUSED_WINDOW);
259     }
260     
261     public void actionPerformed(ActionEvent JavaDoc e) {
262         String JavaDoc action = e.getActionCommand();
263         if (action.equals("OK")) {
264             setVisible(false);
265         } else if (action.equals("CANCEL")) {
266             System.exit(0);
267         } else if (action.equals("ADD")) {
268             JFileChooser JavaDoc fc = new JFileChooser JavaDoc();
269             fc.setMultiSelectionEnabled(true);
270             // bug #996381 (fdietz), directories only!!
271
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
272             fc.setFileHidingEnabled(false);
273             if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
274                 File JavaDoc location = fc.getSelectedFile();
275                 Profile p = new Profile(location.getName(), location);
276                 // add profile to profiles.xml
277
ProfileManager.getInstance().addProfile(p);
278                 
279                 // add to listmodel
280
model.addElement(p.getName());
281                 // select new item
282
list.setSelectedValue(p.getName(), true);
283             }
284         } else if (action.equals("EDIT")) {
285             String JavaDoc inputValue = JOptionPane.showInputDialog(
286                 GlobalResourceLoader.getString(RESOURCE_PATH, "profiles",
287                 "enter_name"), selection);
288             
289             if (inputValue == null) {
290                 return;
291             }
292             
293             // rename profile in profiles.xml
294
ProfileManager.getInstance().renameProfile(selection, inputValue);
295             
296             // modify listmodel
297
model.setElementAt(inputValue, model.indexOf(selection));
298             selection = inputValue;
299         }
300     }
301     
302     public void valueChanged(ListSelectionEvent JavaDoc e) {
303         boolean enabled = !list.isSelectionEmpty();
304         addButton.setEnabled(enabled);
305         
306         okButton.setEnabled(enabled);
307         //defaultButton.setEnabled(enabled);
308

309         selection = (String JavaDoc) list.getSelectedValue();
310         
311         // user's can't edit default account
312
if ((selection != null) && (!selection.equals("Default"))) {
313             editButton.setEnabled(true);
314         } else {
315             editButton.setEnabled(false);
316         }
317     }
318     
319     /**
320      * @return The selection.
321      */

322     public String JavaDoc getSelection() {
323         return selection;
324     }
325     
326     public boolean isDontAskedSelected() {
327         return checkBox.isSelected();
328     }
329
330     public void mouseClicked(MouseEvent JavaDoc arg0) {
331         if(arg0.getClickCount() >= 2 ) {
332             actionPerformed(new ActionEvent JavaDoc(list, 0, "OK"));
333         }
334     }
335
336     public void mouseEntered(MouseEvent JavaDoc arg0) {
337     }
338
339     public void mouseExited(MouseEvent JavaDoc arg0) {
340     }
341
342     public void mousePressed(MouseEvent JavaDoc arg0) {
343     }
344
345     public void mouseReleased(MouseEvent JavaDoc arg0) {
346     }
347
348 }
349
Popular Tags