From cfcfd47f6351762af73034778f35494be1891df2 Mon Sep 17 00:00:00 2001 From: AlexisCnockaert Date: Mon, 20 Apr 2026 14:03:21 +0200 Subject: [PATCH] [Method Browser] Move `Reuse window` to the toolbar So it is more related to what already exist for the UI --- .../StMethodBrowser.class.st | 11 +-- .../StMethodBrowserTest.class.st | 9 ++- .../StMethodToolbarPresenter.class.st | 72 +++++++++++++------ 3 files changed, 57 insertions(+), 35 deletions(-) diff --git a/src/NewTools-MethodBrowsers/StMethodBrowser.class.st b/src/NewTools-MethodBrowsers/StMethodBrowser.class.st index ff6e73e09..fe31057fa 100644 --- a/src/NewTools-MethodBrowsers/StMethodBrowser.class.st +++ b/src/NewTools-MethodBrowsers/StMethodBrowser.class.st @@ -18,8 +18,7 @@ Class { 'refreshingBlock', 'textPresenter', 'highlight', - 'filterPresenter', - 'reuseWindowCheckbox' + 'filterPresenter' ], #classVars : [ 'NavigateInPlace', @@ -544,7 +543,6 @@ StMethodBrowser >> horizontalLayout [ add: (SpBoxLayout newTopToBottom add: methodList; add: filterPresenter filterInputPresenter expand: false; - add: reuseWindowCheckbox expand: false; yourself); add: (SpBoxLayout newTopToBottom add: textPresenter; @@ -578,11 +576,7 @@ StMethodBrowser >> initializePresenters [ filterPresenter := self instantiate: SpFilteringListPresenter. filterPresenter matchSubstring. filterPresenter display: [ :m | (self methodClassNameForItem: m) , ' >> ' , m selector ]. - reuseWindowCheckbox := self newCheckBox - label: 'Reuse window'; - help: 'If checked, new searches will replace current results.'; - state: self class navigateInPlace; - whenChangedDo: [ :state | self class navigateInPlace: state ]. + self initializeDropList ] @@ -951,7 +945,6 @@ StMethodBrowser >> verticalLayout [ add: (SpBoxLayout newTopToBottom add: methodList; add: filterPresenter filterInputPresenter expand: false; - add: reuseWindowCheckbox expand: false; yourself); add: (SpBoxLayout newTopToBottom add: textPresenter; diff --git a/src/NewTools-MethodBrowsers/StMethodBrowserTest.class.st b/src/NewTools-MethodBrowsers/StMethodBrowserTest.class.st index 61304a184..c42fd9d7b 100644 --- a/src/NewTools-MethodBrowsers/StMethodBrowserTest.class.st +++ b/src/NewTools-MethodBrowsers/StMethodBrowserTest.class.st @@ -214,14 +214,17 @@ StMethodBrowserTest >> testRefreshingBlockWithLiteralString [ { #category : 'tests' } StMethodBrowserTest >> testReuseWindowCheckboxInitialState [ - | presenter | + | presenter initialSetting | + initialSetting := StMethodBrowser navigateInPlace. [ StMethodBrowser navigateInPlace: true. presenter := StMethodBrowser new. - self assert: (presenter instVarNamed: #reuseWindowCheckbox) state. + self assert: presenter toolbarPresenter reuseWindowButton state. StMethodBrowser navigateInPlace: false. presenter := StMethodBrowser new. - self deny: (presenter instVarNamed: #reuseWindowCheckbox) state ] ensure: [ presenter ifNotNil: [ presenter delete ] ] + self deny: presenter toolbarPresenter reuseWindowButton state ] ensure: [ + StMethodBrowser navigateInPlace: initialSetting. + presenter ifNotNil: [ presenter delete ] ] ] { #category : 'tests' } diff --git a/src/NewTools-MethodBrowsers/StMethodToolbarPresenter.class.st b/src/NewTools-MethodBrowsers/StMethodToolbarPresenter.class.st index 39f11b198..9b636b680 100644 --- a/src/NewTools-MethodBrowsers/StMethodToolbarPresenter.class.st +++ b/src/NewTools-MethodBrowsers/StMethodToolbarPresenter.class.st @@ -15,7 +15,8 @@ Class { 'versionButton', 'dropList', 'toolbarPresenter', - 'messageList' + 'messageList', + 'reuseWindowButton' ], #category : 'NewTools-MethodBrowsers-Base', #package : 'NewTools-MethodBrowsers', @@ -97,48 +98,67 @@ StMethodToolbarPresenter >> emptyDropList [ dropList emptyList ] +{ #category : 'as yet unclassified' } +StMethodToolbarPresenter >> iconForReuseState: aBoolean [ + + ^ aBoolean + ifTrue: [ self iconNamed: #checkboxSelected ] + ifFalse: [ self iconNamed: #checkboxUnselected ] +] + { #category : 'initialization' } StMethodToolbarPresenter >> initializePresenters [ (browseButton := self newToolbarButton) - label: 'Browse'; + label: 'Browse'; icon: (self iconNamed: #smallSystemBrowser); help: 'Browse current selected method'; action: [ self doBrowseMethod ]. - (usersButton := self newToolbarButton) - label: 'References'; + (usersButton := self newToolbarButton) + label: 'References'; icon: (self iconNamed: #smallFind); help: 'Browse references of current selected class'; action: [ self doBrowseUsers ]. - (sendersButton := self newToolbarButton) - label: 'Senders'; + (sendersButton := self newToolbarButton) + label: 'Senders'; icon: (self iconNamed: #smallFind); help: 'Browse senders of current selected method'; action: [ self doBrowseSenders ]. - (implementorsButton := self newToolbarButton) - label: 'Implementors'; + (implementorsButton := self newToolbarButton) + label: 'Implementors'; icon: (self iconNamed: #smallFind); help: 'Browse implementors of current selected method'; action: [ self doBrowseImplementors ]. - (versionButton := self newToolbarButton) - label: 'Versions'; + (versionButton := self newToolbarButton) + label: 'Versions'; icon: (self iconNamed: #history); help: 'Browse versions of current selected method'; action: [ self doBrowseVersions ]. - - toolbarPresenter := self newToolbar - displayMode: self application toolbarDisplayMode; - add: browseButton; - add: usersButton; - add: sendersButton; - add: implementorsButton; - add: versionButton; - yourself. - + reuseWindowButton := self newToolbarToggleButton + label: 'Reuse window'; + help: 'If checked, new searches will replace current results.'; + state: StMethodBrowser navigateInPlace; + icon: (self iconForReuseState: StMethodBrowser navigateInPlace); + whenActivatedDo: [ + StMethodBrowser navigateInPlace: true. + reuseWindowButton icon: (self iconForReuseState: true) ]; + whenDeactivatedDo: [ + StMethodBrowser navigateInPlace: false. + reuseWindowButton icon: (self iconForReuseState: false) ]. + toolbarPresenter := self newToolbar + displayMode: self application toolbarDisplayMode; + add: browseButton; + add: usersButton; + add: sendersButton; + add: implementorsButton; + add: versionButton; + add: reuseWindowButton; + yourself. + dropList := self newDropList - display: [ :item | item label ]; - whenSelectedItemChangedDo: [ :item | item value ]; - yourself + display: [ :item | item label ]; + whenSelectedItemChangedDo: [ :item | item value ]; + yourself ] { #category : 'accessing' } @@ -166,6 +186,12 @@ StMethodToolbarPresenter >> replaceVersionWithLabel: aString action: aBlock [ action: aBlock ] +{ #category : 'accessing' } +StMethodToolbarPresenter >> reuseWindowButton [ + + ^ reuseWindowButton +] + { #category : 'accessing' } StMethodToolbarPresenter >> selectFirst [