KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > planetamessenger > mos > forms > preferences > JLanguagesPanel


1 /*
2     =========================================================================
3     Package preferences - Preferences management panels.
4
5     This module is developed and maintained by PlanetaMessenger.org.
6     Specs, New and updated versions can be found in
7     http://www.planetamessenger.org
8     If you want contact the Team please send a email to Project Manager
9     Leidson Campos Alves Ferreira at leidson@planetamessenger.org
10
11     Copyright (C) since 2001 by PlanetaMessenger.org
12
13     This program is free software; you can redistribute it and/or modify
14     it under the terms of the GNU General Public License as published by
15     the Free Software Foundation; either version 2 of the License, or
16     (at your option) any later version.
17
18     This program is distributed in the hope that it will be useful,
19     but WITHOUT ANY WARRANTY; without even the implied warranty of
20     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     GNU General Public License for more details.
22
23     You should have received a copy of the GNU General Public License
24     along with this program; if not, write to the Free Software
25     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26
27     =========================================================================
28 */

29 /**
30  *
31  * $Id: JLanguagesPanel.java,v 1.11 2007/02/23 21:54:23 popolony2k Exp $
32  * $Author: popolony2k $
33  * $Name: $
34  * $Revision: 1.11 $
35  * $State: Exp $
36  *
37  */

38
39 package org.planetamessenger.mos.forms.preferences;
40
41 import java.awt.*;
42 import java.awt.event.*;
43 import javax.swing.*;
44 import javax.swing.tree.*;
45 import javax.swing.event.*;
46 import javax.swing.text.*;
47 import javax.swing.text.html.*;
48 import java.util.*;
49 import com.jgoodies.forms.builder.*;
50 import com.jgoodies.forms.layout.*;
51 import com.jgoodies.forms.debug.*;
52 import org.planetamessenger.mos.engine.*;
53 import org.planetamessenger.plugin.*;
54
55
56 public class JLanguagesPanel extends JPluginPreferencesContainer implements TreeSelectionListener {
57   
58   private PanelBuilder builder = null;
59   private PanelBuilder builder2 = null;
60   private FormLayout layout = null;
61   private FormLayout layout2 = null;
62   private JSplitPane splitPane = null;
63   private JScrollPane languagesTreePane = null;
64   private JScrollPane languageInfoPane = null;
65   private JTree languagesTree = null;
66   private JTextPane languageInfo = null;
67   private JButton selectLanguageBtn = null;
68   private JPanel btnsPanel = null;
69   private JLanguageTreeCellRenderer renderer = null;
70   private DefaultTreeModel treeModel = null;
71   private DefaultMutableTreeNode rootNode = null;
72   private DefaultMutableTreeNode selectedNode = null;
73
74   
75   /**
76    * Constructor. Initialize all class data.
77    */

78   public JLanguagesPanel() {
79
80     super();
81
82     GridBagConstraints btnsConst = new GridBagConstraints();
83     CellConstraints cellConst = new CellConstraints();
84     String JavaDoc strRootName = "AVAILABLE_LANGUAGES";
85     JLanguageField rootNodeField = new JLanguageField();
86     
87     rootNodeField.setLanguageId( null );
88     rootNodeField.setLanguage( strRootName );
89     rootNodeField.setObject( new Boolean JavaDoc( false ) );
90
91     layout = new FormLayout( "fill:260dlu:grow", "fill:310dlu" );
92     layout2 = new FormLayout( "fill:90dlu:grow, fill:10dlu:grow", "fill:100dlu:grow" );
93     builder = new PanelBuilder( layout );
94     builder2 = new PanelBuilder( layout2 );
95     //builder2 = new DefaultFormBuilder( layout2, new FormDebugPanel() );
96
//builder = new DefaultFormBuilder( layout, new FormDebugPanel() );
97
languagesTree = new JTree();
98     languagesTreePane = new JScrollPane( languagesTree );
99     languageInfo = new JTextPane();
100     languageInfoPane = new JScrollPane( languageInfo );
101     splitPane = new JSplitPane( JSplitPane.VERTICAL_SPLIT, builder2.getPanel(), languageInfoPane );
102     selectLanguageBtn = new JButton();
103     btnsPanel = new JPanel();
104
105     builder.setDefaultDialogBorder();
106     builder2.setDefaultDialogBorder();
107
108     rootNode = new DefaultMutableTreeNode( rootNodeField );
109     treeModel = new DefaultTreeModel( rootNode );
110     languagesTree.setModel( treeModel );
111
112     renderer = new JLanguageTreeCellRenderer();
113     renderer.setLeafIcon( null );
114     renderer.setOpenIcon( null );
115     renderer.setClosedIcon( null );
116
117     selectLanguageBtn.setFont( JSystemFonts.FONT );
118     selectLanguageBtn.setPreferredSize( new Dimension( JResources.DEFAULT_BUTTON_WIDTH, JResources.DEFAULT_BUTTON_HEIGHT ) );
119     selectLanguageBtn.setMinimumSize( selectLanguageBtn.getPreferredSize() );
120     selectLanguageBtn.setIcon( JSharedObjects.getResources().getIcon( JResources.OK_BUTTON_ICON ) );
121     selectLanguageBtn.setEnabled( false );
122     selectLanguageBtn.addActionListener( new ActionListener() {
123                                    public void actionPerformed( ActionEvent evt ) {
124                                      selectLanguage();
125                                    }
126                                  } );
127     
128
129     languagesTree.addTreeSelectionListener( this );
130     languagesTree.setCellRenderer( renderer );
131     languagesTree.putClientProperty( "JTree.lineStyle", "Angled" );
132     languagesTree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );
133
134     languageInfo.setFont( JSystemFonts.FONT );
135     languageInfo.setEditable( false );
136     languageInfo.setEditorKit( JTextPane.createEditorKitForContentType( "text/html" ) );
137     
138     // Buttons panel setup
139
btnsPanel.setLayout( new GridBagLayout() );
140     
141     btnsConst.gridx = 0;
142     btnsConst.gridy = 0;
143     btnsConst.gridwidth = GridBagConstraints.REMAINDER;
144     btnsConst.gridheight = 1;
145     btnsConst.weightx = 0.0001;
146     btnsConst.weighty = 0.0001;
147     btnsConst.insets = new Insets( 3, 3, 3, 3 );
148     btnsConst.fill = GridBagConstraints.HORIZONTAL;
149     btnsConst.anchor = GridBagConstraints.NORTH;
150     btnsPanel.add( selectLanguageBtn, btnsConst );
151
152     splitPane.setDividerLocation( splitPane.getMinimumDividerLocation() );
153
154     builder2.add( languagesTreePane, cellConst.xy( 1, 1 ) );
155     builder2.add( btnsPanel, cellConst.xy( 2, 1 ) );
156     builder.add( splitPane, cellConst.xy( 1, 1 ) );
157   }
158   
159   /**
160    * Initialize the component's panel to show on
161    * preferences window.
162    */

163   public void onShow() {
164
165     if( getComponentCount() == 0 )
166       add( builder.getPanel() );
167     
168     fillLanguages();
169   }
170   
171   /**
172    * Called when Apply/Ok button is triggered.
173    * Store the new configuration to PM database.
174    */

175   public boolean onApply() {
176     
177     try {
178       JLanguageField item = ( JLanguageField ) selectedNode.getUserObject();
179
180       if( !item.getLanguageId().equals( JSharedObjects.getLanguageManager().getCurrentLanguage() ) ) {
181         JSharedObjects.getLanguageManager().loadLanguage( item.getLanguageId() );
182         JSharedObjects.getLanguageManager().updateProfile( JSharedObjects.getProfileManager().getProfileId(), item.getLanguageId() );
183         fillLanguages();
184       }
185     } catch( Exception JavaDoc e ) {
186       System.err.println( "JLanguagesPanel.onApply() - " + e );
187       return false;
188     }
189
190     return true;
191   }
192   
193   /**
194    * Called when cancel button is triggered.
195    */

196   public void onCancel() {
197
198   }
199   
200   /**
201    * Called by plugin manager when LAF is changed
202    * by user;
203    */

204   public void onLookAndFeelChanged() {
205
206     SwingUtilities.updateComponentTreeUI( this );
207   }
208   
209   /**
210    * Called by plugin manager when LAF is changed
211    * by user;
212    */

213   public void onLanguageChanged( String JavaDoc strCountryCode ) {
214
215     selectLanguageBtn.setText( JSharedObjects.getLanguageManager().getStringEx( "SELECT" ) );
216   }
217   
218   /**
219    * Fill available languages to Languages tree control.
220    */

221   private void fillLanguages() {
222     
223     ArrayList<JLanguageField> vAvailableLanguages = JSharedObjects.getLanguageManager().getLanguageList();
224     int nMaxItems = vAvailableLanguages.size();
225     DefaultMutableTreeNode newNode = null;
226     TreePath path = null;
227
228
229     rootNode.removeAllChildren();
230     languagesTree.expandRow( 0 );
231
232     for( int nCount = 0; nCount < nMaxItems; nCount++ ) {
233
234       JLanguageField langField = vAvailableLanguages.get( nCount );
235       JLanguageField itemField = ( JLanguageField ) langField.clone();
236       boolean bIsSelected = JSharedObjects.getLanguageManager().getCurrentLanguage().equals( langField.getLanguageId() );
237
238
239       itemField.setObject( new Boolean JavaDoc( bIsSelected ) );
240       newNode = new DefaultMutableTreeNode( itemField );
241       rootNode.add( newNode );
242
243       if( bIsSelected ) {
244         path = languagesTree.getPathForRow( 0 ).pathByAddingChild( newNode );
245         selectedNode = newNode;
246       }
247     }
248     
249     treeModel.reload();
250     
251     if( path != null )
252       languagesTree.getSelectionModel().setSelectionPath( path );
253   }
254   
255   // TreeSelectionListener implementation
256
/**
257    * Implements the valueChanged of TreeSelectionListener
258    * interface.<br>
259    * Update the Plugin Info panel depending on selection;
260    * item selected;<br>
261    * @param See Jdk docs;
262    */

263    public void valueChanged( TreeSelectionEvent treeSelectionEvent ) {
264
265      TreePath path = treeSelectionEvent.getPath();
266      DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) path.getLastPathComponent();
267      JLanguageField item = ( JLanguageField ) node.getUserObject();
268
269      languageInfo.setText( "" );
270
271      if( item.getLanguageId() != null ) {
272        HTMLDocument doc = ( HTMLDocument ) languageInfo.getDocument();
273        HTMLEditorKit html = ( HTMLEditorKit ) languageInfo.getEditorKit();
274        boolean bIsSelected = ( ( Boolean JavaDoc ) item.getObject() ).booleanValue();
275
276
277        selectLanguageBtn.setEnabled( !bIsSelected );
278
279        try {
280          html.insertHTML( doc, doc.getLength(), "<strong>" + item.getLanguage() + "</strong><p>" , 0, 0, null );
281          html.insertHTML( doc, doc.getLength(), "<b>" + JSharedObjects.getLanguageManager().getStringEx( "VERSION_FULL" ) + " : </b>" + item.getVersion(), 0, 0, null );
282          html.insertHTML( doc, doc.getLength(), "<b>" + JSharedObjects.getLanguageManager().getStringEx( "OWNER" ) + " : </b>" + item.getOwner(), 0, 0, null );
283          html.insertHTML( doc, doc.getLength(), "<b>" + JSharedObjects.getLanguageManager().getStringEx( "LICENSE" ) + " : </b>" + item.getLicense(), 0, 0, null );
284          html.insertHTML( doc, doc.getLength(), "<b>" + JSharedObjects.getLanguageManager().getStringEx( "HOME_PAGE" ) + " : </b>" + item.getHomePage(), 0, 0, null );
285          html.insertHTML( doc, doc.getLength(), "<b>" + JSharedObjects.getLanguageManager().getStringEx( "DESCRIPTION" ) + " : </b>" + item.getDescription(), 0, 0, null );
286        } catch( BadLocationException e ) {
287          System.err.println( "JLanguagesPanel.valueChanged() - " + e );
288        } catch( java.io.IOException JavaDoc ioe ) {
289          System.err.println( "JLanguagesPanel.valueChanged() - " + ioe );
290        }
291      }
292      else
293        selectLanguageBtn.setEnabled( false );
294   }
295    
296   /**
297    * Change current language to selected language
298    * by user.
299    */

300   private void selectLanguage() {
301
302     TreePath path = languagesTree.getSelectionPath();
303
304     if( path != null ) {
305       DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) path.getLastPathComponent();
306       JLanguageField item = ( JLanguageField ) node.getUserObject();
307       JLanguageField oldItem = ( JLanguageField ) selectedNode.getUserObject();
308       
309       item.setObject( new Boolean JavaDoc( true ) );
310       oldItem.setObject( new Boolean JavaDoc( false ) );
311       selectedNode = node;
312       treeModel.reload();
313       JSharedObjects.getKernelManager().getPreferencesManager().EnableApplyPreferencesManager( true );
314     }
315   }
316
317
318   /**
319    *=========================================================================
320    * JLanguageTreeCellRenderer class implementation
321    * This is a new cell renderer implementation for languages tree component.
322    *=========================================================================
323    */

324   private class JLanguageTreeCellRenderer extends DefaultTreeCellRenderer {
325
326     /**
327      * Overrides the Cell renderer method of this JTreeCellRenderer.<br>
328      * Show the check icon (disable option) when plugin is selected to be installed;
329      * See JDK API for the parameters.
330      */

331     public java.awt.Component JavaDoc getTreeCellRendererComponent( javax.swing.JTree JavaDoc tree, java.lang.Object JavaDoc objValue, boolean bSelected, boolean bExpanded, boolean bIsLeaf, int nRow, boolean bHasFocus ) {
332
333       super.getTreeCellRendererComponent( tree, objValue, bSelected, bExpanded, bIsLeaf, nRow, bHasFocus );
334       
335       try {
336
337         DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) objValue;
338         JLanguageField item = ( JLanguageField ) node.getUserObject();
339         Boolean JavaDoc bIsSelected = ( Boolean JavaDoc ) item.getObject();
340
341       
342         // Only root item has Keyname as null
343
if( item.getLanguageId() == null ) {
344           setText( JSharedObjects.getLanguageManager().getStringEx( item.getLanguage() ) );
345           return this;
346         }
347         
348         setText( item.getLanguage() );
349
350         // Add/remove the checked icon
351
if( bIsSelected )
352           setIcon( JSharedObjects.getResources().getIcon( JResources.INSTALL_PLUGIN_ICON ) );
353         else
354           setIcon( JSharedObjects.getResources().getIcon( JResources.UNINSTALL_PLUGIN_ICON ) );
355       } catch( Exception JavaDoc e ) {
356         System.err.println( "JLanguagesPanel.JLanguageTreeCellRenderer.getTreeCellRendererComponent() - Invalid item object. Ignoring event" );
357       }
358
359       return this;
360     }
361   } // JLanguageTreeCellRenderer Class
362
}
363
364 // JLanguagesPanel class
365
Popular Tags