1 package freeguide.plugins.ui.vertical.simple.filter.gui; 2 3 import freeguide.common.lib.fgspecific.Application; 4 import freeguide.common.lib.fgspecific.data.TVChannelsSet; 5 6 import freeguide.plugins.ui.vertical.simple.VerticalViewer; 7 import freeguide.plugins.ui.vertical.simple.filter.ChannelFilter; 8 9 import java.awt.event.ActionEvent; 10 import java.awt.event.ActionListener; 11 12 import java.util.HashMap; 13 import java.util.Iterator; 14 import java.util.List; 15 16 import javax.swing.*; 17 18 /** 19 * A menu where the use can choose the channels to be displayed 20 * 21 * @author Christian Weiske (cweiske at cweiske.de) 22 */ 23 public class ChannelMenu extends JPopupMenu implements ActionListener 24 { 25 ChannelFilter filter; 26 HashMap channelMap; 27 28 /** 29 * Creates a new ChannelMenu object. 30 * 31 * @param filter DOCUMENT ME! 32 */ ChannelMenu( ChannelFilter filter )33 public ChannelMenu( ChannelFilter filter ) 34 { 35 super( ); 36 this.filter = filter; 37 } 38 39 //public ChannelMenu(ChannelFilter filter) 40 /** 41 * Initializes the menu items 42 */ init( )43 public void init( ) 44 { 45 //Needed in case this is no the first init 46 this.removeAll( ); 47 48 //Add a "no channels" button 49 ChannelsetMenuItem nullItem = 50 new ChannelsetMenuItem( 51 VerticalViewer.getInstance( ) 52 .getLocalizedMessage( "channelmenu.all" ), null ); 53 this.add( nullItem ); 54 nullItem.addActionListener( this ); 55 56 //Add channel sets 57 List channelsetList = 58 Application.getInstance( ).getChannelsSetsList( ); 59 60 for( int i = 0; i < channelsetList.size( ); i++ ) 61 { 62 TVChannelsSet set = (TVChannelsSet)channelsetList.get( i ); 63 ChannelsetMenuItem item = 64 new ChannelsetMenuItem( set.getName( ), set ); 65 this.add( item ); 66 item.addActionListener( this ); 67 } 68 69 //Separator 70 this.addSeparator( ); 71 72 //Add checkbox items for the single channels 73 this.channelMap = new HashMap( ); 74 75 for( 76 Iterator it = 77 Application.getInstance( ).getDataStorage( ).getInfo( ).channelsList.getChannels( ) 78 .iterator( ); 79 it.hasNext( ); ) 80 { 81 TVChannelsSet.Channel listCh = (TVChannelsSet.Channel)it.next( ); 82 JCheckBoxMenuItem item = 83 new ChannelCheckBoxMenuItem( 84 listCh.getDisplayName( ), listCh.getChannelID( ) ); 85 item.addActionListener( this ); 86 this.add( item ); 87 this.channelMap.put( listCh.getChannelID( ), item ); 88 } 89 } 90 91 //public void init() 92 /** 93 * DOCUMENT_ME! 94 * 95 * @param actionEvent DOCUMENT_ME! 96 */ actionPerformed( ActionEvent actionEvent )97 public void actionPerformed( ActionEvent actionEvent ) 98 { 99 Object source = actionEvent.getSource( ); 100 101 if( source.getClass( ).equals( ChannelCheckBoxMenuItem.class ) ) 102 { 103 //Single channel 104 ChannelCheckBoxMenuItem item = (ChannelCheckBoxMenuItem)source; 105 106 if( item.isSelected( ) ) 107 { 108 this.filter.addChannel( item.channelId ); 109 } 110 else 111 { 112 this.filter.removeChannel( item.channelId ); 113 } 114 } 115 else 116 { 117 //has to be channel set 118 //remove all channel selections 119 this.filter.removeAllChannels( false ); 120 121 Object[] arItems = this.channelMap.values( ).toArray( ); 122 123 for( int nA = 0; nA < arItems.length; nA++ ) 124 { 125 ( (ChannelCheckBoxMenuItem)arItems[nA] ).setSelected( false ); 126 } 127 128 //add the channel selection for the channel set channels 129 if( ( (ChannelsetMenuItem)source ).set != null ) 130 { 131 Object[] arChannels = 132 ( (ChannelsetMenuItem)source ).set.getChannels( ).toArray( ); 133 134 for( int nA = 0; nA < arChannels.length; nA++ ) 135 { 136 TVChannelsSet.Channel channel = 137 (TVChannelsSet.Channel)arChannels[nA]; 138 ChannelCheckBoxMenuItem item = 139 (ChannelCheckBoxMenuItem)this.channelMap.get( 140 channel.getChannelID( ) ); 141 142 if( item != null ) 143 { 144 item.setSelected( true ); 145 this.filter.addChannel( item.channelId, false ); 146 } 147 } 148 } 149 150 this.filter.notifyFilterChange( ); 151 } 152 } 153 154 //public void actionPerformed(ActionEvent actionEvent) 155 class ChannelCheckBoxMenuItem extends JCheckBoxMenuItem 156 { 157 /** DOCUMENT ME! */ 158 public String channelId = null; 159 160 /** 161 * Creates a new ChannelCheckBoxMenuItem object. 162 * 163 * @param title DOCUMENT ME! 164 * @param channelId DOCUMENT ME! 165 */ ChannelCheckBoxMenuItem( String title, String channelId )166 public ChannelCheckBoxMenuItem( String title, String channelId ) 167 { 168 super( title ); 169 this.channelId = channelId; 170 } 171 } 172 173 //class ChannelCheckBoxMenuItem extends JCheckBoxMenuItem 174 class ChannelsetMenuItem extends JMenuItem 175 { 176 /** DOCUMENT ME! */ 177 public TVChannelsSet set; 178 179 /** 180 * Creates a new ChannelsetMenuItem object. 181 * 182 * @param title DOCUMENT ME! 183 * @param set DOCUMENT ME! 184 */ ChannelsetMenuItem( String title, TVChannelsSet set )185 public ChannelsetMenuItem( String title, TVChannelsSet set ) 186 { 187 super( title ); 188 this.set = set; 189 } 190 } 191 192 //class ChannelsetMenuItem extends JMenuItem 193 } 194 //public class ChannelMenu extends JPopupMenu implements ActionListener 195