Ver Fonte

Grant the ability to add new phases.

Sam Jaffe há 5 anos atrás
pai
commit
03c6293f02

+ 34 - 0
src/main/lombok/org/leumasjaffe/recipe/controller/AddPhaseAction.java

@@ -0,0 +1,34 @@
+package org.leumasjaffe.recipe.controller;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JPanel;
+import javax.swing.JSeparator;
+
+import org.leumasjaffe.recipe.model.Element;
+import org.leumasjaffe.recipe.model.Phase;
+import org.leumasjaffe.recipe.view.PhasePanel;
+
+import lombok.AccessLevel;
+import lombok.RequiredArgsConstructor;
+import lombok.Setter;
+import lombok.experimental.FieldDefaults;
+import lombok.experimental.NonFinal;
+
+@RequiredArgsConstructor
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class AddPhaseAction implements ActionListener {
+	JPanel view;
+	@NonFinal @Setter Element model = null;
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		Phase newPhase = new Phase();
+		this.model.getPhases().add(newPhase);
+		view.add(new PhasePanel(newPhase));
+		view.add(new JSeparator());
+		view.revalidate();
+	}
+
+}

+ 24 - 6
src/main/lombok/org/leumasjaffe/recipe/view/ElementPanel.java

@@ -8,6 +8,7 @@ import org.leumasjaffe.observer.ObservableController;
 import org.leumasjaffe.observer.ObservableListener;
 import org.leumasjaffe.observer.ObserverDispatch;
 import org.leumasjaffe.recipe.model.Phase;
+import org.leumasjaffe.recipe.controller.AddPhaseAction;
 import org.leumasjaffe.recipe.model.Element;
 
 import lombok.AccessLevel;
@@ -28,6 +29,7 @@ import java.awt.Component;
 import java.awt.Dimension;
 
 import javax.swing.Box;
+import javax.swing.JButton;
 
 @SuppressWarnings("serial")
 @FieldDefaults(level=AccessLevel.PRIVATE)
@@ -37,10 +39,11 @@ public class ElementPanel extends JScrollPane implements AutoGrowPanel.ChildComp
 	ObservableListener<CollatedDurationPanel, Element> durationListener;
 
 	@Getter(AccessLevel.PACKAGE) JTextField txtName;
+	AddPhaseAction addPhase;
 	JPanel panelViewPort;
-
+	
 	public ElementPanel() {
-		setPreferredSize(new Dimension(500, 450));
+		setPreferredSize(new Dimension(600, 450));
 
 		setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
 		setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
@@ -48,9 +51,9 @@ public class ElementPanel extends JScrollPane implements AutoGrowPanel.ChildComp
 		JPanel panelColumnHeader = new JPanel();
 		setColumnHeaderView(panelColumnHeader);
 		GridBagLayout gbl_panelColumnHeader = new GridBagLayout();
-		gbl_panelColumnHeader.columnWidths = new int[]{0, 0, 0, 0};
+		gbl_panelColumnHeader.columnWidths = new int[]{0, 0, 0, 0, 0};
 		gbl_panelColumnHeader.rowHeights = new int[]{0, 0};
-		gbl_panelColumnHeader.columnWeights = new double[]{0.0, 1.0, 0.0, Double.MIN_VALUE};
+		gbl_panelColumnHeader.columnWeights = new double[]{0.0, 0.0, 1.0, 0.0, Double.MIN_VALUE};
 		gbl_panelColumnHeader.rowWeights = new double[]{0.0, Double.MIN_VALUE};
 		panelColumnHeader.setLayout(gbl_panelColumnHeader);
 		
@@ -62,16 +65,26 @@ public class ElementPanel extends JScrollPane implements AutoGrowPanel.ChildComp
 		gbc_txtName.gridy = 0;
 		panelColumnHeader.add(txtName, gbc_txtName);
 		
+		JButton btnAdd = new JButton("+");
+		btnAdd.setToolTipText("Add new phase");
+		btnAdd.setPreferredSize(new Dimension(17, 17));
+		btnAdd.setMargin(new Insets(0, 0, 0, 0));
+		GridBagConstraints gbc_btnAdd = new GridBagConstraints();
+		gbc_btnAdd.insets = new Insets(0, 0, 0, 5);
+		gbc_btnAdd.gridx = 1;
+		gbc_btnAdd.gridy = 0;
+		panelColumnHeader.add(btnAdd, gbc_btnAdd);
+		
 		Component horizontalGlue = Box.createHorizontalGlue();
 		GridBagConstraints gbc_horizontalGlue = new GridBagConstraints();
 		gbc_horizontalGlue.insets = new Insets(0, 0, 0, 5);
-		gbc_horizontalGlue.gridx = 1;
+		gbc_horizontalGlue.gridx = 2;
 		gbc_horizontalGlue.gridy = 0;
 		panelColumnHeader.add(horizontalGlue, gbc_horizontalGlue);
 		
 		CollatedDurationPanel panelDuration = new CollatedDurationPanel();
 		GridBagConstraints gbc_panelDuration = new GridBagConstraints();
-		gbc_panelDuration.gridx = 2;
+		gbc_panelDuration.gridx = 3;
 		gbc_panelDuration.gridy = 0;
 		panelColumnHeader.add(panelDuration, gbc_panelDuration);
 
@@ -79,6 +92,9 @@ public class ElementPanel extends JScrollPane implements AutoGrowPanel.ChildComp
 		setViewportView(panelViewPort);
 		panelViewPort.setLayout(new VerticalLayout(5));
 		
+		addPhase = new AddPhaseAction(panelViewPort);
+		btnAdd.addActionListener(addPhase);
+
 		nameController = ObservableController.from(txtName,
 				Element::getName, Element::setName);
 		durationListener = new ObservableListener<>(panelDuration,
@@ -91,6 +107,8 @@ public class ElementPanel extends JScrollPane implements AutoGrowPanel.ChildComp
 	}
 	
 	public void setModel(final Element element) {
+		addPhase.setModel(element);
+		
 		panelViewPort.removeAll();
 		for (final Phase phase : element.getPhases()) {
 			panelViewPort.add(new PhasePanel(phase));