/* * CalendarPane.java * * Created on 23 ��� 2006 �., 12:02 * */ package datechooser.view; import datechooser.beans.DateChooserBean; import datechooser.controller.DateChooseController; import datechooser.model.DateChoose; import datechooser.view.appearance.*; import java.awt.*; import java.awt.event.*; import java.beans.*; import java.text.DateFormat; import java.util.*; import javax.swing.*; import javax.swing.event.*; /** * Date selection panel. DateChooserPanel simply extends it and provides * some simple configuration methods.<br> * ������ ��� ������ ����. ��������������� ��������� ������ ��������� �� * � ������������� ��� ������� ������� ��������� �������. * @author Androsov Vadim * @since 1.0 */ public class CalendarPane extends JPanel implements PropertyChangeListener { private GridPane gp; private AbstractNavigatePane[] navigPanes; private DateChoose model; private Locale locale; private int currentNavigateIndex = 0; public void initialize(DateChoose model, DateChooseController controller) { setPreferredSize(new Dimension(100, 100)); gp = new GridPane(); setLayout(new BorderLayout()); navigPanes = new AbstractNavigatePane[] {new ComboNavigatePane(), new ButtonNavigatePane()}; setNavigateFont(new Font("serif", Font.PLAIN, 11)); setModel(model); gp.setModel(model); setLocale(Locale.getDefault()); gp.setController(controller); add(gp, BorderLayout.CENTER); setCurrentNavigateIndex(0); add(getCurrentNavigPane(), BorderLayout.NORTH); } private AbstractNavigatePane getCurrentNavigPane() { return navigPanes[getCurrentNavigateIndex()]; } private void setAllNavigCurrentModel() { for (int i = 0; i < navigPanes.length; i++) { navigPanes[i].setModel(getModel()); } } public void reInitialize(DateChoose model, DateChooseController controller) { if (gp == null) return; setModel(model); gp.setModel(model); gp.setController(controller); } public CalendarPane(DateChoose model, DateChooseController controller) { initialize(model, controller); } public CalendarPane() { } public DateChoose getModel() { return model; } public void setModel(DateChoose model) { DateChoose oldModel = getModel(); if (getModel() != null) { getModel().removePropertyChangeListener(this); } this.model = model; setAllNavigCurrentModel(); getModel().addPropertyChangeListener(this); firePropertyChange("model", oldModel, model); } public Font getNavigateFont() { return getCurrentNavigPane().getFont(); } public void setNavigateFont(Font font) { Font oldFont = getNavigateFont(); for (int i = 0; i < navigPanes.length; i++) { navigPanes[i].setFont(font); } updateUI(); firePropertyChange(DateChooserBean.PROPERTY_NAVIG_FONT, oldFont, font); } public ViewAppearance getCurrentCellAppearance() { return gp.getAppearance(); } public AppearancesList getAppearancesList() { return gp.getAppearanceList(); } public void setAppearancesList(AppearancesList aList) { AppearancesList oldView = getAppearancesList(); gp.setAppearanceList(aList); firePropertyChange(DateChooserBean.PROPERTY_VIEW, oldView, aList); } public Locale getLocale() { return locale; } public void setLocale(Locale locale) { if ((getLocale() != null) && (getLocale().equals(locale))) return; Locale oldLocale = getLocale(); this.locale = locale; model.setLocale(locale); gp.setLocale(locale); for (AbstractNavigatePane pane : navigPanes) { pane.setLocale(locale); } firePropertyChange(DateChooserBean.PROPERTY_LOCALE, oldLocale, locale); } public int getCurrentNavigateIndex() { return currentNavigateIndex; } public void setCurrentNavigateIndex(int currentNavigateIndex) { int newPaneIndex = 0; if ((currentNavigateIndex >= 0) && (currentNavigateIndex < navigPanes.length)) { newPaneIndex = currentNavigateIndex; } if (newPaneIndex != getCurrentNavigateIndex()) { int oldIndex = getCurrentNavigateIndex(); remove(getCurrentNavigPane()); this.currentNavigateIndex = currentNavigateIndex; add(getCurrentNavigPane(), BorderLayout.NORTH); revalidate(); getCurrentNavigPane().setEnabled(getModel().isEnabled()); firePropertyChange(DateChooserBean.PROPERTY_NAVIG_PANE, oldIndex, newPaneIndex); } } public WeekDaysStyle getWeekStyle() { return gp.getWeekStyle(); } public void setWeekStyle(WeekDaysStyle weekStyle) { WeekDaysStyle oldStyle = getWeekStyle(); gp.setWeekStyle(weekStyle); firePropertyChange(DateChooserBean.PROPERTY_WEEK_STYLE, oldStyle, weekStyle); } public void propertyChange(PropertyChangeEvent evt) { DateChoose model = getModel(); gp.setEnabled(model.isEnabled()); AbstractNavigatePane navig = getCurrentNavigPane(); navig.setNothingSelectEnabled(model.isNothingAllowed()); navig.setEnabled(model.isEnabled()); } public void setGridBackground(Color color) { gp.setBackground(color); } public Color getGridBackground() { return gp.getBackground(); } }