diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java index c7c5976b..c3bc678a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/gui/MainFrame.java @@ -50,7 +50,7 @@ public class MainFrame extends JFrame implements IView { private CanvasPlugin canvasPlugin; public MainFrame() { - super("DIYLC4"); + super("DIYLC 3"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setPreferredSize(new Dimension(800, 600)); createBasePanels(); @@ -59,7 +59,7 @@ public class MainFrame extends JFrame implements IView { this.presenter = new Presenter(this); - setTitle(getTitle() + " " + presenter.getCurrentVersionNumber()); + setTitle(getTitle() + " v." + presenter.getCurrentVersionNumber()); presenter.installPlugin(new ToolBox()); presenter.installPlugin(new FileManager()); diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java index 7dbca062..5c79d134 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/presenter/Presenter.java @@ -427,7 +427,7 @@ public class Presenter implements IPlugInPort { if (components.isEmpty()) { selectedComponents.clear(); } else { - IDIYComponent component = components.get(0); + IDIYComponent component = components.get(components.size() - 1); // If ctrl is pressed just toggle the component under mouse // cursor. if (ctrlDown) { @@ -451,10 +451,11 @@ public class Presenter implements IPlugInPort { public void mouseMoved(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown) { Map, Set> components = new HashMap, Set>(); Point scaledPoint = scalePoint(point); - for (IDIYComponent component : currentProject.getComponents()) { - // Go backwards so we take the highest z-order components first. - for (int i = component.getControlPointCount() - 1; i >= 0; i--) { - Point controlPoint = component.getControlPoint(i); + // Go backwards so we take the highest z-order components first. + for (int i = currentProject.getComponents().size() - 1; i >= 0; i--) { + IDIYComponent component = currentProject.getComponents().get(i); + for (int pointIndex = 0; pointIndex < component.getControlPointCount(); pointIndex++) { + Point controlPoint = component.getControlPoint(pointIndex); if (shouldShowControlPointsFor(component)) { try { if (scaledPoint.distance(controlPoint) < CONTROL_POINT_SENSITIVITY) { @@ -462,7 +463,7 @@ public class Presenter implements IPlugInPort { ComponentType componentType = componentTypeMap .get(component.getClass()); if (componentType.isStretchable()) { - indices.add(i); + indices.add(pointIndex); } else { for (int j = 0; j < component.getControlPointCount(); j++) { indices.add(j); @@ -523,7 +524,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.SELECTION_CHANGED, selectedComponents); messageDispatcher.dispatchMessage(EventType.REPAINT); } else { - IDIYComponent component = components.get(0); + IDIYComponent component = components.get(components.size() - 1); // If the component under the cursor is not already selected, make // it into the only selected component. if (!selectedComponents.contains(component)) { @@ -591,7 +592,9 @@ public class Presenter implements IPlugInPort { repaint = translateSelectedComponents(previousDragPoint, scaledPoint); // dragStartPoint = point; } - messageDispatcher.dispatchMessage(EventType.REPAINT); + if (repaint) { + messageDispatcher.dispatchMessage(EventType.REPAINT); + } return true; } @@ -657,7 +660,9 @@ public class Presenter implements IPlugInPort { public void addComponents(List> components, Point preferredPoint) { LOG.debug(String.format("addComponents(%s)", components)); Project oldProject = cloner.deepClone(currentProject); - currentProject.getComponents().addAll(components); + for (IDIYComponent component : components) { + addComponent(component, componentTypeMap.get(component.getClass())); + } messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, oldProject, cloner .deepClone(currentProject), "Add"); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -713,6 +718,26 @@ public class Presenter implements IPlugInPort { } } + /** + * Adds a component to the project taking z-order into account. + * + * @param component + * @param componentType + */ + private void addComponent(IDIYComponent component, ComponentType componentType) { + int index = 0; + while (index < currentProject.getComponents().size() + && componentType.getLayer().ordinal() >= componentTypeMap.get( + currentProject.getComponents().get(index).getClass()).getLayer().ordinal()) { + index++; + } + if (index < currentProject.getComponents().size()) { + currentProject.getComponents().add(index, component); + } else { + currentProject.getComponents().add(component); + } + } + @SuppressWarnings("unchecked") private void instantiateComponent(ComponentType componentType, Point point) throws Exception { LOG.info("Instatiating component of type: " + componentType.getInstanceClass().getName()); @@ -739,17 +764,7 @@ public class Presenter implements IPlugInPort { component.setName(componentType.getNamePrefix() + i); // Add it to the project taking z-order into account. - int index = 0; - while (index < currentProject.getComponents().size() - && componentType.getLayer().ordinal() >= componentTypeMap.get( - currentProject.getComponents().get(index).getClass()).getLayer().ordinal()) { - index++; - } - if (index < currentProject.getComponents().size()) { - currentProject.getComponents().add(index, component); - } else { - currentProject.getComponents().add(component); - } + addComponent(component, componentType); // Translate them to the desired location. if (point != null) {