/*
* TV-Browser
* Copyright (C) 04-2003 Martin Oberhauser (darras@users.sourceforge.net)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* CVS information:
* $Date: 2007-03-14 15:13:35 +0100 (Mi, 14 Mrz 2007) $
* $Author: ds10 $
* $Revision: 3224 $
*/
package tvbrowser.extras.searchplugin;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import tvbrowser.core.ChannelList;
import tvbrowser.core.Settings;
import util.settings.PluginPictureSettings;
import util.ui.ChannelListCellRenderer;
import util.ui.Localizer;
import util.ui.SearchFormSettings;
import util.ui.SearchHelper;
import util.ui.UiUtilities;
import util.ui.WindowClosingIf;
import com.jgoodies.forms.builder.ButtonBarBuilder2;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.Sizes;
import devplugin.Channel;
import devplugin.PluginManager;
/**
* A dialog specifically for repetitions. It only shows a simple Input-Form and
* helps the User to focus on the Task.
*/
class RepetitionDialog extends JDialog implements WindowClosingIf {
/**
* The localizer of this class.
*/
private static final util.ui.Localizer mLocalizer = util.ui.Localizer
.getLocalizerFor(RepetitionDialog.class);
/**
* Search for this text
*/
private JTextField mText;
/**
* Search in this channel
*/
private JComboBox mChannelChooser;
/**
* Search in this timespan
*/
private JComboBox mTimeChooser;
/**
* Create the dialog
*
* @param parent
* Parent-Dialog
*/
RepetitionDialog(Window parent) {
this(parent, null);
}
/**
* Create the dialog
*
* @param parent
* Parent-Dialog
* @param channel
* defines the first channel of the channel list
*/
RepetitionDialog(Window parent, Channel channel) {
super(parent);
setModal(true);
createGui(channel);
}
/**
* Create the Gui
* @param channel
* defines the first channel of the channel list
*/
private void createGui(Channel channel) {
setTitle(mLocalizer.msg("title", "Search repetition"));
JPanel panel = (JPanel) getContentPane();
panel.setLayout(new FormLayout("pref, 3dlu, 0dlu:grow",
"pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, fill:5dlu:grow, pref"));
panel.setBorder(Borders.DLU7_BORDER);
CellConstraints cc = new CellConstraints();
panel.add(DefaultComponentFactory.getInstance().createSeparator(
mLocalizer.msg("searchForRepetition", "Search for repetitions")), cc
.xyw(1, 1, 3));
panel.add(new JLabel(mLocalizer.msg("forProgram", "of:")), cc.xy(1, 3));
mText = new JTextField();
panel.add(mText, cc.xy(3, 3));
panel.add(new JLabel(mLocalizer.msg("on", "on:")), cc.xy(1, 5));
final Vector<Object> list = new Vector<Object>();
list.add(mLocalizer.msg("allChannels", "All channels"));
// We need a modify-able list here
List<Channel> channelList = new ArrayList<Channel>(Arrays.asList(ChannelList.getSubscribedChannels()));
if (channel != null) {
// bring the defined channel on the first position
list.add(channel);
channelList.remove(channel);
}
list.addAll(channelList);
mChannelChooser = new JComboBox(list);
mChannelChooser.setRenderer(new ChannelListCellRenderer(true, true));
panel.add(mChannelChooser, cc.xy(3, 5));
panel.add(new JLabel(mLocalizer.msg("when", "when:")), cc.xy(1, 7));
String[] dates = { Localizer.getLocalization(Localizer.I18N_TODAY),
Localizer.getLocalization(Localizer.I18N_TOMORROW),
mLocalizer.msg("oneWeek", "one week"),
mLocalizer.msg("twoWeeks", "two weeks"),
mLocalizer.msg("threeWeeks", "three weeks"),
mLocalizer.msg("allData", "all data") };
mTimeChooser = new JComboBox(dates);
mTimeChooser.setSelectedIndex(SearchPlugin.getInstance()
.getRepetitionTimeSelection());
panel.add(mTimeChooser, cc.xy(3, 7));
JButton stdSearch = new JButton(mLocalizer.ellipsisMsg("more", "More"));
stdSearch.setToolTipText(mLocalizer.msg("standardSearch",
"Open standard search"));
stdSearch.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
SearchPlugin.getInstance().openSearchDialog(mText.getText(), getSearchSettings());
}
});
ButtonBarBuilder2 builder = new ButtonBarBuilder2();
builder.addButton(stdSearch);
builder.addUnrelatedGap();
builder.addGlue();
JButton go = new JButton(mLocalizer.msg("go", "go"));
go.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
search();
}
});
JButton cancel = new JButton(Localizer
.getLocalization(Localizer.I18N_CANCEL));
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
close();
}
});
builder.addButton(new JButton[] { go, cancel });
panel.add(builder.getPanel(), cc.xyw(1, 9, 3));
Settings.layoutWindow("extras.repetitionDialog", this, new Dimension(Sizes
.dialogUnitXAsPixel(220, this), Sizes.dialogUnitYAsPixel(125, this)));
UiUtilities.registerForClosing(this);
getRootPane().setDefaultButton(go);
}
/**
* do the search
*/
private void search() {
setVisible(false);
SearchPlugin.getInstance().setRepetitionTimeSelection(
mTimeChooser.getSelectedIndex());
SearchFormSettings settings = getSearchSettings();
SearchHelper.search(getParent(), new PluginPictureSettings(
PluginPictureSettings.ALL_PLUGINS_SETTINGS_TYPE), settings, true);
}
private SearchFormSettings getSearchSettings() {
int days = getDays();
SearchFormSettings settings = new SearchFormSettings(mText.getText());
settings.setNrDays(days);
settings.setSearchIn(SearchFormSettings.SEARCH_IN_TITLE);
settings.setSearcherType(PluginManager.SEARCHER_TYPE_EXACTLY);
settings.setCaseSensitive(false);
if (mChannelChooser.getSelectedIndex() > 0) {
settings.setChannels(new Channel[] { (Channel) mChannelChooser
.getSelectedItem() });
}
return settings;
}
private int getDays() {
int days = 1;
switch (mTimeChooser.getSelectedIndex()) {
case 0:
days = 0;
break;
case 1:
days = 1;
break;
case 2:
days = 7;
break;
case 3:
days = 14;
break;
case 4:
days = 21;
break;
default:
days = -1;
}
return days;
}
/**
* Set the text for the search
*
* @param text
* text to search
*/
public void setPatternText(String text) {
mText.setText(text);
}
/**
* Close the dialog
*/
public void close() {
setVisible(false);
}
}