1 package freeguide.plugins.ui.horizontal.manylabels;
2 
3 import freeguide.common.lib.fgspecific.Application;
4 import freeguide.common.lib.fgspecific.data.TVProgramme;
5 import freeguide.common.lib.fgspecific.selection.Favourite;
6 
7 import freeguide.common.plugininterfaces.IModuleReminder;
8 
9 import java.awt.event.ActionEvent;
10 import java.awt.event.FocusEvent;
11 import java.awt.event.FocusListener;
12 import java.awt.event.ItemEvent;
13 import java.awt.event.ItemListener;
14 import java.awt.event.KeyEvent;
15 import java.awt.event.MouseEvent;
16 import java.awt.event.MouseListener;
17 
18 import javax.swing.AbstractAction;
19 import javax.swing.ActionMap;
20 import javax.swing.InputMap;
21 import javax.swing.KeyStroke;
22 
23 /**
24  * DOCUMENT ME!
25  *
26  * @author $author$
27  * @version $Revision$
28  */
29 public class HorizontalViewerHandlers
30 {
31     protected final HorizontalViewer controller;
32 
33     /** The action listener for when the item changes in the date combo */
34     public ItemListener comboDateItemListener =
35         ( new ItemListener(  )
36         {
37             public void itemStateChanged( ItemEvent evt )
38             {
39                 // Do nothing if this isn't an item selection
40                 if( evt.getStateChange(  ) == ItemEvent.SELECTED )
41                 {
42                     long oldDate = controller.getDate();
43 
44                     // Set to the date chosen
45                     int dateIndex =
46                         controller.panel.getComboDate(  ).getSelectedIndex(  );
47 
48                     controller.setDate(( (Long)( controller.dateExistList.get(
49                             dateIndex ) ) ).longValue(  ));
50 
51                     if( oldDate != controller.getDate() )
52                     {
53                         controller.loadData(  );
54 
55                         controller.redraw(  );
56                     }
57                 }
58             }
59         } );
60 
61     /** The action listener for when the item changes in the channelset combo */
62     public ItemListener comboChannelsSetItemListener =
63         ( new ItemListener(  )
64         {
65             public void itemStateChanged( ItemEvent evt )
66             {
67                 // Do nothing if this isn't an item selection
68                 if( evt.getStateChange(  ) == ItemEvent.SELECTED )
69                 {
70                     int selectedInd =
71                         controller.panel.getComboChannelsSet(  )
72                                         .getSelectedIndex(  );
73 
74                     if( selectedInd == 0 )
75                     { // all channels set
76                         controller.config.currentChannelSetName = null;
77 
78                         controller.loadData(  );
79 
80                         controller.redraw(  );
81 
82                     }
83 
84                     else if(
85                         selectedInd == ( controller.panel.getComboChannelsSet(  )
86                                                              .getItemCount(  )
87                             - 1 ) )
88                     { // edit set
89                         Application.getInstance(  ).doEditChannelsSets(  );
90 
91                     }
92 
93                     else
94                     { // select set
95                         controller.config.currentChannelSetName = (String)controller.panel.getComboChannelsSet(  )
96                                                                                           .getSelectedItem(  );
97 
98                         controller.loadData(  );
99 
100                         controller.redraw(  );
101 
102                     }
103                 }
104             }
105         } );
106 
107     /** Listened for handle mouse events from channel's label. */
108     public MouseListener labelChannelMouseListener =
109         new MouseListener(  )
110         {
111             public void mouseClicked( MouseEvent e )
112             {
113             }
114 
115             public void mouseEntered( MouseEvent e )
116             {
117             }
118 
119             public void mouseExited( MouseEvent e )
120             {
121             }
122 
123             public void mousePressed( MouseEvent e )
124             {
125                 maybeShowPopup( e );
126             }
127 
128             public void mouseReleased( MouseEvent e )
129             {
130                 maybeShowPopup( e );
131             }
132 
133             protected void maybeShowPopup( MouseEvent evt )
134             {
135                 if( evt.isPopupTrigger(  ) )
136                 {
137                     JLabelChannel labelChannel =
138                         (JLabelChannel)evt.getComponent(  );
139                     new MenuChannel( labelChannel, controller ).show(
140                         evt.getComponent(  ), evt.getX(  ), evt.getY(  ) );
141                 }
142             }
143         };
144 
145     /** Listened for handle mouse events from programmes's label. */
146     public MouseListener labelProgrammeMouseListener =
147         new MouseListener(  )
148         {
149             public void mouseClicked( java.awt.event.MouseEvent evt )
150             {
151                 if( evt.getClickCount(  ) == 2 )
152                 {
153                     JLabelProgramme label =
154                         (JLabelProgramme)evt.getComponent(  );
155                     label.getActionMap(  ).get( "select" )
156                          .actionPerformed(
157                         new ActionEvent( label, 0, "select" ) );
158                 }
159             }
160 
161             public void mousePressed( java.awt.event.MouseEvent evt )
162             {
163                 JLabelProgramme label = (JLabelProgramme)evt.getComponent(  );
164                 label.getActionMap(  ).get( "click" )
165                      .actionPerformed( new ActionEvent( label, 0, "click" ) );
166 
167                 maybeShowPopup( evt );
168 
169             }
170 
171             public void mouseReleased( java.awt.event.MouseEvent evt )
172             {
173                 maybeShowPopup( evt );
174             }
175 
176             public void mouseEntered( java.awt.event.MouseEvent evt )
177             {
178             }
179 
180             public void mouseExited( java.awt.event.MouseEvent evt )
181             {
182             }
183 
184             private void maybeShowPopup( java.awt.event.MouseEvent evt )
185             {
186                 if( evt.isPopupTrigger(  ) )
187                 {
188                     JLabelProgramme labelProgramme =
189                         (JLabelProgramme)evt.getComponent(  );
190                     new MenuProgramme(
191                         controller, labelProgramme.getProgramme(  ) ).show(
192                         evt.getComponent(  ), evt.getX(  ), evt.getY(  ) );
193                 }
194             }
195         };
196 
197     /** Listened for handle focus events from programmes's label. */
198     public FocusListener labelProgrammeFocusListener =
199         new FocusListener(  )
200         {
201             public void focusGained( FocusEvent e )
202             {
203                 final JLabelProgramme labelProgramme =
204                     (JLabelProgramme)e.getComponent(  );
205                 controller.currentProgrammeLabel = labelProgramme;
206                 controller.updateProgrammeInfo(
207                     labelProgramme.getProgramme(  ) );
208                 labelProgramme.setupColors( controller.getDate( ) );
209             }
210 
211             public void focusLost( FocusEvent e )
212             {
213                 final JLabelProgramme labelProgramme =
214                     (JLabelProgramme)e.getComponent(  );
215                 labelProgramme.setupColors( labelProgramme.controller.getDate( ) );
216             }
217         };
218 
219     /** Map for programme labels. */
220     public ActionMap labelProgrammeActionMap = new LabelProgrammeActionMap(  );
221 
222     /** Map for programme labels. */
223     public InputMap labelProgrammeInputMap = new LabelProgrammeInputMap(  );
224 
225     /**
226      * Creates a new HorizontalViewerHandlers object.
227      *
228      * @param controller DOCUMENT ME!
229      */
HorizontalViewerHandlers( final HorizontalViewer controller )230     public HorizontalViewerHandlers( final HorizontalViewer controller )
231     {
232         this.controller = controller;
233     }
234 
235     /**
236      * DOCUMENT ME!
237      *
238      * @author $author$
239      * @version $Revision$
240      */
241     public static class LabelProgrammeActionMap extends ActionMap
242     {
243         /**
244          * Creates a new LabelProgrammeActionMap object.
245          */
LabelProgrammeActionMap( )246         public LabelProgrammeActionMap(  )
247         {
248             put(
249                 "up",
250                 new AbstractAction(  )
251                 {
252                     public void actionPerformed( ActionEvent e )
253                     {
254                         getPanel( e ).focusMoveUp( getLabel( e ) );
255                     }
256                     ;
257                 } );
258             put(
259                 "down",
260                 new AbstractAction(  )
261                 {
262                     public void actionPerformed( ActionEvent e )
263                     {
264                         getPanel( e ).focusMoveDown( getLabel( e ) );
265                     }
266                     ;
267                 } );
268             put(
269                 "left",
270                 new AbstractAction(  )
271                 {
272                     public void actionPerformed( ActionEvent e )
273                     {
274                         getPanel( e ).focusMoveLeft( getLabel( e ) );
275                     }
276                     ;
277                 } );
278             put(
279                 "right",
280                 new AbstractAction(  )
281                 {
282                     public void actionPerformed( ActionEvent e )
283                     {
284                         getPanel( e ).focusMoveRight( getLabel( e ) );
285                     }
286                     ;
287                 } );
288             put(
289                 "click",
290                 new AbstractAction(  )
291                 {
292                     public void actionPerformed( ActionEvent e )
293                     {
294                         getLabel( e ).requestFocusInWindow(  );
295                     }
296                 } );
297             put(
298                 "select",
299                 new AbstractAction(  )
300                 {
301                     public void actionPerformed( ActionEvent e )
302                     {
303                         JLabelProgramme label =
304                             (JLabelProgramme)e.getSource(  );
305 
306                         IModuleReminder[] reminders =
307                             Application.getInstance(  ).getReminders(  );
308 
309                         if( reminders.length < 1 )
310                         {
311                             return;
312                         }
313 
314                         final IModuleReminder reminder = reminders[0];
315 
316                         final boolean isSelected =
317                             reminder.isSelected( label.getProgramme(  ) );
318                         reminder.setProgrammeSelection(
319                             label.getProgramme(  ), !isSelected );
320                         label.controller.redrawCurrentProgramme(  );
321                     }
322                     ;
323                 } );
324             put(
325                 "favourite",
326                 new AbstractAction(  )
327                 {
328                     public void actionPerformed( ActionEvent e )
329                     {
330                         JLabelProgramme label =
331                             (JLabelProgramme)e.getSource(  );
332                         final TVProgramme programme = label.getProgramme(  );
333                         IModuleReminder[] reminders =
334                             Application.getInstance(  ).getReminders(  );
335 
336                         if( reminders.length < 1 )
337                         {
338                             return;
339                         }
340 
341                         final IModuleReminder reminder = reminders[0];
342                         Favourite fav = reminder.getFavourite( programme );
343 
344                         if( fav != null )
345                         {
346                             reminder.removeFavourite( fav );
347                         }
348                         else
349                         {
350                             fav = new Favourite(  );
351                             fav.setTitleString(
352                                 label.getProgramme(  ).getTitle(  ) );
353                             fav.setName( label.getProgramme(  ).getTitle(  ) );
354                             reminder.addFavourite( fav );
355                         }
356                     }
357                 } );
358         }
359 
getPanel( ActionEvent e )360         protected JPanelProgramme getPanel( ActionEvent e )
361         {
362             return (JPanelProgramme)getLabel( e ).getParent(  );
363         }
364 
getLabel( ActionEvent e )365         protected JLabelProgramme getLabel( ActionEvent e )
366         {
367             return (JLabelProgramme)e.getSource(  );
368         }
369     }
370 
371     /**
372      * DOCUMENT ME!
373      *
374      * @author $author$
375      * @version $Revision$
376      */
377     public static class LabelProgrammeInputMap extends InputMap
378     {
379         /**
380          * Creates a new LabelProgrammeInputMap object.
381          */
LabelProgrammeInputMap( )382         public LabelProgrammeInputMap(  )
383         {
384             put( KeyStroke.getKeyStroke( KeyEvent.VK_UP, 0 ), "up" );
385             put( KeyStroke.getKeyStroke( KeyEvent.VK_DOWN, 0 ), "down" );
386             put( KeyStroke.getKeyStroke( KeyEvent.VK_LEFT, 0 ), "left" );
387             put( KeyStroke.getKeyStroke( KeyEvent.VK_RIGHT, 0 ), "right" );
388 
389             put( KeyStroke.getKeyStroke( KeyEvent.VK_SPACE, 0 ), "select" );
390             put( KeyStroke.getKeyStroke( KeyEvent.VK_F, 0 ), "favourite" );
391         }
392     }
393 }
394