#FEATURE by exept
class: ShowMeHowItWorks
added: #where:inComponent:
comment/format in: #movePointerToComponent:speed:
changed:
#drag:toComponent:dropAt:show:
#findComponent:in:
#screenBoundsOfComponent:
class: ShowMeHowItWorks::ItemInView
class definition
added:
#boundsInView
#isMenuItem
#isNoteBookTab
#item
#layout
#view
#view:item:boundsInView:
class: ShowMeHowItWorks::ItemInView class
added: #documentation
--- a/ShowMeHowItWorks.st Sun Oct 20 12:01:05 2019 +0200
+++ b/ShowMeHowItWorks.st Sun Oct 20 13:15:20 2019 +0200
@@ -14,6 +14,13 @@
category:'Interface-Help'
!
+Object subclass:#ItemInView
+ instanceVariableNames:'view item boundsInView'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:ShowMeHowItWorks
+!
+
!ShowMeHowItWorks class methodsFor:'documentation'!
documentation
@@ -548,27 +555,7 @@
sourceComponent := sourceComponent scrolledView.
].
- where == #topLeft ifTrue:[
- targetPos := targetComponent topLeft + (1@1).
- ] ifFalse:[
- where == #topCenter ifTrue:[
- targetPos := targetComponent topCenter + (0@5).
- ] ifFalse:[
- where == #center ifTrue:[
- targetPos := targetComponent center
- ] ifFalse:[
- where == #bottomCenter ifTrue:[
- targetPos := targetComponent bottomCenter - (0 @ 5)
- ] ifFalse:[
- where == #bottomLeft ifTrue:[
- targetPos := targetComponent bottomLeft + (1 @ -5)
- ] ifFalse:[
- self error:'where is this'
- ].
- ].
- ].
- ].
- ].
+ targetPos := self where:where inComponent:targetComponent.
(sourceComponent isKindOf:HierarchicalListView) ifTrue:[
@@ -584,16 +571,20 @@
self error:'no such item in hierarchicalList: ',itemsIndexOrLabelOrPattern
].
].
+
yPos := sourceComponent yVisibleOfLine:idx.
self movePointerToComponent:sourceComponent rightOffset:(10 @ (yPos + 3)).
Delay waitForSeconds:0.5.
sourcePosOnScreen := Display pointerPosition.
- sourcePos := Display translatePoint:sourcePosOnScreen from:nil to:sourceComponent.
+ sourcePos := Display translatePoint:sourcePosOnScreen fromView:nil toView:sourceComponent.
+
+ targetPosOnScreen := Display translatePoint:targetPos fromView:targetComponent toView:nil.
+ targetPosInSource := Display translatePoint:targetPosOnScreen fromView:nil toView:sourceComponent.
- targetPosOnScreen := Display translatePoint:targetPos from:targetComponent to:nil.
- targetPosInSource := Display translatePoint:targetPosOnScreen from:nil to:sourceComponent.
+ sourceComponent simulateButtonPress:1 at:sourcePos sendDisplayEvent:false.
+ sourceComponent simulateButtonPress:1 at:sourcePos sendDisplayEvent:true.
+ Delay waitForSeconds:0.2.
- sourceComponent simulateButtonPress:1 at:sourcePos sendDisplayEvent:true.
dNdMgr := sourceComponent startDragAt:sourcePos.
textWhenDroppingOrNil notNil ifTrue:[
@@ -605,8 +596,8 @@
Delay waitForSeconds:1.
dNdMgr buttonMotion:1 x:targetPos x y:targetPos y view:targetComponent.
- sourceComponent simulateButtonRelease:1 at:targetPos sendDisplayEvent:true.
dNdMgr buttonRelease:1 x:targetPos x y:targetPos y view:targetComponent.
+ sourceComponent simulateButtonRelease:1 at:targetPos sendDisplayEvent:false.
^ self
].
@@ -1186,7 +1177,15 @@
].
idx := Integer readFrom:(componentNameOrPath withoutPrefix:'item[') readStream.
item := anApplicationOrViewOrMenuItem itemAt:idx.
- ^ item
+ ^ ItemInView new view:anApplicationOrViewOrMenuItem item:item boundsInView:(item layout)
+ ].
+ (componentNameOrPath matchesRegex:'tab\[[0-9]+\]') ifTrue:[
+ (anApplicationOrViewOrMenuItem isKindOf:NoteBookView) ifFalse:[
+ self assert:false message:'container is not a notebook'.
+ ].
+ idx := Integer readFrom:(componentNameOrPath withoutPrefix:'tab[') readStream.
+ item := anApplicationOrViewOrMenuItem tabAtIndex:idx.
+ ^ ItemInView new view:anApplicationOrViewOrMenuItem item:item boundsInView:(item layout)
].
componentNameSymbol := componentNameOrPath asSymbolIfInterned ? componentNameOrPath.
@@ -1199,7 +1198,7 @@
(component := app componentAt:componentNameSymbol) notNil ifTrue:[^ component].
window := window ? app window.
] ifFalse:[
- app isMenuItem ifTrue:[
+ (app askFor:#isMenuItem) ifTrue:[
window := app submenu.
]
].
@@ -1370,23 +1369,37 @@
"Modified (comment): / 23-07-2019 / 09:32:44 / Claus Gittinger"
!
-screenBoundsOfComponent:aWidgetOrMenuItem
- aWidgetOrMenuItem isView ifTrue:[
- ^ aWidgetOrMenuItem screenBounds
+screenBoundsOfComponent:aWidgetOrMenuItemOrTab
+ |itemLayout|
+
+ aWidgetOrMenuItemOrTab isView ifTrue:[
+ ^ aWidgetOrMenuItemOrTab screenBounds
].
- (aWidgetOrMenuItem askFor:#isMenuItem) ifTrue:[
+ (aWidgetOrMenuItemOrTab askFor:#isMenuItem) ifTrue:[
|menuPanel menuBounds|
- aWidgetOrMenuItem isVisible ifTrue:[
- aWidgetOrMenuItem layout notNil ifTrue:[
- menuPanel := aWidgetOrMenuItem menuPanel.
+ aWidgetOrMenuItemOrTab isVisible ifTrue:[
+ (itemLayout := aWidgetOrMenuItemOrTab layout) notNil ifTrue:[
+ menuPanel := aWidgetOrMenuItemOrTab menuPanel.
menuPanel shown ifTrue:[
menuBounds := menuPanel screenBounds.
- ^ aWidgetOrMenuItem layout + menuBounds origin
+ ^ itemLayout + menuBounds origin
].
].
].
].
+ (aWidgetOrMenuItemOrTab askFor:#isNoteBookTab) ifTrue:[
+ (itemLayout := aWidgetOrMenuItemOrTab layout) notNil ifTrue:[
+ |notebook notebookBounds|
+
+ notebook := aWidgetOrMenuItemOrTab view.
+ notebook shown ifTrue:[
+ notebookBounds := notebook screenBounds.
+ ^ itemLayout + notebookBounds origin
+ ].
+ ].
+ self halt.
+ ].
^ nil.
! !
@@ -1571,14 +1584,14 @@
"Modified: / 23-07-2019 / 09:36:57 / Claus Gittinger"
!
-movePointerToComponent:aWidgetOrMenuItem speed:pixelsPerSecond
+movePointerToComponent:aWidgetOrMenuItemOrTab speed:pixelsPerSecond
"move the mouse to aWidget's center"
|bounds position|
- bounds := self screenBoundsOfComponent:aWidgetOrMenuItem.
+ bounds := self screenBoundsOfComponent:aWidgetOrMenuItemOrTab.
bounds isNil ifTrue:[
- self error:'no bounds found for: ',aWidgetOrMenuItem printString.
+ self error:'no bounds found for: ',aWidgetOrMenuItemOrTab printString.
].
position := bounds center rounded.
self movePointerToScreenPosition:position speed:pixelsPerSecond.
@@ -1627,6 +1640,37 @@
].
"Created: / 23-07-2019 / 09:36:45 / Claus Gittinger"
+!
+
+where:where inComponent:aComponent
+ where == #center ifTrue:[
+ ^ aComponent center
+ ].
+ where == #leftCenter ifTrue:[
+ ^ aComponent leftCenter + (5@0).
+ ].
+ where == #rightCenter ifTrue:[
+ ^ aComponent rightCenter - (5@0).
+ ].
+ where == #topLeft ifTrue:[
+ ^ aComponent topLeft + (5@5).
+ ].
+ where == #topCenter ifTrue:[
+ ^ aComponent topCenter + (0@5).
+ ].
+ where == #topRight ifTrue:[
+ ^ aComponent topRight - (5@5).
+ ].
+ where == #bottomCenter ifTrue:[
+ ^ aComponent bottomCenter - (0 @ 5)
+ ].
+ where == #bottomLeft ifTrue:[
+ ^ aComponent bottomLeft + (5 @ -5)
+ ].
+ where == #bottomRight ifTrue:[
+ ^ aComponent bottomLeft - (5 @ 5)
+ ].
+ self error:'where is this'
! !
!ShowMeHowItWorks methodsFor:'running'!
@@ -1986,6 +2030,76 @@
"Created: / 23-07-2019 / 11:48:17 / Claus Gittinger"
! !
+!ShowMeHowItWorks::ItemInView class methodsFor:'documentation'!
+
+documentation
+"
+ documentation to be added.
+
+ class:
+ <a short class summary here, describing what instances represent>
+
+ responsibilities:
+ <describing what my main role is>
+
+ collaborators:
+ <describing with whom and how I talk to>
+
+ API:
+ <public api and main messages>
+
+ example:
+ <a one-line examples on how to use - can also be in a separate example method>
+
+ implementation:
+ <implementation points>
+
+ [author:]
+ exept MBP
+
+ [instance variables:]
+
+ [class variables:]
+
+ [see also:]
+
+"
+! !
+
+!ShowMeHowItWorks::ItemInView methodsFor:'accessing'!
+
+boundsInView
+ ^ boundsInView
+!
+
+item
+ ^ item
+!
+
+layout
+ ^ item layout
+!
+
+view
+ ^ view
+!
+
+view:viewArg item:itemArg boundsInView:boundsInViewArg
+ view := viewArg.
+ item := itemArg.
+ boundsInView := boundsInViewArg.
+! !
+
+!ShowMeHowItWorks::ItemInView methodsFor:'testing'!
+
+isMenuItem
+ ^ item askFor:#isMenuItem
+!
+
+isNoteBookTab
+ ^ item isKindOf:NoteBookView::Tab
+! !
+
!ShowMeHowItWorks class methodsFor:'documentation'!
version_CVS