Dépôt officiel du code source de l'ERP OpenConcerto
Rev 150 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.jopencalendar.ui;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.print.PageFormat;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class CalendarWithToolBar extends JPanel {
private final WeekView weekView;
private final JSpinner spinWeek;
private final JSpinner spinYear;
private final DatePicker picker;
private String title;
final JScrollPane contentPane = new JScrollPane();
public CalendarWithToolBar(JCalendarItemProvider manager) {
this(manager, false);
}
public CalendarWithToolBar(JCalendarItemProvider manager, boolean showPrintButton) {
this.weekView = new WeekView(manager);
JPanel toolbar = new JPanel();
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));
Calendar cal = Calendar.getInstance();
int week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
JButton bPrevious = new JButton(new ImageIcon(this.getClass().getResource("left.png")));
JButton bNext = new JButton(new ImageIcon(this.getClass().getResource("right.png")));
configureButton(bPrevious);
configureButton(bNext);
toolbar.add(bPrevious);
toolbar.add(bNext);
bNext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addWeek(1);
}
});
bPrevious.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addWeek(-1);
}
});
toolbar.add(new JLabel("Semaine"));
spinWeek = new JSpinner(new SpinnerNumberModel(week, 1, 53, 1));
toolbar.add(spinWeek);
toolbar.add(new JLabel(" de "));
spinYear = new JSpinner(new SpinnerNumberModel(year, 1000, year + 20, 1));
toolbar.add(spinYear);
//
this.picker = new DatePicker(false);
toolbar.add(picker);
//
final JSlider zoomSlider = createZoomSlider(this.weekView);
toolbar.add(new JLabel(" Zoom"));
toolbar.add(zoomSlider);
if (showPrintButton) {
final JButton jButton = new JButton("Imprimer");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
final PrintJComponentAction a = new PrintJComponentAction(CalendarWithToolBar.this.getContentPane(), PageFormat.LANDSCAPE, CalendarWithToolBar.this.title);
a.actionPerformed(arg0);
}
});
toolbar.add(jButton);
}
JButton reloadButton = new JButton(new ImageIcon(this.getClass().getResource("auto.png")));
configureButton(reloadButton);
toolbar.add(reloadButton);
reloadButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
reload();
}
});
this.setLayout(new GridBagLayout());
//
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.weightx = 1;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(toolbar, c);
c.gridy++;
this.add(new JSeparator(JSeparator.HORIZONTAL), c);
c.gridy++;
c.fill = GridBagConstraints.BOTH;
c.weighty = 1;
contentPane.setBorder(BorderFactory.createEmptyBorder());
contentPane.setOpaque(false);
contentPane.setColumnHeaderView(new WeekViewHeader(weekView));
contentPane.setViewportView(weekView);
contentPane.getViewport().setBackground(Color.WHITE);
final MouseWheelListener[] l = contentPane.getMouseWheelListeners();
for (int i = 0; i < l.length; i++) {
MouseWheelListener string = l[i];
contentPane.removeMouseWheelListener(string);
}
contentPane.addMouseWheelListener(new MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
weekView.mouseWheelMoved(e, l);
}
});
this.add(contentPane, c);
final int value = 300;
contentPane.getVerticalScrollBar().setValue(value);
weekView.loadWeek(week, year, false);
final ChangeListener listener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Calendar c = getCurrentDate();
picker.setDate(c.getTime());
weekView.loadWeek(getWeek(), getYear(), false);
}
};
spinWeek.addChangeListener(listener);
spinYear.addChangeListener(listener);
picker.addPropertyChangeListener("value", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getNewValue() != null) {
final Date d = (Date) evt.getNewValue();
final Calendar c = Calendar.getInstance();
c.setTime(d);
final int y = c.get(Calendar.YEAR);
final int w = c.get(Calendar.WEEK_OF_YEAR);
spinWeek.removeChangeListener(listener);
spinYear.removeChangeListener(listener);
spinYear.setValue(y);
spinWeek.setValue(w);
spinWeek.addChangeListener(listener);
spinYear.addChangeListener(listener);
weekView.loadWeek(getWeek(), getYear(), false);
}
}
});
}
public static JSlider createZoomSlider(final MultipleDayView mdview) {
final JSlider zoomSlider = new JSlider(1, 10, 1);
zoomSlider.setSnapToTicks(true);
zoomSlider.setMajorTickSpacing(1);
zoomSlider.setPaintTicks(true);
zoomSlider.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
mdview.setZoom(zoomSlider.getValue());
}
});
mdview.addPropertyChangeListener("zoom", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
zoomSlider.setValue(((Number) evt.getNewValue()).intValue());
}
});
return zoomSlider;
}
protected void addWeek(int i) {
Calendar c = getCurrentDate();
c.add(Calendar.DAY_OF_YEAR, i * 7);
final int year = c.get(Calendar.YEAR);
final int week = c.get(Calendar.WEEK_OF_YEAR);
spinYear.setValue(year);
spinWeek.setValue(week);
}
public Calendar getCurrentDate() {
Calendar c = Calendar.getInstance();
c.clear();
c.set(Calendar.YEAR, getYear());
c.set(Calendar.WEEK_OF_YEAR, getWeek());
return c;
}
public final void setCurrentDate(final Calendar c) {
this.setCurrentDate(c.getTime());
}
public final void setCurrentDate(final Date d) {
this.picker.setDate(d);
}
private void configureButton(JButton b) {
b.setOpaque(false);
b.setBorderPainted(false);
b.setFocusPainted(false);
b.setContentAreaFilled(false);
b.setMargin(new Insets(1, 5, 1, 5));
}
public void reload() {
weekView.reload();
}
public int getWeek() {
return ((Number) spinWeek.getValue()).intValue();
}
public int getYear() {
return ((Number) spinYear.getValue()).intValue();
}
public WeekView getWeekView() {
return weekView;
}
public void setTitle(String title) {
this.title = title;
}
public void scrollTo(int hour) {
contentPane.getVerticalScrollBar().setValue(hour * weekView.getRowHeight());
}
public JScrollPane getContentPane() {
return contentPane;
}
}