Java tutorial
/* * CapturePlugin by Andreas Hessel (Vidrec@gmx.de), Bodo Tasche * * 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: * $RCSfile$ * $Source$ * $Date: 2007-01-13 22:08:02 +0100 (Sa, 13 Jan 2007) $ * $Author: ds10 $ * $Revision: 3016 $ */ package captureplugin.drivers.utils; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Calendar; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import util.ui.EnhancedPanelBuilder; import util.ui.Localizer; import util.ui.ProgramList; import util.ui.ProgramRangeSelectionPanel; import captureplugin.CapturePlugin; import com.jgoodies.forms.builder.ButtonBarBuilder2; import com.jgoodies.forms.factories.Borders; import com.jgoodies.forms.layout.CellConstraints; import devplugin.Program; /** * A Dialog that lets the user choose start/end time of the * recording */ public class ProgramTimeDialog extends JDialog { /** Translator */ private static final Localizer mLocalizer = Localizer.getLocalizerFor(ProgramTimeDialog.class); /** ProgramTime*/ private ProgramTime mPrgTime; /** Start-Time*/ private TimeDateSpinner mStart; /** End-Time */ private TimeDateSpinner mEnd; /** Title-Input */ private JTextField mTitle; private boolean mEndDateChanging; private boolean mProgramSelectionChanging; /** * Crate the Dialog * @param parent Parent-Frame * @param prgTime ProgramTime * @param editTitle is the Title editable? */ public ProgramTimeDialog(Window parent, ProgramTime prgTime, boolean editTitle) { super(parent); setModal(true); mPrgTime = prgTime; createGui(editTitle); } public ProgramTimeDialog(Window parent, ProgramTime time, boolean editTitle, String additionalText, JComponent additionalComponent) { super(parent); setModal(true); mPrgTime = time; createGui(editTitle, additionalText, additionalComponent); } /** * Create the GUI * @param titleEditable is the Title editable ? */ private void createGui(final boolean titleEditable) { createGui(titleEditable, null, null); } /** * Create the GUI * @param titleEditable is the Title editable ? */ private void createGui(final boolean titleEditable, final String additionalText, final JComponent additionalComponent) { /* calculate the post time for selection with program selection panel */ Calendar programEnd = mPrgTime.getProgram().getDate().getCalendar(); programEnd.set(Calendar.HOUR_OF_DAY, mPrgTime.getProgram().getHours()); programEnd.set(Calendar.MINUTE, mPrgTime.getProgram().getMinutes()); if (mPrgTime.getProgram().getLength() <= 0) { programEnd.add(Calendar.MINUTE, 1); } else { programEnd.add(Calendar.MINUTE, mPrgTime.getProgram().getLength()); } programEnd.set(Calendar.SECOND, 0); final int postTime = (int) ((mPrgTime.getEndAsCalendar().getTimeInMillis() - programEnd.getTimeInMillis() + 1000) / 60000); setTitle(mLocalizer.msg("SetTime", "Set Time")); JPanel content = (JPanel) getContentPane(); content.setBorder(Borders.DIALOG_BORDER); content.setLayout(new BorderLayout()); EnhancedPanelBuilder panel = new EnhancedPanelBuilder("2dlu,default,5dlu,default:grow"); CellConstraints cc = new CellConstraints(); if (titleEditable) { panel.addParagraph(mLocalizer.msg("Title", "Title")); mTitle = new JTextField(mPrgTime.getTitle()); panel.addRow(); panel.add(mTitle, cc.xyw(2, panel.getRow(), panel.getColumnCount() - 1)); } panel.addParagraph(mLocalizer.msg("Times", "Times")); panel.addRow(); panel.add(new JLabel(mLocalizer.msg("StartTime", "Start time")), cc.xy(2, panel.getRow())); mStart = new TimeDateSpinner(mPrgTime.getStart()); panel.add(mStart, cc.xy(4, panel.getRow())); panel.addRow(); panel.add(new JLabel(mLocalizer.msg("EndTime", "End time")), cc.xy(2, panel.getRow())); mEnd = new TimeDateSpinner(mPrgTime.getEnd()); panel.add(mEnd, cc.xy(4, panel.getRow())); if (mPrgTime.getProgram().getLength() <= 0) { mEnd.setSpinnerBackground(new Color(255, 153, 153)); } if (additionalText != null) { panel.addParagraph(additionalText); panel.addRow(); panel.add(additionalComponent, cc.xyw(2, panel.getRow(), panel.getColumnCount() - 1)); } final ProgramRangeSelectionPanel programSelection = ProgramRangeSelectionPanel .createPanel(mPrgTime.getProgram(), (short) 6); panel.addParagraph(mLocalizer.msg("programSelection", "Program selection")); panel.addRow(); panel.add(programSelection, cc.xyw(2, panel.getRow(), panel.getColumnCount() - 1)); programSelection.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { if (!e.getValueIsAdjusting()) { /* prevent concurrent changing of end date */ if (!mEndDateChanging) { mProgramSelectionChanging = true; Program[] progs = ((ProgramList) e.getSource()).getSelectedPrograms(); if (progs != null) { Program prog = progs[progs.length - 1]; Calendar c = Calendar.getInstance(); c.setTimeInMillis(prog.getDate().getCalendar().getTimeInMillis()); c.set(Calendar.HOUR_OF_DAY, prog.getHours()); c.set(Calendar.MINUTE, prog.getMinutes()); if (prog.getLength() <= 0) { c.add(Calendar.MINUTE, 1); } else { c.add(Calendar.MINUTE, prog.getLength()); } c.set(Calendar.SECOND, 0); c.add(Calendar.MINUTE, postTime); mEnd.setValue(c.getTime()); mProgramSelectionChanging = false; } } } } }); mEnd.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { try { /* prevent concurrent changing of end date */ if (!mProgramSelectionChanging) { mEndDateChanging = true; programSelection.setEndDate(mEnd.getDate()); mEndDateChanging = false; } } catch (Throwable t) { t.printStackTrace(); } } }); content.add(panel.getPanel(), BorderLayout.CENTER); ButtonBarBuilder2 btPanel = new ButtonBarBuilder2(); btPanel.setBorder(Borders.DLU4_BORDER); JButton ok = new JButton(Localizer.getLocalization(Localizer.I18N_OK)); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mPrgTime.setStart(mStart.getDate()); mPrgTime.setEnd(mEnd.getDate()); if (titleEditable) { mPrgTime.setTitle(mTitle.getText()); } setVisible(false); } }); btPanel.addGlue(); JButton cancel = new JButton(Localizer.getLocalization(Localizer.I18N_CANCEL)); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mPrgTime = null; setVisible(false); } }); btPanel.addButton(ok, cancel); getRootPane().setDefaultButton(ok); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { mPrgTime = null; } }); content.add(btPanel.getPanel(), BorderLayout.SOUTH); CapturePlugin.getInstance().layoutWindow("programTimeDialog", this, new Dimension(300, 270)); } /** * Get the ProgramTime * @return ProgramTime */ public ProgramTime getPrgTime() { return mPrgTime; } }