diff --git a/src/NewTools-Core-Tests/StPharoApplicationTest.class.st b/src/NewTools-Core-Tests/StPharoApplicationTest.class.st index 30932d83..f870fbbc 100644 --- a/src/NewTools-Core-Tests/StPharoApplicationTest.class.st +++ b/src/NewTools-Core-Tests/StPharoApplicationTest.class.st @@ -9,6 +9,27 @@ Class { #tag : 'Application' } +{ #category : 'tests' } +StPharoApplicationTest >> testSettingChangesSubscription [ + + | app presenter window oldSetting | + app := StPharoApplication basicNew. + app subscribeToSettingsAnnouncements. + presenter := StTestSettingChangeReactivePresenter new. + presenter application: app. + window := SpWindowPresenter presenter: presenter. + app registerWindow: window. + + self assert: presenter changedSetting isNil. + + oldSetting := StPharoSettings codeShowLineNumbers. + StPharoSettings codeShowLineNumbers: oldSetting. + + self + assert: presenter changedSetting class + identicalTo: CodeShowLineNumbersChanged +] + { #category : 'tests' } StPharoApplicationTest >> testToolRegistration [ diff --git a/src/NewTools-Core-Tests/StTestSettingChangeReactivePresenter.class.st b/src/NewTools-Core-Tests/StTestSettingChangeReactivePresenter.class.st new file mode 100644 index 00000000..a987987b --- /dev/null +++ b/src/NewTools-Core-Tests/StTestSettingChangeReactivePresenter.class.st @@ -0,0 +1,40 @@ +" +I'm a test presenter for testing how the StPresenters react to settings changes announcements from their applications. +" +Class { + #name : 'StTestSettingChangeReactivePresenter', + #superclass : 'StPresenter', + #instVars : [ + 'changedSetting' + ], + #category : 'NewTools-Core-Tests-Application', + #package : 'NewTools-Core-Tests', + #tag : 'Application' +} + +{ #category : 'accessing' } +StTestSettingChangeReactivePresenter >> changedSetting [ + + ^ changedSetting +] + +{ #category : 'layout' } +StTestSettingChangeReactivePresenter >> defaultLayout [ + ^SpBoxLayout new +] + +{ #category : 'initialization' } +StTestSettingChangeReactivePresenter >> initialize [ + + super initialize. + self announcer + when: CodeShowLineNumbersChanged + send: #settingChanged: + to: self +] + +{ #category : 'as yet unclassified' } +StTestSettingChangeReactivePresenter >> settingChanged: aSettingChangedAnnouncement [ + + changedSetting := aSettingChangedAnnouncement +] diff --git a/src/NewTools-Core/StPharoApplication.class.st b/src/NewTools-Core/StPharoApplication.class.st index c1b182d6..c2210b36 100644 --- a/src/NewTools-Core/StPharoApplication.class.st +++ b/src/NewTools-Core/StPharoApplication.class.st @@ -47,6 +47,12 @@ StPharoApplication class >> use: application during: aBlock [ ^ aBlock ensure: [ Current := oldCurrent ] ] +{ #category : 'settings' } +StPharoApplication >> codeShowLineNumbers [ + + ^ StPharoSettings codeShowLineNumbers +] + { #category : 'accessing - resources' } StPharoApplication >> defaultWindowExtent [ @@ -64,14 +70,18 @@ StPharoApplication >> defaultWindowPresenterClass [ StPharoApplication >> initialize [ super initialize. - self initializeConfiguration + self initializeConfiguration. + self subscribeToSettingsAnnouncements ] { #category : 'initialization' } StPharoApplication >> initializeConfiguration [ self resetConfiguration. - self class codeSupportAnnouncer weak when: UIThemeChanged send: #resetConfiguration to: self + self class codeSupportAnnouncer weak + when: UIThemeChanged + send: #resetConfiguration + to: self ] { #category : 'private - factory' } @@ -115,6 +125,13 @@ StPharoApplication >> run [ StPharoApplication >> shutDown: quitting [ ] +{ #category : 'settings' } +StPharoApplication >> stPharoSettingChanged: aPharoSettingChangeAnnouncement [ + + (self windows collect: #presenter) do: [ :presenter | + presenter announce: aPharoSettingChangeAnnouncement ] +] + { #category : 'system startup' } StPharoApplication >> startUp: resuming [ @@ -122,6 +139,15 @@ StPharoApplication >> startUp: resuming [ self resetBackend. ] +{ #category : 'settings' } +StPharoApplication >> subscribeToSettingsAnnouncements [ + + self class codeSupportAnnouncer weak + when: CodeShowLineNumbersChanged + send: #stPharoSettingChanged: + to: self +] + { #category : 'tool management' } StPharoApplication >> toolNamed: aName [ diff --git a/src/NewTools-Core/StPharoSettings.class.st b/src/NewTools-Core/StPharoSettings.class.st index e708d5fa..adea4c12 100644 --- a/src/NewTools-Core/StPharoSettings.class.st +++ b/src/NewTools-Core/StPharoSettings.class.st @@ -14,19 +14,15 @@ Class { StPharoSettings class >> codeShowLineNumbers [ "Defines if code editors will display line numbers" - ^ CodeShowLineNumbers ifNil: [ CodeShowLineNumbers := self defaultCodeShowLineNumbers ] + ^ CodeShowLineNumbers ifNil: [ + CodeShowLineNumbers := StPharoApplication defaultCodeShowLineNumbers ] ] { #category : 'settings' } -StPharoSettings class >> codeShowLineNumbers: aBoolean [ +StPharoSettings class >> codeShowLineNumbers: aBoolean [ - CodeShowLineNumbers := aBoolean -] - -{ #category : 'defaults' } -StPharoSettings class >> defaultCodeShowLineNumbers [ - - ^ true + CodeShowLineNumbers := aBoolean. + self codeSupportAnnouncer announce: CodeShowLineNumbersChanged new ] { #category : 'defaults' } diff --git a/src/NewTools-Debugger/StDebugger.class.st b/src/NewTools-Debugger/StDebugger.class.st index 521102d7..40ecf658 100644 --- a/src/NewTools-Debugger/StDebugger.class.st +++ b/src/NewTools-Debugger/StDebugger.class.st @@ -531,6 +531,12 @@ StDebugger >> codeLayout [ yourself ] +{ #category : 'subscription' } +StDebugger >> codeShowLineNumbersChanged: aCodeShowLineNumbersChangedAnnouncement [ + + self code announce: aCodeShowLineNumbersChangedAnnouncement +] + { #category : 'initialization' } StDebugger >> connectPresenters [ @@ -797,10 +803,11 @@ StDebugger >> initialize [ super initialize. self debuggerActionModel updateContextPredicate. self forceSessionUpdate. - self subscribeToExtensionToggleAnnouncement. + self subscribeToExtensionToggleAnnouncement. self subscribeToLayoutChangesAnnouncement. - - programmaticallyClosed := false. + self subscribeToSettingsChangesAnnouncements. + + programmaticallyClosed := false ] { #category : 'initialization' } @@ -815,7 +822,7 @@ StDebugger >> initializeCode [ code := self instantiate: StDebuggerCodePresenter. code debuggerActionModel: self debuggerActionModel. - code whenSubmitDo: [ :text | + code whenSubmitDo: [ :text | self acceptCodeChanges: text string forContext: self selectedContext ]. code whenResetDo: [ self discardCodeChangesFor: self selectedContext ] ] @@ -857,7 +864,6 @@ StDebugger >> initializePresenters [ self initializeInspector. self initializeExtensionTools. self setStackAndCodeContainer. - self layout: self defaultLayout ] @@ -1200,6 +1206,12 @@ StDebugger >> settings [ ^ self class settings ] +{ #category : 'subscription' } +StDebugger >> showLineNumbersAndUpdate [ + + self code showLineNumbersAndUpdate +] + { #category : 'stack' } StDebugger >> stack [ ^ self debuggerActionModel stack @@ -1374,6 +1386,15 @@ StDebugger >> subscribeToLayoutChangesAnnouncement [ self class codeSupportAnnouncer weak when: StDebuggerLayoutChangedAnnouncement send: #updateLayout to: self ] +{ #category : 'subscription' } +StDebugger >> subscribeToSettingsChangesAnnouncements [ + + self announcer + when: CodeShowLineNumbersChanged + send: #codeShowLineNumbersChanged: + to: self +] + { #category : 'toolbar' } StDebugger >> toolbarAdvancedCommandsGroups [