sync edit menu checkbox state with the selected shape
This commit is contained in:
@@ -2,21 +2,27 @@ package ovh.gasser.newshapes;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ovh.gasser.newshapes.attributes.ColorAttributes;
|
||||
import ovh.gasser.newshapes.shapes.SCircle;
|
||||
import ovh.gasser.newshapes.shapes.SCollection;
|
||||
import ovh.gasser.newshapes.shapes.SRectangle;
|
||||
import ovh.gasser.newshapes.shapes.Shape;
|
||||
import ovh.gasser.newshapes.ui.ShapesView;
|
||||
import ovh.gasser.newshapes.ui.menu.MenuAddListener;
|
||||
import ovh.gasser.newshapes.ui.menu.MenuEditListener;
|
||||
import ovh.gasser.newshapes.ui.listeners.MenuAddListener;
|
||||
import ovh.gasser.newshapes.ui.listeners.MenuEditListener;
|
||||
import ovh.gasser.newshapes.ui.listeners.SelectionListener;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.Optional;
|
||||
|
||||
public class App {
|
||||
private final static Logger logger = LoggerFactory.getLogger(App.class);
|
||||
public static final Dimension WIN_SIZE = new Dimension(800, 600);
|
||||
private SCollection model;
|
||||
private JCheckBoxMenuItem editFill;
|
||||
private JCheckBoxMenuItem editBorder;
|
||||
|
||||
private App() throws HeadlessException {
|
||||
final JFrame frame = new JFrame("Reactive shapes");
|
||||
@@ -35,6 +41,13 @@ public class App {
|
||||
frame.setVisible(true);
|
||||
|
||||
this.buildMenuBar(frame, view);
|
||||
|
||||
view.addSelectionChangeListener(new SelectionListener() {
|
||||
@Override
|
||||
public void onSelectionChanged(Iterable<Shape> selectedShapes) {
|
||||
updateMenuState(selectedShapes);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void buildModel() {
|
||||
@@ -94,8 +107,8 @@ public class App {
|
||||
JMenuItem editColor = new JMenuItem("Change color");
|
||||
JMenuItem editBorderColor = new JMenuItem("Change border color");
|
||||
JMenuItem deleteItem = new JMenuItem("Delete");
|
||||
JCheckBoxMenuItem editFill = new JCheckBoxMenuItem("Fill Shape");
|
||||
JCheckBoxMenuItem editBorder = new JCheckBoxMenuItem("Draw border");
|
||||
editFill = new JCheckBoxMenuItem("Fill Shape");
|
||||
editBorder = new JCheckBoxMenuItem("Draw border");
|
||||
editColor.addActionListener(editListener);
|
||||
editBorderColor.addActionListener(editListener);
|
||||
deleteItem.addActionListener(editListener);
|
||||
@@ -111,6 +124,34 @@ public class App {
|
||||
return menuEdit;
|
||||
}
|
||||
|
||||
private void updateMenuState(Iterable<Shape> selectedShapes) {
|
||||
boolean hasAttributes = false;
|
||||
boolean allFilled = true;
|
||||
boolean allStroked = true;
|
||||
|
||||
for (Shape s : selectedShapes) {
|
||||
ColorAttributes attrs = (ColorAttributes) s.getAttributes(ColorAttributes.ID);
|
||||
if (attrs != null) {
|
||||
hasAttributes = true;
|
||||
allFilled = allFilled && attrs.filled;
|
||||
allStroked = allStroked && attrs.stroked;
|
||||
}
|
||||
}
|
||||
|
||||
updateMenuItem(editFill, hasAttributes, allFilled);
|
||||
updateMenuItem(editBorder, hasAttributes, allStroked);
|
||||
}
|
||||
|
||||
private void updateMenuItem(JCheckBoxMenuItem menuItem, boolean hasAttributes, boolean allSelected) {
|
||||
if (!hasAttributes) {
|
||||
menuItem.setSelected(false);
|
||||
menuItem.setEnabled(false);
|
||||
} else {
|
||||
menuItem.setSelected(allSelected);
|
||||
menuItem.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(App::new);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user