1 29 38 39 package org.planetamessenger.mos.ui; 40 41 import javax.swing.*; 42 import java.util.*; 43 import org.planetamessenger.plugin.*; 44 import org.planetamessenger.mos.engine.*; 45 46 47 public class JAccountsTableModel extends javax.swing.table.DefaultTableModel implements java.awt.event.ItemListener { 48 49 JAccountsTable tableOwner = null; 50 51 52 57 public JAccountsTableModel( JAccountsTable owner ) { 58 59 super(); 60 61 tableOwner = owner; 62 } 63 64 69 public void addRow( JPlugin plugin ) { 70 71 Vector<JComponent> vColumns = new Vector<JComponent>(); 72 JPluginComboBox statusCombo = new JPluginComboBox( plugin ); 73 JStatusComboItem statusItem = null; 74 JPluginCheckBox autoConnectCheck = new JPluginCheckBox( plugin, JPluginCheckBox.AUTO_CONNECT ); 75 JPluginCheckBox connectionCheck = new JPluginCheckBox( plugin, JPluginCheckBox.RECONNECT ); 76 JLabel accountLabel = new JLabel( plugin.getPluginProperties().getName() ); 77 JUserInfo userInfo = JSharedObjects.getProfileManager().getUserInfo( plugin.getPluginProperties().getPluginId() ); 78 79 80 statusCombo.setFont( JSystemFonts.FONT ); 82 statusCombo.addItemListener( this ); 83 84 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_ONLINE ) ) ) { 85 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "ONLINE" ), JPlugin.STATUS_ONLINE ); 86 87 statusCombo.addItem( statusItem ); 88 89 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 90 statusCombo.setSelectedItem( statusItem ); 91 } 92 93 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_FREE_CHAT ) ) ) { 94 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "FREE_FOR_CHAT" ), JPlugin.STATUS_FREE_CHAT ); 95 96 statusCombo.addItem( statusItem ); 97 98 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 99 statusCombo.setSelectedItem( statusItem ); 100 } 101 102 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_INVISIBLE ) ) ) { 103 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "INVISIBLE" ), JPlugin.STATUS_INVISIBLE ); 104 105 statusCombo.addItem( statusItem ); 106 107 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 108 statusCombo.setSelectedItem( statusItem ); 109 } 110 111 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_AWAY ) ) ) { 112 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "AWAY" ), JPlugin.STATUS_AWAY ); 113 114 statusCombo.addItem( statusItem ); 115 116 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 117 statusCombo.setSelectedItem( statusItem ); 118 } 119 120 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_BUSY ) ) ) { 121 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "BUSY" ), JPlugin.STATUS_BUSY ); 122 123 statusCombo.addItem( statusItem ); 124 125 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 126 statusCombo.setSelectedItem( statusItem ); 127 } 128 129 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_IDLE ) ) ) { 130 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "IDLE" ), JPlugin.STATUS_IDLE ); 131 132 statusCombo.addItem( statusItem ); 133 134 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 135 statusCombo.setSelectedItem( statusItem ); 136 } 137 138 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_DND ) ) ) { 139 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "DO_NOT_DISTURB" ), JPlugin.STATUS_DND ); 140 141 statusCombo.addItem( statusItem ); 142 143 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 144 statusCombo.setSelectedItem( statusItem ); 145 } 146 147 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_ON_PHONE ) ) ) { 148 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "ON_PHONE" ), JPlugin.STATUS_ON_PHONE ); 149 150 statusCombo.addItem( statusItem ); 151 152 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 153 statusCombo.setSelectedItem( statusItem ); 154 } 155 156 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_ON_LUNCH ) ) ) { 157 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "ON_LUNCH" ), JPlugin.STATUS_ON_LUNCH ); 158 159 statusCombo.addItem( statusItem ); 160 161 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 162 statusCombo.setSelectedItem( statusItem ); 163 } 164 165 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_NOT_AT_HOME ) ) ) { 166 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "NOT_AT_HOME" ), JPlugin.STATUS_NOT_AT_HOME ); 167 168 statusCombo.addItem( statusItem ); 169 170 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 171 statusCombo.setSelectedItem( statusItem ); 172 } 173 174 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_NOT_IN_OFFICE ) ) ) { 175 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "NOT_IN_OFFICE" ), JPlugin.STATUS_NOT_IN_OFFICE ); 176 177 statusCombo.addItem( statusItem ); 178 179 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 180 statusCombo.setSelectedItem( statusItem ); 181 } 182 183 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_NOT_AT_DESK ) ) ) { 184 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "NOT_AT_DESK" ), JPlugin.STATUS_NOT_AT_DESK ); 185 186 statusCombo.addItem( statusItem ); 187 188 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 189 statusCombo.setSelectedItem( statusItem ); 190 } 191 192 if( plugin.getAllPluginStatus().containsValue( new JPlanetaMessengerStatus( JPlugin.STATUS_ON_VACATION ) ) ) { 193 statusItem = new JStatusComboItem( JSharedObjects.getLanguageManager().getStringEx( "ON_VACATION" ), JPlugin.STATUS_ON_VACATION ); 194 195 statusCombo.addItem( statusItem ); 196 197 if( userInfo.getLoginStatus() == statusItem.getStatus() ) 198 statusCombo.setSelectedItem( statusItem ); 199 } 200 201 autoConnectCheck.addItemListener( this ); 203 autoConnectCheck.setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "ENABLE_DISABLE_AUTO_LOGIN" ) ); 204 205 connectionCheck.getModel().setSelected( plugin.isConnected() ); 207 connectionCheck.addItemListener( this ); 208 connectionCheck.setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "RECONNECT_PLUGIN" ) ); 209 210 accountLabel.setFont( JSystemFonts.FONT ); 212 accountLabel.setToolTipText( plugin.getPluginProperties().getName() ); 213 214 if( userInfo != null ) { 215 if( userInfo.getAutoConnect() == 0 ) 216 autoConnectCheck.getModel().setSelected( false ); 217 else 218 autoConnectCheck.getModel().setSelected( true ); 219 } 220 else 221 autoConnectCheck.getModel().setSelected( false ); 222 223 227 vColumns.add( statusCombo ); 228 vColumns.add( connectionCheck ); 229 vColumns.add( autoConnectCheck ); 230 vColumns.add( accountLabel ); 231 232 this.addRow( vColumns ); 233 } 234 235 240 public void removeRow( JPlugin plugin ) { 241 242 JPluginComboBox statusCombo; 243 java.util.Vector vData = this.getDataVector(); 244 245 246 for( int nCount = 0; nCount < vData.size(); nCount++ ) { 248 249 statusCombo = ( ( JPluginComboBox ) ( ( java.util.Vector ) vData.get( nCount ) ).get( JAccountsTable.STATUS_INDEX ) ); 250 251 if( statusCombo.getPlugin().getPluginProperties().getPluginId() == plugin.getPluginProperties().getPluginId() ) { 252 super.removeRow( nCount ); 253 break; 254 } 255 } 256 } 257 258 265 public void changeStatus( JPlugin plugin, int nNewStatus ) { 266 267 java.util.Vector vData = this.getDataVector(); 268 JPluginComboBox statusCombo = null; 269 270 271 for( int nCount = 0; nCount < vData.size(); nCount++ ) { 273 274 statusCombo = ( ( JPluginComboBox ) ( ( java.util.Vector ) vData.get( nCount ) ).get( JAccountsTable.STATUS_INDEX ) ); 275 276 if( statusCombo.getPlugin().getPluginProperties().getPluginId() == plugin.getPluginProperties().getPluginId() ) { 277 278 JStatusComboItem statusItem = null; 279 280 for( int nItemCount = 0; nItemCount < statusCombo.getItemCount(); nItemCount++ ) { 282 statusItem = ( JStatusComboItem ) statusCombo.getItemAt( nItemCount ); 283 284 if( statusItem.getStatus() == nNewStatus ) 285 statusCombo.setSelectedItem( statusItem ); 286 } 287 288 break; 289 } 290 } 291 } 292 293 304 public void changeConnectionStatus( JPlugin plugin, int nStatus ) { 305 306 Vector vData = ( Vector ) this.getDataVector().clone(); 307 JPluginCheckBox connectionCheck = null; 308 JPluginCheckBox autoConnectCheck = null; 309 JPluginComboBox statusCombo = null; 310 311 312 for( int nCount = 0; nCount < vData.size(); nCount++ ) { 314 315 statusCombo = ( ( JPluginComboBox ) ( ( Vector ) vData.get( nCount ) ).get( JAccountsTable.STATUS_INDEX ) ); 316 connectionCheck = ( ( JPluginCheckBox ) ( ( Vector ) vData.get( nCount ) ).get( JAccountsTable.CONNECTION_INDEX ) ); 317 autoConnectCheck = ( ( JPluginCheckBox ) ( ( Vector ) vData.get( nCount ) ).get( JAccountsTable.AUTOCONNECT_INDEX ) ); 318 319 if( connectionCheck.getPlugin().getPluginProperties().getPluginId() == plugin.getPluginProperties().getPluginId() ) { 320 321 if( nStatus != org.planetamessenger.plugin.JPluginEngineListener.CONNECTING ) { 322 323 if( nStatus == org.planetamessenger.plugin.JPluginEngineListener.DISCONNECTED ) 324 connectionCheck.getModel().setSelected( false ); 325 else { 326 connectionCheck.setEnabled( true ); 327 connectionCheck.getModel().setSelected( true ); 328 connectionCheck.addItemListener( this ); 329 } 330 331 autoConnectCheck.setEnabled( true ); 332 statusCombo.setEnabled( true ); 333 334 if( nStatus == org.planetamessenger.plugin.JPluginEngineListener.DISCONNECTED ) { 335 336 340 boolean bExist = false; 341 342 for( int nItems = 0; nItems < connectionCheck.getListeners( java.awt.event.ItemListener .class ).length; nItems++ ) 343 if( connectionCheck.getListeners( java.awt.event.ItemListener .class )[nItems] == this ) { 344 bExist = true; 345 break; 346 } 347 348 connectionCheck.setEnabled( true ); 349 350 if( !bExist ) 351 connectionCheck.addItemListener( this ); 352 } 353 } 354 else { 355 EventObject evt = new EventObject( tableOwner ); 356 357 connectionCheck.removeItemListener( this ); 358 connectionCheck.setEnabled( false ); 359 statusCombo.setEnabled( false ); 360 autoConnectCheck.setEnabled( false ); 361 } 362 363 break; 364 } 365 } 366 } 367 368 372 public java.lang.Class getColumnClass( int nColumnIndex ) { 373 374 return getValueAt( 0, nColumnIndex ).getClass(); 375 } 376 377 385 public void itemStateChanged( java.awt.event.ItemEvent itemEvent ) { 386 387 if( ( tableOwner.getSelectedRow() >= 0 ) && ( itemEvent.getSource() instanceof JPluginCheckBox ) ) { 389 short nAutoConnect; 390 int nPluginId = ( ( JPluginCheckBox ) itemEvent.getSource() ).getPlugin().getPluginProperties().getPluginId(); 391 JUserInfo userInfo = JSharedObjects.getProfileManager().getUserInfo( nPluginId ); 392 JPluginCheckBox check = ( JPluginCheckBox ) itemEvent.getSource(); 393 394 395 if( check.getType() == JPluginCheckBox.AUTO_CONNECT ) { 397 if( check.isSelected() ) 398 nAutoConnect = 1; 399 else 400 nAutoConnect = 0; 401 402 if( userInfo.getAutoConnect() != nAutoConnect ) { 404 userInfo.setAutoconnect( nAutoConnect ); 405 org.planetamessenger.mos.engine.JSharedObjects.getProfileManager().userAdd( nPluginId, userInfo ); 406 } 407 } 408 else { if( !check.getPlugin().isConnected() && check.isSelected() ) { 410 try { 411 check.getPlugin().fireOnLogin(); 412 } catch( java.lang.Exception ex ) { 413 System.err.println( "JAccountsTableModel.itemStateChanged() - " + ex ); 414 } 415 } 416 else if( !check.isSelected() ) { 418 try { 419 check.getPlugin().fireOnLogout(); 420 } catch( java.lang.Exception ex ) { 421 System.err.println( "JAccountsTableModel.itemStateChanged() - " + ex ); 422 } 423 } 424 } 425 426 return; 427 } 428 429 if( ( tableOwner.getSelectedRow() >= 0 ) && ( itemEvent.getStateChange() != java.awt.event.ItemEvent.DESELECTED ) ) { 431 JStatusComboItem item = ( JStatusComboItem ) itemEvent.getItem(); 432 JPlugin plugin = ( ( JPluginComboBox ) itemEvent.getSource() ).getPlugin(); 433 int nPluginId = plugin.getPluginProperties().getPluginId(); 434 JUserInfo userInfo = JSharedObjects.getProfileManager().getUserInfo( nPluginId ); 435 436 if( nPluginId == -1 ) 437 return; 438 439 if( plugin.isConnected() ) 441 try { 442 plugin.fireOnPluginStatusChanged( item.getStatus() ); 443 } catch( java.lang.Exception e ) { 444 System.err.println( "JAccountsTableModel.itemStateChanged() - " + e ); 445 } 446 447 userInfo.setLoginStatus( item.getStatus() ); 448 org.planetamessenger.mos.engine.JSharedObjects.getProfileManager().userAdd( nPluginId, userInfo ); 449 } 450 } 451 452 455 void updateLanguage() { 456 457 java.util.Vector vData = ( java.util.Vector ) this.getDataVector().clone(); 458 JPluginCheckBox connectionCheck = null; 459 JPluginCheckBox autoConnectCheck = null; 460 JPluginComboBox statusCombo = null; 461 JStatusComboItem statusItem = null; 462 463 464 for( int nCount = 0; nCount < vData.size(); nCount++ ) { 466 467 statusCombo = ( ( JPluginComboBox ) ( ( java.util.Vector ) vData.get( nCount ) ).get( JAccountsTable.STATUS_INDEX ) ); 468 connectionCheck = ( ( JPluginCheckBox ) ( ( java.util.Vector ) vData.get( nCount ) ).get( JAccountsTable.CONNECTION_INDEX ) ); 469 autoConnectCheck = ( ( JPluginCheckBox ) ( ( java.util.Vector ) vData.get( nCount ) ).get( JAccountsTable.AUTOCONNECT_INDEX ) ); 470 471 for( int nItemCount = 0; nItemCount < statusCombo.getItemCount(); nItemCount++ ) { 473 statusItem = ( JStatusComboItem ) statusCombo.getItemAt( nItemCount ); 474 475 switch( statusItem.getStatus() ) { 476 case JPlugin.STATUS_ONLINE : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "ONLINE" ); break; 477 case JPlugin.STATUS_FREE_CHAT : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "FREE_FOR_CHAT" ); break; 478 case JPlugin.STATUS_INVISIBLE : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "INVISIBLE" ); break; 479 case JPlugin.STATUS_AWAY : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "AWAY" ); break; 480 case JPlugin.STATUS_BUSY : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "BUSY" ); break; 481 case JPlugin.STATUS_IDLE : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "IDLE" ); break; 482 case JPlugin.STATUS_DND : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "DO_NOT_DISTURB" ); break; 483 case JPlugin.STATUS_ON_PHONE : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "ON_PHONE" ); break; 484 case JPlugin.STATUS_ON_LUNCH : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "ON_LUNCH" ); break; 485 case JPlugin.STATUS_NOT_AT_HOME : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "NOT_AT_HOME" ); break; 486 case JPlugin.STATUS_NOT_IN_OFFICE : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "NOT_IN_OFFICE" ); break; 487 case JPlugin.STATUS_NOT_AT_DESK : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "NOT_AT_DESK" ); break; 488 case JPlugin.STATUS_ON_VACATION : statusItem.strTitle = JSharedObjects.getLanguageManager().getStringEx( "ON_VACATION" ); break; 489 } 490 } 491 492 autoConnectCheck.setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "ENABLE_DISABLE_AUTO_LOGIN" ) ); 493 494 if( !connectionCheck.isEnabled() ) 495 connectionCheck.setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "CONNECTING" ) ); 496 else 497 connectionCheck.setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "RECONNECT_PLUGIN" ) ); 498 } 499 } 500 501 508 509 class JPluginCheckBox extends javax.swing.JCheckBox implements java.awt.event.ItemListener { 510 511 final static int RECONNECT = 0; 512 final static int AUTO_CONNECT = 1; 513 514 JPlugin plugin = null; 515 int nType = -1; 516 private boolean bEnabled = true; 517 private boolean bStarting = false; 518 519 520 525 JPluginCheckBox( JPlugin plugin, int nType ) { 526 527 super(); 528 this.plugin = plugin; 529 this.nType = nType; 530 531 if( nType == RECONNECT ) 532 addItemListener( this ); 533 } 534 535 538 JPlugin getPlugin() { 539 540 return plugin; 541 } 542 543 546 int getType() { 547 548 return nType; 549 } 550 551 557 public void setEnabled( boolean bEnabled ) { 558 559 if( nType == RECONNECT ) { 560 if( bEnabled ) { 561 562 if( bStarting ) { 563 tableOwner.stopUpdateUI(); 564 bStarting = false; 565 } 566 567 setIcon( null ); 568 setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "RECONNECT_PLUGIN" ) ); 569 } 570 else { 571 setToolTipText( JSharedObjects.getLanguageManager().getStringEx( "CONNECTING" ) ); 572 tableOwner.startUpdateUI(); 573 bStarting = true; 574 setIcon( org.planetamessenger.mos.engine.JSharedObjects.getResources().getIcon( org.planetamessenger.mos.engine.JResources.LOADING_ICON ) ); 575 } 576 577 this.bEnabled = bEnabled; 578 } 579 else 580 super.setEnabled( bEnabled ); 581 } 582 583 588 public boolean isEnabled() { 589 590 if( nType == RECONNECT ) 591 return bEnabled; 592 else 593 return super.isEnabled(); 594 } 595 596 603 public void itemStateChanged( java.awt.event.ItemEvent itemEvent ) { 604 605 if( !bEnabled && getModel().isPressed() && ( nType == RECONNECT ) ) { 606 removeItemListener( this ); 607 getModel().setPressed( false ); 608 addItemListener( this ); 609 } 610 } 611 } 613 614 615 622 623 class JPluginComboBox extends javax.swing.JComboBox { 624 625 JPlugin plugin; 626 627 628 633 JPluginComboBox( JPlugin plugin ) { 634 635 super(); 636 this.plugin = plugin; 637 } 638 639 642 JPlugin getPlugin() { 643 644 return plugin; 645 } 646 647 } 649 650 657 658 class JStatusComboItem { 659 660 private java.lang.String strTitle; 661 private int nStatus; 662 663 664 665 672 public JStatusComboItem( java.lang.String strTitle, int nStatus ) { 673 674 this.strTitle = strTitle; 675 this.nStatus = nStatus; 676 } 677 678 682 int getStatus() { 683 684 return nStatus; 685 } 686 687 691 public java.lang.String toString() { 692 693 return strTitle; 694 } 695 696 } 698 } 699 700 | Popular Tags |