4
* Copyright (c) 2001-2004 by Andy Balaam and the FreeGuide contributors
6
* freeguide-tv.sourceforge.net
8
* Released under the GNU General Public License
9
* with ABSOLUTELY NO WARRANTY.
11
* See the file COPYING for more information.
13
package freeguide.gui.dialogs;
15
import freeguide.gui.viewer.*;
16
import freeguide.lib.fgspecific.*;
17
import freeguide.lib.general.*;
20
import java.util.regex.*;
25
* FreeGuideFavouriteEditor
27
* A screen for editing a single favourite.
29
* @author Brendan Corrigan (based on FreeGuideFavouriteEditor by Andy
31
* @created 22nd August 2003
35
public class FavouriteEditorDialog extends FGDialog {
38
* Constructor which sets the favourites editor up as a JDialog...
40
*@param owner - the <code>JFrame</code> from which the dialog is displayed
41
*@param title - the <code>String</code> to display in the dialog's title bar
42
*@param favourite - the <code>Favourite</code> to modify
44
public FavouriteEditorDialog(FGDialog owner, String title,
45
Favourite favourite) {
49
this.favourite = favourite;
59
* Gets the details attribute of the FreeGuideFavouriteEditor object
61
private void getDetails() {
63
if (favourite.getTitleString() != null) {
64
txtTitle.setText(favourite.getTitleString());
65
cmbTitle.setSelectedItem("Exactly");
66
} else if (favourite.getTitleContains() != null) {
67
txtTitle.setText(favourite.getTitleContains());
68
cmbTitle.setSelectedItem("Contains");
69
} else if (favourite.getTitleRegex() != null) {
70
txtTitle.setText(favourite.getTitleRegex().pattern());
71
cmbTitle.setSelectedItem("Regular Expression");
74
if (favourite.getChannelID() != null) {
75
cmbChannel.setSelectedItem(getChannelNameFromID(favourite.getChannelID()));
78
if (favourite.getAfterTime() != null) {
79
txtAfter.setText(favourite.getAfterTime().getHHMMString());
82
if (favourite.getBeforeTime() != null) {
83
txtBefore.setText(favourite.getBeforeTime().getHHMMString());
86
if (favourite.getDayOfWeek() != null) {
87
cmbDayOfWeek.setSelectedIndex(favourite.getDayOfWeek().intValue());
96
* Description of the Method
98
private void fillLists() {
100
// The combobox for the title match type
101
cmbTitle.addItem("Exactly");
102
cmbTitle.addItem("Contains");
103
cmbTitle.addItem("Regular Expression");
106
// ViewerFrame viewerFrame = (ViewerFrame)launcher.getLauncher();
107
// channelIDs = viewerFrame.xmltvLoader.getChannelIDs();
109
channelIDs = ViewerFrame.xmltvLoader.getChannelIDs();
110
channelNames = ViewerFrame.xmltvLoader.getChannelNames();
112
cmbChannel.addItem("");
113
for (int i = 0; i < channelNames.size(); i++) {
114
cmbChannel.addItem(channelNames.get(i));
117
Calendar cal = GregorianCalendar.getInstance();
119
cmbDayOfWeek.addItem("");
120
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
121
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
122
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
123
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
124
cal.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
125
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
126
cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
127
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
128
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
129
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
130
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
131
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
132
cal.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
133
cmbDayOfWeek.addItem(dayOfWeekFormat.format(cal.getTime()));
139
* Description of the Method
141
private void updateFavourite() {
143
// Calculate the name
147
favourite.setName(txtName.getText());
150
if (cmbTitle.getSelectedItem().equals("Exactly")) {
152
favourite.setTitleRegex(null);
153
favourite.setTitleContains(null);
155
String tmp = txtTitle.getText();
156
if (tmp.equals("")) {
157
favourite.setTitleString(null);
159
favourite.setTitleString(tmp);
162
} else if (cmbTitle.getSelectedItem().equals("Contains")) {
164
favourite.setTitleString(null);
165
favourite.setTitleRegex(null);
167
String tmp = txtTitle.getText();
168
if (tmp.equals("")) {
169
favourite.setTitleContains(null);
171
favourite.setTitleContains(tmp);
176
favourite.setTitleString(null);
177
favourite.setTitleContains(null);
179
String tmp = txtTitle.getText();
180
if (tmp.equals("")) {
181
favourite.setTitleRegex(null);
183
favourite.setTitleRegex(Pattern.compile(tmp));
189
String tmp = (String) cmbChannel.getSelectedItem();
190
if (tmp.equals("")) {
191
favourite.setChannelID(null);
193
favourite.setChannelID(getChannelIDFromName(tmp));
196
// Set the after time
197
tmp = txtAfter.getText();
198
if (!tmp.equals("") && (tmp.length() == 5) && tmp.charAt(2) == ':') {
200
//String hhmm = tmp.substring(0,2) + tmp.substring(3);
201
favourite.setAfterTime(new Time(tmp));
204
favourite.setAfterTime(null);
207
// Set the before time
208
tmp = txtBefore.getText();
209
if (!tmp.equals("") && (tmp.length() == 5) && tmp.charAt(2) == ':') {
211
//String hhmm = tmp.substring(0,2) + tmp.substring(3);
212
favourite.setBeforeTime(new Time(tmp));
215
favourite.setBeforeTime(null);
218
// Set the day of the week
219
tmp = (String) cmbDayOfWeek.getSelectedItem();
221
if (!tmp.equals("")) {
222
Calendar cal = GregorianCalendar.getInstance();
224
cal.setTime(dayOfWeekFormat.parse(tmp));
225
favourite.setDayOfWeek(new Integer(cal.get(Calendar.DAY_OF_WEEK)));
226
} catch (java.text.ParseException e) {
228
favourite.setDayOfWeek(null);
232
favourite.setDayOfWeek(null);
239
* Gets the channelNameFromID attribute of the FreeGuideFavouriteEditor
242
*@param id Description of the Parameter
243
*@return The channelNameFromID value
245
private String getChannelNameFromID(String id) {
246
int i = channelIDs.indexOf(id);
247
return channelNames.get(i).toString();
252
* Gets the channelIDFromName attribute of the FreeGuideFavouriteEditor
255
*@param name Description of the Parameter
256
*@return The channelIDFromName value
258
private String getChannelIDFromName(String name) {
259
int i = channelNames.indexOf(name);
260
return channelIDs.get(i).toString();
265
* Description of the Method
267
private void calcTxtName() {
269
//if(txtName.getText().equals("All Programmes")) {
273
String title = txtTitle.getText();
274
if (!title.equals("")) {
276
if (cmbTitle.getSelectedItem().equals("Exactly")) {
277
name += "" + title + " ";
278
} else if (cmbTitle.getSelectedItem().equals("Contains")) {
279
name += "contains " + title + " ";
281
name += "/" + title + "/ ";
286
String channel = (String) cmbChannel.getSelectedItem();
287
if (channel != null && !channel.equals("")) {
288
name += "on " + channel + " ";
291
String after = txtAfter.getText();
292
if (!after.equals("")) {
293
name += "after " + after + " ";
296
String before = txtBefore.getText();
297
if (!before.equals("")) {
298
name += "before " + before + " ";
301
String dayOfWeek = (String) cmbDayOfWeek.getSelectedItem();
302
if (dayOfWeek != null && !dayOfWeek.equals("")) {
303
name += "on " + dayOfWeek + " ";
306
if (name.equals("")) {
307
name = "All Programmes";
310
txtName.setText(name);
317
* This method is called from within the constructor to initialize the
318
* form. WARNING: Do NOT modify this code. The content of this method is
319
* always regenerated by the Form Editor.
321
private void initComponents() {
323
java.awt.GridBagConstraints gridBagConstraints;
325
labTitle = new javax.swing.JLabel();
326
txtTitle = new javax.swing.JTextField();
327
cmbTitle = new javax.swing.JComboBox();
328
labChannel = new javax.swing.JLabel();
329
cmbChannel = new javax.swing.JComboBox();
330
labAfter = new javax.swing.JLabel();
331
txtAfter = new javax.swing.JTextField();
332
txtBefore = new javax.swing.JTextField();
333
labBefore = new javax.swing.JLabel();
334
labBlankFields = new javax.swing.JLabel();
335
labTimeFormat = new javax.swing.JLabel();
336
labDayOfWeek = new javax.swing.JLabel();
337
labName = new javax.swing.JLabel();
338
cmbDayOfWeek = new javax.swing.JComboBox();
339
txtName = new javax.swing.JTextField();
340
jPanel1 = new javax.swing.JPanel();
341
butOK = new javax.swing.JButton();
342
butCancel = new javax.swing.JButton();
343
labTimeFormat1 = new javax.swing.JLabel();
345
getContentPane().setLayout(new java.awt.GridBagLayout());
347
labTitle.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
348
labTitle.setText("Title matches:");
349
gridBagConstraints = new java.awt.GridBagConstraints();
350
gridBagConstraints.gridx = 0;
351
gridBagConstraints.gridy = 1;
352
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
353
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
354
getContentPane().add(labTitle, gridBagConstraints);
356
txtTitle.setPreferredSize(new java.awt.Dimension(200, 25));
357
txtTitle.addActionListener(
358
new java.awt.event.ActionListener() {
359
public void actionPerformed(java.awt.event.ActionEvent evt) {
360
txtTitleActionPerformed(evt);
364
gridBagConstraints = new java.awt.GridBagConstraints();
365
gridBagConstraints.gridx = 1;
366
gridBagConstraints.gridy = 1;
367
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
368
gridBagConstraints.weightx = 0.9;
369
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
370
getContentPane().add(txtTitle, gridBagConstraints);
372
cmbTitle.setPreferredSize(new java.awt.Dimension(150, 25));
373
cmbTitle.addActionListener(
374
new java.awt.event.ActionListener() {
375
public void actionPerformed(java.awt.event.ActionEvent evt) {
376
cmbTitleActionPerformed(evt);
380
gridBagConstraints = new java.awt.GridBagConstraints();
381
gridBagConstraints.gridx = 2;
382
gridBagConstraints.gridy = 1;
383
gridBagConstraints.gridwidth = 2;
384
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
385
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 10);
386
getContentPane().add(cmbTitle, gridBagConstraints);
388
labChannel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
389
labChannel.setText("Channel is:");
390
gridBagConstraints = new java.awt.GridBagConstraints();
391
gridBagConstraints.gridx = 0;
392
gridBagConstraints.gridy = 2;
393
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
394
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
395
getContentPane().add(labChannel, gridBagConstraints);
397
cmbChannel.setPreferredSize(new java.awt.Dimension(200, 25));
398
cmbChannel.addActionListener(
399
new java.awt.event.ActionListener() {
400
public void actionPerformed(java.awt.event.ActionEvent evt) {
401
cmbChannelActionPerformed(evt);
405
gridBagConstraints = new java.awt.GridBagConstraints();
406
gridBagConstraints.gridx = 1;
407
gridBagConstraints.gridy = 2;
408
gridBagConstraints.gridwidth = 3;
409
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
410
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
411
gridBagConstraints.weightx = 0.9;
412
getContentPane().add(cmbChannel, gridBagConstraints);
414
labAfter.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
415
labAfter.setText("On after:");
416
gridBagConstraints = new java.awt.GridBagConstraints();
417
gridBagConstraints.gridx = 0;
418
gridBagConstraints.gridy = 3;
419
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
420
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
421
getContentPane().add(labAfter, gridBagConstraints);
423
txtAfter.setMinimumSize(new java.awt.Dimension(50, 25));
424
txtAfter.setName("null");
425
txtAfter.setPreferredSize(new java.awt.Dimension(50, 25));
426
txtAfter.addActionListener(
427
new java.awt.event.ActionListener() {
428
public void actionPerformed(java.awt.event.ActionEvent evt) {
429
txtAfterActionPerformed(evt);
433
gridBagConstraints = new java.awt.GridBagConstraints();
434
gridBagConstraints.gridx = 1;
435
gridBagConstraints.gridy = 3;
436
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
437
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
438
gridBagConstraints.weightx = 0.9;
439
getContentPane().add(txtAfter, gridBagConstraints);
441
txtBefore.setMinimumSize(new java.awt.Dimension(50, 25));
442
txtBefore.setPreferredSize(new java.awt.Dimension(50, 25));
443
txtBefore.addActionListener(
444
new java.awt.event.ActionListener() {
445
public void actionPerformed(java.awt.event.ActionEvent evt) {
446
txtBeforeActionPerformed(evt);
450
gridBagConstraints = new java.awt.GridBagConstraints();
451
gridBagConstraints.gridx = 1;
452
gridBagConstraints.gridy = 4;
453
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
454
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
455
gridBagConstraints.weightx = 0.9;
456
getContentPane().add(txtBefore, gridBagConstraints);
458
labBefore.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
459
labBefore.setText("On before:");
460
gridBagConstraints = new java.awt.GridBagConstraints();
461
gridBagConstraints.gridx = 0;
462
gridBagConstraints.gridy = 4;
463
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
464
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
465
getContentPane().add(labBefore, gridBagConstraints);
467
labBlankFields.setFont(new java.awt.Font("Dialog", 0, 12));
468
labBlankFields.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
469
labBlankFields.setText("(You may leave any fields blank)");
470
gridBagConstraints = new java.awt.GridBagConstraints();
471
gridBagConstraints.gridx = 0;
472
gridBagConstraints.gridy = 0;
473
gridBagConstraints.gridwidth = 4;
474
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
475
getContentPane().add(labBlankFields, gridBagConstraints);
477
labTimeFormat.setFont(new java.awt.Font("Dialog", 0, 12));
478
labTimeFormat.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
479
labTimeFormat.setText("(Times should be entered");
480
gridBagConstraints = new java.awt.GridBagConstraints();
481
gridBagConstraints.gridx = 2;
482
gridBagConstraints.gridy = 3;
483
gridBagConstraints.gridwidth = 2;
484
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
485
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
486
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
487
gridBagConstraints.weightx = 0.4;
488
getContentPane().add(labTimeFormat, gridBagConstraints);
490
labDayOfWeek.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
491
labDayOfWeek.setText("On day:");
492
gridBagConstraints = new java.awt.GridBagConstraints();
493
gridBagConstraints.gridx = 0;
494
gridBagConstraints.gridy = 6;
495
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
496
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
497
getContentPane().add(labDayOfWeek, gridBagConstraints);
499
labName.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
500
labName.setText("Name:");
501
gridBagConstraints = new java.awt.GridBagConstraints();
502
gridBagConstraints.gridx = 0;
503
gridBagConstraints.gridy = 7;
504
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
505
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
506
getContentPane().add(labName, gridBagConstraints);
508
cmbDayOfWeek.setPreferredSize(new java.awt.Dimension(200, 25));
509
cmbDayOfWeek.addActionListener(
510
new java.awt.event.ActionListener() {
511
public void actionPerformed(java.awt.event.ActionEvent evt) {
512
cmbDayOfWeekActionPerformed(evt);
516
gridBagConstraints = new java.awt.GridBagConstraints();
517
gridBagConstraints.gridx = 1;
518
gridBagConstraints.gridy = 6;
519
gridBagConstraints.gridwidth = 3;
520
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
521
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
522
gridBagConstraints.weightx = 0.9;
523
getContentPane().add(cmbDayOfWeek, gridBagConstraints);
525
txtName.setEditable(false);
526
txtName.setText("All Programmes");
527
txtName.setPreferredSize(new java.awt.Dimension(200, 25));
528
gridBagConstraints = new java.awt.GridBagConstraints();
529
gridBagConstraints.gridx = 1;
530
gridBagConstraints.gridy = 7;
531
gridBagConstraints.gridwidth = 3;
532
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
533
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
534
gridBagConstraints.weightx = 0.9;
535
getContentPane().add(txtName, gridBagConstraints);
537
jPanel1.setLayout(new java.awt.GridBagLayout());
540
butOK.setMinimumSize(new java.awt.Dimension(87, 26));
541
butOK.setPreferredSize(new java.awt.Dimension(87, 26));
542
butOK.addActionListener(
543
new java.awt.event.ActionListener() {
544
public void actionPerformed(java.awt.event.ActionEvent evt) {
545
butOKActionPerformed(evt);
549
gridBagConstraints = new java.awt.GridBagConstraints();
550
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
551
jPanel1.add(butOK, gridBagConstraints);
553
butCancel.setText("Cancel");
554
butCancel.setMinimumSize(new java.awt.Dimension(87, 26));
555
butCancel.setPreferredSize(new java.awt.Dimension(87, 26));
556
butCancel.addActionListener(
557
new java.awt.event.ActionListener() {
558
public void actionPerformed(java.awt.event.ActionEvent evt) {
559
butCancelActionPerformed(evt);
563
gridBagConstraints = new java.awt.GridBagConstraints();
564
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 10);
565
jPanel1.add(butCancel, gridBagConstraints);
567
gridBagConstraints = new java.awt.GridBagConstraints();
568
gridBagConstraints.gridx = 0;
569
gridBagConstraints.gridy = 8;
570
gridBagConstraints.gridwidth = 4;
571
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
572
getContentPane().add(jPanel1, gridBagConstraints);
574
labTimeFormat1.setFont(new java.awt.Font("Dialog", 0, 12));
575
labTimeFormat1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
576
labTimeFormat1.setText("as \"hh:mm\")");
577
gridBagConstraints = new java.awt.GridBagConstraints();
578
gridBagConstraints.gridx = 2;
579
gridBagConstraints.gridy = 4;
580
gridBagConstraints.gridwidth = 2;
581
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
582
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
583
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
584
gridBagConstraints.weightx = 0.4;
585
getContentPane().add(labTimeFormat1, gridBagConstraints);
587
getRootPane().setDefaultButton( butOK );
591
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()
593
setSize(new java.awt.Dimension(400, 300));
594
setLocation((screenSize.width - 400) / 2,
595
(screenSize.height - 300) / 2);
599
* Description of the Method
601
*@param evt Description of the Parameter
603
private void txtTitleActionPerformed(java.awt.event.ActionEvent evt) {
611
* Description of the Method
613
*@param evt Description of the Parameter
615
private void cmbDayOfWeekActionPerformed(java.awt.event.ActionEvent evt) {
621
* Description of the Method
623
*@param evt Description of the Parameter
625
private void txtBeforeActionPerformed(java.awt.event.ActionEvent evt) {
632
* Description of the Method
634
*@param evt Description of the Parameter
636
private void txtAfterActionPerformed(java.awt.event.ActionEvent evt) {
643
* Description of the Method
645
*@param evt Description of the Parameter
647
private void cmbChannelActionPerformed(java.awt.event.ActionEvent evt) {
654
* Description of the Method
656
*@param evt Description of the Parameter
658
private void cmbTitleActionPerformed(java.awt.event.ActionEvent evt) {
665
* Description of the Method
667
*@param evt Description of the Parameter
669
private void butCancelActionPerformed(java.awt.event.ActionEvent evt) {
676
* Description of the Method
678
*@param evt Description of the Parameter
680
private void butOKActionPerformed(java.awt.event.ActionEvent evt) {
687
private javax.swing.JLabel labName;
688
private javax.swing.JPanel jPanel1;
689
private javax.swing.JLabel labChannel;
690
private javax.swing.JLabel labBefore;
691
private javax.swing.JComboBox cmbChannel;
692
private javax.swing.JLabel labBlankFields;
693
private javax.swing.JButton butOK;
694
private javax.swing.JButton butCancel;
695
private javax.swing.JTextField txtName;
696
private javax.swing.JLabel labDayOfWeek;
697
private javax.swing.JLabel labTimeFormat;
698
private javax.swing.JComboBox cmbDayOfWeek;
699
private javax.swing.JTextField txtBefore;
700
private javax.swing.JLabel labAfter;
701
private javax.swing.JTextField txtAfter;
702
private javax.swing.JLabel labTitle;
703
private javax.swing.JTextField txtTitle;
704
private javax.swing.JLabel labTimeFormat1;
705
private javax.swing.JComboBox cmbTitle;
711
private final static SimpleDateFormat dayOfWeekFormat
712
= new SimpleDateFormat("EEEE");