From a6448676f781d61702a3f260fd283b5760a5075b Mon Sep 17 00:00:00 2001 From: bancika Date: Fri, 17 Aug 2012 10:41:19 +0000 Subject: [PATCH] Move selected components with arrow keys (and ctrl/shift) --- .../diylc-swing/lib/diylc-core.jar | Bin 197996 -> 198687 bytes .../swing/plugins/canvas/CanvasPlugin.java | 112 ++++++++++++------ .../diylc-swing/update.xml | 4 + 3 files changed, 80 insertions(+), 36 deletions(-) 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 2e27961acf9a43cb4b6b0b1aaec05cb4624edd07..fb7a887f23475eb1f5f0db954ca89779f8e23269 100644 GIT binary patch delta 24158 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
    s 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 {a0zg%*Cu`eV6r`_WvN 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 diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index f53b6a75..7c81a3e5 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -9,6 +9,8 @@ import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; @@ -92,13 +94,20 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { canvasPanel = new CanvasPanel(plugInPort); canvasPanel.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + canvasPanel.requestFocus(); + } + @Override public void mouseReleased(MouseEvent e) { if (plugInPort.getNewComponentTypeSlot() != null) { - plugInPort.mouseClicked(e.getPoint(), e.getButton(), false, false, false, 1); + plugInPort.mouseClicked(e.getPoint(), e.getButton(), + false, false, false, 1); } else if (e.isPopupTrigger()) { // Enable actions. - boolean enabled = !plugInPort.getSelectedComponents().isEmpty(); + boolean enabled = !plugInPort.getSelectedComponents() + .isEmpty(); getCutAction().setEnabled(enabled); getCopyAction().setEnabled(enabled); try { @@ -123,25 +132,38 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { } } }); + + canvasPanel.addKeyListener(new KeyAdapter() { + + @Override + public void keyPressed(KeyEvent e) { + if (plugInPort.keyPressed(e.getKeyCode(), + e.isControlDown(), e.isShiftDown(), e.isAltDown())) { + e.consume(); + } + } + }); } return canvasPanel; } private RulerScrollPane getScrollPane() { if (scrollPane == null) { - scrollPane = new RulerScrollPane(getCanvasPanel(), new ProjectDrawingProvider( - plugInPort, true, false), new Size(1d, SizeUnit.cm).convertToPixels(), - new Size(1d, SizeUnit.in).convertToPixels()); - boolean metric = ConfigurationManager.getInstance().readBoolean(Presenter.METRIC_KEY, - true); + scrollPane = new RulerScrollPane(getCanvasPanel(), + new ProjectDrawingProvider(plugInPort, true, false), + new Size(1d, SizeUnit.cm).convertToPixels(), new Size(1d, + SizeUnit.in).convertToPixels()); + boolean metric = ConfigurationManager.getInstance().readBoolean( + Presenter.METRIC_KEY, true); boolean wheelZoom = ConfigurationManager.getInstance().readBoolean( IPlugInPort.WHEEL_ZOOM_KEY, false); - ConfigurationManager.getInstance().addConfigListener(IPlugInPort.WHEEL_ZOOM_KEY, - new IConfigListener() { + ConfigurationManager.getInstance().addConfigListener( + IPlugInPort.WHEEL_ZOOM_KEY, new IConfigListener() { @Override public void valueChanged(String key, Object value) { - scrollPane.setWheelScrollingEnabled(!(Boolean) value); + scrollPane + .setWheelScrollingEnabled(!(Boolean) value); } }); scrollPane.setMetric(metric); @@ -157,13 +179,14 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { @Override public void mouseWheelMoved(MouseWheelEvent e) { - boolean wheelZoom = ConfigurationManager.getInstance().readBoolean( - IPlugInPort.WHEEL_ZOOM_KEY, false); + boolean wheelZoom = ConfigurationManager.getInstance() + .readBoolean(IPlugInPort.WHEEL_ZOOM_KEY, false); if (!wheelZoom) { return; } double d = plugInPort.getZoomLevel(); - Double[] availableZoomLevels = plugInPort.getAvailableZoomLevels(); + Double[] availableZoomLevels = plugInPort + .getAvailableZoomLevels(); if (e.getWheelRotation() > 0) { int i = availableZoomLevels.length - 1; while (i > 0 && availableZoomLevels[i] >= d) { @@ -172,7 +195,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { plugInPort.setZoomLevel(availableZoomLevels[i]); } else { int i = 0; - while (i < availableZoomLevels.length - 1 && availableZoomLevels[i] <= d) { + while (i < availableZoomLevels.length - 1 + && availableZoomLevels[i] <= d) { i++; } plugInPort.setZoomLevel(availableZoomLevels[i]); @@ -205,7 +229,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { popupMenu.add(getBringToFrontAction()); popupMenu.add(getExpandMenu()); popupMenu.addSeparator(); - popupMenu.add(ActionFactory.getInstance().createEditProjectAction(plugInPort)); + popupMenu.add(ActionFactory.getInstance().createEditProjectAction( + plugInPort)); } return popupMenu; } @@ -221,7 +246,7 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { public JMenu getExpandMenu() { if (expandMenu == null) { expandMenu = new JMenu("Expand Selection"); - expandMenu.setIcon(IconLoader.BranchAdd.getIcon()); + expandMenu.setIcon(IconLoader.BranchAdd.getIcon()); expandMenu.add(getExpandSelectionAllAction()); expandMenu.add(getExpandSelectionImmediateAction()); expandMenu.add(getExpandSelectionSameTypeAction()); @@ -231,7 +256,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { private void updateSelectionMenu(int x, int y) { getSelectionMenu().removeAll(); - for (IDIYComponent component : plugInPort.findComponentsAt(new Point(x, y))) { + for (IDIYComponent component : plugInPort + .findComponentsAt(new Point(x, y))) { JMenuItem item = new JMenuItem(component.getName()); final IDIYComponent finalComponent = component; item.addActionListener(new ActionListener() { @@ -250,72 +276,80 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { public ActionFactory.CutAction getCutAction() { if (cutAction == null) { - cutAction = ActionFactory.getInstance().createCutAction(plugInPort, clipboard, this); + cutAction = ActionFactory.getInstance().createCutAction(plugInPort, + clipboard, this); } return cutAction; } public ActionFactory.CopyAction getCopyAction() { if (copyAction == null) { - copyAction = ActionFactory.getInstance().createCopyAction(plugInPort, clipboard, this); + copyAction = ActionFactory.getInstance().createCopyAction( + plugInPort, clipboard, this); } return copyAction; } public ActionFactory.PasteAction getPasteAction() { if (pasteAction == null) { - pasteAction = ActionFactory.getInstance().createPasteAction(plugInPort, clipboard); + pasteAction = ActionFactory.getInstance().createPasteAction( + plugInPort, clipboard); } return pasteAction; } public ActionFactory.EditSelectionAction getEditSelectionAction() { if (editSelectionAction == null) { - editSelectionAction = ActionFactory.getInstance().createEditSelectionAction(plugInPort); + editSelectionAction = ActionFactory.getInstance() + .createEditSelectionAction(plugInPort); } return editSelectionAction; } public ActionFactory.DeleteSelectionAction getDeleteSelectionAction() { if (deleteSelectionAction == null) { - deleteSelectionAction = ActionFactory.getInstance().createDeleteSelectionAction( - plugInPort); + deleteSelectionAction = ActionFactory.getInstance() + .createDeleteSelectionAction(plugInPort); } return deleteSelectionAction; } public ActionFactory.GroupAction getGroupAction() { if (groupAction == null) { - groupAction = ActionFactory.getInstance().createGroupAction(plugInPort); + groupAction = ActionFactory.getInstance().createGroupAction( + plugInPort); } return groupAction; } public ActionFactory.UngroupAction getUngroupAction() { if (ungroupAction == null) { - ungroupAction = ActionFactory.getInstance().createUngroupAction(plugInPort); + ungroupAction = ActionFactory.getInstance().createUngroupAction( + plugInPort); } return ungroupAction; } public ActionFactory.SendToBackAction getSendToBackAction() { if (sendToBackAction == null) { - sendToBackAction = ActionFactory.getInstance().createSendToBackAction(plugInPort); + sendToBackAction = ActionFactory.getInstance() + .createSendToBackAction(plugInPort); } return sendToBackAction; } public ActionFactory.BringToFrontAction getBringToFrontAction() { if (bringToFrontAction == null) { - bringToFrontAction = ActionFactory.getInstance().createBringToFrontAction(plugInPort); + bringToFrontAction = ActionFactory.getInstance() + .createBringToFrontAction(plugInPort); } return bringToFrontAction; } public ActionFactory.ExpandSelectionAction getExpandSelectionAllAction() { if (expandSelectionAllAction == null) { - expandSelectionAllAction = ActionFactory.getInstance().createExpandSelectionAction( - plugInPort, ExpansionMode.ALL); + expandSelectionAllAction = ActionFactory.getInstance() + .createExpandSelectionAction(plugInPort, ExpansionMode.ALL); } return expandSelectionAllAction; } @@ -323,7 +357,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { public ActionFactory.ExpandSelectionAction getExpandSelectionImmediateAction() { if (expandSelectionImmediateAction == null) { expandSelectionImmediateAction = ActionFactory.getInstance() - .createExpandSelectionAction(plugInPort, ExpansionMode.IMMEDIATE); + .createExpandSelectionAction(plugInPort, + ExpansionMode.IMMEDIATE); } return expandSelectionImmediateAction; } @@ -331,14 +366,16 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { public ActionFactory.ExpandSelectionAction getExpandSelectionSameTypeAction() { if (expandSelectionSameTypeAction == null) { expandSelectionSameTypeAction = ActionFactory.getInstance() - .createExpandSelectionAction(plugInPort, ExpansionMode.SAME_TYPE); + .createExpandSelectionAction(plugInPort, + ExpansionMode.SAME_TYPE); } return expandSelectionSameTypeAction; } @Override public EnumSet getSubscribedEventTypes() { - return EnumSet.of(EventType.PROJECT_LOADED, EventType.ZOOM_CHANGED, EventType.REPAINT); + return EnumSet.of(EventType.PROJECT_LOADED, EventType.ZOOM_CHANGED, + EventType.REPAINT); } @Override @@ -354,7 +391,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { if ((Boolean) params[1]) { // Scroll to the center. Rectangle visibleRect = canvasPanel.getVisibleRect(); - visibleRect.setLocation((canvasPanel.getWidth() - visibleRect.width) / 2, + visibleRect.setLocation( + (canvasPanel.getWidth() - visibleRect.width) / 2, (canvasPanel.getHeight() - visibleRect.height) / 2); canvasPanel.scrollRectToVisible(visibleRect); canvasPanel.revalidate(); @@ -367,7 +405,8 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { // one. double zoomFactor = (Double) params[0] / zoomLevel; visibleRect.setBounds((int) (visibleRect.x * zoomFactor), - (int) (visibleRect.y * zoomFactor), visibleRect.width, visibleRect.height); + (int) (visibleRect.y * zoomFactor), visibleRect.width, + visibleRect.height); canvasPanel.scrollRectToVisible(visibleRect); canvasPanel.revalidate(); @@ -393,8 +432,9 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { * to the canvasPanel. */ public void refresh() { - MouseEvent event = new MouseEvent(canvasPanel, MouseEvent.MOUSE_MOVED, System - .currentTimeMillis(), 0, 1, 1,// canvasPanel.getWidth() / 2, + MouseEvent event = new MouseEvent(canvasPanel, MouseEvent.MOUSE_MOVED, + System.currentTimeMillis(), 0, 1, 1,// canvasPanel.getWidth() / + // 2, // canvasPanel.getHeight() / 2, 0, false); canvasPanel.dispatchEvent(event); 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 bcfc17c4..43f6a9a2 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 @@ -634,6 +634,10 @@ 2012-08-16 20:00:00.000 CET + + NEW_FEATURE + Move selected components with arrow keys (and ctrl/shift) + IMPROVEMENT Right-click in the toolbar to select all components of the same type