浏览代码

Move PhasePanel to use BetterAutoGrowPanel

Sam Jaffe 5 年之前
父节点
当前提交
32d7022ec3

+ 9 - 12
src/main/lombok/org/leumasjaffe/recipe/view/PhasePanel.java

@@ -22,7 +22,7 @@ import org.jdesktop.swingx.VerticalLayout;
 public class PhasePanel extends JPanel {
 	ForwardingObservableListener<Phase> listener = new ForwardingObservableListener<>();
 
-	@Getter(AccessLevel.PACKAGE) AutoGrowPanel panelSteps;
+	@Getter(AccessLevel.PACKAGE) BetterAutoGrowPanel<StepPanel, Step> panelSteps;
 	
 	public PhasePanel(final Phase phase) {		
 		setLayout(new VerticalLayout(5));
@@ -31,21 +31,18 @@ public class PhasePanel extends JPanel {
 			add(new PreparationPanel(phase));
 		}
 		
-		final List<Step> steps = phase.getCooking();
-		panelSteps = new AutoGrowPanel(StepPanel::new, Step::new,
-				step -> {
-					steps.add(step);
-					listener.setObserved(phase, allChildren(phase));
-				},
-				i -> {
-					steps.remove(i);
-					listener.setObserved(phase, allChildren(phase));
-					ObserverDispatch.notifySubscribers(phase);
-				}, 5, steps.toArray(new Step[0]));
+		panelSteps = new BetterAutoGrowPanel<>(Step::new, StepPanel::new);
+		panelSteps.setGap(5);
 		add(panelSteps);
 		
 		phase.getRest().ifPresent(rest -> add(new RestPanel(rest)));
 
+		panelSteps.setModel(phase.getCooking(), added -> {
+			listener.setObserved(phase, allChildren(phase));
+			if (!added) {
+				ObserverDispatch.notifySubscribers(phase);
+			}
+		});
 		listener.setObserved(phase, allChildren(phase));
 	}
 	

+ 12 - 12
src/main/lombok/org/leumasjaffe/recipe/view/StepPanel.java

@@ -30,7 +30,7 @@ import java.awt.Dimension;
 
 @SuppressWarnings("serial")
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
-public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenable {
+public class StepPanel extends JPanel implements BetterAutoGrowPanel.ChildComponent {
 	ForwardingObservableListener<Step> listener = new ForwardingObservableListener<>();
 	ObservableListener<JTextPane, Step> intructionListener;
 	ObservableListener<JFormattedTextField, Step> durationListener;
@@ -122,24 +122,24 @@ public class StepPanel extends JPanel implements AutoGrowPanel.DocumentListenabl
 	}
 	
 	@Override
-	public void addDocumentListener(DocumentListener dl) {
-		this.txtpnInstructions.getDocument().addDocumentListener(dl);
+	public void removeNotify() {
+		super.removeNotify();
+		ObserverDispatch.unsubscribeAll(listener);
 	}
 
-	@Override
-	public void removeDocumentListener(DocumentListener dl) {
-		this.txtpnInstructions.getDocument().removeDocumentListener(dl);		
-	}
-	
 	@Override
 	public void setListPosition(int zeroIndex) {
 		this.lblIndex.setText("Step " + Integer.toString(zeroIndex + 1));
 		repaint();
 	}
-	
+
 	@Override
-	public void removeNotify() {
-		super.removeNotify();
-		ObserverDispatch.unsubscribeAll(listener);
+	public void addGrowShrinkListener(DocumentListener dl) {
+		this.txtpnInstructions.getDocument().addDocumentListener(dl);
+	}
+
+	@Override
+	public void removeGrowShrinkListener(DocumentListener dl) {
+		this.txtpnInstructions.getDocument().removeDocumentListener(dl);		
 	}
 }