From ebf06841a0240106bb70c634db6fdb3726837066 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 12 Feb 2012 14:36:18 +0000 Subject: [PATCH] Select components from context menu even when they are under other components --- .../src/org/diylc/common/IMouseProcessor.java | 68 ++++++++++++++ .../src/org/diylc/common/IPlugInPort.java | 88 +----------------- .../org/diylc/common/ISelectionProcessor.java | 39 ++++++++ .../src/org/diylc/images/IconLoader.java | 2 +- .../org/diylc/images/elements_selection.png | Bin 0 -> 771 bytes .../org/diylc/presenter/DrawingManager.java | 2 +- .../src/org/diylc/presenter/Presenter.java | 28 ++++-- .../diylc-swing/lib/diylc-core.jar | Bin 189909 -> 191104 bytes .../src/org/diylc/images/IconLoader.java | 2 +- .../org/diylc/images/elements_selection.png | Bin 0 -> 771 bytes .../swing/plugins/canvas/CanvasPlugin.java | 46 ++++++++- .../diylc-swing/update.xml | 6 +- 12 files changed, 181 insertions(+), 100 deletions(-) create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IMouseProcessor.java create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ISelectionProcessor.java create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/elements_selection.png create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/images/elements_selection.png diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IMouseProcessor.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IMouseProcessor.java new file mode 100644 index 00000000..33d837c6 --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IMouseProcessor.java @@ -0,0 +1,68 @@ +package org.diylc.common; + +import java.awt.Point; + +public interface IMouseProcessor { + + /** + * Notifies the presenter that mouse is clicked. + * + * Note: point coordinates are display based, i.e. scaled for zoom factor. + * + * @param point + * @param ctrlDown + * @param shiftDown + * @param altDown + * @param clickCount + */ + void mouseClicked(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown, + int clickCount); + + /** + * Notifies the presenter that mouse is moved. + * + * Note: point coordinates are display based, i.e. scaled for zoom factor. + * + * @param point + * @param ctrlDown + * @param shiftDown + * @param altDown + */ + void mouseMoved(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown); + + /** + * Notification that drag has been started from the specified point. + * + * Note: point coordinates are scaled for zoom factor. + * + * @param point + * @param dragAction + */ + void dragStarted(Point point, int dragAction); + + /** + * Checks if it's possible to drop over the specified point. + * + * Note: point coordinates are scaled for zoom factor. + * + * @param point + * @return + */ + boolean dragOver(Point point); + + /** + * Changes the current drag action during the dragging. + * + * @param dragAction + */ + void dragActionChanged(int dragAction); + + /** + * Notification that drag has been ended in the specified point. + * + * Note: point coordinates are scaled for zoom factor. + * + * @param point + */ + void dragEnded(Point point); +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IPlugInPort.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IPlugInPort.java index c1a75cd3..ca1fafc7 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IPlugInPort.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/IPlugInPort.java @@ -4,7 +4,6 @@ import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Point; -import java.awt.dnd.DnDConstants; import java.awt.geom.Point2D; import java.util.List; import java.util.Map; @@ -29,7 +28,7 @@ import org.diylc.core.Theme; * @see IMessageListener * @see EventType */ -public interface IPlugInPort { +public interface IPlugInPort extends ISelectionProcessor, IMouseProcessor { public static final String ANTI_ALIASING_KEY = "antiAliasing"; public static final String HI_QUALITY_RENDER_KEY = "hiQualityRender"; @@ -45,7 +44,7 @@ public interface IPlugInPort { public static final String OUTLINE_KEY = "outline"; public static final String THEME_KEY = "theme"; public static final String RECENT_COMPONENTS_KEY = "recentComponents"; - + public static final int DND_TOGGLE_STICKY = 0x1; public static final int DND_TOGGLE_SNAP = 0x40000000; @@ -163,89 +162,6 @@ public interface IPlugInPort { */ void setZoomLevel(double zoomLevel); - /** - * Notifies the presenter that mouse is clicked. - * - * Note: point coordinates are display based, i.e. scaled for zoom factor. - * - * @param point - * @param ctrlDown - * @param shiftDown - * @param altDown - * @param clickCount - */ - void mouseClicked(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown, - int clickCount); - - /** - * Notifies the presenter that mouse is moved. - * - * Note: point coordinates are display based, i.e. scaled for zoom factor. - * - * @param point - * @param ctrlDown - * @param shiftDown - * @param altDown - */ - void mouseMoved(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown); - - /** - * Returns the current {@link ComponentTransferable}. - * - * @return - */ - List> getSelectedComponents(); - - /** - * Updates the selection with the specified list of component. Also, updates - * control point map with all components that are stuck to the newly - * selected components. - * - * @param newSelection - */ - void updateSelection(List> newSelection); - - /** - * Selects all components in the project. - */ - void selectAll(); - - /** - * Notification that drag has been started from the specified point. - * - * Note: point coordinates are scaled for zoom factor. - * - * @param point - * @param dragAction - */ - void dragStarted(Point point, int dragAction); - - /** - * Checks if it's possible to drop over the specified point. - * - * Note: point coordinates are scaled for zoom factor. - * - * @param point - * @return - */ - boolean dragOver(Point point); - - /** - * Changes the current drag action during the dragging. - * - * @param dragAction - */ - void dragActionChanged(int dragAction); - - /** - * Notification that drag has been ended in the specified point. - * - * Note: point coordinates are scaled for zoom factor. - * - * @param point - */ - void dragEnded(Point point); - /** * Returns current version number. * diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ISelectionProcessor.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ISelectionProcessor.java new file mode 100644 index 00000000..ae5c834a --- /dev/null +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/common/ISelectionProcessor.java @@ -0,0 +1,39 @@ +package org.diylc.common; + +import java.awt.Point; +import java.util.List; + +import org.diylc.core.IDIYComponent; + +public interface ISelectionProcessor { + + /** + * Returns the current {@link ComponentTransferable}. + * + * @return + */ + List> getSelectedComponents(); + + /** + * Updates the selection with the specified list of component. Also, updates + * control point map with all components that are stuck to the newly + * selected components. + * + * @param newSelection + */ + void updateSelection(List> newSelection); + + /** + * Finds all components at the specified location, sorted by z-index from + * top to bottom. + * + * @param point + * @return + */ + List> findComponentsAt(Point point); + + /** + * Selects all components in the project. + */ + void selectAll(); +} diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/IconLoader.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/IconLoader.java index baef6933..75f1cede 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/IconLoader.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/IconLoader.java @@ -31,7 +31,7 @@ public enum IconLoader { "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"), Front("front.png"), Back("back.png"), Pens( - "pens.png"), Sort("sort.png"); + "pens.png"), Sort("sort.png"), ElementsSelection("elements_selection.png"); protected String name; diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/elements_selection.png b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/images/elements_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..be9d2df1ac235499c4618d59c7e44c61ced1c192 GIT binary patch literal 771 zcmV+e1N{7nP)WdKcYATl%{MrC3kGB7YRATc*OG&MRjIUp-AF)%PD++897000McNliru z)&&<0G6A15LT~^8010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00LV{ zL_t(|+KrRTYZFlv#=kq6NjhnRuNb2NE7YnHT-B8gTB#5>g1G2Pa2eD^{{|6VxDZ@Q zT?o1oSAvVu3Pp4!1yO=vim9o2M?&+Mnat~Y?qt%;M(AOFch11M_nz;ZGYoUjIfV5J zw=p&Qdf)zLZkpDH?0?*)HB2lJDGcrEfBj_k620e%4cR+&xcLWBOk|!sjUS1f(@Ynp zeeIFRw<9W!CsjlbGuTpyP*A62yN)Ab6eJd(Vdssgi?%1>U}oiQA{k4+T&pV<8n7%5 z+vTL4!7v?6FD<~OY{*z3>+L-W>Dk2jrJEPj?`0jOj)R)PptCTf*c7Vo*ZGy5FUG6F zW`SZ&Ujh$GV7u3E=P~aqQsCa21_^kE06E2QCx{Akc1Z`K@?t-dAS`-IT&G2u+H>u|4fI;vKOXkTC87=MJoiD2y;wT?xTt5g1AYEOvnM^R(;YBBB~B z{73>X%!HUM`x=mF<0xI}kU@>`yE8XUq6%+9zA+SY@d2F!VV7OfgrTNFzS zfH*`Gtq#u4P(m_0?~SK0QDM<%VfFQ89J@C3Tc7SBo+*2N^W%M5Bcq<4Br+nzA5USG zz|SK#oe20TfAcTmt2khSIOJ&qR6kJPhu> findComponentsAt(Point point) { + public List> findComponentsAtScaled(Point point) { List> components = drawingManager.findComponentsAt(point, currentProject); Iterator> iterator = components.iterator(); while (iterator.hasNext()) { @@ -352,6 +352,13 @@ public class Presenter implements IPlugInPort { return components; } + @Override + public List> findComponentsAt(Point point) { + Point scaledPoint = scalePoint(point); + List> components = findComponentsAtScaled(scaledPoint); + return components; + } + @Override public void mouseClicked(Point point, boolean ctrlDown, boolean shiftDown, boolean altDown, int clickCount) { @@ -455,14 +462,14 @@ public class Presenter implements IPlugInPort { } else { List> newSelection = new ArrayList>( selectedComponents); - List> components = findComponentsAt(scaledPoint); + List> components = findComponentsAtScaled(scaledPoint); // If there's nothing under mouse cursor deselect all. if (components.isEmpty()) { if (!ctrlDown) { newSelection.clear(); } } else { - IDIYComponent component = components.get(components.size() - 1); + IDIYComponent component = components.get(0); // If ctrl is pressed just toggle the component under mouse // cursor. if (ctrlDown) { @@ -584,7 +591,8 @@ public class Presenter implements IPlugInPort { @Override public void selectAll() { LOG.info("selectAll()"); - List> newSelection = new ArrayList>(currentProject.getComponents()); + List> newSelection = new ArrayList>(currentProject + .getComponents()); newSelection.removeAll(getLockedComponents()); updateSelection(newSelection); // messageDispatcher.dispatchMessage(EventType.SELECTION_CHANGED, @@ -604,7 +612,9 @@ public class Presenter implements IPlugInPort { LOG.debug(String.format("dragStarted(%s, %s)", point, dragAction)); if (instantiationManager.getComponentTypeSlot() != null) { LOG.debug("Cannot start drag because a new component is being created."); - mouseClicked(point, dragAction == DnDConstants.ACTION_COPY, dragAction == DnDConstants.ACTION_LINK, dragAction == DnDConstants.ACTION_MOVE, 1); + mouseClicked(point, dragAction == DnDConstants.ACTION_COPY, + dragAction == DnDConstants.ACTION_LINK, dragAction == DnDConstants.ACTION_MOVE, + 1); return; } this.dragInProgress = true; @@ -612,7 +622,7 @@ public class Presenter implements IPlugInPort { preDragProject = cloner.deepClone(currentProject); Point scaledPoint = scalePoint(point); this.previousDragPoint = scaledPoint; - List> components = findComponentsAt(scaledPoint); + List> components = findComponentsAtScaled(scaledPoint); if (!this.controlPointMap.isEmpty()) { // If we're dragging control points reset selection. updateSelection(new ArrayList>(this.controlPointMap.keySet())); @@ -631,7 +641,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.REPAINT); } else { // Take the last component, i.e. the top order component. - IDIYComponent component = components.get(components.size() - 1); + IDIYComponent component = components.get(0); // If the component under the cursor is not already selected, make // it into the only selected component. if (!selectedComponents.contains(component)) { @@ -665,7 +675,7 @@ public class Presenter implements IPlugInPort { } } } - + @Override public void dragActionChanged(int dragAction) { LOG.debug("dragActionChanged(" + dragAction + ")"); @@ -746,7 +756,7 @@ public class Presenter implements IPlugInPort { LOG.trace("Component count didn't change, done with expanding."); } } - + private boolean isSnapToGrid() { boolean snapToGrid = ConfigurationManager.getInstance().readBoolean( IPlugInPort.SNAP_TO_GRID_KEY, true); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/lib/diylc-core.jar index b037c329894b0f1e579cb9265f74ade439a21706..666c6181dddd7d2aedf383faf293a94de12c15ce 100644 GIT binary patch delta 30097 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 component : plugInPort.findComponentsAt(new Point(x, y))) { + JMenuItem item = new JMenuItem(component.getName()); + final IDIYComponent finalComponent = component; + item.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + List> newSelection = new ArrayList>(); + newSelection.add(finalComponent); + plugInPort.updateSelection(newSelection); + plugInPort.refresh(); + } + }); + getSelectionMenu().add(item); + } + } + public ActionFactory.CutAction getCutAction() { if (cutAction == null) { cutAction = ActionFactory.getInstance().createCutAction(plugInPort, clipboard, this); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml index d0fea704..83e49f13 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/update.xml @@ -417,7 +417,11 @@ 2012-02-01 20:00:00.000 CET - + + + NEW_FEATURE + Select components from context menu even when they are under other components + NEW_FEATURE Ctrl+Shift toggles "Snap to Grid" option