|
|
@@ -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));
|