View Javadoc

1   package org.minetti.astrodevice.client.gui;
2   
3   import org.eclipse.swt.SWT;
4   import org.eclipse.swt.graphics.Image;
5   import org.eclipse.swt.widgets.Display;
6   import org.eclipse.swt.widgets.Event;
7   import org.eclipse.swt.widgets.Listener;
8   import org.eclipse.swt.widgets.Menu;
9   import org.eclipse.swt.widgets.MenuItem;
10  import org.eclipse.swt.widgets.Shell;
11  import org.eclipse.swt.widgets.Tray;
12  import org.eclipse.swt.widgets.TrayItem;
13  import org.minetti.astrodevice.client.gui.menu.SwtObservingSiteMenu;
14  import org.minetti.astrodevice.client.gui.menu.SwtTelescopeMenu;
15  import org.minetti.astrodevice.client.i18n.I18n;
16  
17  /**
18   * Graphical User Interface of application (singleton).
19   * @author Jean-Philippe MINETTI
20   */
21  public final class SwtGui
22  {
23  
24     /**
25      * Singleton instance.
26      */
27     private static final SwtGui INSTANCE = new SwtGui ();
28     
29     /**
30      * Listener for each <b>Exit</b> item selection.
31      */
32     protected final class ExitSelectionListener
33              implements Listener
34     {
35  
36        /**
37         * {@inheritDoc}
38         * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
39         */
40        public void handleEvent (final Event event)
41        {
42           System.exit(0);
43        }
44  
45     }
46  
47     /**
48      * SWT display.
49      */
50     private final Display display;
51     
52     /**
53      * SWT shell.
54      */
55     private final Shell shell;
56     
57     
58     /**
59      * Observing site menu.
60      */
61     private final SwtObservingSiteMenu observingSiteMenu = new SwtObservingSiteMenu ();
62     
63     /**
64      * Telescope menu.
65      */
66     private final SwtTelescopeMenu telescopeMenu = new SwtTelescopeMenu();
67  
68  
69     /**
70      * Hidden constructor.
71      */
72     private SwtGui ()
73     {
74        super ();
75        this.display = new Display();
76        this.shell = new Shell(this.display);
77     }
78  
79     /**
80      * Returns the singleton instance.
81      * @return Singleton instance.
82      */
83     public static SwtGui getInstance ()
84     {
85        return SwtGui.INSTANCE;
86     }
87  
88     /**
89      * Builds the GUI.
90      */
91     public void build ()
92     {
93        Image image = new Image(this.display, 16, 16);
94        final Tray tray = this.display.getSystemTray();
95        if (tray == null) {
96           System.err.println("The system tray is not available");
97         } else {
98  
99            final TrayItem item = new TrayItem(tray, SWT.NONE);
100           item.setToolTipText("SWT TrayItem");
101           
102           final Menu menu = new Menu(this.shell, SWT.POP_UP);
103           
104           // Observing site
105           this.observingSiteMenu.build (this.shell, menu);
106           
107           // Telescope
108           this.telescopeMenu.build (this.shell, menu);
109           
110           
111           // TODO
112           
113           // Exit
114           MenuItem menuItem = new MenuItem (menu, SWT.PUSH);
115           menuItem.setText (I18n.getGui ().getString ("menu.exit.text"));
116           menuItem.addListener (SWT.Selection, new ExitSelectionListener ());
117           
118           
119            item.addListener(SWT.MenuDetect, new Listener() {
120              public void handleEvent(Event event) {
121                menu.setVisible(true);
122              }
123            });
124            //item.setText ("10:15:48 Saint-Jean-de-VĂ©das");
125            item.setImage(image);
126           
127           // TODO
128 
129           while (!this.shell.isDisposed()) {
130              if (!this.display.readAndDispatch())
131                 this.display.sleep();
132           }
133           
134           this.display.dispose();
135           
136        }
137    }
138 
139    /**
140     * Releases the GUI.
141     */
142    public void release ()
143    {
144 
145       // TODO
146       
147       this.display.dispose();
148    }
149 
150 }