| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package org.leumasjaffe.recipe.view;
- import java.util.ArrayList;
- import java.util.List;
- import javax.swing.JPanel;
- import org.leumasjaffe.observer.ForwardingObservableListener;
- import org.leumasjaffe.observer.Observable;
- import org.leumasjaffe.observer.ObserverDispatch;
- import org.leumasjaffe.recipe.model.Phase;
- import org.leumasjaffe.recipe.model.Step;
- import org.leumasjaffe.recipe.viewmodel.ScaleFactor;
- import lombok.AccessLevel;
- import lombok.Getter;
- import lombok.experimental.FieldDefaults;
- import org.jdesktop.swingx.VerticalLayout;
- @SuppressWarnings("serial")
- @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
- public class PhasePanel extends JPanel {
- ForwardingObservableListener<Phase> listener = new ForwardingObservableListener<>();
- PreparationPanel panelPrep;
- RestPanel panelRest;
- @Getter(AccessLevel.PACKAGE) AutoGrowPanel<StepPanel, Step> panelSteps;
-
- // TODO Re-configure to support this(); setModel(phase); pattern.
- public PhasePanel(final Phase phase, final ScaleFactor scale) {
- setLayout(new VerticalLayout(5));
-
- panelPrep = new PreparationPanel(phase, scale);
- add(panelPrep);
-
- panelSteps = new AutoGrowPanel<>(Step::new, s -> new StepPanel(s, scale));
- panelSteps.setGap(5);
- add(panelSteps);
-
- panelRest = new RestPanel(phase.getRest());
- add(panelRest);
- panelSteps.setModel(phase.getCooking(), added -> {
- listener.setObserved(phase, allChildren(phase));
- if (!added) {
- ObserverDispatch.notifySubscribers(phase);
- }
- });
- listener.setObserved(phase, allChildren(phase));
- }
-
- private static List<Observable> allChildren(Phase phase) {
- List<Observable> children = new ArrayList<>(phase.getCooking());
- children.add(phase.getPreparation());
- children.add(phase.getRest());
- return children;
- }
-
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- panelPrep.setEnabled(enabled);
- panelSteps.setEnabled(enabled);
- panelRest.setEnabled(enabled);
- }
-
- @Override
- public void removeNotify() {
- super.removeNotify();
- ObserverDispatch.unsubscribeAll(listener);
- }
- }
|