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