# HG changeset patch # User Claus Gittinger # Date 1572525645 -3600 # Node ID 34ea88ec4dc4f13de714d197f21afe529350e3e6 # Parent 908abf2676e7f474ec2e53c90a67edd04ccd779c #FEATURE by exept class: ShowMeHowItWorks class definition added: #findApplication:ifMultiple: #popApplication #pushApplication: #selectComponent: comment/format in: #application: changed: #select: #showing:saying:do: diff -r 908abf2676e7 -r 34ea88ec4dc4 ShowMeHowItWorks.st --- a/ShowMeHowItWorks.st Thu Oct 31 10:25:01 2019 +0100 +++ b/ShowMeHowItWorks.st Thu Oct 31 13:40:45 2019 +0100 @@ -8,7 +8,7 @@ instanceVariableNames:'application opStream streamStack lastComponentName lastComponent lastResult voice translate language verifying closeApplicationWhenFinished defaultComponentWaitTime ui - theShowFile defaultElementTimeout' + theShowFile defaultElementTimeout applicationStack' classVariableNames:'IntroShownCount DebugMode StartLabel' poolDictionaries:'' category:'Interface-Help' @@ -220,7 +220,7 @@ !ShowMeHowItWorks methodsFor:'accessing'! application:anApplication - "if set, only that application is presented (widget search is limtied to that one)" + "if set, only that application is presented (widget search is limited to that one)" application := anApplication. ! @@ -315,6 +315,32 @@ "Modified: / 19-07-2019 / 16:13:33 / Claus Gittinger" ! +popApplication + + + "go back to the previous app" + + application := applicationStack removeLast. +! + +pushApplication:newApplicationOrName + + + "goto another app, remembering where we were before" + + |newApplication| + + (newApplication := newApplicationOrName) isString ifTrue:[ + newApplication := self findApplication:newApplicationOrName ifMultiple:nil. + self assert: newApplication notNil. + ]. + + applicationStack isNil ifTrue:[applicationStack := OrderedCollection new]. + + applicationStack add:application. + self application:newApplication. +! + raise:what @@ -417,8 +443,8 @@ |xLatedMessage messageView talkDone| xLatedMessage := (translate and:[application notNil]) - ifTrue:[application resources string:message] - ifFalse:[message]. + ifTrue:[application resources stringWithCRs:message] + ifFalse:[message withCRs]. self assert:(operationsOrNothing isNil or:[operationsOrNothing isSequenceable]). @@ -872,13 +898,15 @@ select:itemsIndexOrLabelOrPattern "select an item by label, allowed after moving to: - aComboBox - aSelectionInListView + a ComboBox + a SelectionInListView + a NoteBook + a DSVColumnView " - |idx component| + |idx component yPos tab| verifying ifTrue:[^ self]. @@ -911,8 +939,6 @@ ^ self ]. (component isKindOf:HierarchicalListView) ifTrue:[ - |idx yPos| - itemsIndexOrLabelOrPattern isInteger ifTrue:[ idx := itemsIndexOrLabelOrPattern ] ifFalse:[ @@ -934,8 +960,6 @@ ^ self ]. (component isKindOf:SelectionInListModelView) ifTrue:[ - |idx yPos| - itemsIndexOrLabelOrPattern isInteger ifTrue:[ idx := itemsIndexOrLabelOrPattern ] ifFalse:[ @@ -960,16 +984,46 @@ (component isKindOf:ItemInView) ifTrue:[ component isMenuItem ifTrue:[ self movePointerToComponent:component. - self halt. + self click. + ^ self ]. ]. - self error:('cannot select this component: %1' bindWith:component className) + (component isKindOf:NoteBookView) ifTrue:[ + (idx := itemsIndexOrLabelOrPattern) isInteger ifFalse:[ + idx := component indexOfTabNamed:itemsIndexOrLabelOrPattern + ]. + tab := component tabAtIndex:idx. + self movePointerToComponent:component offset:(tab layout center). + component selection:idx. + ^ self + ]. + (component isKindOf:DSVColumnView) ifTrue:[ + (idx := itemsIndexOrLabelOrPattern) isInteger ifFalse:[ + self halt. + ]. + yPos := ((component yVisibleOfRowNr:idx) + (component yVisibleOfRowNr:idx+1)) // 2. + self movePointerToComponent:component offset:(1 @ yPos). + component selectRow:idx. + ^ self + ]. + + self error:('cannot select "%1" this component: %2' bindWith:itemsIndexOrLabelOrPattern with:component className) "Created: / 19-07-2019 / 12:34:25 / Claus Gittinger" "Modified (format): / 19-07-2019 / 14:55:34 / Claus Gittinger" ! +selectComponent:componentName + "Leaves component in lastComponent without moving" + + + + |component| + + component := self componentNamed:componentName. +! + selectIndex:itemsIndex "select an item by index, allowed after moving to: @@ -1271,6 +1325,44 @@ "Modified (comment): / 23-07-2019 / 09:31:53 / Claus Gittinger" ! +findApplication:classNameOrWindowTitle ifMultiple:exceptionalValue + "find an application by name" + + |candidates| + + candidates := IdentitySet new. + + "/ search through all current applications + WindowGroup scheduledWindowGroups do:[:eachWG | + |eachApp| + + (eachApp := eachWG application) notNil ifTrue:[ + ((classNameOrWindowTitle match:eachApp className) + or:[(classNameOrWindowTitle match:eachApp class nameWithoutPrefix) + or:[(classNameOrWindowTitle match:eachApp mainWindow label)]]) ifTrue:[ + candidates add:eachApp + ]. + ]. + ]. + candidates size == 1 ifTrue:[ + ^ candidates first + ]. + candidates notEmpty ifTrue:[ + "/ multiple elements (probably there are multiple topviews open... + "/ check the current windowGroup + ^ exceptionalValue value + ]. + ^ nil + + " + ShowMeHowItWorks basicNew findApplication:'Inspector*' ifMultiple:nil. + " + + "Created: / 19-07-2019 / 12:02:30 / Claus Gittinger" + "Modified: / 19-07-2019 / 16:44:30 / Claus Gittinger" + "Modified (comment): / 23-07-2019 / 09:32:44 / Claus Gittinger" +! + findComponent:componentName "find a component by name - in the active and possibly in any app. Can return either a view or a menu item"