Skip to content

Commit

Permalink
add GtPharoSelectAndScrollToMethodRepeatedTask [feenkcom/gtoolkit#3908
Browse files Browse the repository at this point in the history
]
  • Loading branch information
JurajKubelka committed Jul 17, 2024
1 parent f5f7c69 commit e139036
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 26 deletions.
31 changes: 5 additions & 26 deletions src/GToolkit-Pharo-Coder-UI/GtPharoBehaviorCoderElement.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,12 @@ GtPharoBehaviorCoderElement >> actOnPackageUpdated: ann [

{ #category : #callbacks }
GtPharoBehaviorCoderElement >> actOnSelectMethod: aGtClassCoderMethodNavigationAnnouncement [
| aMethod tab selectTabBlock selectMethodBlock |

| aMethod aTask |
aMethod := aGtClassCoderMethodNavigationAnnouncement method.

tab := contentTabs viewModel tabs
detect: [ :each | each widget label asString = 'Methods' ]
ifNone: [ ^ self ].

tab isSelected
ifFalse: [
selectTabBlock := [ tab select ].
self executeTask: selectTabBlock ].

selectMethodBlock := [ self selectAndScrollToMethod: aMethod ].
self executeTask: selectMethodBlock
aTask := GtPharoSelectAndScrollToMethodRepeatedTask new
method: aMethod;
contentTabs: contentTabs.
self enqueueTask: aTask.
]

{ #category : #accessing }
Expand Down Expand Up @@ -269,18 +260,6 @@ GtPharoBehaviorCoderElement >> removeContentTabs [
contentTabs := nil ]
]

{ #category : #'updating ui' }
GtPharoBehaviorCoderElement >> selectAndScrollToMethod: aMethod [

contentTabs content
allChildrenBreadthFirstDetect: [ :eachElement | eachElement isKindOf: GtPharoStreamingMethodsCoderElement ]
ifFound: [ :theElement |
theElement streamingCodersViewModel
expandAndFocusCompiledMethod: aMethod;
scrollToCompiledMethod: aMethod ]
ifNone: [ "ignore" ]
]

{ #category : #'building ui' }
GtPharoBehaviorCoderElement >> streamingMethodCodersElement [
^ contentTabs content
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
"
I wait for `Methods` tab provided by a given {{gtMethod: GtPharoSelectAndScrollToMethodRepeatedTask >> #contentTabs}}.
Then I wait for a {{gtClass:GtPharoStreamingMethodsCoderElement}} element.
Once that element is available, I expand, focus and scroll to a given {{gtMethod: GtPharoSelectAndScrollToMethodRepeatedTask>>#method | label=#selector}}.
I am used in {{gtMethod:GtPharoBehaviorCoderElement>>#actOnSelectMethod:}}.
"
Class {
#name : #GtPharoSelectAndScrollToMethodRepeatedTask,
#superclass : #BlRepeatedTask,
#instVars : [
'method',
'contentTabs',
'maxRepetitions',
'counter'
],
#category : #'GToolkit-Pharo-Coder-UI-Utilities'
}

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> contentTabs [
<return: #BrTabGroup>
^ contentTabs
]

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> contentTabs: aBrTabGroup [
self
assert: [ aBrTabGroup isNotNil ]
description: [ 'Tab group must be non-nil' ].
self
assert: [ contentTabs isNil ]
description: [ 'Tab group can be initialized only once' ].

contentTabs := aBrTabGroup
]

{ #category : #initialization }
GtPharoSelectAndScrollToMethodRepeatedTask >> initialize [
super initialize.

"Wait delay * maxRepetitions time,
which is approximately 500ms * 144 = 72 seconds"
maxRepetitions := 144.
counter := 0.
]

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> maxRepetitions [
^ maxRepetitions
]

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> maxRepetitions: anInteger [
maxRepetitions := anInteger
]

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> method [
<return: #CompiledMethod>
^ method
]

{ #category : #accessing }
GtPharoSelectAndScrollToMethodRepeatedTask >> method: aCompiledMethod [
self
assert: [ aCompiledMethod isNotNil ]
description: [ 'Method must be non-nil' ].
self
assert: [ method isNil ]
description: [ 'Method can be initialized only once' ].

method := aCompiledMethod
]

{ #category : #hooks }
GtPharoSelectAndScrollToMethodRepeatedTask >> onEnqueuedInElement: anElement [
element == anElement
ifFalse: [ counter := 0 ].

super onEnqueuedInElement: anElement.
]

{ #category : #'api - running' }
GtPharoSelectAndScrollToMethodRepeatedTask >> onRun [
| aTab |
method ifNil: [ self stop. ^ self ].
contentTabs ifNil: [ self stop. ^ self ].
counter > maxRepetitions ifTrue: [ self stop. ^ self ].
counter := counter + 1.

aTab := contentTabs viewModel tabs
detect: [ :each | each widget label asString = 'Methods' ]
ifNone: [ ^ self ].

aTab isSelected ifFalse: [ aTab select ].

contentTabs content
allChildrenBreadthFirstDetect: [ :eachElement |
eachElement isKindOf: GtPharoStreamingMethodsCoderElement ]
ifFound: [ :theElement |
theElement streamingCodersViewModel
expandAndFocusCompiledMethod: method;
scrollToCompiledMethod: method.
self stop ]
ifNone: [ "ignore" ]
]

{ #category : #'api - running' }
GtPharoSelectAndScrollToMethodRepeatedTask >> stop [
super stop.
counter := 0.
]

0 comments on commit e139036

Please sign in to comment.