source: trunk/jabberit_messenger/java_source/src/nu/fw/jeti/ui/OptionsWindow.java @ 1001

Revision 1001, 7.5 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #552 - Inclusão do projeto Java referente ao applet do módulo.

Line 
1/*
2 *      Jeti, a Java Jabber client, Copyright (C) 2001 E.S. de Boer 
3 *
4 *  This program is free software; you can redistribute it and/or modify
5 *  it under the terms of the GNU General Public License as published by
6 *  the Free Software Foundation; either version 2 of the License, or
7 *  (at your option) any later version.
8 *
9 *  This program is distributed in the hope that it will be useful,
10 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
11 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 *      GNU General Public License for more details.
13 *
14 *  You should have received a copy of the GNU General Public License
15 *  along with this program; if not, write to the Free Software
16 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 *
18 *      For questions, comments etc,
19 *      use the website at http://jeti.jabberstudio.org
20 *  or mail me at eric@jeti.tk
21 */
22
23package nu.fw.jeti.ui;
24
25import java.awt.BorderLayout;
26import java.awt.CardLayout;
27import java.awt.Component;
28import java.awt.Dimension;
29import java.awt.event.ActionEvent;
30import java.awt.event.KeyEvent;
31import java.io.File;
32import java.lang.reflect.Constructor;
33import java.util.HashMap;
34import java.util.Iterator;
35import java.util.Map;
36
37import javax.swing.*;
38import javax.swing.border.EtchedBorder;
39import javax.swing.event.TreeSelectionEvent;
40import javax.swing.event.TreeSelectionListener;
41import javax.swing.tree.*;
42
43import nu.fw.jeti.backend.Start;
44import nu.fw.jeti.images.IconPrefPanel;
45import nu.fw.jeti.jabber.Backend;
46import nu.fw.jeti.jabber.elements.IQPrivate;
47import nu.fw.jeti.jabber.elements.InfoQuery;
48import nu.fw.jeti.plugins.PluginsInfo;
49import nu.fw.jeti.plugins.PreferencesPanel;
50import nu.fw.jeti.util.I18N;
51import nu.fw.jeti.util.Preferences;
52import nu.fw.jeti.util.Utils;
53
54/**
55 * @author E.S. de Boer
56 * @version 1.0
57 * window for the user and plugin preferences
58 */
59
60public class OptionsWindow extends JFrame
61{
62        //private JTabbedPane jTabbedPane1 = new JTabbedPane();
63        private JPanel cards = new JPanel(new CardLayout());
64        private JTree tree;
65        private JPanel jPanel2 = new JPanel();
66        private JButton btnApply = new JButton();
67        private JButton btnCancel = new JButton();
68        private JButton btnOK = new JButton();
69        private Map panels = new HashMap();
70        private Map nodes = new HashMap(); //needed to delete from tree
71        private Backend backend;
72        private PreferencesPanel pluginPanel;
73       
74        public OptionsWindow(Backend backend)
75        {
76                this.backend = backend;
77                DefaultMutableTreeNode node = new DefaultMutableTreeNode();
78                //setIconImage(nu.fw.jeti.images.StatusIcons.getImageIcon("jeti").getImage());
79                setTitle(I18N.gettext("main.options.Options"));
80                I18N.setTextAndMnemonic("Apply",btnApply);
81                btnApply.addActionListener(new java.awt.event.ActionListener()
82                {
83                        public void actionPerformed(ActionEvent e)
84                        {
85                                btnApply_actionPerformed(e);
86                        }
87                });
88                Action cancelAction = new AbstractAction(I18N.gettext("Cancel"))
89                {
90                        public void actionPerformed(ActionEvent e)
91                        {
92                                btnCancel_actionPerformed(e);
93                        }
94                };
95                Utils.addCancelButton(this, btnCancel, cancelAction);
96               
97                btnOK.setText(I18N.gettext("OK"));
98                getRootPane().setDefaultButton(btnOK);
99                btnOK.addActionListener(new java.awt.event.ActionListener()
100                {
101                        public void actionPerformed(ActionEvent e)
102                        {
103                                btnOK_actionPerformed(e);
104                        }
105                });
106                setDefaultCloseOperation(DISPOSE_ON_CLOSE);
107               
108                jPanel2.add(btnOK);
109                jPanel2.add(btnCancel);
110                jPanel2.add(btnApply);
111               
112                pluginPanel = new PluginsPanel(this);
113                panels.put(I18N.gettext("main.options.Plugins"), pluginPanel);
114                cards.add(pluginPanel, I18N.gettext("main.options.Plugins"));
115                PreferencesPanel panel = null;
116                node.add(new DefaultMutableTreeNode(I18N.gettext("main.options.Plugins")));
117
118                panel = new StdPreferencesPanel(backend);
119                panels.put(I18N.gettext("main.options.Standard"), panel);
120                cards.add(panel, I18N.gettext("main.options.Standard"));
121                node.add(new DefaultMutableTreeNode(I18N.gettext("main.options.Standard")));
122               
123                for (Iterator i = PluginsInfo.loadedPreferencePanels.entrySet().iterator(); i.hasNext();)
124                {
125                        Map.Entry temp = (Map.Entry) i.next();
126                        try
127                        {
128                                Class c = (Class) temp.getValue();
129                                Constructor co = c.getConstructor(new Class[] { Backend.class });
130                                panel = (PreferencesPanel) co.newInstance(new Object[] { backend });
131                        }
132                        catch (Exception e2)
133                        {
134                                e2.printStackTrace();
135                                break;
136                        }
137            if (!panel.inhibited()) {
138                String name = (String) temp.getKey();
139                panels.put(name, panel);
140                cards.add(panel, name);
141                DefaultMutableTreeNode mnode= new DefaultMutableTreeNode(name);
142                nodes.put(name, mnode);
143                node.add(mnode);
144            }
145                }
146                panel = null;
147               
148                tree = new JTree(new DefaultTreeModel(node));
149                tree.setPreferredSize(new Dimension(100,10));
150                tree.setRootVisible(false);
151                tree.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
152                DefaultTreeCellRenderer renderer =      new DefaultTreeCellRenderer();
153                renderer.setLeafIcon(null);
154                renderer.setOpenIcon(null);
155                renderer.setClosedIcon(null);
156                tree.setCellRenderer(renderer);
157               
158                tree.addTreeSelectionListener(new TreeSelectionListener()
159                {
160                        public void valueChanged(TreeSelectionEvent e)
161                        {
162                                DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
163                                if (node == null) return;
164                                String nodeInfo = (String) node.getUserObject();
165                                if(panels.containsKey(nodeInfo))
166                                {
167                                        ((CardLayout)cards.getLayout()).show(cards, nodeInfo);
168                                }
169                        }
170                });
171                getContentPane().add(cards, BorderLayout.CENTER);
172                getContentPane().add(tree, BorderLayout.WEST);
173                getContentPane().add(jPanel2, BorderLayout.SOUTH);
174                pack();
175                setLocationRelativeTo(null);
176        }
177
178        public void removePanel(String name)
179        {
180                if(panels.containsKey(name))
181                {       
182                        cards.remove((Component) panels.get(name));
183                        DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
184                        model.removeNodeFromParent((DefaultMutableTreeNode)nodes.get(name));
185                        nodes.remove(name);
186                        panels.remove(name);
187                }
188        }
189
190        public void addPanel(String name)
191        {
192                PreferencesPanel panel = null;
193                try
194                {
195                        Class c = (Class) PluginsInfo.loadedPreferencePanels.get(name);
196                        Constructor co = c.getConstructor(new Class[] { Backend.class });
197                        panel = (PreferencesPanel) co.newInstance(new Object[] { backend });
198                }
199                catch (Exception e2)
200                {
201                        //System.err.println("no preferences panel");
202                        return;
203                }
204        if (!panel.inhibited()) {
205            panels.put(name, panel);
206            cards.add(panel, name);
207            DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
208            DefaultMutableTreeNode mnode= new DefaultMutableTreeNode(name);
209            nodes.put(name, mnode);
210            model.insertNodeInto(mnode,(MutableTreeNode)model.getRoot(),((TreeNode)model.getRoot()).getChildCount());
211        }
212        }
213
214        public void savePreferences()
215        {
216                for (Iterator i = panels.values().iterator(); i.hasNext();)
217                {
218                        PreferencesPanel pp = (PreferencesPanel) i.next();
219                        if(pp!=pluginPanel) pp.savePreferences();
220                }
221                pluginPanel.savePreferences();
222                if(Start.applet)backend.send(new InfoQuery("set",new IQPrivate(new nu.fw.jeti.applet.JetiPrivatePreferencesExtension(new Preferences()))));
223                else Preferences.save();
224        }
225
226        void btnApply_actionPerformed(ActionEvent e)
227        {
228                savePreferences();
229        }
230
231        void btnCancel_actionPerformed(ActionEvent e)
232        {
233                panels = null;
234                cards.removeAll();
235                cards = null;
236                this.dispose();
237        }
238
239        void btnOK_actionPerformed(ActionEvent e)
240        {
241                savePreferences();
242                btnCancel_actionPerformed(null);
243        }
244}
245/*
246 * Overrides for emacs
247 * Local variables:
248 * tab-width: 4
249 * End:
250 */
Note: See TracBrowser for help on using the repository browser.