From 23dca172d9cc8e5f5e1da40e5bc70a7a43e91414 Mon Sep 17 00:00:00 2001 From: Eric Winger Date: Thu, 30 Nov 2023 14:41:09 -0800 Subject: [PATCH] When closing a browser ask before discarding edits. Includes workaround pharo issue https://github.com/pharo-project/pharo/issues/15646, #okToChange returning true incorrectly. See correct implementation in JadeiteWindowPrsenter>>okToChange. Rename okToChangeSelections to `canDiscardEdits` to conform with spec2 naming and simpler code. --- Jadeite-Browser/JadeiteBrowser.class.st | 6 ++++++ .../JadeiteBrowserPresenter.class.st | 13 +++++++++++++ .../JadeiteMethodListPresenter.class.st | 13 +++++++++++++ .../JadeiteListAdapter.class.st | 2 +- .../JadeiteListPresenter.class.st | 18 +++++++++--------- .../JadeiteNotebookPresenter.class.st | 12 ++++++------ .../JadeiteTableAdapter.class.st | 2 +- .../JadeiteTablePresenter.class.st | 12 ++++++------ .../JadeiteWindowPresenter.class.st | 16 ++++++++++++++++ 9 files changed, 71 insertions(+), 23 deletions(-) diff --git a/Jadeite-Browser/JadeiteBrowser.class.st b/Jadeite-Browser/JadeiteBrowser.class.st index 16ae981..d0239fb 100644 --- a/Jadeite-Browser/JadeiteBrowser.class.st +++ b/Jadeite-Browser/JadeiteBrowser.class.st @@ -237,6 +237,12 @@ JadeiteBrowser >> methodsListPresenter [ ^ (tabs pages at: tabs selectedPageIndex) methodListPresenter ] +{ #category : 'testing' } +JadeiteBrowser >> okToClose [ + + ^self activePresenter canDiscardEdits +] + { #category : 'actions' } JadeiteBrowser >> openBrowserTab [ diff --git a/Jadeite-Browser/JadeiteBrowserPresenter.class.st b/Jadeite-Browser/JadeiteBrowserPresenter.class.st index b81ba86..e0f52ba 100644 --- a/Jadeite-Browser/JadeiteBrowserPresenter.class.st +++ b/Jadeite-Browser/JadeiteBrowserPresenter.class.st @@ -539,6 +539,19 @@ JadeiteBrowserPresenter >> buildProjectTab [ name: 'projectInfoTab' ] +{ #category : 'testing' } +JadeiteBrowserPresenter >> canDiscardEdits [ + + self methodSourcePresenter hasUnacceptedEdits ifTrue: [ + (MessageBox confirm: + 'You have unsaved changes. Discard changes and continue?') + ifTrue: [ + self methodSourcePresenter hasUnacceptedEdits: false. + ^ true ]. + ^ false ]. + ^ true +] + { #category : 'as yet unclassified' } JadeiteBrowserPresenter >> categoriesMenuStrings [ diff --git a/Jadeite-MethodBrowser/JadeiteMethodListPresenter.class.st b/Jadeite-MethodBrowser/JadeiteMethodListPresenter.class.st index 4608d89..89aabf0 100644 --- a/Jadeite-MethodBrowser/JadeiteMethodListPresenter.class.st +++ b/Jadeite-MethodBrowser/JadeiteMethodListPresenter.class.st @@ -48,6 +48,19 @@ JadeiteMethodListPresenter >> browseMethodHistory [ ^JadeiteMethodHistoryBrowser showOnClass: methodService classService selector: methodService ] +{ #category : 'testing' } +JadeiteMethodListPresenter >> canDiscardEdits [ + + self methodSourcePresenter hasUnacceptedEdits ifTrue: [ + (MessageBox confirm: + 'You have unsaved changes. Discard changes and continue?') + ifTrue: [ + self methodSourcePresenter hasUnacceptedEdits: false. + ^ true ] + ifFalse: [ ^ false ] ]. + ^ true +] + { #category : 'as yet unclassified' } JadeiteMethodListPresenter >> cleanupComparisonBrowser [ self todo:[comparisonPresenter diff --git a/Jadeite-SupportClasses/JadeiteListAdapter.class.st b/Jadeite-SupportClasses/JadeiteListAdapter.class.st index 6e28eef..46c81e4 100644 --- a/Jadeite-SupportClasses/JadeiteListAdapter.class.st +++ b/Jadeite-SupportClasses/JadeiteListAdapter.class.st @@ -11,7 +11,7 @@ JadeiteListAdapter >> buildWidget [ datasource := SpMorphicListDataSource new. datasource model: self model. widget := JadeiteTableMorph new "<<> newNameSortedList [ ^ inst ] +{ #category : 'testing' } +JadeiteListPresenter >> canDiscardEdits [ + + ^self owner canDiscardEdits +] + { #category : 'selection' } JadeiteListPresenter >> clear [ @@ -72,12 +78,6 @@ JadeiteListPresenter >> newEmptyModel [ ^ ListModel on: OrderedCollection new ] -{ #category : 'testing' } -JadeiteListPresenter >> okToChangeSelections [ - - ^self owner okToChangeSelections -] - { #category : 'api' } JadeiteListPresenter >> parentPresenter [ @@ -116,13 +116,13 @@ JadeiteListPresenter >> retrievePresenter [ { #category : 'testing' } JadeiteListPresenter >> selectIndex: anArray [ - self okToChangeSelections ifFalse: [ ^ self ]. + self canDiscardEdits ifFalse: [ ^ self ]. ^ super selectIndex: anArray ] { #category : 'selection' } JadeiteListPresenter >> selection: anObject [ - self okToChangeSelections ifFalse:[^self]. + self canDiscardEdits ifFalse:[^self]. ^self selectItem: anObject ] @@ -152,7 +152,7 @@ JadeiteListPresenter >> selections [ { #category : 'selection' } JadeiteListPresenter >> selections: aCollection [ - self okToChangeSelections ifFalse:[^self]. + self canDiscardEdits ifFalse:[^self]. self selectItems: aCollection ] diff --git a/Jadeite-SupportClasses/JadeiteNotebookPresenter.class.st b/Jadeite-SupportClasses/JadeiteNotebookPresenter.class.st index 57101e8..c7e758f 100644 --- a/Jadeite-SupportClasses/JadeiteNotebookPresenter.class.st +++ b/Jadeite-SupportClasses/JadeiteNotebookPresenter.class.st @@ -4,13 +4,13 @@ Class { #category : 'Jadeite-SupportClasses' } +{ #category : 'testing' } +JadeiteNotebookPresenter >> canDiscardEdits [ + + ^self owner canDiscardEdits +] + { #category : 'accessing' } JadeiteNotebookPresenter >> currentCard [ ^self selectedPage ] - -{ #category : 'testing' } -JadeiteNotebookPresenter >> okToChangeSelections [ - - ^self owner okToChangeSelections -] diff --git a/Jadeite-SupportClasses/JadeiteTableAdapter.class.st b/Jadeite-SupportClasses/JadeiteTableAdapter.class.st index c7565ed..f6c7138 100644 --- a/Jadeite-SupportClasses/JadeiteTableAdapter.class.st +++ b/Jadeite-SupportClasses/JadeiteTableAdapter.class.st @@ -8,7 +8,7 @@ Class { JadeiteTableAdapter >> buildWidget [ widget := JadeiteTableMorph new "<<> new [ ^super new beResizable ] +{ #category : 'testing' } +JadeiteTablePresenter >> canDiscardEdits [ + + ^self owner canDiscardEdits +] + { #category : 'displaying' } JadeiteTablePresenter >> invalidate [ self refresh. @@ -50,12 +56,6 @@ JadeiteTablePresenter >> newEmptyModel [ ^ ListModel on: OrderedCollection new ] -{ #category : 'testing' } -JadeiteTablePresenter >> okToChangeSelections [ - - ^self owner okToChangeSelections -] - { #category : 'api - selection' } JadeiteTablePresenter >> resetSelection [ self unselectAll diff --git a/Jadeite-SupportClasses/JadeiteWindowPresenter.class.st b/Jadeite-SupportClasses/JadeiteWindowPresenter.class.st index 73b45f1..3127317 100644 --- a/Jadeite-SupportClasses/JadeiteWindowPresenter.class.st +++ b/Jadeite-SupportClasses/JadeiteWindowPresenter.class.st @@ -9,3 +9,19 @@ JadeiteWindowPresenter class >> adapterName [ ^ #JadeiteMorphicWindowAdapter ] + +{ #category : 'private' } +JadeiteWindowPresenter >> okToChange [ + + self flag: #TODO. "Maybe wrong?" + self presenter canDiscardEdits ifFalse: [ ^ false ]. + "Solicit cancel from view" + self changed: #wantToChange. + ^ self canDiscardEdits +] + +{ #category : 'testing' } +JadeiteWindowPresenter >> okToClose [ + + ^self presenter okToClose +]