# HG changeset patch # User Claus Gittinger # Date 1571570120 -7200 # Node ID 4ed3796c2d60af78acea08600dbeca2b96553306 # Parent 0b36f57fd1c995db8c249083cfb35c210b9584a2 #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 diff -r 0b36f57fd1c9 -r 4ed3796c2d60 ShowMeHowItWorks.st --- 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: + + + responsibilities: + + + collaborators: + + + API: + + + example: + + + implementation: + + + [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