Skip to content

Add basic event support for setting events #881

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 26 commits into
base: Pharo13
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
79e30d2
Get the real value when getting a setting presenter from a setting de…
hernanmd Nov 7, 2024
727a34b
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 8, 2024
03166c3
Add support for logging setting updates
hernanmd Nov 8, 2024
a8a0605
Merge 727a34b846d85fa377ad3c51302f32b2b8cb5be5
hernanmd Nov 8, 2024
8cf9483
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 13, 2024
e7498c5
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 15, 2024
cc0a4f2
Initialize the application before super initialization that needs the…
hernanmd Nov 15, 2024
d76f313
Add mocks for testing setting updates
hernanmd Nov 15, 2024
6ca3a6d
Add settings tracker mocks and tests
hernanmd Nov 15, 2024
6809bda
Merge branch 'Pharo13' into p13-settings-browser-support
hernanmd Nov 17, 2024
dd88eac
Add update setting blocks for tracking changes
hernanmd Nov 18, 2024
100fd90
Simplify settings events storage for now
hernanmd Nov 18, 2024
f9cb2b7
Simplify tests
hernanmd Nov 18, 2024
59fc8d6
Adding tests
hernanmd Nov 18, 2024
dc7f2cb
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 19, 2024
683e870
Add a tracker for updated settings.
hernanmd Nov 19, 2024
1f37706
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 19, 2024
420784d
Use submit events for text input presenters.
Nov 20, 2024
cfe453a
Add button to open changed settings history
Nov 20, 2024
9f4f02a
Fix unused variables
Nov 20, 2024
021023e
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 21, 2024
dc17239
Update session log initialization
Nov 21, 2024
410cdfe
Reset setting history before running tests (this is a temporary solut…
Nov 21, 2024
d145483
Merge branch 'pharo-spec:Pharo13' into p13-settings-browser-support
hernanmd Nov 25, 2024
2238ce0
Disable boolean test (test green in the interactive env but CI fails)
Nov 25, 2024
ab1b5d3
Remove unnecessary method
Nov 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/NewTools-SettingsBrowser-Tests/MockSettingTarget.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Class {
#name : 'MockSettingTarget',
#superclass : 'Object',
#category : 'NewTools-SettingsBrowser-Tests',
#package : 'NewTools-SettingsBrowser-Tests'
}

{ #category : 'accessing' }
MockSettingTarget class >> default [

^ true
]

{ #category : 'accessing' }
MockSettingTarget class >> default: aBoolean [

]
134 changes: 134 additions & 0 deletions src/NewTools-SettingsBrowser-Tests/StSettingsTrackerTest.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
Class {
#name : 'StSettingsTrackerTest',
#superclass : 'TestCase',
#instVars : [
'tracker'
],
#category : 'NewTools-SettingsBrowser-Tests',
#package : 'NewTools-SettingsBrowser-Tests'
}

{ #category : 'private' }
StSettingsTrackerTest >> newMockSettingDeclaration: id [

| declaration |

declaration := SettingDeclaration new
name: 'MockSettingDeclaration' , id asString;
yourself.
declaration
target: MockSettingTarget;
selector: #default;
default: true.
^ declaration.
]

{ #category : 'tests' }
StSettingsTrackerTest >> newSettingsTracker [

^ StSettingsTracker new
]

{ #category : 'running' }
StSettingsTrackerTest >> setUp [

super setUp.
tracker := StSettingsTracker new.

]

{ #category : 'tests' }
StSettingsTrackerTest >> submitPresenter: settingItem [

settingItem open.
settingItem setterPresenter adapter
keyDown: $s
shift: false
meta: true
control: false
option: false.
]

{ #category : 'running' }
StSettingsTrackerTest >> tearDown [

self class codeSupportAnnouncer unsubscribe: self.
"Clean SettingUpdated subscriptions"
(self class codeSupportAnnouncer subscriptions subscriptionsHandling: SettingUpdated new)
do: [ : s | self class codeSupportAnnouncer removeSubscription: s ].
tracker sessionLog ifNotEmpty: [ : collection | collection removeLast ].
super tearDown
]

{ #category : 'tests' }
StSettingsTrackerTest >> testBooleanSettingUpdated [
"Check if the updated setting was tracked"

| settingItem |

self
when: SettingUpdated
do: [ : ann |
self assert: ann oldValue.
self deny: ann newValue ].

settingItem := true asSettingPresenter: (self newMockSettingDeclaration: 1).
settingItem value: false.

]

{ #category : 'tests' }
StSettingsTrackerTest >> testNumberSettingUpdated [
"Check if the updated setting was tracked"

| settingItem |

self
when: SettingUpdated
do: [ : ann |
self assert: ann oldValue asNumber equals: 10.
self assert: ann newValue asNumber equals: 20 ].

settingItem := 10 asSettingPresenter: (self newMockSettingDeclaration: 2).
settingItem value: 20.


]

{ #category : 'tests' }
StSettingsTrackerTest >> testTextSettingUpdated [
"Check if the updated setting was tracked"

| settingItem |

self
when: SettingUpdated
do: [ : ann |
self assert: ann oldValue equals: 'Adios'.
self assert: ann newValue equals: 'Hola' ].

settingItem := 'Adios' asSettingPresenter: (self newMockSettingDeclaration: 3).
settingItem value: 'Hola'.

]

{ #category : 'accessing' }
StSettingsTrackerTest >> tracker [

^ tracker
]

{ #category : 'accessing' }
StSettingsTrackerTest >> tracker: anObject [

tracker := anObject
]

{ #category : 'tests' }
StSettingsTrackerTest >> when: anAnnouncement do: aBlock [

self class codeSupportAnnouncer weak
when: anAnnouncement
do: [ :ann | aBlock cull: ann ]
for: self
]
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ Class {
}

{ #category : 'initialization' }
StSettingBooleanPresenterItem >> initializePresenters [
StSettingBooleanPresenterItem >> initializePresenters [

setterPresenter := self newCheckBox
setterPresenter := self newCheckBox.
setterPresenter
state: self model realValue;
whenActivatedDo: [ self updateSetting: self model value: true ];
whenDeactivatedDo: [ self updateSetting: self model value: false ].
super initializePresenters.

whenDeactivatedDo: [ self updateSetting: self model value: false ];
whenChangedDo: self updateSettingBlock.
super initializePresenters
]

{ #category : 'initialization' }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ StSettingDirectoryPresenterItem >> initializePresenters [
setterPresenter := self newTextInput
beEditable;
placeholder: self model label;
whenSubmitDo: [ : newValue |
self codeSupportAnnouncer announce: (SettingUpdated
declaration: self model
oldValue: nil
newValue: newValue) ];
yourself.
labeledPresenter := (self instantiate: self labeledPresenterClass on: self)
label: self model label;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,12 @@ StSettingDropListPresenterItem >> updateSetting: aSettingDeclaration [
ifNotNil: [
(self model target perform: self model targetSelector)
perform: self model setSelector
with: aSettingDeclaration default ]

with: aSettingDeclaration default ].
"to do: https://github.com/pharo-spec/Spec/issues/1663"
self codeSupportAnnouncer announce: (SettingUpdated
declaration: self model
oldValue: nil
newValue: aSettingDeclaration)
]

{ #category : 'accessing' }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ StSettingMultipleDropListPresenterItem >> initializePresenters [

setterPresenter := self newDropList
items: #(#bold #italic #normal 'bold italic' );
selectItem: modelDefault emphasis;
selectItem: modelDefault emphasis;
whenSelectedItemChangedDo: self updateSettingBlock;
yourself.
super initializePresenters.
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ StSettingNumberPresenterItem >> beInteger [
{ #category : 'initialization' }
StSettingNumberPresenterItem >> initializePresenters [

setterPresenter := self newNumberInput.
setterPresenter := self newNumberInput
whenSubmitDo: self updateSettingBlock.
super initializePresenters.
]

Expand Down
18 changes: 18 additions & 0 deletions src/NewTools-SettingsBrowser/StSettingPresenterItem.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ Class {
#tag : 'Widgets'
}

{ #category : 'initialization' }
StSettingPresenterItem >> codeSupportAnnouncer [
"See comment in SystemEnvironment>>#codeSupportAnnouncer"

^ self class codeSupportAnnouncer
]

{ #category : 'layout' }
StSettingPresenterItem >> defaultLayout [

Expand Down Expand Up @@ -78,6 +85,17 @@ StSettingPresenterItem >> setterPresenter: anObject [
setterPresenter := anObject
]

{ #category : 'initialization' }
StSettingPresenterItem >> updateSettingBlock [
"Answer a <BlockClosure> responsible to announce that a setting has been updated"

^ [ : newValue |
self codeSupportAnnouncer announce: (SettingUpdated
declaration: self model
oldValue: self model realValue
newValue: newValue) ]
]

{ #category : 'accessing' }
StSettingPresenterItem >> value: anObject [
"Set the receiver's value to anObject"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ StSettingTextPresenterItem >> initializePresenters [
setterPresenter := self newTextInput
beEditable;
placeholder: self model label;
whenSubmitDo: [ : newValue |
self codeSupportAnnouncer announce: (SettingUpdated
declaration: self model
oldValue: nil
newValue: newValue) ];
yourself.
super initializePresenters.
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ Class {

{ #category : 'initialization' }
StSettingsCategoriesPresenter >> categoriesAsPresenters [
"Answer a <Collection> of <StSettingsCategoryItemPresenter> each one instantiated on a setting node <StSettingNode>
representing a category of settings"

^ self settingsCategories collect: [ : node |
(self
instantiate: StSettingsCategoryItemPresenter
on: node)
addStyle: 'superCategoryList' ]
on: node) addStyle: 'superCategoryList' ]
]

{ #category : 'accessing' }
Expand Down
40 changes: 35 additions & 5 deletions src/NewTools-SettingsBrowser/StSettingsMainPresenter.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ Class {
'detailsPresenter',
'mainCategoriesPresenter',
'buttonBarPresenter',
'exporter'
'exporter',
'tracker'
],
#category : 'NewTools-SettingsBrowser-UI',
#package : 'NewTools-SettingsBrowser',
Expand Down Expand Up @@ -136,16 +137,27 @@ StSettingsMainPresenter >> defaultOutputPort [
StSettingsMainPresenter >> exportSettings [
| nodes actions |

self exportedFileFullName asFileReference exists
ifTrue: [
(self confirm: 'Do you want to overwrite the existing settings?')
ifFalse: [ ^ self ] ].
nodes := self settingsTree nodeList.
actions := nodes
collect: [ : e | e item exportSettingAction ]
thenReject: [ : e | e isNil ].

self exporter exportAllSettings: actions.
self inform: 'Settings were exported to ' , self exporter exportedFileFullName.
self inform: 'Settings were exported to ' , self exportedFileFullName.
buttonBarPresenter enable
]

{ #category : 'initialization' }
StSettingsMainPresenter >> exportedFileFullName [
"Answer a <String> with the receiver's file name used to store the exported settings"

^ self exporter exportedFileFullName
]

{ #category : 'accessing' }
StSettingsMainPresenter >> exporter [

Expand All @@ -167,8 +179,9 @@ StSettingsMainPresenter >> initialize [
self currentApplication
propertyAt: #settingsTree ifAbsentPut: [ StSettingsTree new ];
styleSheet: self class styleSheet.
super initialize.
super initialize.
exporter := StSettingsExporter new.
tracker := StSettingsTracker new.
]

{ #category : 'initialization' }
Expand All @@ -177,7 +190,12 @@ StSettingsMainPresenter >> initializeButtonBar [
buttonBarPresenter := self newButtonBar
placeAtEnd;
add: (self newButton
addStyle: 'large';
icon: (self iconNamed: #history);
label: 'History';
help: 'Changed settings';
action: [ StSettingsTracker sessionLog inspect ];
yourself);
add: (self newButton
icon: (self iconNamed: #openFromUrl);
label: 'Load';
help: 'Load settings from a file';
Expand All @@ -193,7 +211,7 @@ StSettingsMainPresenter >> initializeButtonBar [
add: (self newButton
icon: (self iconNamed: #cancel);
action: [ self delete ];
label: 'Cancel';
label: 'Close';
yourself).
]

Expand Down Expand Up @@ -263,3 +281,15 @@ StSettingsMainPresenter >> selectDialog: fileReferneces [
openModal.

]

{ #category : 'accessing' }
StSettingsMainPresenter >> tracker [

^ tracker
]

{ #category : 'accessing' }
StSettingsMainPresenter >> tracker: anObject [

tracker := anObject
]
Loading
Loading