1 /*
2  *  FreeGuide J2
3  *
4  *  Copyright (c) 2001-2004 by Andy Balaam and the FreeGuide contributors
5  *
6  *  freeguide-tv.sourceforge.net
7  *
8  *  Released under the GNU General Public License
9  *  with ABSOLUTELY NO WARRANTY.
10  *
11  *  See the file COPYING for more information.
12  */
13 package freeguide.common.gui;
14 
15 import freeguide.common.lib.fgspecific.Application;
16 import freeguide.common.lib.fgspecific.data.TVChannelsSet;
17 import freeguide.common.lib.fgspecific.selection.Favourite;
18 import freeguide.common.lib.general.StringHelper;
19 import freeguide.common.lib.general.Time;
20 import freeguide.common.lib.general.Utils;
21 
22 import java.text.SimpleDateFormat;
23 
24 import java.util.Calendar;
25 import java.util.GregorianCalendar;
26 import java.util.Iterator;
27 import java.util.Map;
28 import java.util.TreeMap;
29 import java.util.logging.Level;
30 
31 import javax.swing.JDialog;
32 import javax.swing.JOptionPane;
33 
34 /*
35  *  FreeGuideFavouriteEditor
36  *
37  *  A screen for editing a single favourite.
38  *
39  *  @author     Brendan Corrigan (based on FreeGuideFavouriteEditor by Andy
40  *              Balaam)
41  *  @created    22nd August 2003
42  *  @version    2
43  */
44 /**
45  * DOCUMENT ME!
46  *
47  * @author $author$
48  * @version $Revision$
49  */
50 public class FavouriteEditorDialog extends FGDialog
51 {
52     protected static final String SPACE_RE_FROM = "\\s+";
53     protected static final String SPACE_RE_TO = " ";
54     private final static SimpleDateFormat dayOfWeekFormat =
55         new SimpleDateFormat( "EEEE" );
56     private javax.swing.JButton butCancel;
57     private javax.swing.JButton butOK;
58     private javax.swing.JComboBox cmbChannel;
59     private Map channels = new TreeMap(  );
60     private javax.swing.JComboBox cmbDayOfWeek;
61     private javax.swing.JComboBox cmbTitle;
62     private javax.swing.JLabel labAfter;
63     private javax.swing.JLabel labBefore;
64     private javax.swing.JLabel labBlankFields;
65     private javax.swing.JLabel labChannel;
66     private javax.swing.JLabel labDayOfWeek;
67     private javax.swing.JLabel labName;
68     private javax.swing.JLabel labTimeFormat;
69     private javax.swing.JLabel labDescription;
70     private javax.swing.JLabel labSearchDescriptionAndCredits;
71 
72     //    private javax.swing.JLabel labTimeFormat1;
73     private javax.swing.JLabel labTitle;
74     private javax.swing.JTextField txtDescriptionContains;
75     private javax.swing.JPanel jPanel1;
76     private javax.swing.JTextField txtAfter;
77     private javax.swing.JTextField txtBefore;
78     private javax.swing.JTextField txtName;
79     private javax.swing.JTextField txtTitle;
80     Favourite favourite;
81 
82     /**
83      * Constructor which sets the favourites editor up as a JDialog...
84      *
85      * @param owner - the <code>JFrame</code> from which the dialog is
86      *        displayed
87      * @param title - the <code>String</code> to display in the dialog's title
88      *        bar
89      * @param favourite - the <code>Favourite</code> to modify
90      * @param allChannelsSet DOCUMENT ME!
91      */
FavouriteEditorDialog( JDialog owner, String title, Favourite favourite, TVChannelsSet allChannelsSet )92     public FavouriteEditorDialog(
93         JDialog owner, String title, Favourite favourite,
94         TVChannelsSet allChannelsSet )
95     {
96         super( owner, title );
97         this.favourite = favourite;
98         initComponents(  );
99         Utils.centreDialog( owner, this );
100         fillLists( allChannelsSet );
101         getDetails(  );
102         addActionListeners(  );
103     }
104 
105     /**
106      * Gets the details from the favourite and fills in the UI
107      * elements
108      */
getDetails( )109     private void getDetails(  )
110     {
111         if( favourite.getTitleString(  ) != null )
112         {
113             txtTitle.setText( favourite.getTitleString(  ) );
114             cmbTitle.setSelectedItem(
115                 Application.getInstance(  ).getLocalizedMessage( "exactly" ) );
116         }
117         else if( favourite.getTitleContains(  ) != null )
118         {
119             txtTitle.setText( favourite.getTitleContains(  ) );
120             cmbTitle.setSelectedItem(
121                 Application.getInstance(  ).getLocalizedMessage( "contains" ) );
122         }
123         else if( favourite.getTitleRegex(  ) != null )
124         {
125             txtTitle.setText( favourite.getTitleRegex(  ) );
126             cmbTitle.setSelectedItem(
127                 Application.getInstance(  )
128                            .getLocalizedMessage( "regular_expression" ) );
129         }
130 
131         if( favourite.getDescriptionContains(  ) != null )
132         {
133             txtDescriptionContains.setText(
134                 favourite.getDescriptionContains(  ) );
135         }
136 
137         if( favourite.getChannelID(  ) != null )
138         {
139             TVChannelsSet.Channel ch =
140                 (TVChannelsSet.Channel)channels.get(
141                     favourite.getChannelID(  ) );
142 
143             if( ch != null )
144             {
145                 cmbChannel.setSelectedItem( ch );
146             }
147         }
148 
149         if( !favourite.getAfterTime(  ).isEmpty(  ) )
150         {
151             txtAfter.setText( favourite.getAfterTime(  ).getHHMMString(  ) );
152         }
153 
154         if( !favourite.getBeforeTime(  ).isEmpty(  ) )
155         {
156             txtBefore.setText( favourite.getBeforeTime(  ).getHHMMString(  ) );
157         }
158 
159         if( favourite.getDayOfWeek(  ) != -1 )
160         {
161             cmbDayOfWeek.setSelectedIndex( favourite.getDayOfWeek(  ) );
162         }
163 
164         calcTxtName(  );
165     }
166 
167     /**
168      * Description of the Method
169      *
170      * @param allChannelsSet DOCUMENT ME!
171      */
fillLists( TVChannelsSet allChannelsSet )172     private void fillLists( TVChannelsSet allChannelsSet )
173     {
174         // The combobox for the title match type
175         cmbTitle.addItem(
176             Application.getInstance(  ).getLocalizedMessage( "exactly" ) );
177         cmbTitle.addItem(
178             Application.getInstance(  ).getLocalizedMessage( "contains" ) );
179         cmbTitle.addItem(
180             Application.getInstance(  )
181                        .getLocalizedMessage( "regular_expression" ) );
182         cmbChannel.addItem( StringHelper.EMPTY_STRING );
183 
184         Iterator it = allChannelsSet.getSortedChannels(  ).iterator(  );
185 
186         while( it.hasNext(  ) )
187         {
188             TVChannelsSet.Channel ch = (TVChannelsSet.Channel)it.next(  );
189             cmbChannel.addItem( ch );
190             channels.put( ch.getChannelID(  ), ch );
191         }
192 
193         Calendar cal = GregorianCalendar.getInstance(  );
194         cmbDayOfWeek.addItem( StringHelper.EMPTY_STRING );
195         cal.set( Calendar.DAY_OF_WEEK, Calendar.SUNDAY );
196         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
197         cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
198         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
199         cal.set( Calendar.DAY_OF_WEEK, Calendar.TUESDAY );
200         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
201         cal.set( Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY );
202         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
203         cal.set( Calendar.DAY_OF_WEEK, Calendar.THURSDAY );
204         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
205         cal.set( Calendar.DAY_OF_WEEK, Calendar.FRIDAY );
206         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
207         cal.set( Calendar.DAY_OF_WEEK, Calendar.SATURDAY );
208         cmbDayOfWeek.addItem( dayOfWeekFormat.format( cal.getTime(  ) ) );
209     }
210 
211     /**
212      * Description of the Method
213      */
updateFavourite( )214     private boolean updateFavourite(  )
215     {
216         boolean setField = false;
217 
218         // Calculate the name
219         calcTxtName(  );
220 
221         // Set the name
222         favourite.setName( txtName.getText(  ) );
223 
224         // Set the title
225         if(
226             cmbTitle.getSelectedItem(  )
227                         .equals(
228                     Application.getInstance(  ).getLocalizedMessage(
229                         "exactly" ) ) )
230         {
231             favourite.setTitleRegex( null );
232             favourite.setTitleContains( null );
233 
234             String tmp = txtTitle.getText(  );
235 
236             if( tmp.equals( StringHelper.EMPTY_STRING ) )
237             {
238                 favourite.setTitleString( null );
239             }
240             else
241             {
242                 favourite.setTitleString( tmp );
243                 setField = true;
244             }
245         }
246         else if(
247             cmbTitle.getSelectedItem(  )
248                         .equals(
249                     Application.getInstance(  ).getLocalizedMessage(
250                         "contains" ) ) )
251         {
252             favourite.setTitleString( null );
253             favourite.setTitleRegex( null );
254 
255             String tmp = txtTitle.getText(  );
256 
257             if( tmp.equals( StringHelper.EMPTY_STRING ) )
258             {
259                 favourite.setTitleContains( null );
260             }
261             else
262             {
263                 favourite.setTitleContains( tmp );
264                 setField = true;
265             }
266         }
267         else
268         {
269             favourite.setTitleString( null );
270             favourite.setTitleContains( null );
271 
272             String tmp = txtTitle.getText(  );
273 
274             if( tmp.equals( StringHelper.EMPTY_STRING ) )
275             {
276                 favourite.setTitleRegex( null );
277             }
278             else
279             {
280                 favourite.setTitleRegex( tmp );
281                 setField = true;
282             }
283         }
284 
285         String tmpDescription = txtDescriptionContains.getText(  );
286         if( tmpDescription.equals( StringHelper.EMPTY_STRING ) )
287         {
288             favourite.setDescriptionContains( null );
289         }
290         else
291         {
292             favourite.setDescriptionContains( tmpDescription );
293             setField = true;
294         }
295 
296         // Set the channel
297         Object sel = cmbChannel.getSelectedItem(  );
298 
299         if( sel instanceof TVChannelsSet.Channel )
300         {
301             favourite.setChannelID(
302                 ( (TVChannelsSet.Channel)sel ).getChannelID(  ) );
303             setField = true;
304         }
305         else
306         {
307             favourite.setChannelID( null );
308         }
309 
310         // Set the after time
311         String tmp = txtAfter.getText(  );
312 
313         if(
314             !tmp.equals( StringHelper.EMPTY_STRING ) && ( tmp.length(  ) == 5 )
315                 && ( tmp.charAt( 2 ) == ':' ) )
316         {
317             //String hhmm = tmp.substring(0,2) + tmp.substring(3);
318             favourite.setAfterTime( new Time( tmp ) );
319             setField = true;
320         }
321         else
322         {
323             favourite.setAfterTime( new Time(  ) );
324         }
325 
326         // Set the before time
327         tmp = txtBefore.getText(  );
328 
329         if(
330             !tmp.equals( StringHelper.EMPTY_STRING ) && ( tmp.length(  ) == 5 )
331                 && ( tmp.charAt( 2 ) == ':' ) )
332         {
333             //String hhmm = tmp.substring(0,2) + tmp.substring(3);
334             favourite.setBeforeTime( new Time( tmp ) );
335             setField = true;
336         }
337         else
338         {
339             favourite.setBeforeTime( new Time(  ) );
340         }
341 
342         // Set the day of the week
343         tmp = (String)cmbDayOfWeek.getSelectedItem(  );
344 
345         if( !tmp.equals( StringHelper.EMPTY_STRING ) )
346         {
347             Calendar cal = GregorianCalendar.getInstance(  );
348 
349             try
350             {
351                 cal.setTime( dayOfWeekFormat.parse( tmp ) );
352                 favourite.setDayOfWeek( cal.get( Calendar.DAY_OF_WEEK ) );
353                 setField = true;
354             }
355             catch( java.text.ParseException ex )
356             {
357                 Application.getInstance(  ).getLogger(  )
358                            .log(
359                     Level.WARNING, "Error on parse day of week", ex );
360                 favourite.setDayOfWeek( -1 );
361             }
362         }
363         else
364         {
365             favourite.setDayOfWeek( -1 );
366         }
367 
368         setChanged( );
369 
370         return setField;
371     }
372 
373     /**
374      * Give the favourite a name depending on its properties
375      */
calcTxtName( )376     private void calcTxtName(  )
377     {
378         // Find the properties of the favourite
379         String title = txtTitle.getText(  );
380         String channel = cmbChannel.getSelectedItem(  ).toString(  );
381         String after = txtAfter.getText(  );
382         String before = txtBefore.getText(  );
383         String dayOfWeek = cmbDayOfWeek.getSelectedItem(  ).toString(  );
384         String description = txtDescriptionContains.getText(  );
385 
386         // Prepare strings that will be substituted into the name template
387         String equalsString = StringHelper.EMPTY_STRING;
388         Object[] equalsArray = { title };
389         String containsString = StringHelper.EMPTY_STRING;
390         Object[] containsArray = { title };
391         String regexpString = StringHelper.EMPTY_STRING;
392         Object[] regexpArray = { title };
393         String channelString = StringHelper.EMPTY_STRING;
394         Object[] channelArray = { channel };
395         String afterString = StringHelper.EMPTY_STRING;
396         Object[] afterArray = { after };
397         String beforeString = StringHelper.EMPTY_STRING;
398         Object[] beforeArray = { before };
399         String dayOfWeekString = StringHelper.EMPTY_STRING;
400         Object[] dayOfWeekArray = { dayOfWeek };
401         String descriptionContainsString = StringHelper.EMPTY_STRING;
402         Object[] descriptionContainsArray = { description };
403 
404         if( !title.equals( StringHelper.EMPTY_STRING ) )
405         {
406             if(
407                 cmbTitle.getSelectedItem(  )
408                             .equals(
409                         Application.getInstance(  )
410                                        .getLocalizedMessage( "exactly" ) ) )
411             {
412                 equalsString = Application.getInstance(  )
413                                           .getLocalizedMessage(
414                         "favourite_name_equals_template", equalsArray );
415             }
416             else if(
417                 cmbTitle.getSelectedItem(  )
418                             .equals(
419                         Application.getInstance(  )
420                                        .getLocalizedMessage( "contains" ) ) )
421             {
422                 containsString = Application.getInstance(  )
423                                             .getLocalizedMessage(
424                         "favourite_name_contains_template", containsArray );
425             }
426             else
427             {
428                 regexpString = Application.getInstance(  )
429                                           .getLocalizedMessage(
430                         "favourite_name_regexp_template", regexpArray );
431             }
432         }
433 
434         if( !channel.equals( StringHelper.EMPTY_STRING ) )
435         {
436             channelString = Application.getInstance(  )
437                                        .getLocalizedMessage(
438                     "favourite_name_channel_template", channelArray );
439         }
440 
441         if( !after.equals( StringHelper.EMPTY_STRING ) )
442         {
443             afterString = Application.getInstance(  )
444                                      .getLocalizedMessage(
445                     "favourite_name_after_template", afterArray );
446         }
447 
448         if( !before.equals( StringHelper.EMPTY_STRING ) )
449         {
450             beforeString = Application.getInstance(  )
451                                       .getLocalizedMessage(
452                     "favourite_name_before_template", beforeArray );
453         }
454 
455         if( !dayOfWeek.equals( StringHelper.EMPTY_STRING ) )
456         {
457             dayOfWeekString = Application.getInstance(  )
458                                          .getLocalizedMessage(
459                     "favourite_name_day_of_week_template", dayOfWeekArray );
460         }
461 
462         if( !description.equals( StringHelper.EMPTY_STRING ) )
463         {
464             descriptionContainsString =
465                 Application.getInstance(  ).getLocalizedMessage(
466                     "favourite_name_description_contains_template",
467                     descriptionContainsArray
468                 );
469         }
470 
471         Object[] nameArgs =
472             {
473                 equalsString, containsString, regexpString, channelString,
474                 beforeString, afterString, dayOfWeekString,
475                 descriptionContainsString
476             };
477         String name =
478             Application.getInstance(  )
479                        .getLocalizedMessage(
480                 "favourite_name_template", nameArgs );
481         name = name.replaceAll( SPACE_RE_FROM, SPACE_RE_TO ).trim(  );
482 
483         if( name.equals( StringHelper.EMPTY_STRING ) )
484         {
485             name = Application.getInstance(  )
486                               .getLocalizedMessage( "all_programmes" );
487         }
488 
489         txtName.setText( name );
490     }
491 
492     /**
493      * Add action listeners to the UI components
494      */
addActionListeners( )495     private void addActionListeners(  )
496     {
497         txtTitle.addActionListener(
498             new java.awt.event.ActionListener(  )
499             {
500                 public void actionPerformed( java.awt.event.ActionEvent evt )
501                 {
502                     txtTitleActionPerformed( evt );
503                 }
504             } );
505         cmbTitle.addActionListener(
506             new java.awt.event.ActionListener(  )
507             {
508                 public void actionPerformed( java.awt.event.ActionEvent evt )
509                 {
510                     cmbTitleActionPerformed( evt );
511                 }
512             } );
513         txtDescriptionContains.addActionListener(
514             new java.awt.event.ActionListener(  )
515             {
516                 public void actionPerformed( java.awt.event.ActionEvent evt)
517                 {
518                     txtDescriptionContainsActionPerformed( evt );
519                 }
520             } );
521         cmbChannel.addActionListener(
522             new java.awt.event.ActionListener(  )
523             {
524                 public void actionPerformed( java.awt.event.ActionEvent evt )
525                 {
526                     cmbChannelActionPerformed( evt );
527                 }
528             } );
529         txtAfter.addActionListener(
530             new java.awt.event.ActionListener(  )
531             {
532                 public void actionPerformed( java.awt.event.ActionEvent evt )
533                 {
534                     txtAfterActionPerformed( evt );
535                 }
536             } );
537         txtBefore.addActionListener(
538             new java.awt.event.ActionListener(  )
539             {
540                 public void actionPerformed( java.awt.event.ActionEvent evt )
541                 {
542                     txtBeforeActionPerformed( evt );
543                 }
544             } );
545         cmbDayOfWeek.addActionListener(
546             new java.awt.event.ActionListener(  )
547             {
548                 public void actionPerformed( java.awt.event.ActionEvent evt )
549                 {
550                     cmbDayOfWeekActionPerformed( evt );
551                 }
552             } );
553         butOK.addActionListener(
554             new java.awt.event.ActionListener(  )
555             {
556                 public void actionPerformed( java.awt.event.ActionEvent evt )
557                 {
558                     butOKActionPerformed( evt );
559                 }
560             } );
561         butCancel.addActionListener(
562             new java.awt.event.ActionListener(  )
563             {
564                 public void actionPerformed( java.awt.event.ActionEvent evt )
565                 {
566                     butCancelActionPerformed( evt );
567                 }
568             } );
569     }
570 
571     /**
572      * Create the UI
573      */
initComponents( )574     private void initComponents(  )
575     {
576         java.awt.GridBagConstraints gridBagConstraints;
577         getContentPane(  ).setLayout( new java.awt.GridBagLayout(  ) );
578         labTitle = new javax.swing.JLabel(
579                 Application.getInstance(  ).getLocalizedMessage(
580                     "title_matches" ) + ':', javax.swing.SwingConstants.RIGHT );
581         gridBagConstraints = new java.awt.GridBagConstraints(  );
582         gridBagConstraints.gridx = 0;
583         gridBagConstraints.gridy = 1;
584         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
585         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
586         getContentPane(  ).add( labTitle, gridBagConstraints );
587         txtTitle = new javax.swing.JTextField(  );
588         txtTitle.setMinimumSize( new java.awt.Dimension( 50, 25 ) );
589         txtTitle.setPreferredSize( new java.awt.Dimension( 200, 25 ) );
590         gridBagConstraints = new java.awt.GridBagConstraints(  );
591         gridBagConstraints.gridx = 1;
592         gridBagConstraints.gridy = 1;
593         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
594         gridBagConstraints.weightx = 0.9;
595         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
596         getContentPane(  ).add( txtTitle, gridBagConstraints );
597         cmbTitle = new javax.swing.JComboBox(  );
598         cmbTitle.setPreferredSize( new java.awt.Dimension( 150, 25 ) );
599         gridBagConstraints = new java.awt.GridBagConstraints(  );
600         gridBagConstraints.gridx = 2;
601         gridBagConstraints.gridy = 1;
602         gridBagConstraints.gridwidth = 2;
603         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
604         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
605         getContentPane(  ).add( cmbTitle, gridBagConstraints );
606         labDescription = new javax.swing.JLabel(
607                 Application.getInstance(  ).getLocalizedMessage(
608                     "description" ) + ':', javax.swing.SwingConstants.RIGHT );
609         gridBagConstraints = new java.awt.GridBagConstraints(  );
610         gridBagConstraints.gridx = 0;
611         gridBagConstraints.gridy = 2;
612         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
613         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
614         getContentPane(  ).add( labDescription, gridBagConstraints );
615         txtDescriptionContains = new javax.swing.JTextField(  );
616         txtDescriptionContains.setMinimumSize(
617             new java.awt.Dimension( 50, 25 ) );
618         txtDescriptionContains.setPreferredSize(
619             new java.awt.Dimension( 200, 25 ) );
620         gridBagConstraints = new java.awt.GridBagConstraints(  );
621         gridBagConstraints.gridx = 1;
622         gridBagConstraints.gridy = 2;
623         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
624         gridBagConstraints.weightx = 0.9;
625         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
626         getContentPane(  ).add( txtDescriptionContains, gridBagConstraints );
627         labSearchDescriptionAndCredits = new javax.swing.JLabel(
628             Application.getInstance().getLocalizedMessage(
629             "search_in_description_and_credits" ),
630             javax.swing.SwingConstants.LEFT
631         );
632         gridBagConstraints = new java.awt.GridBagConstraints(  );
633         gridBagConstraints.gridx = 2;
634         gridBagConstraints.gridy = 2;
635         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
636         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
637         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
638         gridBagConstraints.weightx = 0.1;
639         getContentPane(  ).add(
640             labSearchDescriptionAndCredits, gridBagConstraints );
641         labChannel = new javax.swing.JLabel(
642                 Application.getInstance(  ).getLocalizedMessage( "channel_is" )
643                 + ':', javax.swing.SwingConstants.RIGHT );
644         gridBagConstraints = new java.awt.GridBagConstraints(  );
645         gridBagConstraints.gridx = 0;
646         gridBagConstraints.gridy = 3;
647         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
648         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
649         getContentPane(  ).add( labChannel, gridBagConstraints );
650         cmbChannel = new javax.swing.JComboBox(  );
651         cmbChannel.setPreferredSize( new java.awt.Dimension( 200, 25 ) );
652         gridBagConstraints = new java.awt.GridBagConstraints(  );
653         gridBagConstraints.gridx = 1;
654         gridBagConstraints.gridy = 3;
655         gridBagConstraints.gridwidth = 3;
656         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
657         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
658         gridBagConstraints.weightx = 0.9;
659         getContentPane(  ).add( cmbChannel, gridBagConstraints );
660         labAfter = new javax.swing.JLabel(
661                 Application.getInstance(  ).getLocalizedMessage( "on_after" )
662                 + ':', javax.swing.SwingConstants.RIGHT );
663         gridBagConstraints = new java.awt.GridBagConstraints(  );
664         gridBagConstraints.gridx = 0;
665         gridBagConstraints.gridy = 4;
666         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
667         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
668         getContentPane(  ).add( labAfter, gridBagConstraints );
669         txtAfter = new javax.swing.JTextField(  );
670         txtAfter.setMinimumSize( new java.awt.Dimension( 50, 25 ) );
671         gridBagConstraints = new java.awt.GridBagConstraints(  );
672         gridBagConstraints.gridx = 1;
673         gridBagConstraints.gridy = 4;
674         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
675         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
676         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
677         gridBagConstraints.weightx = 0.9;
678         getContentPane(  ).add( txtAfter, gridBagConstraints );
679         txtBefore = new javax.swing.JTextField(  );
680         txtBefore.setMinimumSize( new java.awt.Dimension( 50, 25 ) );
681         gridBagConstraints = new java.awt.GridBagConstraints(  );
682         gridBagConstraints.gridx = 1;
683         gridBagConstraints.gridy = 5;
684         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
685         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
686         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
687         gridBagConstraints.weightx = 0.9;
688         getContentPane(  ).add( txtBefore, gridBagConstraints );
689         labBefore = new javax.swing.JLabel(
690                 Application.getInstance(  ).getLocalizedMessage( "on_before" )
691                 + ':', javax.swing.SwingConstants.RIGHT );
692         gridBagConstraints = new java.awt.GridBagConstraints(  );
693         gridBagConstraints.gridx = 0;
694         gridBagConstraints.gridy = 5;
695         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
696         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
697         getContentPane(  ).add( labBefore, gridBagConstraints );
698         labBlankFields = new javax.swing.JLabel(
699                 Application.getInstance(  )
700                            .getLocalizedMessage(
701                     "you_may_leave_any_fields_blank" ),
702                 javax.swing.SwingConstants.CENTER );
703         gridBagConstraints = new java.awt.GridBagConstraints(  );
704         gridBagConstraints.gridx = 0;
705         gridBagConstraints.gridy = 0;
706         gridBagConstraints.gridwidth = 4;
707         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
708         getContentPane(  ).add( labBlankFields, gridBagConstraints );
709         labTimeFormat = new javax.swing.JLabel( "<html>" +
710                 Application.getInstance(  )
711                            .getLocalizedMessage(
712                     "times_should_be_entered_as_hhmm" ) + "</html>",
713                 javax.swing.SwingConstants.LEFT );
714         gridBagConstraints = new java.awt.GridBagConstraints(  );
715         gridBagConstraints.gridx = 2;
716         gridBagConstraints.gridy = 4;
717         gridBagConstraints.gridwidth = 2;
718         gridBagConstraints.gridheight = 2;
719         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
720         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
721         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
722         gridBagConstraints.weightx = 0.1;
723         getContentPane(  ).add( labTimeFormat, gridBagConstraints );
724         labDayOfWeek = new javax.swing.JLabel(
725                 Application.getInstance(  ).getLocalizedMessage(
726                     "on_day_label" ) + ':', javax.swing.SwingConstants.RIGHT );
727         gridBagConstraints = new java.awt.GridBagConstraints(  );
728         gridBagConstraints.gridx = 0;
729         gridBagConstraints.gridy = 7;
730         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
731         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
732         getContentPane(  ).add( labDayOfWeek, gridBagConstraints );
733         labName = new javax.swing.JLabel(
734                 Application.getInstance(  ).getLocalizedMessage( "name" )
735                 + ':', javax.swing.SwingConstants.RIGHT );
736         gridBagConstraints = new java.awt.GridBagConstraints(  );
737         gridBagConstraints.gridx = 0;
738         gridBagConstraints.gridy = 8;
739         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
740         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
741         getContentPane(  ).add( labName, gridBagConstraints );
742         cmbDayOfWeek = new javax.swing.JComboBox(  );
743         cmbDayOfWeek.setPreferredSize( new java.awt.Dimension( 200, 25 ) );
744         gridBagConstraints = new java.awt.GridBagConstraints(  );
745         gridBagConstraints.gridx = 1;
746         gridBagConstraints.gridy = 7;
747         gridBagConstraints.gridwidth = 3;
748         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
749         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
750         gridBagConstraints.weightx = 0.9;
751         getContentPane(  ).add( cmbDayOfWeek, gridBagConstraints );
752         txtName = new javax.swing.JTextField(
753                 Application.getInstance(  )
754                            .getLocalizedMessage( "all_programmes" ) );
755         txtName.setEditable( false );
756         txtName.setPreferredSize( new java.awt.Dimension( 200, 25 ) );
757         txtName.setMinimumSize( new java.awt.Dimension( 200, 25 ) );
758         gridBagConstraints = new java.awt.GridBagConstraints(  );
759         gridBagConstraints.gridx = 1;
760         gridBagConstraints.gridy = 8;
761         gridBagConstraints.gridwidth = 3;
762         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
763         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
764         gridBagConstraints.weightx = 0.9;
765         getContentPane(  ).add( txtName, gridBagConstraints );
766         jPanel1 = new javax.swing.JPanel( new java.awt.GridBagLayout(  ) );
767         butOK = new javax.swing.JButton(
768                 Application.getInstance(  ).getLocalizedMessage( "ok" ) );
769         butOK.setMinimumSize( new java.awt.Dimension( 87, 26 ) );
770         butOK.setPreferredSize( new java.awt.Dimension( 87, 26 ) );
771         gridBagConstraints = new java.awt.GridBagConstraints(  );
772         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
773         jPanel1.add( butOK, gridBagConstraints );
774         butCancel = new javax.swing.JButton(
775                 Application.getInstance(  ).getLocalizedMessage( "cancel" ) );
776         butCancel.setMinimumSize( new java.awt.Dimension( 87, 26 ) );
777         butCancel.setPreferredSize( new java.awt.Dimension( 87, 26 ) );
778         gridBagConstraints = new java.awt.GridBagConstraints(  );
779         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 10 );
780         jPanel1.add( butCancel, gridBagConstraints );
781         gridBagConstraints = new java.awt.GridBagConstraints(  );
782         gridBagConstraints.gridx = 0;
783         gridBagConstraints.gridy = 9;
784         gridBagConstraints.gridwidth = 4;
785         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
786         getContentPane(  ).add( jPanel1, gridBagConstraints );
787 
788         /*labTimeFormat1 = new javax.swing.JLabel(
789         FreeGuide.msg.getString( "as_hhmm" ),
790         javax.swing.SwingConstants.LEFT );
791         labTimeFormat1.setFont( new java.awt.Font( "Dialog", 0, 12 ) );
792         gridBagConstraints = new java.awt.GridBagConstraints(  );
793         gridBagConstraints.gridx = 2;
794         gridBagConstraints.gridy = 4;
795         gridBagConstraints.gridwidth = 2;
796         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
797         gridBagConstraints.insets = new java.awt.Insets( 5, 5, 5, 5 );
798         gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
799         gridBagConstraints.weightx = 0.4;
800         getContentPane(  ).add( labTimeFormat1, gridBagConstraints );
801         */
802         getRootPane(  ).setDefaultButton( butOK );
803         pack(  );
804     }
805 
806     /**
807      * Description of the Method
808      *
809      * @param evt Description of the Parameter
810      */
txtTitleActionPerformed( java.awt.event.ActionEvent evt )811     private void txtTitleActionPerformed( java.awt.event.ActionEvent evt )
812     {
813         calcTxtName(  );
814     }
815 
txtDescriptionContainsActionPerformed( java.awt.event.ActionEvent evt )816     private void txtDescriptionContainsActionPerformed( java.awt.event.ActionEvent evt )
817     {
818         calcTxtName(  );
819     }
820 
821     /**
822      * Description of the Method
823      *
824      * @param evt Description of the Parameter
825      */
cmbDayOfWeekActionPerformed( java.awt.event.ActionEvent evt )826     private void cmbDayOfWeekActionPerformed( java.awt.event.ActionEvent evt )
827     {
828         calcTxtName(  );
829     }
830 
831     /**
832      * Description of the Method
833      *
834      * @param evt Description of the Parameter
835      */
txtBeforeActionPerformed( java.awt.event.ActionEvent evt )836     private void txtBeforeActionPerformed( java.awt.event.ActionEvent evt )
837     {
838         calcTxtName(  );
839     }
840 
841     /**
842      * Description of the Method
843      *
844      * @param evt Description of the Parameter
845      */
txtAfterActionPerformed( java.awt.event.ActionEvent evt )846     private void txtAfterActionPerformed( java.awt.event.ActionEvent evt )
847     {
848         calcTxtName(  );
849     }
850 
851     /**
852      * Description of the Method
853      *
854      * @param evt Description of the Parameter
855      */
cmbChannelActionPerformed( java.awt.event.ActionEvent evt )856     private void cmbChannelActionPerformed( java.awt.event.ActionEvent evt )
857     {
858         calcTxtName(  );
859     }
860 
861     /**
862      * Description of the Method
863      *
864      * @param evt Description of the Parameter
865      */
cmbTitleActionPerformed( java.awt.event.ActionEvent evt )866     private void cmbTitleActionPerformed( java.awt.event.ActionEvent evt )
867     {
868         calcTxtName(  );
869     }
870 
871     /**
872      * Description of the Method
873      *
874      * @param evt Description of the Parameter
875      */
butCancelActionPerformed( java.awt.event.ActionEvent evt )876     private void butCancelActionPerformed( java.awt.event.ActionEvent evt )
877     {
878         quit(  );
879     }
880 
881     /**
882      * Description of the Method
883      *
884      * @param evt Description of the Parameter
885      */
butOKActionPerformed( java.awt.event.ActionEvent evt )886     private void butOKActionPerformed( java.awt.event.ActionEvent evt )
887     {
888         if ( updateFavourite(  ) )
889         {
890            setSave(  );
891            quit(  );
892         }
893         else
894         {
895             JOptionPane.showMessageDialog( this,
896                 Application.getInstance().getLocalizedMessage(
897                     "please_choose_some_filter_options" ),
898                 Application.getInstance().getLocalizedMessage(
899                     "no_filters_chosen" ),
900                 JOptionPane.ERROR_MESSAGE );
901         }
902     }
903 }
904