1 29 38 39 package org.planetamessenger.mos.ui; 40 41 import org.planetamessenger.mos.engine.*; 42 43 44 public class JAccountsTable extends javax.swing.JTable implements java.awt.event.ActionListener { 45 46 private static final int DEFAULT_CHECKBOX_WIDTH = 20; 47 static final int STATUS_INDEX = 0; 48 static final int CONNECTION_INDEX = 1; 49 static final int AUTOCONNECT_INDEX = 2; 50 static final int PROTOCOL_INDEX = 3; 51 52 private int nTimerCounter = 0; 53 private javax.swing.Timer updateTimer = null; 54 JAccountsTableModel model = null; 55 56 57 58 61 synchronized void startUpdateUI() { 62 63 if( nTimerCounter == 0 ) 64 updateTimer.start(); 65 66 nTimerCounter++; 67 } 68 69 72 synchronized void stopUpdateUI() { 73 74 nTimerCounter--; 75 76 if( nTimerCounter == 0 ) 77 updateTimer.stop(); 78 } 79 80 84 public JAccountsTable() { 85 86 super(); 87 88 nTimerCounter = 0; 89 updateTimer = new javax.swing.Timer ( 60, this ); 90 updateTimer.stop(); 91 92 model = new JAccountsTableModel( this ); 93 97 model.addColumn( JSharedObjects.getLanguageManager().getStringEx( "STATUS" ) ); 98 model.addColumn( JSharedObjects.getLanguageManager().getStringEx( "CONNECT" ) ); 99 model.addColumn( JSharedObjects.getLanguageManager().getStringEx( "AUTO" ) ); 100 model.addColumn( JSharedObjects.getLanguageManager().getStringEx( "PLUGIN" ) ); 101 setModel( model ); 102 103 getColumnModel().getColumn( CONNECTION_INDEX ).setPreferredWidth( DEFAULT_CHECKBOX_WIDTH ); 104 getColumnModel().getColumn( CONNECTION_INDEX ).setMinWidth( DEFAULT_CHECKBOX_WIDTH ); 105 getColumnModel().getColumn( CONNECTION_INDEX ).setMaxWidth( DEFAULT_CHECKBOX_WIDTH ); 106 getColumnModel().getColumn( AUTOCONNECT_INDEX ).setPreferredWidth( DEFAULT_CHECKBOX_WIDTH ); 107 getColumnModel().getColumn( AUTOCONNECT_INDEX ).setMinWidth( DEFAULT_CHECKBOX_WIDTH ); 108 getColumnModel().getColumn( AUTOCONNECT_INDEX ).setMaxWidth( DEFAULT_CHECKBOX_WIDTH ); 109 getColumnModel().getColumn( AUTOCONNECT_INDEX ).setResizable( false ); 110 111 getTableHeader().setResizingAllowed( false ); 112 getTableHeader().setReorderingAllowed( false ); 113 114 setDefaultRenderer( JAccountsTableModel.JPluginComboBox.class, new JAccountsRenderer() ); 115 setDefaultEditor( JAccountsTableModel.JPluginComboBox.class, new JAccountsCellEditor() ); 116 117 setDefaultRenderer( JAccountsTableModel.JPluginCheckBox.class, new JAccountsRenderer() ); 118 setDefaultEditor( JAccountsTableModel.JPluginCheckBox.class, new JAccountsCellEditor() ); 119 120 setDefaultRenderer( javax.swing.JLabel .class, new JAccountsRenderer() ); 121 setDefaultEditor( javax.swing.JLabel .class, new JAccountsCellEditor() ); 122 } 123 124 129 public void addRow( org.planetamessenger.plugin.JPlugin plugin ) { 130 131 model.addRow( plugin ); 132 } 133 134 139 public void removeRow( org.planetamessenger.plugin.JPlugin plugin ) { 140 141 model.removeRow( plugin ); 142 } 143 144 151 public void changeStatus( org.planetamessenger.plugin.JPlugin plugin, int nStatus ) { 152 153 model.changeStatus( plugin, nStatus ); 154 } 155 156 167 public void changeConnectionStatus( org.planetamessenger.plugin.JPlugin plugin, int nStatus ) { 168 169 model.changeConnectionStatus( plugin, nStatus ); 170 repaint(); 171 } 172 173 179 public void actionPerformed( java.awt.event.ActionEvent actionEvent ) { 180 181 repaint(); 182 } 183 184 189 public void updateUI() { 190 191 super.updateUI(); 192 193 if( model != null ) { 194 java.util.Vector vData = model.getDataVector(); 195 196 for( int nCount = 0; nCount < vData.size(); nCount++ ) { 197 java.util.Vector vItems = ( java.util.Vector ) vData.get( nCount ); 198 199 for( int nItemsCount = 0; nItemsCount < vItems.size(); nItemsCount++ ) { 200 javax.swing.JComponent itemCell = ( ( javax.swing.JComponent ) vItems.get( nItemsCount ) ); 201 202 javax.swing.SwingUtilities.updateComponentTreeUI( itemCell ); 203 itemCell.invalidate(); 204 itemCell.validate(); 205 itemCell.repaint(); 206 } 207 } 208 } 209 } 210 211 214 public void updateLanguage() { 215 216 getColumnModel().getColumn( STATUS_INDEX ).setHeaderValue( JSharedObjects.getLanguageManager().getStringEx( "STATUS" ) ); 218 getColumnModel().getColumn( CONNECTION_INDEX ).setHeaderValue( JSharedObjects.getLanguageManager().getStringEx( "CONNECT" ) ); 219 getColumnModel().getColumn( AUTOCONNECT_INDEX ).setHeaderValue( JSharedObjects.getLanguageManager().getStringEx( "AUTO" ) ); 220 getColumnModel().getColumn( PROTOCOL_INDEX ).setHeaderValue( JSharedObjects.getLanguageManager().getStringEx( "PLUGIN" ) ); 221 model.updateLanguage(); 222 } 223 224 225 232 233 class JAccountsRenderer extends javax.swing.JComponent implements javax.swing.table.TableCellRenderer { 234 235 236 240 public JAccountsRenderer() { 241 242 super(); 243 setOpaque( true ); 244 } 245 246 251 public java.awt.Component getTableCellRendererComponent( javax.swing.JTable table, Object value, boolean isSelected, boolean hasFocus, int nRow, int nCol ) { 252 253 if( value instanceof JAccountsTableModel.JPluginComboBox ) 254 return ( JAccountsTableModel.JPluginComboBox ) value; 255 256 if( value instanceof JAccountsTableModel.JPluginCheckBox ) 257 return ( JAccountsTableModel.JPluginCheckBox ) value; 258 259 262 return ( javax.swing.JLabel ) value; 263 } 264 265 267 275 277 282 285 } 287 288 295 296 class JAccountsCellEditor extends javax.swing.JComponent implements javax.swing.table.TableCellEditor { 297 298 protected javax.swing.event.EventListenerList listenerList = null; 299 protected javax.swing.event.ChangeEvent changeEvent = null; 300 301 302 303 307 public JAccountsCellEditor() { 308 309 super(); 310 listenerList = new javax.swing.event.EventListenerList (); 311 changeEvent = new javax.swing.event.ChangeEvent ( this ); 312 setOpaque( true ); 313 } 314 315 320 public void addCellEditorListener( javax.swing.event.CellEditorListener cellEditorListener ) { 321 322 listenerList.add( javax.swing.event.CellEditorListener .class, cellEditorListener ); 323 } 324 325 330 public void removeCellEditorListener( javax.swing.event.CellEditorListener cellEditorListener ) { 331 332 listenerList.remove( javax.swing.event.CellEditorListener .class, cellEditorListener ); 333 } 334 335 340 public Object getCellEditorValue() { 341 342 return this; 343 } 344 345 350 public java.awt.Component getTableCellEditorComponent( javax.swing.JTable table, Object value, boolean isSelected, int nRow, int nCol ) { 351 352 if( value instanceof JAccountsTableModel.JPluginComboBox ) 353 return ( JAccountsTableModel.JPluginComboBox ) value; 354 355 if( value instanceof JAccountsTableModel.JPluginCheckBox ) 356 return ( JAccountsTableModel.JPluginCheckBox ) value; 357 358 return ( javax.swing.JLabel ) value; 359 } 360 361 366 public boolean isCellEditable( java.util.EventObject eventObject ) { 367 368 return true; 369 } 370 371 376 public boolean shouldSelectCell( java.util.EventObject eventObject ) { 377 378 return true; 379 } 380 381 386 public void cancelCellEditing() { 387 388 fireEditingCanceled(); 389 } 390 391 396 public boolean stopCellEditing() { 397 398 return true; 400 } 401 402 406 protected void fireEditingStopped() { 407 408 javax.swing.event.CellEditorListener listener; 409 java.lang.Object [] listeners = listenerList.getListenerList(); 410 411 412 for( int i = 0; i < listeners.length; i++ ) { 413 if( listeners[i] == javax.swing.event.CellEditorListener .class ) { 414 listener = ( javax.swing.event.CellEditorListener ) listeners[i + 1]; 415 listener.editingStopped( changeEvent ); 416 } 417 } 418 } 419 420 424 protected void fireEditingCanceled() { 425 javax.swing.event.CellEditorListener listener; 426 java.lang.Object [] listeners = listenerList.getListenerList(); 427 428 429 for( int i = 0; i < listeners.length; i++ ) { 430 if( listeners[i] == javax.swing.event.CellEditorListener .class ) { 431 listener = ( javax.swing.event.CellEditorListener ) listeners[i + 1]; 432 listener.editingCanceled( changeEvent ); 433 } 434 } 435 } 436 } 438 } 439 | Popular Tags |