KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > planetamessenger > mos > forms > JMOSWindow


1 /*
2     =========================================================================
3     Package forms - Implements the user interface MOS module
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: JMOSWindow.java,v 1.70 2007/02/03 18:47:07 popolony2k Exp $
32  * $Author: popolony2k $
33  * $Name: $
34  * $Revision: 1.70 $
35  * $State: Exp $
36  *
37  */

38
39 package org.planetamessenger.mos.forms;
40
41 import java.awt.event.*;
42 import javax.swing.*;
43 import org.planetamessenger.mos.engine.*;
44 import org.planetamessenger.plugin.*;
45 import snoozesoft.systray4j.*;
46
47
48
49 public class JMOSWindow extends javax.swing.JFrame JavaDoc implements SysTrayMenuListener, JPluginEngineListener {
50
51   static public final int LOOK_AND_FEEL_REFRESH = 0;
52   static public final int LANGUAGE_REFRESH = 1;
53
54   private final int SPLASH_WIDTH = 350;
55   private final int SPLASH_HEIGHT = 250;
56
57   private boolean bUICreated;
58   private JContactListEvents contactListEvt;
59   private String JavaDoc[] toolTips;
60   private SysTrayMenuIcon[] menuIcons;
61   private SysTrayMenu trayMenu;
62   private SysTrayMenuItem trayItemAbout;
63   private SysTrayMenuItem trayItemShowHide;
64   private SysTrayMenuItem trayItemExit;
65   private org.planetamessenger.mos.ui.JContactList contactList = null;
66   private org.planetamessenger.mos.ui.JAccountsTable accountsTable;
67   private javax.swing.JWindow JavaDoc splashWindow;
68   private javax.swing.JTabbedPane JavaDoc mainTabs;
69   private javax.swing.JScrollPane JavaDoc contactListPane;
70   private javax.swing.JScrollPane JavaDoc accountsPane;
71   private org.planetamessenger.ui.JStatusBar statusBar;
72   private javax.swing.JMenuBar JavaDoc appMenu;
73   private javax.swing.JMenu JavaDoc profileMenu;
74   private javax.swing.JMenuItem JavaDoc manageProfileItem;
75   private javax.swing.JMenuItem JavaDoc addUserItem;
76   private javax.swing.JMenuItem JavaDoc myMessengerItem;
77   private javax.swing.JMenuItem JavaDoc exitAppItem;
78   private javax.swing.JMenu JavaDoc helpMenu;
79   private javax.swing.JMenuItem JavaDoc aboutItem;
80   private javax.swing.JMenuItem JavaDoc debugItem;
81   private javax.swing.JToolBar JavaDoc toolBar = null;
82   private javax.swing.AbstractAction JavaDoc addInviteAction;
83   private javax.swing.AbstractAction JavaDoc myMessengerAction;
84   private javax.swing.JPanel JavaDoc toolBarPanel;
85   private JMOSPreferencesDlg preferencesDlg = null;
86
87
88   /**
89    * Creates the MOS Main window and
90    * initializes all class data.
91    */

92   public JMOSWindow() {
93     
94   }
95
96   /**
97    * Start the application engine.
98    */

99   public void startEngine() {
100
101     bUICreated = false;
102     startPluginEngine();
103     initSplashWindow();
104     initComponents();
105     preferencesDlg = new JMOSPreferencesDlg( this, true );
106
107     setNextInitStep( JSharedObjects.getLanguageManager().getStringEx( "INITIALIZING_PLUGINS" ) , false );
108     startPlugins();
109     setNextInitStep( JSharedObjects.getLanguageManager().getStringEx( "STARTING_MAIN_WINDOW" ), true );
110     createTrayMenu();
111     bUICreated = true;
112
113     setDefaultLookAndFeelDecorated( true );
114     splashWindow.setVisible( false );
115     
116     // Initial size and position and visibility
117
setSize( JSharedObjects.getConfiguration().getMainWindowSize() );
118     setLocation( JSharedObjects.getConfiguration().getMainWindowLocation() );
119     
120     if( JSharedObjects.getConfiguration().getMainWindowStatus() )
121       setVisible( true );
122     else
123       setVisible( false );
124     
125     windowRefresh( LANGUAGE_REFRESH );
126   }
127   
128   /**
129    * Perform a window (and childs) refresh.
130    * This method should be called after look
131    * and feel and language switch.<br>
132    * @param nRefreshType The window refresh type.<br>
133    * The possible values are:<br>
134    * LOOK_AND_FEEL_REFRESH - For look and feel refresh;<br>
135    * LANGUAGE_REFRESH - For language refrsh;<br>
136    */

137   public void windowRefresh( int nRefreshType ) {
138
139     Object JavaDoc messageWindows[] = JSharedObjects.getPluginEngine().getAllMessageWindows();
140     JMOSSendMessageDlg messageWnd;
141
142
143     if( nRefreshType == LOOK_AND_FEEL_REFRESH ) {
144       // Update all planetamessenger's windows
145
if( splashWindow != null ) {
146         javax.swing.SwingUtilities.updateComponentTreeUI( this );
147         javax.swing.SwingUtilities.updateComponentTreeUI( splashWindow );
148         preferencesDlg.updateLAF();
149       }
150
151       if( contactList != null )
152         javax.swing.SwingUtilities.updateComponentTreeUI( contactList );
153
154       // Update the console window
155
JSharedObjects.getConsoleWindow().updateUI();
156     }
157     else { // Update the language for window
158

159       if( bUICreated ) {
160         refreshAppMenu();
161         updateTrayMenu();
162         updateToolBar();
163         updateMainTabs();
164         getContactList().updateLanguage();
165         getAccountsTable().updateLanguage();
166         preferencesDlg.updateLanguage();
167         setTitle( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_TITLE" ) );
168         JSharedObjects.getConsoleWindow().setTitle( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_CONSOLE_TITLE" ) );
169       }
170     }
171     
172     // Update the complete list of conversation dialogs
173
for( int nCount = 0; nCount < messageWindows.length; nCount++ ) {
174       messageWnd = ( JMOSSendMessageDlg ) messageWindows[nCount];
175       messageWnd.updateLanguage();
176       javax.swing.SwingUtilities.updateComponentTreeUI( messageWnd );
177     }
178     
179     invalidate();
180     validate();
181     repaint();
182   }
183
184   /**
185    * Returns the contact list (JList)
186    * of main window application.
187    */

188   public org.planetamessenger.mos.ui.JContactList getContactList() {
189     
190     return contactList;
191   }
192
193   /**
194    * Returns the accounts table (JTable)
195    * of main window application.
196    */

197   public org.planetamessenger.mos.ui.JAccountsTable getAccountsTable() {
198   
199     return accountsTable;
200   }
201   
202   /**
203    * Get the preference dialog reference.
204    */

205   public JMOSPreferencesDlg getPreferencesDialog() {
206     
207     return preferencesDlg;
208   }
209   
210   /**
211    * Create and Add all menu application
212    * items.
213    */

214   private void createAppMenu() {
215    
216     profileMenu = new javax.swing.JMenu JavaDoc();
217     manageProfileItem = new javax.swing.JMenuItem JavaDoc();
218     addUserItem = new javax.swing.JMenuItem JavaDoc();
219     myMessengerItem = new javax.swing.JMenuItem JavaDoc();
220     exitAppItem = new javax.swing.JMenuItem JavaDoc();
221     helpMenu = new javax.swing.JMenu JavaDoc();
222     aboutItem = new javax.swing.JMenuItem JavaDoc();
223     debugItem = new javax.swing.JMenuItem JavaDoc();
224     appMenu = new javax.swing.JMenuBar JavaDoc();
225
226     refreshAppMenu();
227     
228     // Menu items font setup
229
manageProfileItem.setFont( JSystemFonts.MENU_FONT );
230     manageProfileItem.setIcon( JSharedObjects.getResources().getIcon( JResources.PROFILE_ICON ) );
231     addUserItem.setFont( JSystemFonts.MENU_FONT );
232     addUserItem.setIcon( JSharedObjects.getResources().getIcon( JResources.ADD_INVITE_ICON ) );
233     myMessengerItem.setFont( JSystemFonts.MENU_FONT );
234     myMessengerItem.setIcon( JSharedObjects.getResources().getIcon( JResources.MY_MESSENGER_ICON ) );
235     exitAppItem.setFont( JSystemFonts.MENU_FONT );
236     exitAppItem.setIcon( JSharedObjects.getResources().getIcon( JResources.EXIT_ICON ) );
237     aboutItem.setFont( JSystemFonts.MENU_FONT );
238     aboutItem.setIcon( JSharedObjects.getResources().getIcon( JResources.ABOUT_ICON ) );
239     debugItem.setFont( JSystemFonts.MENU_FONT );
240     debugItem.setIcon( JSharedObjects.getResources().getIcon( JResources.CONSOLE_ICON ) );
241
242     // Items disabled
243
addUserItem.setEnabled( false );
244     
245     // Profile Menu
246
profileMenu.setFont( JSystemFonts.MENU_HEADER_FONT );
247     profileMenu.add( manageProfileItem );
248     profileMenu.add( addUserItem );
249     profileMenu.add( myMessengerItem );
250     profileMenu.addSeparator();
251     profileMenu.add( exitAppItem );
252     appMenu.add( profileMenu );
253     
254     // Help Menu
255
helpMenu.setFont( JSystemFonts.MENU_HEADER_FONT );
256     helpMenu.add( debugItem );
257     helpMenu.addSeparator();
258     helpMenu.add( aboutItem );
259     appMenu.add( javax.swing.Box.createHorizontalGlue() );
260     appMenu.add( helpMenu );
261     
262     addMenuEventHandlers();
263     
264     setJMenuBar( appMenu );
265   }
266   
267   /**
268    * Refresh the window menu with the selected language<br>
269    * resource;<br>
270    */

271   private void refreshAppMenu() {
272
273     profileMenu.setText( JSharedObjects.getLanguageManager().getStringEx( "PROFILE" ) );
274     profileMenu.updateUI();
275     manageProfileItem.setText( JSharedObjects.getLanguageManager().getStringEx( "PROFILE_MANAGER" ) );
276     manageProfileItem.updateUI();
277     addUserItem.setText( JSharedObjects.getLanguageManager().getStringEx( "ADD_INVITE_USER" ) );
278     addUserItem.updateUI();
279     myMessengerItem.setText( JSharedObjects.getLanguageManager().getStringEx( "MY_MESSENGER" ) );
280     myMessengerItem.updateUI();
281     exitAppItem.setText( JSharedObjects.getLanguageManager().getStringEx( "EXIT" ) );
282     exitAppItem.updateUI();
283     helpMenu.setText( JSharedObjects.getLanguageManager().getStringEx( "HELP" ) );
284     helpMenu.updateUI();
285     aboutItem.setText( JSharedObjects.getLanguageManager().getStringEx( "ABOUT" ) );
286     aboutItem.updateUI();
287     debugItem.setText( JSharedObjects.getLanguageManager().getStringEx( "SHOW_DEBUG_CONSOLE" ) );
288     debugItem.updateUI();
289   }
290
291   /**
292    * Create or update the window tool bar with
293    * all available options.
294    */

295   private void updateToolBar() {
296
297     if( toolBar == null ) {
298       toolBar = new javax.swing.JToolBar JavaDoc();
299       toolBar.setFloatable( false );
300       
301       addInviteAction = new javax.swing.AbstractAction JavaDoc() {
302         {
303           putValue( NAME, "A" );
304           putValue( MNEMONIC_KEY, new Integer JavaDoc( 'A' ) );
305           putValue( SHORT_DESCRIPTION, JSharedObjects.getLanguageManager().getStringEx( "ADD_INVITE_USER" ) );
306           putValue( SMALL_ICON, JSharedObjects.getResources().getIcon( JResources.ADD_INVITE_ICON ) );
307           setEnabled( false );
308         }
309       
310         public void actionPerformed( java.awt.event.ActionEvent JavaDoc evt ) {
311           addInviteButtonActionPerformed( evt );
312         }
313       };
314     
315       myMessengerAction = new javax.swing.AbstractAction JavaDoc() {
316       
317         {
318           putValue( NAME, "M" );
319           putValue( MNEMONIC_KEY, new Integer JavaDoc( 'M' ) );
320           putValue( SHORT_DESCRIPTION, JSharedObjects.getLanguageManager().getStringEx( "MY_MESSENGER" ) );
321           putValue( SMALL_ICON, JSharedObjects.getResources().getIcon( JResources.MY_MESSENGER_ICON ) );
322           //setEnabled( false );
323
}
324       
325         public void actionPerformed( java.awt.event.ActionEvent JavaDoc evt ) {
326           myMessengerButtonActionPerformed( evt );
327         }
328       };
329
330       toolBar.add( addInviteAction );
331       toolBar.add( myMessengerAction );
332       toolBarPanel.add( toolBar, java.awt.BorderLayout.CENTER );
333     }
334     else {
335       addInviteAction.putValue( javax.swing.AbstractAction.SHORT_DESCRIPTION, JSharedObjects.getLanguageManager().getStringEx( "ADD_INVITE_USER" ) );
336       myMessengerAction.putValue( javax.swing.AbstractAction.SHORT_DESCRIPTION, JSharedObjects.getLanguageManager().getStringEx( "MY_MESSENGER" ) );
337     }
338   }
339   
340   /**
341    * Create the Tray menu and
342    * items
343    */

344   private void createTrayMenu() {
345
346     trayItemAbout = new SysTrayMenuItem( "", "about" );
347     trayItemShowHide = new SysTrayMenuItem( "", "show/hide" );
348     trayItemExit = new SysTrayMenuItem( "", "exit" );
349
350     // Setup all TrayIcon items
351
trayItemAbout.addSysTrayMenuListener( this );
352     trayItemShowHide.addSysTrayMenuListener( this );
353     trayItemExit.addSysTrayMenuListener( this );
354
355     toolTips = new String JavaDoc[1];
356     toolTips[0] = JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_TITLE" );
357     menuIcons = new SysTrayMenuIcon[1];
358     menuIcons[0] = new SysTrayMenuIcon( JSharedObjects.getConfiguration().getResourcesPath() + "pm_trayicon" );
359     menuIcons[0].addSysTrayMenuListener( this );
360     trayMenu = new SysTrayMenu( menuIcons[0], toolTips[0] );
361
362     updateTrayMenu();
363
364     trayMenu.addItem( trayItemExit );
365     trayMenu.addSeparator();
366     trayMenu.addItem( trayItemAbout );
367     trayMenu.addItem( trayItemShowHide );
368   }
369   
370   /**
371    * Update the tray menu with the selected language<br>
372    * resource;<br>
373    */

374   private void updateTrayMenu() {
375
376     trayItemAbout.setLabel( JSharedObjects.getLanguageManager().getStringEx( "ABOUT" ) );
377     trayItemShowHide.setLabel( JSharedObjects.getLanguageManager().getStringEx( "SHOW_HIDE_WINDOW" ) );
378     trayItemExit.setLabel( JSharedObjects.getLanguageManager().getStringEx( "EXIT" ) );
379   }
380   
381   /**
382    * Update the main tabs with the selected language<br>
383    * resource;<br>
384    */

385   private void updateMainTabs() {
386     
387     mainTabs.setTitleAt( 0, JSharedObjects.getLanguageManager().getStringEx( "CONTACTS" ) );
388     mainTabs.setTitleAt( 1, JSharedObjects.getLanguageManager().getStringEx( "ACCOUNTS" ) );
389   }
390
391   /**
392    * Add all menu items event
393    * handlers.
394    */

395   private void addMenuEventHandlers() {
396    
397     // Profile menu
398
// Manage profile action event
399
manageProfileItem.addActionListener( new ActionListener() {
400                                                 public void actionPerformed( ActionEvent evt ) {
401
402                                                   manageProfileButtonActionPerformed( evt );
403                                                 }
404                                              } );
405     
406     // Add User action event
407
addUserItem.addActionListener( new ActionListener() {
408                                          
409                                          public void actionPerformed( ActionEvent evt ) {
410
411                                            addInviteButtonActionPerformed( evt );
412                                          }
413                                        }
414                                  );
415                                  
416     // Add My Messenger action event
417
myMessengerItem.addActionListener( new ActionListener() {
418                                          
419                                              public void actionPerformed( ActionEvent evt ) {
420
421                                                myMessengerButtonActionPerformed( evt );
422                                              }
423                                            }
424                                      );
425
426     // Exit action event
427
exitAppItem.addActionListener( new ActionListener() {
428                                          
429                                          public void actionPerformed( ActionEvent evt ) {
430
431                                            exitForm();
432                                          }
433                                        }
434                               );
435                               
436     // Help menu
437
// debug menu item action event
438
debugItem.addActionListener( new ActionListener() {
439                                          
440                                        public void actionPerformed( ActionEvent evt ) {
441
442                                          JSharedObjects.getConsoleWindow().show();
443                                        }
444                                      }
445                                );
446                                
447     // About menu item action event
448
aboutItem.addActionListener( new ActionListener() {
449                                        public void actionPerformed( ActionEvent evt ) {
450                                          about();
451                                        }
452                                      }
453                                );
454   }
455   
456   /**
457    * Initializes the splash window
458    * and all it's components.
459    */

460   private void initSplashWindow() {
461
462     java.awt.Dimension JavaDoc dmScreen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
463     int nPosX = ( dmScreen.width - SPLASH_WIDTH ) / 2;
464     int nPosY = ( dmScreen.height - SPLASH_HEIGHT ) / 2;
465     int nStringWidth = 0;
466     int nStringHeight = 10;
467     javax.swing.JProgressBar JavaDoc progressBar = new javax.swing.JProgressBar JavaDoc();
468     javax.swing.JPanel JavaDoc contentPane = null;
469     javax.swing.JLabel JavaDoc version = new javax.swing.JLabel JavaDoc( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_SPLASH_INFO" ) );
470     javax.swing.JLabel JavaDoc copyLeft = new javax.swing.JLabel JavaDoc( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_SPLASH_COPYRIGHT_INFO" ) );
471     javax.swing.JLabel JavaDoc infoLabel = new javax.swing.JLabel JavaDoc( JSharedObjects.getLanguageManager().getStringEx( "LOADING_COMPONENTS" ) );
472     javax.swing.JLabel JavaDoc backImage = new javax.swing.JLabel JavaDoc( JSharedObjects.getResources().getImage( JResources.SPLASH_WINDOW_BACKGROUND ) );
473     javax.swing.JLabel JavaDoc loadingImage = new javax.swing.JLabel JavaDoc( JSharedObjects.getResources().getIcon( JResources.LOADING_STARTUP_ICON ) );
474
475     backImage.setBounds( 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT );
476     backImage.setBorder( new javax.swing.border.LineBorder JavaDoc( new java.awt.Color JavaDoc( 0, 0, 0 ), 1, true ) );
477     backImage.setLayout( null );
478
479     version.setFont( JSystemFonts.SPLASH_WINDOW_FONT );
480     nStringWidth = version.getFontMetrics( version.getFont() ).stringWidth( version.getText() );
481     version.setBounds( SPLASH_WIDTH - nStringWidth - 5, SPLASH_HEIGHT - ( nStringHeight * 3 ) - 3, nStringWidth, nStringHeight );
482     version.setForeground( java.awt.Color.black );
483
484     copyLeft.setFont( JSystemFonts.SPLASH_WINDOW_FONT );
485     nStringWidth = copyLeft.getFontMetrics( copyLeft.getFont() ).stringWidth( copyLeft.getText() );
486     copyLeft.setBounds( SPLASH_WIDTH - nStringWidth - 5, SPLASH_HEIGHT - ( nStringHeight * 2 ) - 3, nStringWidth, nStringHeight );
487     copyLeft.setForeground( java.awt.Color.black );
488
489     loadingImage.setBounds( copyLeft.getLocation().x - JResources.ICON_WIDTH_16 - 5, SPLASH_HEIGHT - JResources.ICON_HEIGHT_16 - nStringHeight - 2, JResources.ICON_WIDTH_16, JResources.ICON_HEIGHT_16 );
490     
491     nStringWidth = 100;
492     nStringHeight = 8;
493
494     progressBar.setMinimum( 0 );
495     progressBar.setMaximum( JSharedObjects.getProfileManager().getPluginCount( JSharedObjects.getProfileManager().getDefaultProfile() ) + 1 );
496     progressBar.setValue( 0 );
497     progressBar.setBounds( SPLASH_WIDTH - nStringWidth - 5, SPLASH_HEIGHT - nStringHeight - 3, nStringWidth, nStringHeight );
498     progressBar.setBorder( new javax.swing.border.LineBorder JavaDoc( new java.awt.Color JavaDoc( 0, 0, 0 ), 1, true ) );
499
500     nStringWidth = infoLabel.getFontMetrics( infoLabel.getFont() ).stringWidth( infoLabel.getText() );
501     nStringHeight = 10;
502     infoLabel.setFont( JSystemFonts.SPLASH_WINDOW_FONT );
503     infoLabel.setBounds( SPLASH_WIDTH - nStringWidth - progressBar.getSize().width - 10, SPLASH_HEIGHT - nStringHeight - 3, nStringWidth, nStringHeight );
504     infoLabel.setForeground( java.awt.Color.black );
505
506     splashWindow = new javax.swing.JWindow JavaDoc();
507     contentPane = ( javax.swing.JPanel JavaDoc ) splashWindow.getContentPane();
508
509     splashWindow.setBounds( nPosX, nPosY, SPLASH_WIDTH, SPLASH_HEIGHT );
510     contentPane.setLayout( null );
511     contentPane.setBorder( new javax.swing.border.LineBorder JavaDoc( new java.awt.Color JavaDoc( 0, 0, 0 ), 1, true ) );
512     contentPane.add( backImage );
513     // NOTE: Never change this order !!!
514
backImage.add( version );
515     backImage.add( copyLeft );
516     backImage.add( progressBar );
517     backImage.add( infoLabel );
518     backImage.add( loadingImage );
519     
520     splashWindow.setAlwaysOnTop( true );
521     splashWindow.setVisible( true );
522   }
523
524   /**
525    * Set the initialization next step in splash window.<br>
526    * @param strNextStepLabel The label to update in progress label;<br>
527    * @param bIncreaseValue Flag that indicates if the progress bar will be increased;<br>
528    * The Progressbar is increesed for each Label update;<br>
529    */

530   private void setNextInitStep( java.lang.String JavaDoc strNextStepLabel, boolean bIncreaseValue ) {
531
532     int nStringWidth = 0;
533     int nStringHeight = 0;
534     javax.swing.JPanel JavaDoc contentPane = ( javax.swing.JPanel JavaDoc ) splashWindow.getContentPane();
535     javax.swing.JLabel JavaDoc backImage = ( javax.swing.JLabel JavaDoc ) contentPane.getComponent( 0 );
536     javax.swing.JLabel JavaDoc infoLabel = ( javax.swing.JLabel JavaDoc ) backImage.getComponent( 3 );
537     javax.swing.JProgressBar JavaDoc progressBar = ( javax.swing.JProgressBar JavaDoc ) backImage.getComponent( 2 );
538
539     infoLabel.setText( strNextStepLabel );
540     nStringWidth = infoLabel.getFontMetrics( infoLabel.getFont() ).stringWidth( infoLabel.getText() );
541     nStringHeight = 10;
542     infoLabel.setBounds( SPLASH_WIDTH - nStringWidth - progressBar.getSize().width - 10, SPLASH_HEIGHT - nStringHeight - 3, nStringWidth, nStringHeight );
543     
544     if( bIncreaseValue )
545       progressBar.setValue( progressBar.getValue() + 1 );
546   }
547
548   /**
549    * Initializes all components from this
550    * window.
551   */

552   private void initComponents() {
553     
554     contactList = new org.planetamessenger.mos.ui.JContactList();
555     accountsTable = new org.planetamessenger.mos.ui.JAccountsTable();
556     mainTabs = new javax.swing.JTabbedPane JavaDoc();
557     contactListPane = new javax.swing.JScrollPane JavaDoc( contactList );
558     accountsPane = new javax.swing.JScrollPane JavaDoc( accountsTable );
559     statusBar = new org.planetamessenger.ui.JStatusBar();
560     toolBarPanel = new javax.swing.JPanel JavaDoc( new java.awt.BorderLayout JavaDoc() );
561
562     // Remove horizontal scrollbar of contact list panel
563
contactListPane.setHorizontalScrollBar( null );
564     
565     getContentPane().setLayout( new java.awt.BorderLayout JavaDoc() );
566     ( ( java.awt.BorderLayout JavaDoc ) getContentPane().getLayout() ).setVgap( 5 );
567
568     setDefaultCloseOperation( javax.swing.WindowConstants.DISPOSE_ON_CLOSE );
569     setIconImage( JSharedObjects.getResources().getIcon( JResources.APPLICATION_ICON ).getImage() );
570
571     createAppMenu();
572     updateToolBar();
573     setName( "JMOSWindow" );
574     
575     setTitle( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_TITLE" ) );
576     JSharedObjects.getConsoleWindow().setTitle( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_CONSOLE_TITLE" ) );
577
578     addWindowListener( new java.awt.event.WindowAdapter JavaDoc() {
579       public void windowClosing( java.awt.event.WindowEvent JavaDoc evt ) {
580
581         if( trayMenu.isAvailable() )
582           setVisible( false );
583         else
584           exitForm();
585       }
586     } );
587
588     // Contact list an contact list pane initialization
589
contactListEvt = new JContactListEvents();
590     contactList.setFont( JSystemFonts.FONT );
591     contactList.addMenuListener( contactListEvt );
592     //contactList.setBorder( new javax.swing.border.LineBorder( new java.awt.Color( 0, 0, 0 ), 1, true ) );
593

594     // Main tabs initialization
595
mainTabs.setPreferredSize( new java.awt.Dimension JavaDoc( 169, 230 ) );
596     mainTabs.setFont( JSystemFonts.FONT );
597     mainTabs.addTab( "", contactListPane );
598     mainTabs.addTab( "", accountsPane );
599     updateMainTabs();
600     mainTabs.setIconAt( 0, JSharedObjects.getResources().getIcon( JResources.CONTACTS_ICON ) );
601     mainTabs.setIconAt( 1, JSharedObjects.getResources().getIcon( JResources.ACCOUNTS_ICON ) );
602     getContentPane().add( mainTabs, java.awt.BorderLayout.CENTER );
603
604     // StatusBar initialization
605
statusBar.setFont( JSystemFonts.FONT );
606     statusBar.setPreferredSize( new java.awt.Dimension JavaDoc( 169, 20 ) );
607
608     toolBarPanel.add( statusBar, java.awt.BorderLayout.SOUTH );
609     getContentPane().add( toolBarPanel, java.awt.BorderLayout.SOUTH );
610     setResizable( true );
611     //pack();
612
}
613
614   /**
615    * Start the plugin engine.
616    */

617   private void startPluginEngine() {
618
619     // Starts the plugin engine.
620
if( !JSharedObjects.init( this ) ) {
621       JOptionPane.showMessageDialog( this, JSharedObjects.getLanguageManager().getStringEx( "FATAL_ERROR_PLUGIN_ENGINE" ), JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), JOptionPane.ERROR_MESSAGE );
622       exitForm();
623     }
624     
625     JSharedObjects.getPluginEngine().addPluginEngineListener( this );
626     JSharedObjects.getPluginEngine().addKernelAPIListener( JSharedObjects.getKernelManager() );
627   }
628   
629   /**
630    * Loads and Starts all
631    * PlanetaMessenger plugins.
632    */

633   private void startPlugins() {
634
635     // Loads plugins and initializes the Plugin engine
636
int nProfileId = JSharedObjects.getProfileManager().getDefaultProfile();
637     
638     
639     if( nProfileId == -1 ) {
640       JMOSProfileManagerDlg profileDlg = new JMOSProfileManagerDlg( this, true );
641       
642       splashWindow.setVisible( false );
643       profileDlg.setVisible( true );
644       nProfileId = JSharedObjects.getProfileManager().getDefaultProfile();
645       
646       if( nProfileId == -1 ) {
647         JOptionPane.showMessageDialog( this, JSharedObjects.getLanguageManager().getStringEx( "SELECT_PROFILE_WARNING" ), JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), JOptionPane.ERROR_MESSAGE );
648         exitForm();
649       }
650
651       splashWindow.setVisible( true );
652     }
653
654     // Load and apply proxy settings
655
JSharedObjects.getProxySettings().load( nProfileId );
656
657     // Load all plugins from plugins directory
658
if( !JSharedObjects.getPluginEngine().loadAllPlugins( nProfileId, true ) ) {
659       JOptionPane.showMessageDialog( this, JSharedObjects.getLanguageManager().getStringEx( "UNABLE_TO_CONTINUE" ), JSharedObjects.getLanguageManager().getStringEx( "DATABASE_ERROR" ), JOptionPane.ERROR_MESSAGE );
660       exitForm();
661     }
662     
663     // load all stored messages from database
664
JSharedObjects.getContactListManager().loadMessagesToContactList();
665   }
666   
667   /**
668    * Finish the PlanetaMessenger engine.
669    */

670   private void destroy() {
671
672     if( JSharedObjects.getPluginEngine() != null ) {
673       JSharedObjects.getPluginEngine().removePluginEngineListener( this );
674       JSharedObjects.destroy();
675       contactList.destroy();
676     }
677   }
678
679   /**
680    * Implements the manage profile menu item
681    * event handler.
682    * @param evt The event object;
683    */

684   private void manageProfileButtonActionPerformed( java.awt.event.ActionEvent JavaDoc evt ) {
685
686     JMOSProfileManagerDlg profileDlg = new JMOSProfileManagerDlg( this, true );
687     
688     profileDlg.setVisible( true );
689   }
690
691   /**
692    * Implements the onClick event of
693    * Add/Invite button.
694    * @param evt The button event object;
695    */

696   private void addInviteButtonActionPerformed( java.awt.event.ActionEvent JavaDoc evt ) {
697     
698     JMOSAddInviteDlg addInviteDlg = new JMOSAddInviteDlg( this, true );
699     
700     addInviteDlg.setVisible( true );
701   }
702
703   /**
704    * Implements the onClick event of
705    * My Messenger button.
706    * @param evt The button event object;
707    */

708   private void myMessengerButtonActionPerformed( java.awt.event.ActionEvent JavaDoc evt ) {
709
710     preferencesDlg.setVisible( true );
711   }
712   
713   /**
714    * Implements the exit form event.
715    * @param evt The window event object;
716    */

717   private void exitForm() {
718     
719     destroy();
720     dispose();
721     System.exit( 0 );
722   }
723
724   /**
725    * Implements the about menu item event.
726    */

727   private void about() {
728
729     javax.swing.JDialog JavaDoc aboutDlg = new javax.swing.JDialog JavaDoc( this, true );
730     java.awt.Dimension JavaDoc screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
731     javax.swing.JPanel JavaDoc contentPane = ( javax.swing.JPanel JavaDoc ) splashWindow.getContentPane();
732     javax.swing.JLabel JavaDoc backImage = ( javax.swing.JLabel JavaDoc ) contentPane.getComponent( 0 );
733     javax.swing.JLabel JavaDoc versionLabel = ( javax.swing.JLabel JavaDoc ) backImage.getComponent( 0 );
734     javax.swing.JLabel JavaDoc infoLabel = ( javax.swing.JLabel JavaDoc ) backImage.getComponent( 3 );
735     javax.swing.JLabel JavaDoc loadingImage = ( javax.swing.JLabel JavaDoc ) backImage.getComponent( 4 );
736     javax.swing.JProgressBar JavaDoc progressBar = ( javax.swing.JProgressBar JavaDoc ) backImage.getComponent( 2 );
737     int nStringWidth = 0;
738     int nStringHeight = 10;
739
740
741     loadingImage.setVisible( false );
742     progressBar.setVisible( false );
743     versionLabel.setFont( JSystemFonts.SPLASH_WINDOW_FONT );
744     versionLabel.setText( JSharedObjects.getLanguageManager().getStringEx( "PLANETAMESSENGER_SPLASH_INFO" ) );
745     nStringWidth = versionLabel.getFontMetrics( versionLabel.getFont() ).stringWidth( versionLabel.getText() );
746     versionLabel.setBounds( SPLASH_WIDTH - nStringWidth - 5, SPLASH_HEIGHT - ( nStringHeight * 3 ) - 3, nStringWidth, nStringHeight );
747
748     infoLabel.setFont( JSystemFonts.SPLASH_WINDOW_FONT );
749     infoLabel.setText( JSharedObjects.getLanguageManager().getStringEx( "EXTRA_INFO" ) );
750
751     nStringWidth = infoLabel.getFontMetrics( infoLabel.getFont() ).stringWidth( infoLabel.getText() );
752     infoLabel.setBounds( SPLASH_WIDTH - nStringWidth - 10, SPLASH_HEIGHT - nStringHeight - 3, nStringWidth, nStringHeight );
753
754     aboutDlg.setTitle( JSharedObjects.getLanguageManager().getStringEx( "ABOUT_WINDOW_TITLE" ) );
755     aboutDlg.setBounds( new java.awt.Rectangle JavaDoc( SPLASH_WIDTH + aboutDlg.getOwner().getInsets().left + aboutDlg.getOwner().getInsets().right, SPLASH_HEIGHT + aboutDlg.getOwner().getInsets().top + aboutDlg.getOwner().getInsets().bottom ) );
756     aboutDlg.setContentPane( contentPane );
757     aboutDlg.setLocation( ( screenSize.width - aboutDlg.getSize().width ) / 2, ( screenSize.height - aboutDlg.getSize().height ) / 2 );
758     aboutDlg.setResizable( false );
759     aboutDlg.setVisible( true );
760     aboutDlg.setAlwaysOnTop( true );
761   }
762   
763   // Tray bar listener events
764
/**
765    * Implements the iconLeftClicked
766    * event.
767    * @param see SysTray4J help;
768    */

769   public void iconLeftClicked( snoozesoft.systray4j.SysTrayMenuEvent sysTrayMenuEvent ) {
770   
771   }
772
773   /**
774    * Implements the menuItemSelected
775    * event.
776    * @param see SysTray4J help;
777    */

778   public void iconLeftDoubleClicked( snoozesoft.systray4j.SysTrayMenuEvent sysTrayMenuEvent ) {
779     
780    if( isVisible() )
781      setVisible( false );
782    else
783      setVisible( true );
784   }
785
786   /**
787    * Implements the iconLeftDoubleClicked
788    * event.
789    * @param see SysTray4J help;
790    */

791   public void menuItemSelected( snoozesoft.systray4j.SysTrayMenuEvent sysTrayMenuEvent ) {
792
793     if( sysTrayMenuEvent.getActionCommand().equals( "exit" ) )
794       exitForm();
795     else
796       if( sysTrayMenuEvent.getActionCommand().equals( "show/hide" ) )
797         iconLeftDoubleClicked( null );
798       else
799         about();
800   }
801   
802   // Plugin engine event listener
803
/**
804    * This listener method is called
805    * when a plugin is created.
806    * @param plugin - The plugin created;
807    */

808   public void onCreatePlugin( org.planetamessenger.plugin.JPlugin plugin ) {
809
810     setNextInitStep( JSharedObjects.getLanguageManager().getStringEx( "STARTING" ) + " " + plugin.getPluginProperties().getName(), true );
811     onAddPlugin( plugin );
812   }
813   
814   /**
815    * This listener method is called
816    * when a plugin is destroyed.
817    * @param plugin - The plugin destroyed;
818    */

819   public void onDestroyPlugin( org.planetamessenger.plugin.JPlugin plugin ) {
820
821   }
822
823   /**
824    * This method listener is called
825    * when the plugin has been added.
826    * @param plugin The plugin that has been
827    * added;
828    */

829   public void onAddPlugin( org.planetamessenger.plugin.JPlugin plugin ) {
830
831     if( JSharedObjects.getProfileManager().checkForPluginUser( plugin.getPluginProperties().getPluginId() ) ) {
832       accountsTable.addRow( plugin );
833
834       if( !addInviteAction.isEnabled() ) {
835         addInviteAction.setEnabled( true );
836         addUserItem.setEnabled( true );
837       }
838     }
839   }
840
841   /**
842    * This method listener is called
843    * when the plugin has been removed.
844    * @param plugin The plugin that has been
845    * removed;
846    */

847   public void onRemovePlugin( org.planetamessenger.plugin.JPlugin plugin ) {
848
849     JSharedObjects.getContactListManager().removeAllUIItems( plugin );
850     accountsTable.removeRow( plugin );
851     
852     // Disable AddInvite button (Menu Item)
853
if( !JSharedObjects.getProfileManager().hasPluginUserInProfile( JSharedObjects.getProfileManager().getProfileId() ) && addInviteAction.isEnabled() ) {
854       addInviteAction.setEnabled( false );
855       addUserItem.setEnabled( false );
856     }
857   }
858
859   /**
860    * This method listener is called
861    * when the plugin status was changed.
862    * @param plugin The plugin that status will be
863    * changed;
864    * @param nStatus The new plugin status;
865    */

866   public void onPluginStatusChanged( org.planetamessenger.plugin.JPlugin plugin, int nStatus ) {
867     
868     accountsTable.changeStatus( plugin, nStatus );
869   }
870
871   /**
872    * This method listener is called
873    * when the plugin connection status was changed.
874    * @param plugin The plugin that connecton status
875    * will be changed;
876    * @param nStatus The new plugin status;
877    */

878   public void onPluginConnectionStatusChanged( org.planetamessenger.plugin.JPlugin plugin, int nStatus ) {
879
880     accountsTable.changeConnectionStatus( plugin, nStatus );
881   }
882   
883   /**
884    * This listener method is called when plugin engine throws
885    * a invalid plugin exception.
886    * When is called :
887    * 1) When plugin specification of loaded plugin isn't compatible
888    * with current kernel.
889    * @param nPluginId The plugin id of plugin owner of this event;
890    * @param strMessage depends on error code received;
891    * @param nErrorCode The Error code;
892    */

893    public void onError( int nPluginId, String JavaDoc strMessage, int nErrorCode ) {
894
895      switch( nErrorCode ) {
896        case JPluginEngineListener.ERROR_INCOMPATIBLE_PLUGIN :
897          JOptionPane.showMessageDialog( this, JSharedObjects.getLanguageManager().getStringEx( "INCOMPATIBLE_PLUGIN" ) + " [" + strMessage +"]",
898                                         JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), JOptionPane.ERROR_MESSAGE );
899          break;
900          
901        case JPluginEngineListener.ERROR_DISCONNECTED_PLUGIN :
902          JOptionPane.showMessageDialog( JSharedObjects.getPluginEngine().getMessageWindow( nPluginId ),
903                                         JSharedObjects.getLanguageManager().getStringEx( "CHECK_YOUR_CONNECTION_ERROR_WARNING" ),
904                                         JSharedObjects.getLanguageManager().getStringEx( "ERROR" ), javax.swing.JOptionPane.ERROR_MESSAGE );
905          break;
906      }
907    }
908
909    /**
910     * Show message about capability not found for specified plugin.
911     * @param plugin The plugin owner of this event;
912     * @param nCapabilityCode The capability code;
913     */

914    public void onCapabilityNotFound( org.planetamessenger.plugin.JPlugin plugin, int nCapabilityCode ) {
915        
916      switch( nCapabilityCode ) {
917
918        case JPluginEngineListener.CAPABILITY_OFFLINE_MESSAGES :
919          JOptionPane.showMessageDialog( JSharedObjects.getPluginEngine().getMessageWindow( plugin.getPluginProperties().getPluginId() ), "[" + plugin.getPluginProperties().getName() +"] - " + JSharedObjects.getLanguageManager().getStringEx( "THIS_PLUGIN_CANNOT_SEND_OFFLINE_MESSAGES" ), JSharedObjects.getLanguageManager().getStringEx( "WARNING" ), JOptionPane.WARNING_MESSAGE );
920          break;
921          
922        case JPluginEngineListener.CAPABILITY_REMOVE_CONTACTS_WHEN_OFFLINE :
923          JOptionPane.showMessageDialog( JSharedObjects.getPluginEngine().getMessageWindow( plugin.getPluginProperties().getPluginId() ), "[" + plugin.getPluginProperties().getName() +"] - " + JSharedObjects.getLanguageManager().getStringEx( "THIS_PLUGIN_CANNOT_REMOVE_CONTACTS_WHEN_DISCONNECTED" ), JSharedObjects.getLanguageManager().getStringEx( "WARNING" ), JOptionPane.WARNING_MESSAGE );
924          break;
925      }
926    }
927 }
928
929 // JMOSWindow class
Popular Tags