| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package org.leumasjaffe.recipe.view;
- import javax.swing.JPanel;
- import org.leumasjaffe.observer.ObservableController;
- import org.leumasjaffe.observer.ObservableListener;
- import org.leumasjaffe.observer.ObserverDispatch;
- import org.leumasjaffe.recipe.model.Rest;
- import lombok.AccessLevel;
- import lombok.experimental.FieldDefaults;
- import java.awt.GridBagLayout;
- import javax.swing.JComboBox;
- import javax.swing.JFormattedTextField;
- import javax.swing.JLabel;
- import java.awt.GridBagConstraints;
- import java.awt.Insets;
- @SuppressWarnings("serial")
- @FieldDefaults(level=AccessLevel.PRIVATE)
- public class RestPanel extends JPanel {
- ObservableListener<JFormattedTextField, Rest> durationController;
- ObservableListener<JFormattedTextField, Rest> upToController;
- JComboBox<Rest.Where> jcbLocation;
- DurationPanel panelDuration;
- DurationPanel panelUpTo;
-
- // TODO
- Rest model;
- public RestPanel() {
- GridBagLayout gridBagLayout = new GridBagLayout();
- gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
- gridBagLayout.rowHeights = new int[]{0, 0};
- gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
- gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
- setLayout(gridBagLayout);
-
- JLabel lblRest = new JLabel("Rest");
- GridBagConstraints gbc_lblRest = new GridBagConstraints();
- gbc_lblRest.insets = new Insets(0, 0, 0, 5);
- gbc_lblRest.gridx = 0;
- gbc_lblRest.gridy = 0;
- add(lblRest, gbc_lblRest);
-
- jcbLocation = new JComboBox<>(Rest.Where.values());
- GridBagConstraints gbc_lblLocation = new GridBagConstraints();
- gbc_lblLocation.insets = new Insets(0, 0, 0, 5);
- gbc_lblLocation.gridx = 1;
- gbc_lblLocation.gridy = 0;
- add(jcbLocation, gbc_lblLocation);
-
- panelDuration = new DurationPanel("");
- GridBagConstraints gbc_panelDuration = new GridBagConstraints();
- gbc_panelDuration.gridx = 2;
- gbc_panelDuration.gridy = 0;
- add(panelDuration, gbc_panelDuration);
- panelUpTo = new DurationPanel("and up to");
- GridBagConstraints gbc_panelUpTo = new GridBagConstraints();
- gbc_panelUpTo.gridx = 3;
- gbc_panelUpTo.gridy = 0;
- add(panelUpTo, gbc_panelUpTo);
- jcbLocation.addItemListener(e -> {
- panelDuration.txtTime.setEditable(isResting());
- panelUpTo.txtTime.setEditable(isResting());
- this.model.setWhere(Rest.Where.class.cast(e.getItem()));
- });
- durationController = ObservableController.from(panelDuration.txtTime,
- Rest::getDuration, Rest::setDuration);
- upToController = ObservableController.from(panelUpTo.txtTime,
- Rest::getUpTo, Rest::setUpTo);
-
- panelDuration.txtTime.setEditable(false);
- panelUpTo.txtTime.setEditable(false);
- }
- public RestPanel(final Rest rest) {
- this();
- setModel(rest);
- }
-
- public void setModel(final Rest rest) {
- this.model = rest;
- jcbLocation.setSelectedItem(rest.getWhere());
- durationController.setObserved(rest);
- upToController.setObserved(rest);
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- setVisible(enabled || isResting());
- jcbLocation.setEnabled(enabled);
- panelDuration.txtTime.setEditable(enabled && isResting());
- panelUpTo.txtTime.setEditable(enabled && isResting());
- }
-
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(durationController);
- }
- private boolean isResting() {
- return !jcbLocation.getSelectedItem().equals(Rest.Where.NONE);
- }
- }
|