1 29 38 39 package org.planetamessenger.mos.ui; 40 41 import org.planetamessenger.mos.engine.*; 42 import org.planetamessenger.plugin.*; 43 import javax.swing.tree.*; 44 import java.util.*; 45 46 47 48 public class JProfileTree extends javax.swing.JTree implements javax.swing.event.TreeModelListener { 49 50 javax.swing.tree.DefaultTreeCellEditor cellEditor = null; 51 javax.swing.tree.DefaultTreeModel treeModel = null; 52 JProfileMutableTreeNode rootNode = null; 53 54 55 61 public JProfileTree( java.lang.String strRootLabel ) { 62 63 super(); 64 65 JProfileTreeItem item; 66 DefaultTreeCellRenderer treeRenderer; 67 68 69 putClientProperty( "JTree.lineStyle", "Angled" ); 70 71 item = new JProfileTreeItem( strRootLabel, -1, -1, null, JProfileTreeItem.TYPE_NONE ); 72 rootNode = new JProfileMutableTreeNode( item ); 73 treeModel = new javax.swing.tree.DefaultTreeModel ( rootNode ); 74 treeRenderer = new JProfileTreeRenderer(); 75 76 treeModel.addTreeModelListener( this ); 77 setModel( treeModel ); 78 setEditable( true ); 79 setCellRenderer( treeRenderer ); 80 getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); 81 treeRenderer.setOpenIcon( null ); 85 treeRenderer.setClosedIcon( null ); 86 87 initCellEditor(); 88 initProfileTree(); 89 } 90 91 94 private void initCellEditor() { 95 96 cellEditor = new javax.swing.tree.DefaultTreeCellEditor ( this, ( javax.swing.tree.DefaultTreeCellRenderer ) getCellRenderer(), ( javax.swing.DefaultCellEditor ) new JProfileTreeCellEditor() ); 97 setCellEditor( cellEditor ); 98 } 99 100 104 private void initProfileTree() { 105 106 JLookAndFeelInfo plafInfo; 107 JProfileMutableTreeNode node; 108 org.planetamessenger.db.JResultSet resultSet = JSharedObjects.getProfileManager().getAllProfiles(); 109 String strProfileDesc; 110 String strClassName; 111 String strFileName; 112 java.sql.ResultSet rs; 113 int nProfileId; 114 int nPluginId; 115 116 117 if( resultSet != null ) { 118 try { 119 while( resultSet.getResultSet().next() ) { 120 nProfileId = resultSet.getResultSet().getInt( "profile_id" ); 121 strProfileDesc = resultSet.getResultSet().getString( "profile_desc" ); 122 strClassName = resultSet.getResultSet().getString( "class_name" ); 123 strFileName = resultSet.getResultSet().getString( "file_name" ); 124 node = addTreeItem( rootNode, nProfileId, -1, strProfileDesc, null, JProfileTreeItem.TYPE_PROFILE, false ); 125 rs = JSharedObjects.getProfileManager().getAllPlugins().getResultSet(); 126 plafInfo = JSharedObjects.getLookAndFeelManager().getLookAndFeel( strFileName, strClassName ); 127 128 if( plafInfo == null ) 129 plafInfo = JSharedObjects.getLookAndFeelManager().getLookAndFeel( "", javax.swing.UIManager.getSystemLookAndFeelClassName() ); 130 131 addTreeItem( node, nProfileId, -1, "", plafInfo, JProfileTreeItem.TYPE_LOOKNFEEL, false ); 133 134 139 try { 140 while( rs.next() ) { 141 nPluginId = rs.getInt( "plugin_id" ); 142 143 if( JSharedObjects.getProfileManager().checkPluginInstall( nPluginId, nProfileId ) ) { 144 JPluginProperties properties = JSharedObjects.getPluginEngine().getPluginPropertiesByClassName( rs.getString( "class_name" ) ); 145 JProtocolTreeItem protocolItem = new JProtocolTreeItem( properties.getName(), rs.getString( "class_name" ), nPluginId ); 146 147 addTreeItem( node, nProfileId, nPluginId, properties.getName(), null, JProfileTreeItem.TYPE_PLUGIN, false ); 148 } 149 } 150 } catch( java.sql.SQLException e ) { 151 System.out.println( "JProfileTree.initProfileTree() - SQLException " + e ); 152 } 153 } 154 155 resultSet.close(); 156 157 } catch( java.sql.SQLException e ) { 158 System.err.println( "JProfileTree.initProfileTree() - SQLException " + e ); 159 } 160 } 161 162 expandRow( 0 ); 163 } 164 165 180 private JProfileMutableTreeNode addTreeItem( JProfileMutableTreeNode parentNode, int nProfileId, int nPluginId, String strItem, JLookAndFeelInfo plafInfo, int nItemType, boolean bEdit ) { 181 182 JProfileTreeItem item = new JProfileTreeItem( ( nItemType != JProfileTreeItem.TYPE_LOOKNFEEL ? strItem : plafInfo.getName() ), nProfileId, nPluginId, plafInfo, nItemType ); 183 JProfileMutableTreeNode node = new JProfileMutableTreeNode( item ); 184 185 parentNode.add( node ); 186 treeModel.reload(); 187 188 if( bEdit ) 189 startEditingAtPath( this.getPathForRow( 0 ).pathByAddingChild( node ) ); 190 191 return node; 192 } 193 194 200 static public boolean checkProfile( java.lang.String strProfileName ) { 201 202 boolean bProfileCheck = JSharedObjects.getProfileManager().checkProfile( strProfileName ); 203 204 if( bProfileCheck ) { 205 javax.swing.JOptionPane.showMessageDialog( null, JSharedObjects.getLanguageManager().getStringEx( "PROFILE_ALREADY_EXIST_WARNING" ), JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), javax.swing.JOptionPane.ERROR_MESSAGE ); 206 return true; 207 } 208 209 return false; 210 } 211 212 216 public void addProfile( java.lang.String strProfileName ) { 217 218 int nProfileId; 219 JProfileMutableTreeNode profileNode; 220 JLookAndFeelInfo plafInfo = JSharedObjects.getLookAndFeelManager().getLookAndFeel( "", javax.swing.UIManager.getSystemLookAndFeelClassName() ); 221 222 if( checkProfile( strProfileName ) ) 223 return; 224 else 225 nProfileId = JSharedObjects.getProfileManager().profileAdd( strProfileName ); 226 227 profileNode = addTreeItem( rootNode, nProfileId, -1, strProfileName, null, JProfileTreeItem.TYPE_PROFILE, false ); 228 229 addTreeItem( profileNode, nProfileId, -1, "", plafInfo, JProfileTreeItem.TYPE_LOOKNFEEL, false ); 231 expandRow( 0 ); 232 233 startEditingAtPath( this.getPathForRow( 0 ).pathByAddingChild( profileNode ) ); 235 } 236 237 241 public JProfileTreeItem getSelectedItem() { 242 243 javax.swing.tree.TreePath path = getSelectionPath(); 244 245 246 if( path != null ) { 247 try { 248 int nPathCount = path.getPathCount(); 249 250 if( nPathCount > 0 ) { 251 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) path.getPathComponent( nPathCount - 1 ); 252 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 253 254 if( ( item.getItemType() == JProfileTreeItem.TYPE_PROFILE ) || 255 ( item.getItemType() == JProfileTreeItem.TYPE_PLUGIN ) || 256 ( item.getItemType() == JProfileTreeItem.TYPE_LOOKNFEEL ) ) 257 return item; 258 } 259 260 return null; 261 262 } catch( java.lang.IllegalArgumentException e ) { 263 System.err.println( "JProfileTree.getSelectedItem() - Invalid item" ); 264 return null; 265 } 266 } 267 268 return null; 269 } 270 271 274 public void removeSelectedItem() { 275 276 javax.swing.tree.TreePath path = getSelectionPath(); 277 278 279 if( path != null ) { 280 int nPathCount = path.getPathCount(); 281 282 if( nPathCount > 0 ) { 283 try { 284 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) path.getPathComponent( nPathCount - 1 ); 285 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 286 287 288 switch( item.getItemType() ) { 289 290 case JProfileTreeItem.TYPE_PROFILE : { 291 if( item.getProfileId() == JSharedObjects.getProfileManager().getProfileId() ) { 292 javax.swing.JOptionPane.showMessageDialog( this, JSharedObjects.getLanguageManager().getStringEx( "CANNOT_REMOVE_ACTIVE_PROFILE_WARNING" ), JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), javax.swing.JOptionPane.ERROR_MESSAGE ); 293 return; 294 } 295 else 296 JSharedObjects.getProfileManager().profileDel( item.getProfileId() ); 297 298 } break; 299 300 } 301 302 if( item.getItemType() != JProfileTreeItem.TYPE_NONE ) 303 treeModel.removeNodeFromParent( node ); 304 305 } catch( java.lang.IllegalArgumentException e ) { 306 System.err.println( "JProfileTree.removeSelectedItem() - Can't remove the root item" ); 307 } 308 } 309 } 310 } 311 312 316 public void setDefaultProfile() { 317 318 javax.swing.tree.TreePath path = getSelectionPath(); 319 320 321 if( path != null ) { 322 try { 323 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) path.getPathComponent( 1 ); 324 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 325 326 327 if( item.getItemType() == JProfileTreeItem.TYPE_PROFILE ) 328 JSharedObjects.getProfileManager().updateDefaultProfile( item.getProfileId() ); 329 330 } catch( java.lang.IllegalArgumentException e ) { 331 System.err.println( "JprofileTree.removeSelectedItem() - Can't remove the root item" ); 332 } 333 } 334 } 335 336 346 public boolean addPlugin( JProtocolTreeItem plugin ) { 347 348 javax.swing.tree.TreePath path = getSelectionPath(); 349 350 351 if( path != null ) { 352 JProfileMutableTreeNode profileNode = ( JProfileMutableTreeNode ) path.getPathComponent( 1 ); 353 JProfileTreeItem profileItem = ( JProfileTreeItem ) profileNode.getUserObject(); 354 boolean bPluginCheck = JSharedObjects.getProfileManager().checkPluginInstall( profileItem.getProfileId(), plugin.getPluginId() ); 355 356 357 if( !bPluginCheck ) 358 addTreeItem( profileNode, profileItem.getProfileId(), plugin.getPluginId(), plugin.toString(), null, JProfileTreeItem.TYPE_PLUGIN, false ); 359 360 expandPath( path ); 361 362 return true; 363 } 364 365 return false; 366 } 367 368 373 public void treeNodesChanged( javax.swing.event.TreeModelEvent treeModelEvent ) { 374 375 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) getSelectionPath().getPathComponent( 1 ); 376 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 377 378 if( item.getItemType() == JProfileTreeItem.TYPE_PROFILE ) 379 JSharedObjects.getProfileManager().profileUpdate( item.getProfileId(), item.getText() ); 380 } 381 382 387 public void treeNodesInserted( javax.swing.event.TreeModelEvent treeModelEvent ) { 388 389 } 390 391 396 public void treeNodesRemoved( javax.swing.event.TreeModelEvent treeModelEvent ) { 397 398 } 399 400 405 public void treeStructureChanged( javax.swing.event.TreeModelEvent treeModelEvent ) { 406 407 } 408 409 414 public boolean isPathEditable( javax.swing.tree.TreePath path ) { 415 416 int nPathCount = path.getPathCount(); 417 418 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) path.getPathComponent( nPathCount - 1 ); 419 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 420 421 if( ( item.getItemType() == JProfileTreeItem.TYPE_LOOKNFEEL ) || 422 ( item.getItemType() == JProfileTreeItem.TYPE_PROFILE ) ) 423 return true; 424 else 425 return false; 426 } 427 428 429 433 434 private class JProfileTreeCellEditor extends javax.swing.DefaultCellEditor { 435 436 javax.swing.JComboBox lookAndFeelCombo = null; 437 438 439 443 JProfileTreeCellEditor() { 444 445 super( new javax.swing.JTextField () ); 446 447 ArrayList<JLookAndFeelInfo> plafList = JSharedObjects.getLookAndFeelManager().getLookAndFeelList(); 448 449 lookAndFeelCombo = new javax.swing.JComboBox (); 450 lookAndFeelCombo.setModel( new javax.swing.DefaultComboBoxModel () ); 451 lookAndFeelCombo.setBorder( javax.swing.border.LineBorder.createBlackLineBorder() ); 452 453 for( int nCount = 0; nCount < plafList.size(); nCount++ ) 454 lookAndFeelCombo.addItem( plafList.get( nCount ) ); 455 456 lookAndFeelCombo.addItemListener( new java.awt.event.ItemListener () { 458 public void itemStateChanged( java.awt.event.ItemEvent evt ) { 459 lookAndFeelChanged( evt ); 460 } 461 } ); 462 463 setClickCountToStart( 1 ); 465 } 466 467 473 private void lookAndFeelChanged( java.awt.event.ItemEvent evt ) { 474 475 if( evt.getStateChange() != java.awt.event.ItemEvent.DESELECTED ) { 476 477 if( evt.getItem() instanceof JLookAndFeelInfo ) { 478 JLookAndFeelInfo plafInfo = ( JLookAndFeelInfo ) evt.getItem(); 479 JProfileTreeItem item = getSelectedItem(); 480 boolean bOperationOk; 481 482 if( item == null ) 483 return; 484 485 if( isEditing() ) 487 stopEditing(); 488 489 if( item.getProfileId() == JSharedObjects.getProfileManager().getProfileId() ) 491 bOperationOk = JSharedObjects.getLookAndFeelManager().loadLookAndFeel( plafInfo ); 492 else 493 bOperationOk = JSharedObjects.getLookAndFeelManager().isSupportedLookAndFeel( plafInfo ); 494 495 if( !bOperationOk ) 496 javax.swing.JOptionPane.showMessageDialog( null, JSharedObjects.getLookAndFeelManager().getLastError(), JSharedObjects.getLanguageManager().getStringEx( "WARNING" ), javax.swing.JOptionPane.WARNING_MESSAGE ); 497 else { 498 JSharedObjects.getLookAndFeelManager().updateProfile( item.getProfileId(), plafInfo ); 499 item.setLookAndFeelInfo( plafInfo ); 500 } 501 } 502 } 503 } 504 505 510 public java.awt.Component getTreeCellEditorComponent( javax.swing.JTree tree, java.lang.Object value, boolean isSelected, boolean isExpanded, boolean leaf, int row ) { 511 512 javax.swing.tree.TreePath path = getSelectionPath(); 513 javax.swing.tree.DefaultTreeCellEditor editor = ( javax.swing.tree.DefaultTreeCellEditor ) tree.getCellEditor(); 514 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) ( path == null ? value : path.getLastPathComponent() ); 515 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 516 517 if( item.getItemType() == JProfileTreeItem.TYPE_LOOKNFEEL ) { 518 519 JLookAndFeelInfo plafInfo; 520 JLookAndFeelInfo selectedPlafInfo = item.getLookAndFeelInfo(); 521 javax.swing.DefaultComboBoxModel model = ( javax.swing.DefaultComboBoxModel ) lookAndFeelCombo.getModel(); 522 523 for( int nCount = 0; nCount < model.getSize(); nCount++ ) { 524 plafInfo = ( JLookAndFeelInfo ) model.getElementAt( nCount ); 525 526 if( plafInfo.equals( selectedPlafInfo ) ) { 527 model.setSelectedItem( plafInfo ); 528 break; 529 } 530 } 531 532 return lookAndFeelCombo; 533 } 534 535 return super.getTreeCellEditorComponent( tree, value, isSelected, isExpanded, leaf, row ); 536 } 537 } 539 540 544 private class JProfileTreeRenderer extends DefaultTreeCellRenderer { 545 546 549 JProfileTreeRenderer() { 550 551 super(); 552 } 553 554 559 public java.awt.Component getTreeCellRendererComponent( javax.swing.JTree tree, Object value, boolean bSelected, boolean bExpanded, boolean bIsLeaf, int nRow, boolean bHasFocus ) { 560 561 JProfileMutableTreeNode node = ( JProfileMutableTreeNode ) value; 562 JProfileTreeItem item = ( JProfileTreeItem ) node.getUserObject(); 563 java.awt.Component comp = super.getTreeCellRendererComponent( tree, value, bSelected, bExpanded, bIsLeaf, nRow, bHasFocus ); 564 565 566 if( item == null ) 567 return comp; 568 569 switch( item.getItemType() ) { 570 571 case JProfileTreeItem.TYPE_PLUGIN : { 572 if( bIsLeaf ) { 573 setIcon( JSharedObjects.getResources().getIcon( JResources.PLUGIN_ICON ) ); 574 setLeafIcon( JSharedObjects.getResources().getIcon( JResources.LOOKNFEEL_ICON ) ); 575 return this; 576 } 577 } break; 578 579 case JProfileTreeItem.TYPE_LOOKNFEEL : { 580 if( bIsLeaf ) { 581 setIcon( JSharedObjects.getResources().getIcon( JResources.LOOKNFEEL_ICON ) ); 582 return this; 583 } 584 } break; 585 } 586 587 return comp; 588 } 589 } 590 } 591 592 | Popular Tags |