1 29 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 78 public JLanguagesPanel() { 79 80 super(); 81 82 GridBagConstraints btnsConst = new GridBagConstraints(); 83 CellConstraints cellConst = new CellConstraints(); 84 String strRootName = "AVAILABLE_LANGUAGES"; 85 JLanguageField rootNodeField = new JLanguageField(); 86 87 rootNodeField.setLanguageId( null ); 88 rootNodeField.setLanguage( strRootName ); 89 rootNodeField.setObject( new Boolean ( 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 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 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 163 public void onShow() { 164 165 if( getComponentCount() == 0 ) 166 add( builder.getPanel() ); 167 168 fillLanguages(); 169 } 170 171 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 e ) { 186 System.err.println( "JLanguagesPanel.onApply() - " + e ); 187 return false; 188 } 189 190 return true; 191 } 192 193 196 public void onCancel() { 197 198 } 199 200 204 public void onLookAndFeelChanged() { 205 206 SwingUtilities.updateComponentTreeUI( this ); 207 } 208 209 213 public void onLanguageChanged( String strCountryCode ) { 214 215 selectLanguageBtn.setText( JSharedObjects.getLanguageManager().getStringEx( "SELECT" ) ); 216 } 217 218 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 ( 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 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 ) 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 ioe ) { 289 System.err.println( "JLanguagesPanel.valueChanged() - " + ioe ); 290 } 291 } 292 else 293 selectLanguageBtn.setEnabled( false ); 294 } 295 296 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 ( true ) ); 310 oldItem.setObject( new Boolean ( false ) ); 311 selectedNode = node; 312 treeModel.reload(); 313 JSharedObjects.getKernelManager().getPreferencesManager().EnableApplyPreferencesManager( true ); 314 } 315 } 316 317 318 324 private class JLanguageTreeCellRenderer extends DefaultTreeCellRenderer { 325 326 331 public java.awt.Component getTreeCellRendererComponent( javax.swing.JTree tree, java.lang.Object 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 bIsSelected = ( Boolean ) item.getObject(); 340 341 342 if( item.getLanguageId() == null ) { 344 setText( JSharedObjects.getLanguageManager().getStringEx( item.getLanguage() ) ); 345 return this; 346 } 347 348 setText( item.getLanguage() ); 349 350 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 e ) { 356 System.err.println( "JLanguagesPanel.JLanguageTreeCellRenderer.getTreeCellRendererComponent() - Invalid item object. Ignoring event" ); 357 } 358 359 return this; 360 } 361 } } 363 364 | Popular Tags |