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

Quick Search    Search Deep

Source code: com/fm/gui/fmCategoryDialog.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 javax.swing.*;
14  import javax.swing.event.TreeSelectionListener;
15  import javax.swing.event.TreeSelectionEvent;
16  import javax.swing.tree.DefaultTreeModel;
17  import javax.swing.tree.TreePath;
18  
19  import com.fm.rss.rssChannelCategory;
20  
21  import java.awt.*;
22  import java.awt.event.*;
23  
24  /**
25   * Add/Update category dialog.
26   *
27   * <p>This dialog supposed to handle add/update category operations.</p>
28   *
29   */
30  public class fmCategoryDialog extends JDialog {
31  
32      private fmCategoryTree  categoryTree;
33      private fmCategoryTree  originalTree;
34    private JTextField      categoryTitle;
35    private JEditorPane     categoryDescription;
36      private JPanel          settingsPane;
37  
38  
39      /**
40       * Default constructor
41       */
42      public fmCategoryDialog(JFrame parent)
43      {
44          super(parent);
45          addWindowListener(new WindowAdapter() {
46              public void windowClosing(WindowEvent e)
47              {
48                  dispose();
49              }
50          });
51          originalTree = null;
52      }
53  
54  
55      /**
56       * Display create category dialog.
57       *
58       * @param addCatTree Tree to which new category will be added
59       */
60      public void showCreateDialog(fmCategoryTree addCatTree)
61      {
62          setTitle(fmUITheme.getString("dialog.create_folder.title"));
63          Container contentPane = this.getContentPane();
64          contentPane.setLayout(new BorderLayout());
65  
66          doCommonInit(addCatTree, false);
67  
68          GridBagLayout navGridBag = new GridBagLayout();
69          GridBagConstraints c = new GridBagConstraints();
70          JPanel navPane = new JPanel(navGridBag);
71  
72          JButton createButton = fmUITheme.getButtonInstance("button.create_folder.label",
73                                                             "button.create_folder.tooltip",
74                                                              KeyEvent.VK_C);
75  
76          JButton cancelButton = fmUITheme.getButtonInstance("button.cancel.label",
77                                                             "button.cancel.tooltip",
78                                                              KeyEvent.VK_L);
79  
80          // CREATE BUTTON LISTENER
81          createButton.addActionListener(new ActionListener() {
82              public void actionPerformed(ActionEvent e)
83              {
84                  String catTitleStr = getCategoryTitle();
85                  String catDescrStr = getCategoryDescription();
86  
87                  if (catTitleStr.length() == 0)
88                  {
89                      JOptionPane.showMessageDialog(null,
90                              fmUITheme.getString("msg.short_title_warning"),
91                              fmUITheme.getString("label.error"),
92                              JOptionPane.ERROR_MESSAGE);
93                      return;
94                  }
95  
96                  if (catDescrStr == null)
97                      catDescrStr = "";
98  
99                  // creating new category object
100                 rssChannelCategory new_cat = new rssChannelCategory(catTitleStr,
101                         catDescrStr);
102 
103                 new_cat.setID(new_cat.generateID());
104 
105                 // getting tree
106 
107                 fmTreeNode parentNode;
108                 rssChannelCategory parentCat = null;
109 
110                 if ((parentNode = getSelectedNode(categoryTree)) != categoryTree.getRootNode())
111                     parentCat  = (rssChannelCategory) parentNode.getUserObject();
112 
113                 int result = categoryTree.insertNode(parentCat, new_cat, true);
114 
115 
116                 if (result == fmCategoryTree.NODE_NOT_FOUND)
117                 {
118                     JOptionPane.showMessageDialog(null,
119                             fmUITheme.getString("msg.cant_find_folder"),
120                             fmUITheme.getString("label.error"),
121                             JOptionPane.ERROR_MESSAGE);
122                 }
123                 else if (result == fmCategoryTree.NODE_EXISTS)
124                 {
125                     JOptionPane.showMessageDialog(null,
126                             fmUITheme.getString("msg.folder_exists_warning"),
127                             fmUITheme.getString("label.error"),
128                             JOptionPane.ERROR_MESSAGE);
129                 }
130                 else
131                 {
132                     if (parentNode == originalTree.getRootNode())
133                         ((DefaultTreeModel)originalTree.getModel()).reload(parentNode);
134                     //originalTree.setSelectionPath(new_cat.getID());
135                     dispose();
136                 }
137             }
138         });
139         // CREATE BUTTON SETTINGS
140         c.anchor = GridBagConstraints.SOUTHEAST;
141         c.gridx = 0;
142         c.gridy = 1;
143         c.weightx = 0.15;
144         c.gridwidth = 2;
145         c.insets = new Insets(15,2,6,0);
146         c.ipadx = 15;
147         navGridBag.setConstraints(createButton, c);
148         navPane.add(createButton);
149 
150         // NEXT BUTTON LISTENER
151         cancelButton.addActionListener(new ActionListener() {
152             public void actionPerformed(ActionEvent e)
153             {
154                 dispose();
155             }
156         });
157         // NEXT BUTTON SETTINGS
158         c.gridx = GridBagConstraints.RELATIVE;
159         c.weightx = GridBagConstraints.RELATIVE;
160         navGridBag.setConstraints(cancelButton, c);
161         navPane.add(cancelButton);
162 
163         // FINAL ADD
164         contentPane.add(getTitlePane(fmUITheme.getString("dialog.create_folder." +
165                                                                       "secondary_title")),
166                         BorderLayout.NORTH);
167         contentPane.add(settingsPane, BorderLayout.CENTER);
168         contentPane.add(navPane, BorderLayout.SOUTH);
169 
170         setResizable(false);
171         pack();
172         setVisible(true);
173     }
174 
175     /**
176      * Display update category dialog.
177      *
178      * @param catTree Tree to which new category will be added
179      */
180     public void showUpdateDialog(fmCategoryTree catTree, fmTreeNode selectedNode)
181     {
182         setTitle(fmUITheme.getString("dialog.edit_folder.title"));
183 
184         Container contentPane = this.getContentPane();
185         contentPane.setLayout(new BorderLayout());
186 
187 
188         doCommonInit(catTree, true);
189 
190         final rssChannelCategory updateCategory = (rssChannelCategory)selectedNode.getUserObject();
191 
192         categoryTitle.setText(updateCategory.getTitle());
193         categoryDescription.setText(updateCategory.getDescription());
194 
195 
196         GridBagLayout navGridBag = new GridBagLayout();
197         GridBagConstraints c = new GridBagConstraints();
198         JPanel navPane = new JPanel(navGridBag);
199 
200         JButton updateButton = fmUITheme.getButtonInstance("button.edit_folder.label",
201                                                            "button.edit_folder.tooltip",
202                                                             KeyEvent.VK_C);
203 
204         JButton cancelButton = fmUITheme.getButtonInstance("button.cancel.label",
205                                                            "button.cancel.tooltip",
206                                                             KeyEvent.VK_L);
207 
208         // CREATE BUTTON LISTENER
209         updateButton.addActionListener(new ActionListener() {
210             public void actionPerformed(ActionEvent e)
211             {
212                 String catTitleStr = getCategoryTitle();
213                 String catDescrStr = getCategoryDescription();
214 
215                 if (catTitleStr.length() == 0)
216                 {
217                     JOptionPane.showMessageDialog(null,
218                             fmUITheme.getString("msg.short_title_warning"),
219                             fmUITheme.getString("label.error"),
220                             JOptionPane.ERROR_MESSAGE);
221                     return;
222                 }
223 
224                 if (catDescrStr == null)
225                     catDescrStr = "";
226 
227                 String oldT = updateCategory.getTitle();
228                 String oldD = updateCategory.getDescription();
229 
230                 updateCategory.setTitle(catTitleStr);
231                 updateCategory.setDescription(catDescrStr);
232 
233                 // getting tree
234 
235                 // we can't select a root node so selected nodes will
236                 // always have a parent node
237                 if (getSelectedNode(categoryTree).getID() !=
238                     ((fmTreeNode) getSelectedNode(originalTree).getParent()).getID())
239                 {
240                     fmTreeNode parentNode = getSelectedNode(categoryTree);
241                     fmTreeNode origNode   = getSelectedNode(originalTree);
242 
243                     rssChannelCategory parentCat;
244 
245                     if (parentNode != categoryTree.getRootNode())
246                         parentCat = (rssChannelCategory) parentNode.getUserObject();
247                     else
248                         parentCat = null;
249 
250                     int result = originalTree.insertNode(parentCat, updateCategory, true);
251 
252                     if (result == fmCategoryTree.NODE_NOT_FOUND)
253                     {
254                         JOptionPane.showMessageDialog(null,
255                                 fmUITheme.getString("msg.cant_find_folder"),
256                                 fmUITheme.getString("label.error"),
257                                 JOptionPane.ERROR_MESSAGE);
258                         updateCategory.setTitle(oldT);
259                         updateCategory.setDescription(oldD);
260                         return;
261                     }
262                     else if (result == fmCategoryTree.NODE_EXISTS)
263                     {
264                         JOptionPane.showMessageDialog(null,
265                                 fmUITheme.getString("msg.folder_exists_warning"),
266                                 fmUITheme.getString("label.error"),
267                                 JOptionPane.ERROR_MESSAGE);
268                         updateCategory.setTitle(oldT);
269                         updateCategory.setDescription(oldD);
270                         return;
271                     }
272                     else
273                     {
274                         originalTree.removeNode(origNode);
275                         if (parentNode == originalTree.getRootNode())
276                             ((DefaultTreeModel)originalTree.getModel()).reload(parentNode);
277                     }
278                 }
279                 dispose();
280             }
281         });
282         // CREATE BUTTON SETTINGS
283         c.anchor = GridBagConstraints.SOUTHEAST;
284         c.gridx = 0;
285         c.gridy = 1;
286         c.weightx = 0.15;
287         c.gridwidth = 2;
288         c.insets = new Insets(15,2,6,0);
289         c.ipadx = 15;
290         navGridBag.setConstraints(updateButton, c);
291         navPane.add(updateButton);
292 
293         // NEXT BUTTON LISTENER
294         cancelButton.addActionListener(new ActionListener() {
295             public void actionPerformed(ActionEvent e)
296             {
297                 dispose();
298             }
299         });
300         // NEXT BUTTON SETTINGS
301         c.gridx = GridBagConstraints.RELATIVE;
302         c.weightx = GridBagConstraints.RELATIVE;
303         navGridBag.setConstraints(cancelButton, c);
304         navPane.add(cancelButton);
305 
306         // FINAL ADD
307         contentPane.add(getTitlePane(fmUITheme.getString("dialog.edit_folder." +
308                                                                       "secondary_title")),
309                         BorderLayout.NORTH);
310         contentPane.add(settingsPane, BorderLayout.CENTER);
311         contentPane.add(navPane, BorderLayout.SOUTH);
312 
313         setResizable(false);
314         pack();
315         setVisible(true);
316     }
317 
318 
319     /**
320      * Return current category title
321      */
322     public String getCategoryTitle()
323     {
324         return categoryTitle.getText();
325     }
326 
327     /**
328      * Return current category description
329      */
330     public String getCategoryDescription()
331     {
332         return categoryDescription.getText();
333     }
334 
335     private fmTreeNode getSelectedNode(fmCategoryTree catTree) {
336         TreePath nodePath = catTree.getSelectionPath();
337 
338         if (nodePath == null)
339             return catTree.getRootNode();
340         else
341         {
342             fmTreeNode sN = (fmTreeNode)nodePath.getLastPathComponent();
343             return (sN.isCategory()) ? sN : (fmTreeNode)sN.getParent();
344         }
345     }
346 
347     /**
348      * Return white panel with title string
349      */
350     private JPanel getTitlePane(String title)
351     {
352         JPanel titlePane = new JPanel(new FlowLayout(FlowLayout.LEFT));
353         titlePane.setBackground(fmUITheme.WHITE_COLOR);
354         titlePane.setPreferredSize(new Dimension(400,40));
355 
356         JLabel titlePaneLabel = new JLabel(title);
357         titlePaneLabel.setFont(fmUITheme.BIG_BLACK_FONT);
358         titlePane.add(titlePaneLabel);
359 
360         return titlePane;
361     }
362 
363 
364     /**
365      * Provides common initialization for create/update panels
366      *
367      * @param catTree
368      */
369     private void doCommonInit(fmCategoryTree catTree, boolean isUpdateMode) {
370         categoryTree = new fmCategoryTree((DefaultTreeModel)catTree.getModel());
371         originalTree = catTree;
372 
373         {
374             fmTreeNode selectedNode = getSelectedNode(catTree);
375             if (selectedNode != null) {
376 
377                 if (isUpdateMode == true) {
378                     fmTreeNode parentNode = (fmTreeNode) selectedNode.getParent();
379                     if (parentNode != categoryTree.getRootNode()) {
380                         fmTreeNode tNode = categoryTree.findCategoryNode(categoryTree.getRootNode(),
381                                                                          parentNode.getID());
382                         if (tNode != null)
383                             categoryTree.setSelectionPath(new TreePath(tNode.getPath()));
384                     }
385                 }
386                 else
387                 {
388                     int tId = selectedNode.getID();
389                     fmTreeNode tNode = categoryTree.findCategoryNode(categoryTree.getRootNode(), tId);
390                     if (tNode != null)
391                         categoryTree.setSelectionPath(new TreePath(tNode.getPath()));
392                 }
393             }
394         }
395         // SETTINGS PANE
396         settingsPane = new JPanel();
397         settingsPane.setLayout(new BoxLayout(settingsPane, BoxLayout.Y_AXIS));
398         settingsPane.setBorder(fmUITheme.FM_BUTTON_BORDER);
399         JLabel label = new JLabel(fmUITheme.getString("label.title"));
400         label.setAlignmentX(Component.LEFT_ALIGNMENT);
401 
402         categoryTitle = new JTextField();
403         categoryTitle.setToolTipText(fmUITheme.getString("pane.title.tooltip"));
404         categoryTitle.setAlignmentX(LEFT_ALIGNMENT);
405 
406         Dimension d1 = new Dimension(350,25);
407         categoryTitle.setPreferredSize(d1);
408         categoryTitle.setMaximumSize(d1);
409         categoryTitle.setBorder(fmUITheme.TEXT_FIELD_BORDER);
410 
411         settingsPane.add(label);
412         settingsPane.add(Box.createRigidArea(new Dimension(0,3)));
413         settingsPane.add(categoryTitle);
414         settingsPane.add(Box.createRigidArea(new Dimension(0,10)));
415 
416         // Description
417         label = new JLabel(fmUITheme.getString("label.description"));
418         label.setAlignmentX(LEFT_ALIGNMENT);
419         settingsPane.add(label);
420 
421         Dimension d2 = new Dimension(350,150);
422         categoryDescription = new JEditorPane();
423         JScrollPane descrScroll = new JScrollPane(categoryDescription);
424         descrScroll.setPreferredSize(d2);
425         descrScroll.setMaximumSize(d2);
426         descrScroll.setAlignmentX(LEFT_ALIGNMENT);
427         categoryDescription.setToolTipText(fmUITheme.getString("pane.description.tooltip"));
428 
429         settingsPane.add(label);
430         settingsPane.add(Box.createRigidArea(new Dimension(0,3)));
431         settingsPane.add(descrScroll);
432         settingsPane.add(Box.createRigidArea(new Dimension(0,10)));
433 
434         final JLabel parentLabel = new JLabel();
435 
436         {
437             fmTreeNode tNode = getSelectedNode(categoryTree);
438             if (tNode != categoryTree.getRootNode())
439                 parentLabel.setText(fmUITheme.getString("label.current_parent") + " " +tNode.toString());
440             else
441                 parentLabel.setText(fmUITheme.getString("label.current_parent"));
442         }
443 
444         settingsPane.add(parentLabel);
445 
446         final JScrollPane treeView = new JScrollPane(categoryTree);
447         treeView.setVisible(false);
448 
449 
450         final JButton showTreeButton = fmUITheme.getButtonInstance("button.choose_parent.label",
451                                                                    "button.choose_parent.tooltip",
452                                                                     KeyEvent.VK_P);
453         settingsPane.add(Box.createRigidArea(new Dimension(0,5)));
454         showTreeButton.setAlignmentX(LEFT_ALIGNMENT);
455         treeView.setAlignmentX(LEFT_ALIGNMENT);
456         Dimension treeDimension = new Dimension(d2);
457         treeDimension.height = 300;
458         treeView.setPreferredSize(treeDimension);
459         treeView.setMaximumSize(treeDimension);
460         settingsPane.add(showTreeButton);
461         settingsPane.add(Box.createRigidArea(new Dimension(0,5)));
462 
463         settingsPane.add(treeView);
464         settingsPane.add(Box.createRigidArea(new Dimension(0,10)));
465         showTreeButton.addActionListener(new ActionListener () {
466             public void actionPerformed(ActionEvent e) {
467                 if (treeView.isVisible() == false) {
468                     showTreeButton.setText(fmUITheme.getString("button.choose_parent_close.label"));
469                     showTreeButton.setToolTipText(fmUITheme.getString("button.choose_parent_close.tooltip"));
470                     treeView.setVisible(true);
471                 }
472                 else {
473                     treeView.setVisible(false);
474                     showTreeButton.setText(fmUITheme.getString("button.choose_parent.label"));
475                     showTreeButton.setToolTipText(fmUITheme.getString("button.choose_parent.tooltip"));
476                 }
477             }
478         });
479 
480         ////////////////////////////////////////////////////
481         // CATEGORY TREE LISTENER
482         //Listen for when the selection changes.
483         categoryTree.addTreeSelectionListener(new TreeSelectionListener() {
484             public void valueChanged(TreeSelectionEvent e) {
485                 TreePath p = categoryTree.getSelectionPath();
486                 fmTreeNode node = null;
487 
488                 if ((p == null) ||
489                     ((node = (fmTreeNode) p.getLastPathComponent()) == null) ||
490                     (node == categoryTree.getRootNode()))
491                 {
492                     parentLabel.setText(fmUITheme.getString("label.current_parent"));
493 
494                 }
495                 else if (node.isCategory())
496                 {
497                     parentLabel.setText(fmUITheme.getString("label.current_parent") + " " + node.toString());
498                 }
499             }
500         });
501     }
502 
503 }