KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > config > columns > ColumnConfigDialog


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

17 package org.columba.mail.gui.config.columns;
18
19 import java.awt.BorderLayout JavaDoc;
20 import java.awt.Dimension JavaDoc;
21 import java.awt.GridLayout JavaDoc;
22 import java.awt.event.ActionEvent JavaDoc;
23 import java.awt.event.ActionListener JavaDoc;
24 import java.awt.event.KeyEvent JavaDoc;
25
26 import javax.swing.BorderFactory JavaDoc;
27 import javax.swing.DefaultListSelectionModel JavaDoc;
28 import javax.swing.JButton JavaDoc;
29 import javax.swing.JComponent JavaDoc;
30 import javax.swing.JDialog JavaDoc;
31 import javax.swing.JFrame JavaDoc;
32 import javax.swing.JLabel JavaDoc;
33 import javax.swing.JPanel JavaDoc;
34 import javax.swing.JScrollPane JavaDoc;
35 import javax.swing.KeyStroke JavaDoc;
36 import javax.swing.SwingConstants JavaDoc;
37 import javax.swing.event.ListSelectionEvent JavaDoc;
38 import javax.swing.event.ListSelectionListener JavaDoc;
39
40 import org.columba.core.gui.base.ButtonWithMnemonic;
41 import org.columba.core.gui.base.SingleSideEtchedBorder;
42 import org.columba.core.gui.util.DialogHeaderPanel;
43 import org.columba.core.help.HelpManager;
44 import org.columba.core.xml.XmlElement;
45 import org.columba.mail.command.IMailFolderCommandReference;
46 import org.columba.mail.folder.IMailbox;
47 import org.columba.mail.folderoptions.ColumnOptionsPlugin;
48 import org.columba.mail.folderoptions.FolderOptionsController;
49 import org.columba.mail.gui.frame.MailFrameMediator;
50 import org.columba.mail.util.MailResourceLoader;
51 import org.frapuccino.checkablelist.CheckableItemImpl;
52 import org.frapuccino.checkablelist.CheckableItemListTableModel;
53 import org.frapuccino.checkablelist.CheckableList;
54
55 import com.jgoodies.forms.layout.CellConstraints;
56 import com.jgoodies.forms.layout.FormLayout;
57
58 /**
59  * Configurabe visible columns of the table.
60  * <p>
61  * TODO (@author fdietz): adding of columns is not working currently
62  *
63  * @author fdietz
64  */

65
66 public class ColumnConfigDialog extends JDialog JavaDoc implements ActionListener JavaDoc,
67         ListSelectionListener JavaDoc {
68
69     private JButton JavaDoc showButton;
70
71     private JButton JavaDoc hideButton;
72
73     private CheckableList list;
74
75     private int index;
76
77     private XmlElement columns;
78
79     private CheckableItemImpl selection;
80
81     private MailFrameMediator mediator;
82
83     public ColumnConfigDialog(MailFrameMediator mediator, XmlElement columns) {
84         super((JFrame JavaDoc) mediator.getView().getFrame(), MailResourceLoader
85                 .getString("dialog", "columns", "title"), true);
86         this.mediator = mediator;
87         this.columns = columns;
88
89         list = new CheckableList();
90         list.getSelectionModel().addListSelectionListener(this);
91
92         initComponents();
93         updateComponents(true);
94
95         getRootPane().registerKeyboardAction(this, "CLOSE",
96                 KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
97                 JComponent.WHEN_IN_FOCUSED_WINDOW);
98         pack();
99         setLocationRelativeTo(null);
100         setVisible(true);
101     }
102
103     protected JPanel JavaDoc createButtonPanel() {
104         JPanel JavaDoc bottom = new JPanel JavaDoc();
105         bottom.setLayout(new BorderLayout JavaDoc());
106
107         bottom.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
108
109         ButtonWithMnemonic cancelButton = new ButtonWithMnemonic(
110                 MailResourceLoader.getString("global", "cancel"));
111
112         //$NON-NLS-1$ //$NON-NLS-2$
113
cancelButton.addActionListener(this);
114         cancelButton.setActionCommand("CANCEL"); //$NON-NLS-1$
115

116         ButtonWithMnemonic okButton = new ButtonWithMnemonic(MailResourceLoader
117                 .getString("global", "ok"));
118
119         //$NON-NLS-1$ //$NON-NLS-2$
120
okButton.addActionListener(this);
121         okButton.setActionCommand("OK"); //$NON-NLS-1$
122
okButton.setDefaultCapable(true);
123         getRootPane().setDefaultButton(okButton);
124
125         ButtonWithMnemonic helpButton = new ButtonWithMnemonic(
126                 MailResourceLoader.getString("global", "help"));
127
128         // associate with JavaHelp
129
HelpManager.getInstance().enableHelpOnButton(helpButton,
130                 "configuring_columba");
131         HelpManager.getInstance().enableHelpKey(getRootPane(),
132                 "configuring_columba");
133
134         JPanel JavaDoc buttonPanel = new JPanel JavaDoc();
135         buttonPanel.setLayout(new GridLayout JavaDoc(1, 3, 6, 0));
136         buttonPanel.add(okButton);
137         buttonPanel.add(cancelButton);
138         buttonPanel.add(helpButton);
139
140         bottom.add(buttonPanel, BorderLayout.EAST);
141         return bottom;
142     }
143
144     public void initComponents() {
145
146         showButton = new ButtonWithMnemonic(MailResourceLoader.getString(
147                 "dialog", "columns", "show"));
148         showButton.setActionCommand("SHOW");
149         showButton.addActionListener(this);
150         showButton.setEnabled(false);
151
152         hideButton = new ButtonWithMnemonic(MailResourceLoader.getString(
153                 "dialog", "columns", "hide"));
154         hideButton.setActionCommand("HIDE");
155         hideButton.setEnabled(false);
156         hideButton.addActionListener(this);
157
158         getContentPane().add(createPanel(), BorderLayout.CENTER);
159
160         getContentPane().add(createBottomPanel(), BorderLayout.SOUTH);
161
162         getContentPane().add(
163                 new DialogHeaderPanel(MailResourceLoader.getString("dialog",
164                         "columns", "header_title"), MailResourceLoader
165                         .getString("dialog", "columns", "header_description")),
166                 BorderLayout.NORTH);
167     }
168
169     private JPanel JavaDoc createPanel() {
170         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
171         FormLayout formlayout1 = new FormLayout(
172                 "FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE",
173                 "CENTER:DEFAULT:NONE,1DLU,FILL:DEFAULT:GROW(1.0),3DLU,CENTER:DEFAULT:NONE");
174         CellConstraints cc = new CellConstraints();
175         jpanel1.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
176         jpanel1.setLayout(formlayout1);
177
178         JLabel JavaDoc jlabel1 = new JLabel JavaDoc();
179         jlabel1.setText("Columns:");
180         jpanel1.add(jlabel1, cc.xy(1, 1));
181
182         JScrollPane JavaDoc scrollPane = new JScrollPane JavaDoc(list);
183         scrollPane.setPreferredSize(new Dimension JavaDoc(250, 200));
184         jpanel1.add(scrollPane, cc.xy(1, 3));
185
186         jpanel1.add(createPanel1(), new CellConstraints(3, 3, 1, 1,
187                 CellConstraints.DEFAULT, CellConstraints.TOP));
188
189         return jpanel1;
190     }
191
192     private JPanel JavaDoc createPanel1() {
193         JPanel JavaDoc jpanel1 = new JPanel JavaDoc();
194         FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE",
195                 "CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE,3DLU,CENTER:DEFAULT:NONE");
196         CellConstraints cc = new CellConstraints();
197         jpanel1.setLayout(formlayout1);
198
199         jpanel1.add(showButton, cc.xy(1, 1));
200
201         jpanel1.add(hideButton, cc.xy(1, 3));
202
203         return jpanel1;
204     }
205
206     /**
207      *
208      */

209     private JPanel JavaDoc createBottomPanel() {
210         JPanel JavaDoc bottomPanel = new JPanel JavaDoc(new BorderLayout JavaDoc());
211         bottomPanel.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP));
212
213         JPanel JavaDoc buttonPanel = createButtonPanel();
214
215         bottomPanel.add(buttonPanel, BorderLayout.EAST);
216
217         return bottomPanel;
218     }
219
220     private XmlElement findColumn(XmlElement parent, String JavaDoc name) {
221         for (int i = 0; i < parent.count(); i++) {
222             XmlElement child = parent.getElement(i);
223             if (child.getAttribute("name").equals(name)) {
224                 return child;
225             }
226         }
227         return null;
228     }
229
230     public void updateComponents(boolean b) {
231         if (b) {
232             CheckableItemListTableModel model = new CheckableItemListTableModel();
233             String JavaDoc[] stringList = ColumnOptionsPlugin.getColumns();
234
235             for (int j = 0; j < stringList.length; j++) {
236                 String JavaDoc c = stringList[j];
237                 CheckableItemImpl item = new CheckableItemImpl(c);
238                 XmlElement element = findColumn(columns, c);
239                 item.setSelected(element != null);
240                 model.addElement(item);
241             }
242
243             list.setModel(model);
244         } else {
245             CheckableItemListTableModel model = ((CheckableItemListTableModel) list
246                     .getModel());
247
248             for (int i = 0; i < model.count(); i++) {
249                 // get column of list
250
CheckableItemImpl column = (CheckableItemImpl) model
251                         .getElement(i);
252
253                 // find colum
254
XmlElement element = findColumn(columns, column.toString());
255
256                 if (element != null) {
257                     // remove disabled column
258
if (!column.isSelected()) {
259                         element.removeFromParent();
260                     }
261                 } else {
262                     if (column.isSelected()) {
263                         XmlElement newElement = new XmlElement("column");
264                         newElement.addAttribute("name", column.toString());
265                         newElement.addAttribute("width", "100");
266                         columns.addElement(newElement);
267                     }
268                 }
269             }
270         }
271     }
272
273     public void valueChanged(ListSelectionEvent JavaDoc e) {
274         if (e.getValueIsAdjusting()) {
275             return;
276         }
277
278         DefaultListSelectionModel JavaDoc theList = (DefaultListSelectionModel JavaDoc) e
279                 .getSource();
280         if (!theList.isSelectionEmpty()) {
281             index = theList.getAnchorSelectionIndex();
282
283             selection = (CheckableItemImpl) ((CheckableItemListTableModel) list
284                     .getModel()).getElement(index);
285
286             updateButtonState();
287         }
288     }
289
290     private void updateButtonState() {
291         if (selection.isSelected()) {
292             hideButton.setEnabled(true);
293             showButton.setEnabled(false);
294         } else {
295             showButton.setEnabled(true);
296             hideButton.setEnabled(false);
297         }
298     }
299
300     public void actionPerformed(ActionEvent JavaDoc e) {
301         String JavaDoc action = e.getActionCommand();
302
303         if (action.equals("OK")) {
304             updateComponents(false);
305
306             setVisible(false);
307
308             ColumnOptionsPlugin plugin = (ColumnOptionsPlugin) ((FolderOptionsController) mediator
309                     .getFolderOptionsController()).getPlugin("ColumnOptions");
310
311             // make sure this configuration is also visually working immediately
312
IMailFolderCommandReference r = mediator.getTreeSelection();
313             plugin.loadOptionsFromXml((IMailbox) r.getSourceFolder());
314         } else if (action.equals("CANCEL")) {
315             setVisible(false);
316         } else if (action.equals("SHOW")) {
317             if (selection != null) {
318                 selection.setSelected(!selection.isSelected());
319                 ((CheckableItemListTableModel) list.getModel())
320                         .updateRow(selection);
321
322                 // list.repaint();
323
updateButtonState();
324             }
325         } else if (action.equals("HIDE")) {
326             // disable selected item
327
if (selection != null) {
328                 selection.setSelected(!selection.isSelected());
329                 ((CheckableItemListTableModel) list.getModel())
330                         .updateRow(selection);
331
332                 // list.repaint();
333
updateButtonState();
334             }
335         }
336     }
337 }
Popular Tags