From 02a5a3973d8bae7da50e87f8ae21b54765af7963 Mon Sep 17 00:00:00 2001 From: StephanEggermont Date: Thu, 30 Apr 2015 01:41:13 +0200 Subject: [PATCH] Temporary connector, dragging shapes --- MorphicDraw.pdf | Bin 149319 -> 151905 bytes MorphicDraw.tex | 50 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/MorphicDraw.pdf b/MorphicDraw.pdf index 5c39cb8b2158fc1cd9ead44e7d00b28f86366426..373dba656bf4573027f5efb5fff5922de0225947 100644 GIT binary patch delta 15513 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 T6C$!Rv$3$jQ&Ng6{DS{KI}mR( delta 12954 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 N1BseiQdtV=e*;BXm|y?^ diff --git a/MorphicDraw.tex b/MorphicDraw.tex index e685580..d947cad 100644 --- a/MorphicDraw.tex +++ b/MorphicDraw.tex @@ -434,10 +434,15 @@ \section{Context menu} The shape needs to react to mouse events. When the mouse button is pressed over the shape, it can be either part of a click or of the beginning of a drag. The hand supports making that distinction. If the mouse is not moved too far -before the mouse button is released, it will send \#click: to the shape +before the mouse button is released, it will send \#click: to the shape, otherwise +\#drag:with:. \begin{verbatim} MDShape>>mouseDown: evt evt ifNotNil: [ evt hand waitForClicksOrDrag: self event: evt] \end{verbatim} +On a drag, the shape should be moved +\begin{verbatim} +MDShape>>doDrag: aMouseMoveEvent with: aMDShape ActiveHand addEventListener: self. aMouseMoveEvent hand startDrag: aMouseMoveEvent with: aMDShape. +\end{verbatim} The context menu is shown when the right button has been clicked. No further propagation of the event is wanted. \begin{verbatim} @@ -474,6 +479,49 @@ \section{Connecting} MDConnector>>vertices: aCollection vertices := aCollection. self computeBounds \end{verbatim} +This connector works fine when its two end-points are connected, +but has no support for creating a connection from one shape to +another. For that to work the hand must be tracked from the +moment the connect action is started. A separate connector +type is used that deals with that. +\begin{verbatim} +MDShape>>connect |connector| connector := MDTempConnector from: self to: ActiveHand. connector openInWorld. +\end{verbatim} +This temporary connector should be able to highlight shapes it is +over, to show where it can connect to. +\begin{verbatim} +MDConnector subclass: #MDTempConnector instanceVariableNames: 'over' classVariableNames: '' category: 'MorphicDraw-Model' +\end{verbatim} +It is connected to the active hand, and starts listening to +movements of the hand +\begin{verbatim} +MDTempConnector>>to: aHand to := aHand. ActiveHand addEventListener: self. \end{verbatim} +It is only interested in mouse events. If it is moved it tries to find +a shape it is over and highlights it, and tries to make a connection +on mouse up. +\begin{verbatim} +MDTempConnector>>handleListenEvent: anEvent anEvent isMouse ifFalse: [ ^self]. anEvent isMouseUp ifTrue: [ self stopListening: anEvent]. anEvent isMouseMove ifTrue: [ self moved. self highlightShapeAt: anEvent ] +\end{verbatim} +On mouse up the event listener needs to stop listening, +a potential highlighted shape is unhighlighted and the +temporary connector is removed. If the mouse up was over +a shape, it is replaced by a real connector. +\begin{verbatim} +MDTempConnector>>stopListening: anEvent ActiveHand removeEventListener: self. (self shapeAtPosition: anEvent) ifNotNil: [ :shape | from owner addMorphBack: (MDConnector from: from to: shape ) ]. over ifNotNil: [ over unhighlight ]. self delete +\end{verbatim} +Morphic already support finding the morphs at a certain +position. Select the shapes that can be connected to needs +an extra test that is returns false on Morph and true on +MDShape and subclasses. +\begin{verbatim} +MDTempConnector>>shapeAtPosition: anEvent "ask the panel instead of the world? push up?" ^(World morphsAt: anEvent position) detect: [:aMorph | aMorph isMorphicDrawShape ] ifNone: [nil]. +\end{verbatim} +Highlight the right shape. The mouse can be moved +both from shape to shape without moving over empty space. +\begin{verbatim} +MDTempConnector>>highlightShapeAt: anEvent |shape| shape := self shapeAtPosition: anEvent. over ifNil: [ shape ifNotNil: [ over := shape. over highlight ] ] ifNotNil: [ shape = over ifFalse: [ over unhighlight. over := shape. over ifNotNil: [ over highlight ] ] ] +\end{verbatim} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Loading the code} The code can be found on www.smalltalkhub.com, in the repository StephanEggermont/MorphicDraw