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