package org.openslx.dozmod.gui.wizard.layout;
import java.awt.Dimension;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.text.DateFormatter;
import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.WizardPage;
import org.openslx.dozmod.util.DateLabelFormatter;
@SuppressWarnings("serial")
public abstract class LectureCreationPageLayout extends WizardPage {
protected final JTextField lectureNameTextField;
protected final JTextArea descriptionText;
protected final JDatePickerImpl startDate;
protected final JDatePickerImpl endDate;
protected final JSpinner startTime;
protected final JSpinner endTime;
private static final Properties pickerStrings = new Properties();
static {
pickerStrings.put("text.today", "Heute");
pickerStrings.put("text.month", "Monat");
pickerStrings.put("text.year", "Jahr");
}
/**
* Page for creating lectures
*
* @param editExistingLecture whether to edit existing lecture or create new
* one
*/
public LectureCreationPageLayout(Wizard wizard, String title) {
super(wizard, title);
setDescription("Geben Sie bitte einen aussagekräftigen Namen für die neue Veranstaltung ein");
GridManager grid = new GridManager(this, 3);
// lecture name
lectureNameTextField = new JTextField();
grid.add(new QLabel("Veranstaltungsname"));
grid.add(lectureNameTextField, 2).fill(true, false).expand(true, false);
grid.nextRow();
descriptionText = new JTextArea(3, 50);
descriptionText.setLineWrap(true);
descriptionText.setWrapStyleWord(true);
JScrollPane descPane = new JScrollPane(descriptionText, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
descriptionText.setMinimumSize(new Dimension(0, 60));
descPane.setMinimumSize(descriptionText.getMinimumSize());
grid.add(new QLabel("Beschreibung"));
grid.add(descPane, 2).fill(true, false).expand(true, false);
grid.nextRow();
// Start date/time
startDate = new JDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings),
new DateLabelFormatter());
startTime = makeTimeSpinner(0, 0);
grid.add(new QLabel("Startdatum"));
grid.add(startDate).fill(true, false).expand(true, false);
grid.add(startTime);
grid.nextRow();
endDate = new JDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings),
new DateLabelFormatter());
endTime = makeTimeSpinner(23, 59);
grid.add(new QLabel("Enddatum"));
grid.add(endDate).fill(true, false).expand(true, false);
grid.add(endTime);
grid.nextRow();
grid.finish(true);
}
private JSpinner makeTimeSpinner(int h, int m) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, h); // 24 == 12 PM == 00:00:00
calendar.set(Calendar.MINUTE, m);
calendar.set(Calendar.SECOND, 0);
SpinnerDateModel model = new SpinnerDateModel();
model.setValue(calendar.getTime());
JSpinner spinner = new JSpinner(model);
JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm");
DateFormatter formatter = (DateFormatter) editor.getTextField().getFormatter();
formatter.setAllowsInvalid(false); // this makes what you want
formatter.setOverwriteMode(true);
spinner.setEditor(editor);
return spinner;
}
}