/* * Created by JFormDesigner on Fri Jun 29 14:19:55 CEST 2012 */ package op.care.info; import com.jgoodies.forms.factories.CC; import com.jgoodies.forms.layout.FormLayout; import com.jidesoft.swing.RangeSlider; import com.toedter.calendar.JDateChooser; import op.OPDE; import gui.GUITools; import op.tools.Pair; import op.tools.SYSConst; import org.apache.commons.collections.Closure; import org.joda.time.DateTime; import org.joda.time.Days; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.beans.PropertyChangeEvent; import java.util.Date; /** * @author Torsten Löhr */ public class PnlPeriod extends JPanel { private boolean ignore; private Date min, max, fromTemplate, toTemplate; DateTime dtmin, dtmax; int maximum; private boolean fromTheVeryBeginning; private boolean untilFurtherNotice; private JToggleButton tbTVB, tbUFN; private Closure actionBlock; public PnlPeriod(Date min, Date max, Date fromTemplate, Date toTemplate, Closure actionBlock) { this.fromTheVeryBeginning = fromTemplate.equals(SYSConst.DATE_THE_VERY_BEGINNING); this.untilFurtherNotice = toTemplate.equals(SYSConst.DATE_UNTIL_FURTHER_NOTICE); this.actionBlock = actionBlock; this.min = min; this.max = max;//new Date(Math.min(new Date().getTime(), max.getTime())); // max date is always today this.fromTemplate = fromTemplate; this.toTemplate = toTemplate; dtmin = new DateTime(this.min); dtmax = new DateTime(this.max); initComponents(); initPanel(); } private void btnMaxActionPerformed(ActionEvent e) { slider.setHighValue(maximum); } private void btnBackFromActionPerformed(ActionEvent e) { slider.setLowValue(Math.max(0, slider.getLowValue() - 1)); } private void btnFwdFromActionPerformed(ActionEvent e) { slider.setLowValue(Math.min(slider.getHighValue(), slider.getLowValue() + 1)); } private void btnFwdToActionPerformed(ActionEvent e) { slider.setHighValue(Math.min(maximum, slider.getHighValue() + 1)); } private void btnBackToActionPerformed(ActionEvent e) { slider.setHighValue(Math.max(slider.getLowValue(), slider.getHighValue() - 1)); } private void btnOKActionPerformed(ActionEvent e) { Date from = tbTVB.isSelected() ? SYSConst.DATE_THE_VERY_BEGINNING : jdcVon.getDate(); Date to = tbUFN.isSelected() ? SYSConst.DATE_UNTIL_FURTHER_NOTICE : jdcBis.getDate(); if (from != null && to != null) { DateTime dtFrom = new DateTime(from); DateTime dtTo = new DateTime(to); if (dtmin.isAfter(dtFrom) || dtmax.isBefore(dtTo)) { actionBlock.execute(null); } else { actionBlock.execute(new Pair<Date, Date>(from, to)); } OPDE.debug("accepted min: " + dtmin); OPDE.debug("current fromTemplate: " + dtFrom); OPDE.debug("current toTemplate: " + dtTo); OPDE.debug("accepted max: " + dtmax); } else { actionBlock.execute(null); } } private void btnCancelActionPerformed(ActionEvent e) { actionBlock.execute(null); } private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents panel1 = new JPanel(); btnMin = new JButton(); btnBackFrom = new JButton(); btnFwdFrom = new JButton(); jdcVon = new JDateChooser(); slider = new RangeSlider(); jdcBis = new JDateChooser(); panel2 = new JPanel(); btnBackTo = new JButton(); btnFwdTo = new JButton(); btnMax = new JButton(); pnlTVB = new JPanel(); pnlUFN = new JPanel(); panel3 = new JPanel(); btnCancel = new JButton(); btnOK = new JButton(); //======== this ======== setLayout(new FormLayout( "2*(default, $lcgap), 62dlu, $lcgap, default:grow, $lcgap, 62dlu, 2*($lcgap, default)", "2*(default, $lgap), default, 6dlu, default, $lgap, default")); //======== panel1 ======== { panel1.setLayout(new BoxLayout(panel1, BoxLayout.LINE_AXIS)); //---- btnMin ---- btnMin.setText(null); btnMin.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_start.png"))); btnMin.setContentAreaFilled(false); btnMin.setBorderPainted(false); btnMin.setBorder(null); btnMin.setSelectedIcon(null); btnMin.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_start_pressed.png"))); btnMin.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnMin.addActionListener(e -> btnMinActionPerformed(e)); panel1.add(btnMin); //---- btnBackFrom ---- btnBackFrom.setText(null); btnBackFrom.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_rev.png"))); btnBackFrom.setContentAreaFilled(false); btnBackFrom.setBorderPainted(false); btnBackFrom.setBorder(null); btnBackFrom.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_rev_pressed.png"))); btnBackFrom.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnBackFrom.addActionListener(e -> btnBackFromActionPerformed(e)); panel1.add(btnBackFrom); //---- btnFwdFrom ---- btnFwdFrom.setText(null); btnFwdFrom.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_fwd.png"))); btnFwdFrom.setContentAreaFilled(false); btnFwdFrom.setBorderPainted(false); btnFwdFrom.setBorder(null); btnFwdFrom.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_fwd_pressed.png"))); btnFwdFrom.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnFwdFrom.addActionListener(e -> btnFwdFromActionPerformed(e)); panel1.add(btnFwdFrom); } add(panel1, CC.xy(3, 3)); //---- jdcVon ---- jdcVon.setFont(new Font("Arial", Font.PLAIN, 14)); jdcVon.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); jdcVon.addPropertyChangeListener("date", e -> jdcVonPropertyChange(e)); add(jdcVon, CC.xy(5, 3)); //---- slider ---- slider.setPaintLabels(true); slider.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); slider.addPropertyChangeListener(e -> sliderPropertyChange(e)); add(slider, CC.xy(7, 3)); //---- jdcBis ---- jdcBis.setFont(new Font("Arial", Font.PLAIN, 14)); jdcBis.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); jdcBis.addPropertyChangeListener("date", e -> jdcBisPropertyChange(e)); add(jdcBis, CC.xy(9, 3)); //======== panel2 ======== { panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS)); //---- btnBackTo ---- btnBackTo.setText(null); btnBackTo.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_rev.png"))); btnBackTo.setContentAreaFilled(false); btnBackTo.setBorderPainted(false); btnBackTo.setBorder(null); btnBackTo.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_rev_pressed.png"))); btnBackTo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnBackTo.addActionListener(e -> btnBackToActionPerformed(e)); panel2.add(btnBackTo); //---- btnFwdTo ---- btnFwdTo.setText(null); btnFwdTo.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_fwd.png"))); btnFwdTo.setContentAreaFilled(false); btnFwdTo.setBorderPainted(false); btnFwdTo.setBorder(null); btnFwdTo.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_fwd_pressed.png"))); btnFwdTo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnFwdTo.addActionListener(e -> btnFwdToActionPerformed(e)); panel2.add(btnFwdTo); //---- btnMax ---- btnMax.setText(null); btnMax.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_end.png"))); btnMax.setContentAreaFilled(false); btnMax.setBorderPainted(false); btnMax.setBorder(null); btnMax.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/player_end_pressed.png"))); btnMax.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnMax.addActionListener(e -> btnMaxActionPerformed(e)); panel2.add(btnMax); } add(panel2, CC.xy(11, 3)); //======== pnlTVB ======== { pnlTVB.setLayout(new BoxLayout(pnlTVB, BoxLayout.X_AXIS)); } add(pnlTVB, CC.xywh(3, 5, 3, 1, CC.DEFAULT, CC.FILL)); //======== pnlUFN ======== { pnlUFN.setLayout(new BoxLayout(pnlUFN, BoxLayout.X_AXIS)); } add(pnlUFN, CC.xywh(9, 5, 3, 1, CC.DEFAULT, CC.FILL)); //======== panel3 ======== { panel3.setLayout(new BoxLayout(panel3, BoxLayout.LINE_AXIS)); //---- btnCancel ---- btnCancel.setText(null); btnCancel.setIcon(new ImageIcon(getClass().getResource("/artwork/16x16/cancel.png"))); btnCancel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnCancel.addActionListener(e -> btnCancelActionPerformed(e)); panel3.add(btnCancel); //---- btnOK ---- btnOK.setText(null); btnOK.setIcon(new ImageIcon(getClass().getResource("/artwork/16x16/apply.png"))); btnOK.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); btnOK.addActionListener(e -> btnOKActionPerformed(e)); panel3.add(btnOK); } add(panel3, CC.xywh(3, 7, 9, 1, CC.RIGHT, CC.DEFAULT)); // JFormDesigner - End of component initialization //GEN-END:initComponents } private void initPanel() { ignore = true; // OPDE.debug("min " + min + " max " + max); // OPDE.debug("fromTemplate " + fromTemplate + " toTemplate " + toTemplate); final Date myMax = max.equals(SYSConst.DATE_UNTIL_FURTHER_NOTICE) ? new Date() : max; slider.setRangeDraggable(false); jdcVon.setMinSelectableDate(min); jdcVon.setMaxSelectableDate(toTemplate); jdcVon.setDate(fromTemplate); jdcBis.setMaxSelectableDate(myMax); jdcBis.setMinSelectableDate(fromTemplate); jdcBis.setDate(toTemplate); maximum = Days.daysBetween(new DateTime(min), new DateTime(myMax)).getDays(); int low = Days.daysBetween(new DateTime(min), new DateTime(fromTemplate)).getDays(); int high = Days.daysBetween(new DateTime(min), new DateTime(toTemplate)).getDays(); tbTVB = GUITools.getNiceToggleButton("misc.msg.fromTheVeryBeginning"); tbUFN = GUITools.getNiceToggleButton("misc.msg.untilFurtherNotice"); tbTVB.addItemListener(e -> { btnMin.setEnabled(!tbTVB.isSelected()); btnBackFrom.setEnabled(!tbTVB.isSelected()); btnFwdFrom.setEnabled(!tbTVB.isSelected()); jdcVon.setEnabled(!tbTVB.isSelected()); if (e.getStateChange() != ItemEvent.SELECTED){ jdcVon.setDate(min); } }); tbUFN.addItemListener(e -> { btnMax.setEnabled(!tbUFN.isSelected()); btnFwdTo.setEnabled(!tbUFN.isSelected()); btnBackTo.setEnabled(!tbUFN.isSelected()); jdcBis.setEnabled(!tbUFN.isSelected()); if (e.getStateChange() != ItemEvent.SELECTED){ jdcBis.setDate(myMax); } }); tbTVB.setSelected(fromTheVeryBeginning); tbUFN.setSelected(untilFurtherNotice); tbTVB.setEnabled(min.equals(SYSConst.DATE_THE_VERY_BEGINNING)); tbUFN.setEnabled(max.equals(SYSConst.DATE_UNTIL_FURTHER_NOTICE)); pnlTVB.add(tbTVB); pnlUFN.add(tbUFN); slider.setMinimum(0); slider.setMaximum(maximum); slider.setLowValue(low); slider.setHighValue(high); ignore = false; } private void sliderPropertyChange(PropertyChangeEvent e) { ignore = true; if (e.getPropertyName().equals("lowValue") && !tbTVB.isSelected()) { int val = (Integer) e.getNewValue(); if (val > slider.getMinimum()) { jdcVon.setDate(dtmin.plusDays(val).toDateMidnight().toDate()); // Innerhalb der Grenzen beginnen alle Tage immer um Mitternacht. } else { jdcVon.setDate(min); // Ansonsten genau an der Grenze } } if (e.getPropertyName().equals("highValue") && !tbUFN.isSelected()) { int val = (Integer) e.getNewValue(); if (val < slider.getMaximum()) { jdcBis.setDate(dtmin.plusDays(val + 1).toDateMidnight().toDateTime().minusSeconds(1).toDate()); // Innerhalb der Grenzen enden alle Tage immer um 23:59:59. } else { jdcBis.setDate(max); // Ansonsten genau an der Grenze } } ignore = false; } private void jdcVonPropertyChange(PropertyChangeEvent e) { if (ignore) return; int low = Days.daysBetween(new DateTime(min), new DateTime((Date) e.getNewValue())).getDays(); jdcBis.setMinSelectableDate((Date) e.getNewValue()); slider.setLowValue(low); } private void jdcBisPropertyChange(PropertyChangeEvent e) { if (ignore) return; int high = Days.daysBetween(new DateTime(min), new DateTime((Date) e.getNewValue())).getDays(); jdcVon.setMaxSelectableDate((Date) e.getNewValue()); slider.setHighValue(high); } private void btnMinActionPerformed(ActionEvent e) { slider.setLowValue(0); } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JPanel panel1; private JButton btnMin; private JButton btnBackFrom; private JButton btnFwdFrom; private JDateChooser jdcVon; private RangeSlider slider; private JDateChooser jdcBis; private JPanel panel2; private JButton btnBackTo; private JButton btnFwdTo; private JButton btnMax; private JPanel pnlTVB; private JPanel pnlUFN; private JPanel panel3; private JButton btnCancel; private JButton btnOK; // JFormDesigner - End of variables declaration //GEN-END:variables }