From 6dffcd63494b692b28f1a9ed9a1667bca53500be Mon Sep 17 00:00:00 2001 From: bancika Date: Thu, 27 Jan 2011 19:41:36 +0000 Subject: [PATCH] added send to back/bring to front --- .../src/org/diylc/common/IPlugInPort.java | 17 ++++++ .../src/org/diylc/images/IconLoader.java | 2 +- .../DIYLC/src/org/diylc/images/back.png | Bin 0 -> 537 bytes .../DIYLC/src/org/diylc/images/front.png | Bin 0 -> 535 bytes .../src/org/diylc/presenter/Presenter.java | 50 +++++++++++++++++- .../src/org/diylc/swing/ActionFactory.java | 48 +++++++++++++++++ .../swing/plugins/canvas/CanvasPlugin.java | 20 +++++++ .../swing/plugins/edit/EditMenuPlugin.java | 20 +++++++ 8 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/back.png create mode 100644 diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/front.png diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/IPlugInPort.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/IPlugInPort.java index 50af82db..42034f0c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/IPlugInPort.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/common/IPlugInPort.java @@ -304,6 +304,13 @@ public interface IPlugInPort { */ void ungroupSelectedComponents(); + /** + * Locks or unlocks the specified layer. All components within +- 0.5 range + * will be affected by the change as well. + * + * @param layerZOrder + * @param locked + */ void setLayerLocked(int layerZOrder, boolean locked); /** @@ -311,4 +318,14 @@ public interface IPlugInPort { * on the user preference. */ Point2D calculateSelectionDimension(); + + /** + * Sends each of the selected components one step back. + */ + void sendSelectionToBack(); + + /** + * Brings each of the selected components one step to front. + */ + void bringSelectionToFront(); } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/IconLoader.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/IconLoader.java index ed05ce2a..a72c3bdf 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/IconLoader.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/IconLoader.java @@ -30,7 +30,7 @@ public enum IconLoader { "faq.png"), Component("component.png"), Plugin("plugin.png"), Manual("manual.png"), Donate( "donate.png"), Bug("bug.png"), IconLarge("icon_large.png"), IconMedium( "icon_medium.png"), IconSmall("icon_small.png"), DocumentEdit("document_edit.png"), EditComponent( - "edit_component.png"), Size("size.png"); + "edit_component.png"), Size("size.png"), Front("front.png"), Back("back.png"); protected String name; diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/back.png b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..df446d877a2859e58fc7edb26976077dab4cd3a8 GIT binary patch literal 537 zcmV+!0_OdRP)WdKBJAUGgRa(W;#FfcVBF)=zZIXW~kAS*C2FfgN;N;v=k00(qQO+^RR z1s4r5A{KaH!2kdN32;bRa{vGe@Bjb`@Bu=sG?)MY00d`2O+f$vv5yP!0{E_W91a_jL5t@@W^Bzf3L25Lua|*rsFY}#)vz_lUk$R^C9iG_q*@e-WHQZ zkz4od61yTM8ZvC!GubwsiA-RZDx`U7LBpPDW|!hLdUDCP9qXCxU7OqY95n2Cs&9MZ&aBC?`|)h(52Ne+Gfk&~7O01G1=@%;onb+z b4E~58$A2~{h;b!l00000NkvXXu0mjfkGWdKBJAUGgRa(W;#FfcVBF)=zaFgh|cAS*C2FfdX%A<_T<00(qQO+^RR z1s4r65rTzM6aWAK32;bRa{vGe@Bjb`@Bu=sG?)MY00d`2O+f$vv5yPlZ3d)n)xt=~?#bTtHJW=CWy@2Zu7J63Dg#m_8yS-gd(Vp9f|Ys* zW>Z<}B^OO3S{{y|gf(C component : selectedComponents) { + ComponentType componentType = ComponentProcessor.getInstance() + .extractComponentTypeFrom( + (Class>) component.getClass()); + int index = currentProject.getComponents().indexOf(component); + if (index < 0) { + LOG.warn("Component not found in the project: " + component.getName()); + } else if (index > 0) { + IDIYComponent componentBefore = currentProject.getComponents().get(index - 1); + ComponentType componentBeforeType = ComponentProcessor.getInstance() + .extractComponentTypeFrom( + (Class>) componentBefore.getClass()); + if (componentType.getZOrder() == componentBeforeType.getZOrder()) { + Collections.swap(currentProject.getComponents(), index, index - 1); + } + } + } + messageDispatcher.dispatchMessage(EventType.REPAINT); + } + + @Override + public void bringSelectionToFront() { + LOG.info("bringSelectionToFront()"); + for (IDIYComponent component : selectedComponents) { + ComponentType componentType = ComponentProcessor.getInstance() + .extractComponentTypeFrom( + (Class>) component.getClass()); + int index = currentProject.getComponents().indexOf(component); + if (index < 0) { + LOG.warn("Component not found in the project: " + component.getName()); + } else if (index < currentProject.getComponents().size() - 1) { + IDIYComponent componentAfter = currentProject.getComponents().get(index + 1); + ComponentType componentAfterType = ComponentProcessor.getInstance() + .extractComponentTypeFrom( + (Class>) componentAfter.getClass()); + if (componentType.getZOrder() == componentAfterType.getZOrder()) { + Collections.swap(currentProject.getComponents(), index, index + 1); + } + } + } + messageDispatcher.dispatchMessage(EventType.REPAINT); + } + /** * Updates the selection with the specified {@link ComponentTransferable}. * Also, updates control point map with all components that are stuck to the diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/ActionFactory.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/ActionFactory.java index 99d2a10e..b2bcae19 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/ActionFactory.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/ActionFactory.java @@ -124,6 +124,14 @@ public class ActionFactory { public DeleteSelectionAction createDeleteSelectionAction(IPlugInPort plugInPort) { return new DeleteSelectionAction(plugInPort); } + + public SendToBackAction createSendToBackAction(IPlugInPort plugInPort) { + return new SendToBackAction(plugInPort); + } + + public BringToFrontAction createBringToFrontAction(IPlugInPort plugInPort) { + return new BringToFrontAction(plugInPort); + } // File menu actions. @@ -733,4 +741,44 @@ public class ActionFactory { plugInPort.deleteSelectedComponents(); } } + + public static class SendToBackAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + private IPlugInPort plugInPort; + + public SendToBackAction(IPlugInPort plugInPort) { + super(); + this.plugInPort = plugInPort; + putValue(AbstractAction.NAME, "Send to Back"); + putValue(AbstractAction.SMALL_ICON, IconLoader.Back.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + LOG.info("Send to Back triggered"); + plugInPort.sendSelectionToBack(); + } + } + + public static class BringToFrontAction extends AbstractAction { + + private static final long serialVersionUID = 1L; + + private IPlugInPort plugInPort; + + public BringToFrontAction(IPlugInPort plugInPort) { + super(); + this.plugInPort = plugInPort; + putValue(AbstractAction.NAME, "Bring to Front"); + putValue(AbstractAction.SMALL_ICON, IconLoader.Front.getIcon()); + } + + @Override + public void actionPerformed(ActionEvent e) { + LOG.info("Bring to Front triggered"); + plugInPort.bringSelectionToFront(); + } + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index 0f533f4f..6a61e265 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -49,6 +49,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { private ActionFactory.DeleteSelectionAction deleteSelectionAction; private ActionFactory.GroupAction groupAction; private ActionFactory.UngroupAction ungroupAction; + private ActionFactory.SendToBackAction sendToBackAction; + private ActionFactory.BringToFrontAction bringToFrontAction; private IPlugInPort plugInPort; private ISwingUI swingUI; @@ -94,6 +96,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { getDeleteSelectionAction().setEnabled(enabled); getGroupAction().setEnabled(enabled); getUngroupAction().setEnabled(enabled); + getSendToBackAction().setEnabled(enabled); + getBringToFrontAction().setEnabled(enabled); getPopupMenu().show(canvasPanel, e.getX(), e.getY()); } @@ -159,6 +163,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { popupMenu.add(getDeleteSelectionAction()); popupMenu.add(getGroupAction()); popupMenu.add(getUngroupAction()); + popupMenu.add(getSendToBackAction()); + popupMenu.add(getBringToFrontAction()); } return popupMenu; } @@ -211,6 +217,20 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { } return ungroupAction; } + + public ActionFactory.SendToBackAction getSendToBackAction() { + if (sendToBackAction == null) { + sendToBackAction = ActionFactory.getInstance().createSendToBackAction(plugInPort); + } + return sendToBackAction; + } + + public ActionFactory.BringToFrontAction getBringToFrontAction() { + if (bringToFrontAction == null) { + bringToFrontAction = ActionFactory.getInstance().createBringToFrontAction(plugInPort); + } + return bringToFrontAction; + } @Override public EnumSet getSubscribedEventTypes() { diff --git a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java index dc97fa4c..0d612fd1 100644 --- a/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java +++ b/ diy-layout-creator --username bancika@gmail.com/DIYLC/src/org/diylc/swing/plugins/edit/EditMenuPlugin.java @@ -34,6 +34,8 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { private ActionFactory.DeleteSelectionAction deleteSelectionAction; private ActionFactory.GroupAction groupAction; private ActionFactory.UngroupAction ungroupAction; + private ActionFactory.SendToBackAction sendToBackAction; + private ActionFactory.BringToFrontAction bringToFrontAction; private UndoHandler undoHandler; @@ -113,6 +115,20 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { } return ungroupAction; } + + public ActionFactory.SendToBackAction getSendToBackAction() { + if (sendToBackAction == null) { + sendToBackAction = ActionFactory.getInstance().createSendToBackAction(plugInPort); + } + return sendToBackAction; + } + + public ActionFactory.BringToFrontAction getBringToFrontAction() { + if (bringToFrontAction == null) { + bringToFrontAction = ActionFactory.getInstance().createBringToFrontAction(plugInPort); + } + return bringToFrontAction; + } @Override public void connect(IPlugInPort plugInPort) { @@ -132,6 +148,8 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { swingUI.injectMenuAction(getDeleteSelectionAction(), EDIT_TITLE); swingUI.injectMenuAction(getGroupAction(), EDIT_TITLE); swingUI.injectMenuAction(getUngroupAction(), EDIT_TITLE); + swingUI.injectMenuAction(getSendToBackAction(), EDIT_TITLE); + swingUI.injectMenuAction(getBringToFrontAction(), EDIT_TITLE); swingUI.injectMenuAction(null, EDIT_TITLE); swingUI.injectMenuAction(actionFactory.createEditProjectAction(plugInPort), EDIT_TITLE); @@ -169,6 +187,8 @@ public class EditMenuPlugin implements IPlugIn, ClipboardOwner { getDeleteSelectionAction().setEnabled(enabled); getGroupAction().setEnabled(enabled); getUngroupAction().setEnabled(enabled); + getSendToBackAction().setEnabled(enabled); + getBringToFrontAction().setEnabled(enabled); } // ClipboardOwner