Pharo needs you! Call to save the Pharo UI

SD
stephane ducasse
Thu, Nov 23, 2023 10:28 AM

Hello people

If you want that Pharo just do not endlessly stay with such a crappy UI we all know,
please consider joining the effort.

We should make sure that as a general principle, a model MUST not refer to a UI.
So that we can change the UI. We are working on it. But we need help.

We should
(1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2, FileList to Spec

(2) Remove dependencies from Domain objects to Morphic (obviously)
	- remove to UIManager first from code outside Morphic. 

As a general principle please watch
	http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4
	http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4
It looks basic but it is so true. 

Current status
(1)
Hernan started to work on the Setting Browser
I know someone started to work on Finder but I think the effort was stalled.
We need help there.

(2) 
	We started to clean the refactorings and we are making progress but this is slow. 
	I started to remove references to UIManager because it should go away. 

	In Spec we introduced dialog, check the examples in subclasses of SpDialogPresenter
		In addition, an application is able to create some default dialog
		check ui - dialogs in SpApplication
		I introduced a simple notification center that should play a kind of growl. 
		The inform: calls should be redirected to notify: because inform: was in P11 not blocking and now in P12 there are. 

I created special issues about the references to UIManager
I opened issues with a special tag
	https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22

The analysis is here

https://github.com/pharo-project/pharo/issues/14174 <https://github.com/pharo-project/pharo/issues/14174>	

Here are some scripts.

Here we see the dependencies from Spec to UIManager

| allSpec results |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.

UIManager selectors do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allSpec includes: mth methodClass ]) size.
size isZero ifFalse: [ 
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

The following script shows the callers that are not in Spec nor in Morphic

| allSpec results allMorphs |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.
allMorphs := Morph withAllSubclasses.
allClasses := Smalltalk allClasses.
allClasses := allClasses reject: [ :c | allSpec includes: c ].
allClasses := allClasses reject: [ :c | allMorphs includes: c ].

UIManager selectors sorted do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allClasses includes: mth methodClass ]) size.
size isZero ifFalse: [ 
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

abort: -> 1
abort:title: -> 5
activate -> 15
alert: -> 4
alert:title: -> 4
alert:title:configure: -> 2
beDefault -> 2
chooseDirectory -> 1
chooseDirectory: -> 1
chooseDirectory:from: -> 2
chooseDirectoryFrom: -> 1
chooseFrom: -> 2
chooseFrom:lines: -> 2
chooseFrom:lines:message: -> 1
chooseFrom:lines:message:title: -> 2
chooseFrom:lines:title: -> 8
chooseFrom:title: -> 5
chooseFrom:values: -> 5
chooseFrom:values:lines: -> 1
chooseFrom:values:lines:message: -> 1
chooseFrom:values:lines:message:title: -> 3
chooseFrom:values:lines:title: -> 4
chooseFrom:values:message:title: -> 4
chooseFrom:values:title: -> 8
chooseFullFileNameMatching: -> 1
chooseFullFileNameMatching:label: -> 1
chooseOrRequestFrom:values:lines:title: -> 3
confirm: -> 47
confirm:label: -> 5
confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1
confirm:orCancel: -> 1
confirm:trueChoice:falseChoice: -> 2
confirm:trueChoice:falseChoice:cancelChoice:default: -> 6
deactivate -> 5
debugProcess:context:label:fullView:notification: -> 1
defer: -> 24
deny: -> 2565
deny:title: -> 2
displayProgress:from:to:during: -> 4
edit:label: -> 4
edit:label:accept: -> 3
fileExistsDefaultAction: -> 1
handleDebugRequest:fromDebuggerSystem: -> 1
handleError: -> 2
handleError:log: -> 2
handleWarningDebugRequest:fromDebuggerSystem: -> 1
inform: -> 98
inform:actionOnClick: -> 1
informUser:during: -> 13
informUserDuring: -> 5
logError: -> 2
lowSpaceWatcherDefaultAction: -> 1
merge:informing: -> 2
multiLineRequest:initialAnswer:answerHeight: -> 5
newDisplayDepthNoRestore: -> 1
newMenuIn:for: -> 15
onPrimitiveError: -> 1
proceed:title: -> 2
question:title: -> 2
questionWithoutCancel: -> 1
questionWithoutCancel:title: -> 2
request: -> 13
request:initialAnswer: -> 19
request:initialAnswer:entryCompletion: -> 1
request:initialAnswer:title: -> 13
request:initialAnswer:title:entryCompletion: -> 6
requestDebuggerOpeningFor: -> 1
requestDebuggerOpeningForProcess:named:inContext: -> 1
requestDebuggerOpeningForWarning: -> 1
requestDebuggerOpeningNamed:inContext: -> 1
requestPassword: -> 3
restoreDisplay -> 3
restoreDisplayAfter: -> 1
spawnNewProcess -> 4
systemNotificationDefaultAction: -> 1
terminateUIProcess -> 1
textEntry: -> 2
textEntry:title: -> 2
textEntry:title:entryText: -> 2
unhandledErrorDefaultAction: -> 3
warningDefaultAction: -> 1


Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
FAX 03 59 57 78 50
TEL 03 59 35 86 16
S. Ducasse - Inria
40, avenue Halley,
Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
Villeneuve d'Ascq 59650
France

Hello people If you want that Pharo just do not endlessly stay with such a crappy UI we all know, please consider joining the effort. We should make sure that as a general principle, a model MUST not refer to a UI. So that we can change the UI. We are working on it. But we need help. We should (1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2, FileList to Spec (2) Remove dependencies from Domain objects to Morphic (obviously) - remove to UIManager first from code outside Morphic. As a general principle please watch http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4 http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4 It looks basic but it is so true. Current status (1) Hernan started to work on the Setting Browser I know someone started to work on Finder but I think the effort was stalled. We need help there. (2) We started to clean the refactorings and we are making progress but this is slow. I started to remove references to UIManager because it should go away. In Spec we introduced dialog, check the examples in subclasses of SpDialogPresenter In addition, an application is able to create some default dialog check ui - dialogs in SpApplication I introduced a simple notification center that should play a kind of growl. The inform: calls should be redirected to notify: because inform: was in P11 not blocking and now in P12 there are. I created special issues about the references to UIManager I opened issues with a special tag https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22 The analysis is here https://github.com/pharo-project/pharo/issues/14174 <https://github.com/pharo-project/pharo/issues/14174> Here are some scripts. # Here we see the dependencies from Spec to UIManager | allSpec results | results := Dictionary new. allSpec := SpPresenter withAllSubclasses. UIManager selectors do: [ :sel | | size | size := ((SystemNavigation default allCallsOn: sel ) select: [ :mth | allSpec includes: mth methodClass ]) size. size isZero ifFalse: [ results at: sel put: size]]. String streamContents: [ :s | results keys sorted do: [ :k | s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] # The following script shows the callers that are not in Spec nor in Morphic | allSpec results allMorphs | results := Dictionary new. allSpec := SpPresenter withAllSubclasses. allMorphs := Morph withAllSubclasses. allClasses := Smalltalk allClasses. allClasses := allClasses reject: [ :c | allSpec includes: c ]. allClasses := allClasses reject: [ :c | allMorphs includes: c ]. UIManager selectors sorted do: [ :sel | | size | size := ((SystemNavigation default allCallsOn: sel ) select: [ :mth | allClasses includes: mth methodClass ]) size. size isZero ifFalse: [ results at: sel put: size]]. String streamContents: [ :s | results keys sorted do: [ :k | s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] abort: -> 1 abort:title: -> 5 activate -> 15 alert: -> 4 alert:title: -> 4 alert:title:configure: -> 2 beDefault -> 2 chooseDirectory -> 1 chooseDirectory: -> 1 chooseDirectory:from: -> 2 chooseDirectoryFrom: -> 1 chooseFrom: -> 2 chooseFrom:lines: -> 2 chooseFrom:lines:message: -> 1 chooseFrom:lines:message:title: -> 2 chooseFrom:lines:title: -> 8 chooseFrom:title: -> 5 chooseFrom:values: -> 5 chooseFrom:values:lines: -> 1 chooseFrom:values:lines:message: -> 1 chooseFrom:values:lines:message:title: -> 3 chooseFrom:values:lines:title: -> 4 chooseFrom:values:message:title: -> 4 chooseFrom:values:title: -> 8 chooseFullFileNameMatching: -> 1 chooseFullFileNameMatching:label: -> 1 chooseOrRequestFrom:values:lines:title: -> 3 confirm: -> 47 confirm:label: -> 5 confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1 confirm:orCancel: -> 1 confirm:trueChoice:falseChoice: -> 2 confirm:trueChoice:falseChoice:cancelChoice:default: -> 6 deactivate -> 5 debugProcess:context:label:fullView:notification: -> 1 defer: -> 24 deny: -> 2565 deny:title: -> 2 displayProgress:from:to:during: -> 4 edit:label: -> 4 edit:label:accept: -> 3 fileExistsDefaultAction: -> 1 handleDebugRequest:fromDebuggerSystem: -> 1 handleError: -> 2 handleError:log: -> 2 handleWarningDebugRequest:fromDebuggerSystem: -> 1 inform: -> 98 inform:actionOnClick: -> 1 informUser:during: -> 13 informUserDuring: -> 5 logError: -> 2 lowSpaceWatcherDefaultAction: -> 1 merge:informing: -> 2 multiLineRequest:initialAnswer:answerHeight: -> 5 newDisplayDepthNoRestore: -> 1 newMenuIn:for: -> 15 onPrimitiveError: -> 1 proceed:title: -> 2 question:title: -> 2 questionWithoutCancel: -> 1 questionWithoutCancel:title: -> 2 request: -> 13 request:initialAnswer: -> 19 request:initialAnswer:entryCompletion: -> 1 request:initialAnswer:title: -> 13 request:initialAnswer:title:entryCompletion: -> 6 requestDebuggerOpeningFor: -> 1 requestDebuggerOpeningForProcess:named:inContext: -> 1 requestDebuggerOpeningForWarning: -> 1 requestDebuggerOpeningNamed:inContext: -> 1 requestPassword: -> 3 restoreDisplay -> 3 restoreDisplayAfter: -> 1 spawnNewProcess -> 4 systemNotificationDefaultAction: -> 1 terminateUIProcess -> 1 textEntry: -> 2 textEntry:title: -> 2 textEntry:title:entryText: -> 2 unhandledErrorDefaultAction: -> 3 warningDefaultAction: -> 1 -------------------------------------------- Stéphane Ducasse http://stephane.ducasse.free.fr / http://www.pharo.org 03 59 35 87 52 Assistant: Aurore Dalle FAX 03 59 57 78 50 TEL 03 59 35 86 16 S. Ducasse - Inria 40, avenue Halley, Parc Scientifique de la Haute Borne, Bât.A, Park Plaza Villeneuve d'Ascq 59650 France
HM
Hernán Morales
Thu, Nov 23, 2023 7:43 PM

Hi Stef,

De: "Stephane Ducasse" stephane.ducasse@inria.fr
Para: "rmod" rmod@inria.fr, pharo-dev@lists.pharo.org,
pharo-users@lists.pharo.org
Enviados: Jueves, 23 de Noviembre 2023 11:28:15
Asunto: [rmod] Pharo needs you! Call to save the Pharo UI

Hello people
If you want that Pharo just do not endlessly stay with such a crappy UI we all
know,
please consider joining the effort.

We should make sure that as a general principle, a model MUST not refer to a UI.
So that we can change the UI. We are working on it. But we need help.

We should
(1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2,
FileList to Spec

(2) Remove dependencies from Domain objects to Morphic (obviously)

  • remove to UIManager first from code outside Morphic.

Current status
(1)
Hernan started to work on the Setting Browser
I know someone started to work on Finder but I think the effort was stalled.
We need help there.

As a reference so that anyone can check the new Settings current status, this is the repository I'm working on: https://github.com/hernanmd/new-settings-browser

Regarding the FileList, I'm afraid we duplicate efforts unnecessarily: I worked some time ago on https://github.com/hernanmd/file-dialog and then I saw that https://github.com/pharo-spec/NewTools appeared, it's a pity to have such a bad communication.

The issue to close is the following: https://github.com/pharo-project/pharo/issues/15455

Cheers,

Hernán

(2)
We started to clean the refactorings and we are making progress but this is
slow.
I started to remove references to UIManager because it should go away.

In Spec we introduced dialog, check the examples in subclasses of
SpDialogPresenter
In addition, an application is able to create some default dialog
check ui - dialogs in SpApplication
I introduced a simple notification center that should play a kind of growl.
The inform: calls should be redirected to notify: because inform: was in P11 not
blocking and now in P12 there are.

The analysis is here

Here are some scripts.

Here we see the dependencies from Spec to UIManager

| allSpec results |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.

UIManager selectors do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allSpec includes: mth methodClass ]) size.
size isZero ifFalse: [
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

The following script shows the callers that are not in Spec nor in Morphic

| allSpec results allMorphs |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.
allMorphs := Morph withAllSubclasses.
allClasses := Smalltalk allClasses.
allClasses := allClasses reject: [ :c | allSpec includes: c ].
allClasses := allClasses reject: [ :c | allMorphs includes: c ].

UIManager selectors sorted do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allClasses includes: mth methodClass ]) size.
size isZero ifFalse: [
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

abort: -> 1
abort:title: -> 5
activate -> 15
alert: -> 4
alert:title: -> 4
alert:title:configure: -> 2
beDefault -> 2
chooseDirectory -> 1
chooseDirectory: -> 1
chooseDirectory:from: -> 2
chooseDirectoryFrom: -> 1
chooseFrom: -> 2
chooseFrom:lines: -> 2
chooseFrom:lines:message: -> 1
chooseFrom:lines:message:title: -> 2
chooseFrom:lines:title: -> 8
chooseFrom:title: -> 5
chooseFrom:values: -> 5
chooseFrom:values:lines: -> 1
chooseFrom:values:lines:message: -> 1
chooseFrom:values:lines:message:title: -> 3
chooseFrom:values:lines:title: -> 4
chooseFrom:values:message:title: -> 4
chooseFrom:values:title: -> 8
chooseFullFileNameMatching: -> 1
chooseFullFileNameMatching:label: -> 1
chooseOrRequestFrom:values:lines:title: -> 3
confirm: -> 47
confirm:label: -> 5
confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1
confirm:orCancel: -> 1
confirm:trueChoice:falseChoice: -> 2
confirm:trueChoice:falseChoice:cancelChoice:default: -> 6
deactivate -> 5
debugProcess:context:label:fullView:notification: -> 1
defer: -> 24
deny: -> 2565
deny:title: -> 2
displayProgress:from:to:during: -> 4
edit:label: -> 4
edit:label:accept: -> 3
fileExistsDefaultAction: -> 1
handleDebugRequest:fromDebuggerSystem: -> 1
handleError: -> 2
handleError:log: -> 2
handleWarningDebugRequest:fromDebuggerSystem: -> 1
inform: -> 98
inform:actionOnClick: -> 1
informUser:during: -> 13
informUserDuring: -> 5
logError: -> 2
lowSpaceWatcherDefaultAction: -> 1
merge:informing: -> 2
multiLineRequest:initialAnswer:answerHeight: -> 5
newDisplayDepthNoRestore: -> 1
newMenuIn:for: -> 15
onPrimitiveError: -> 1
proceed:title: -> 2
question:title: -> 2
questionWithoutCancel: -> 1
questionWithoutCancel:title: -> 2
request: -> 13
request:initialAnswer: -> 19
request:initialAnswer:entryCompletion: -> 1
request:initialAnswer:title: -> 13
request:initialAnswer:title:entryCompletion: -> 6
requestDebuggerOpeningFor: -> 1
requestDebuggerOpeningForProcess:named:inContext: -> 1
requestDebuggerOpeningForWarning: -> 1
requestDebuggerOpeningNamed:inContext: -> 1
requestPassword: -> 3
restoreDisplay -> 3
restoreDisplayAfter: -> 1
spawnNewProcess -> 4
systemNotificationDefaultAction: -> 1
terminateUIProcess -> 1
textEntry: -> 2
textEntry:title: -> 2
textEntry:title:entryText: -> 2
unhandledErrorDefaultAction: -> 3
warningDefaultAction: -> 1


Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
FAX 03 59 57 78 50
TEL 03 59 35 86 16
S. Ducasse - Inria
40, avenue Halley,
Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
Villeneuve d'Ascq 59650
France

Hi Stef, > De: "Stephane Ducasse" <stephane.ducasse@inria.fr> > Para: "rmod" <rmod@inria.fr>, pharo-dev@lists.pharo.org, > pharo-users@lists.pharo.org > Enviados: Jueves, 23 de Noviembre 2023 11:28:15 > Asunto: [rmod] Pharo needs you! Call to save the Pharo UI > Hello people > If you want that Pharo just do not endlessly stay with such a crappy UI we all > know, > please consider joining the effort. > We should make sure that as a general principle, a model MUST not refer to a UI. > So that we can change the UI. We are working on it. But we need help. > We should > (1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2, > FileList to Spec > (2) Remove dependencies from Domain objects to Morphic (obviously) > - remove to UIManager first from code outside Morphic. > As a general principle please watch > [ http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4 | > http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4 ] > [ http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4 | > http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4 ] > It looks basic but it is so true. > Current status > (1) > Hernan started to work on the Setting Browser > I know someone started to work on Finder but I think the effort was stalled. > We need help there. As a reference so that anyone can check the new Settings current status, this is the repository I'm working on: https://github.com/hernanmd/new-settings-browser Regarding the FileList, I'm afraid we duplicate efforts unnecessarily: I worked some time ago on https://github.com/hernanmd/file-dialog and then I saw that https://github.com/pharo-spec/NewTools appeared, it's a pity to have such a bad communication. The issue to close is the following: https://github.com/pharo-project/pharo/issues/15455 Cheers, Hernán > (2) > We started to clean the refactorings and we are making progress but this is > slow. > I started to remove references to UIManager because it should go away. > In Spec we introduced dialog, check the examples in subclasses of > SpDialogPresenter > In addition, an application is able to create some default dialog > check ui - dialogs in SpApplication > I introduced a simple notification center that should play a kind of growl. > The inform: calls should be redirected to notify: because inform: was in P11 not > blocking and now in P12 there are. > I created special issues about the references to UIManager > I opened issues with a special tag > [ > https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22 > | > https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22 > ] > The analysis is here > [ https://github.com/pharo-project/pharo/issues/14174 | > https://github.com/pharo-project/pharo/issues/14174 ] > Here are some scripts. > # Here we see the dependencies from Spec to UIManager > | allSpec results | > results := Dictionary new. > allSpec := SpPresenter withAllSubclasses. > UIManager selectors do: > [ :sel | > | size | > size := ((SystemNavigation default allCallsOn: sel ) > select: [ :mth | allSpec includes: mth methodClass ]) size. > size isZero ifFalse: [ > results at: sel put: size]]. > String streamContents: [ :s | > results keys sorted do: [ :k | > s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] > # The following script shows the callers that are not in Spec nor in Morphic > | allSpec results allMorphs | > results := Dictionary new. > allSpec := SpPresenter withAllSubclasses. > allMorphs := Morph withAllSubclasses. > allClasses := Smalltalk allClasses. > allClasses := allClasses reject: [ :c | allSpec includes: c ]. > allClasses := allClasses reject: [ :c | allMorphs includes: c ]. > UIManager selectors sorted do: > [ :sel | > | size | > size := ((SystemNavigation default allCallsOn: sel ) > select: [ :mth | allClasses includes: mth methodClass ]) size. > size isZero ifFalse: [ > results at: sel put: size]]. > String streamContents: [ :s | > results keys sorted do: [ :k | > s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] > abort: -> 1 > abort:title: -> 5 > activate -> 15 > alert: -> 4 > alert:title: -> 4 > alert:title:configure: -> 2 > beDefault -> 2 > chooseDirectory -> 1 > chooseDirectory: -> 1 > chooseDirectory:from: -> 2 > chooseDirectoryFrom: -> 1 > chooseFrom: -> 2 > chooseFrom:lines: -> 2 > chooseFrom:lines:message: -> 1 > chooseFrom:lines:message:title: -> 2 > chooseFrom:lines:title: -> 8 > chooseFrom:title: -> 5 > chooseFrom:values: -> 5 > chooseFrom:values:lines: -> 1 > chooseFrom:values:lines:message: -> 1 > chooseFrom:values:lines:message:title: -> 3 > chooseFrom:values:lines:title: -> 4 > chooseFrom:values:message:title: -> 4 > chooseFrom:values:title: -> 8 > chooseFullFileNameMatching: -> 1 > chooseFullFileNameMatching:label: -> 1 > chooseOrRequestFrom:values:lines:title: -> 3 > confirm: -> 47 > confirm:label: -> 5 > confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1 > confirm:orCancel: -> 1 > confirm:trueChoice:falseChoice: -> 2 > confirm:trueChoice:falseChoice:cancelChoice:default: -> 6 > deactivate -> 5 > debugProcess:context:label:fullView:notification: -> 1 > defer: -> 24 > deny: -> 2565 > deny:title: -> 2 > displayProgress:from:to:during: -> 4 > edit:label: -> 4 > edit:label:accept: -> 3 > fileExistsDefaultAction: -> 1 > handleDebugRequest:fromDebuggerSystem: -> 1 > handleError: -> 2 > handleError:log: -> 2 > handleWarningDebugRequest:fromDebuggerSystem: -> 1 > inform: -> 98 > inform:actionOnClick: -> 1 > informUser:during: -> 13 > informUserDuring: -> 5 > logError: -> 2 > lowSpaceWatcherDefaultAction: -> 1 > merge:informing: -> 2 > multiLineRequest:initialAnswer:answerHeight: -> 5 > newDisplayDepthNoRestore: -> 1 > newMenuIn:for: -> 15 > onPrimitiveError: -> 1 > proceed:title: -> 2 > question:title: -> 2 > questionWithoutCancel: -> 1 > questionWithoutCancel:title: -> 2 > request: -> 13 > request:initialAnswer: -> 19 > request:initialAnswer:entryCompletion: -> 1 > request:initialAnswer:title: -> 13 > request:initialAnswer:title:entryCompletion: -> 6 > requestDebuggerOpeningFor: -> 1 > requestDebuggerOpeningForProcess:named:inContext: -> 1 > requestDebuggerOpeningForWarning: -> 1 > requestDebuggerOpeningNamed:inContext: -> 1 > requestPassword: -> 3 > restoreDisplay -> 3 > restoreDisplayAfter: -> 1 > spawnNewProcess -> 4 > systemNotificationDefaultAction: -> 1 > terminateUIProcess -> 1 > textEntry: -> 2 > textEntry:title: -> 2 > textEntry:title:entryText: -> 2 > unhandledErrorDefaultAction: -> 3 > warningDefaultAction: -> 1 > -------------------------------------------- > Stéphane Ducasse > http://stephane.ducasse.free.fr / http://www.pharo.org > 03 59 35 87 52 > Assistant: Aurore Dalle > FAX 03 59 57 78 50 > TEL 03 59 35 86 16 > S. Ducasse - Inria > 40, avenue Halley, > Parc Scientifique de la Haute Borne, Bât.A, Park Plaza > Villeneuve d'Ascq 59650 > France
SD
stephane ducasse
Thu, Nov 23, 2023 7:46 PM

Thanks hernan.

I do not think that there is a fileList in newTools.
I will check your file dialog.

S

On 23 Nov 2023, at 20:43, Hernán Morales hernan-federico.morales@inria.fr wrote:

Hi Stef,

De: "Stephane Ducasse" <stephane.ducasse@inria.fr mailto:stephane.ducasse@inria.fr>
Para: "rmod" <rmod@inria.fr mailto:rmod@inria.fr>, pharo-dev@lists.pharo.org mailto:pharo-dev@lists.pharo.org, pharo-users@lists.pharo.org mailto:pharo-users@lists.pharo.org
Enviados: Jueves, 23 de Noviembre 2023 11:28:15
Asunto: [rmod] Pharo needs you! Call to save the Pharo UI
Hello people
If you want that Pharo just do not endlessly stay with such a crappy UI we all know,
please consider joining the effort.

We should make sure that as a general principle, a model MUST not refer to a UI.
So that we can change the UI. We are working on it. But we need help.

We should
(1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2, FileList to Spec

(2) Remove dependencies from Domain objects to Morphic (obviously)

  • remove to UIManager first from code outside Morphic.

As a general principle please watch
http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4
http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4
It looks basic but it is so true.

Current status
(1)
Hernan started to work on the Setting Browser
I know someone started to work on Finder but I think the effort was stalled.
We need help there.
As a reference so that anyone can check the new Settings current status, this is the repository I'm working on: https://github.com/hernanmd/new-settings-browser

Regarding the FileList, I'm afraid we duplicate efforts unnecessarily: I worked some time ago on https://github.com/hernanmd/file-dialog and then I saw that https://github.com/pharo-spec/NewTools appeared, it's a pity to have such a bad communication.

The issue to close is the following: https://github.com/pharo-project/pharo/issues/15455

Cheers,

Hernán

(2)
We started to clean the refactorings and we are making progress but this is slow.
I started to remove references to UIManager because it should go away.

In Spec we introduced dialog, check the examples in subclasses of SpDialogPresenter
In addition, an application is able to create some default dialog
check ui - dialogs in SpApplication
I introduced a simple notification center that should play a kind of growl.
The inform: calls should be redirected to notify: because inform: was in P11 not blocking and now in P12 there are.

I created special issues about the references to UIManager
I opened issues with a special tag
https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22

The analysis is here

https://github.com/pharo-project/pharo/issues/14174

Here are some scripts.

Here we see the dependencies from Spec to UIManager

| allSpec results |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.

UIManager selectors do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allSpec includes: mth methodClass ]) size.
size isZero ifFalse: [ 
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

The following script shows the callers that are not in Spec nor in Morphic

| allSpec results allMorphs |
results := Dictionary new.
allSpec := SpPresenter withAllSubclasses.
allMorphs := Morph withAllSubclasses.
allClasses := Smalltalk allClasses.
allClasses := allClasses reject: [ :c | allSpec includes: c ].
allClasses := allClasses reject: [ :c | allMorphs includes: c ].

UIManager selectors sorted do:
[ :sel |
| size |
size := ((SystemNavigation default allCallsOn: sel )
select: [ :mth | allClasses includes: mth methodClass ]) size.
size isZero ifFalse: [ 
results at: sel put:  size]].
String streamContents: [ :s |
results keys sorted do: [ :k |
s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]]

abort: -> 1
abort:title: -> 5
activate -> 15
alert: -> 4
alert:title: -> 4
alert:title:configure: -> 2
beDefault -> 2
chooseDirectory -> 1
chooseDirectory: -> 1
chooseDirectory:from: -> 2
chooseDirectoryFrom: -> 1
chooseFrom: -> 2
chooseFrom:lines: -> 2
chooseFrom:lines:message: -> 1
chooseFrom:lines:message:title: -> 2
chooseFrom:lines:title: -> 8
chooseFrom:title: -> 5
chooseFrom:values: -> 5
chooseFrom:values:lines: -> 1
chooseFrom:values:lines:message: -> 1
chooseFrom:values:lines:message:title: -> 3
chooseFrom:values:lines:title: -> 4
chooseFrom:values:message:title: -> 4
chooseFrom:values:title: -> 8
chooseFullFileNameMatching: -> 1
chooseFullFileNameMatching:label: -> 1
chooseOrRequestFrom:values:lines:title: -> 3
confirm: -> 47
confirm:label: -> 5
confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1
confirm:orCancel: -> 1
confirm:trueChoice:falseChoice: -> 2
confirm:trueChoice:falseChoice:cancelChoice:default: -> 6
deactivate -> 5
debugProcess:context:label:fullView:notification: -> 1
defer: -> 24
deny: -> 2565
deny:title: -> 2
displayProgress:from:to:during: -> 4
edit:label: -> 4
edit:label:accept: -> 3
fileExistsDefaultAction: -> 1
handleDebugRequest:fromDebuggerSystem: -> 1
handleError: -> 2
handleError:log: -> 2
handleWarningDebugRequest:fromDebuggerSystem: -> 1
inform: -> 98
inform:actionOnClick: -> 1
informUser:during: -> 13
informUserDuring: -> 5
logError: -> 2
lowSpaceWatcherDefaultAction: -> 1
merge:informing: -> 2
multiLineRequest:initialAnswer:answerHeight: -> 5
newDisplayDepthNoRestore: -> 1
newMenuIn:for: -> 15
onPrimitiveError: -> 1
proceed:title: -> 2
question:title: -> 2
questionWithoutCancel: -> 1
questionWithoutCancel:title: -> 2
request: -> 13
request:initialAnswer: -> 19
request:initialAnswer:entryCompletion: -> 1
request:initialAnswer:title: -> 13
request:initialAnswer:title:entryCompletion: -> 6
requestDebuggerOpeningFor: -> 1
requestDebuggerOpeningForProcess:named:inContext: -> 1
requestDebuggerOpeningForWarning: -> 1
requestDebuggerOpeningNamed:inContext: -> 1
requestPassword: -> 3
restoreDisplay -> 3
restoreDisplayAfter: -> 1
spawnNewProcess -> 4
systemNotificationDefaultAction: -> 1
terminateUIProcess -> 1
textEntry: -> 2
textEntry:title: -> 2
textEntry:title:entryText: -> 2
unhandledErrorDefaultAction: -> 3
warningDefaultAction: -> 1


Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
FAX 03 59 57 78 50
TEL 03 59 35 86 16
S. Ducasse - Inria
40, avenue Halley,
Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
Villeneuve d'Ascq 59650
France


Stéphane Ducasse
http://stephane.ducasse.free.fr / http://www.pharo.org
03 59 35 87 52
Assistant: Aurore Dalle
FAX 03 59 57 78 50
TEL 03 59 35 86 16
S. Ducasse - Inria
40, avenue Halley,
Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
Villeneuve d'Ascq 59650
France

Thanks hernan. I do not think that there is a fileList in newTools. I will check your file dialog. S > On 23 Nov 2023, at 20:43, Hernán Morales <hernan-federico.morales@inria.fr> wrote: > > Hi Stef, > > De: "Stephane Ducasse" <stephane.ducasse@inria.fr <mailto:stephane.ducasse@inria.fr>> > Para: "rmod" <rmod@inria.fr <mailto:rmod@inria.fr>>, pharo-dev@lists.pharo.org <mailto:pharo-dev@lists.pharo.org>, pharo-users@lists.pharo.org <mailto:pharo-users@lists.pharo.org> > Enviados: Jueves, 23 de Noviembre 2023 11:28:15 > Asunto: [rmod] Pharo needs you! Call to save the Pharo UI > Hello people > If you want that Pharo just do not endlessly stay with such a crappy UI we all know, > please consider joining the effort. > > We should make sure that as a general principle, a model MUST not refer to a UI. > So that we can change the UI. We are working on it. But we need help. > > We should > (1) Migrate last cool Morphic-based tools such as Finder, Settings to Spec2, FileList to Spec > > (2) Remove dependencies from Domain objects to Morphic (obviously) > - remove to UIManager first from code outside Morphic. > > As a general principle please watch > http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M03_S5.mp4 > http://rmod-pharo-mooc.lille.inria.fr/AdvancedDesignMooc/Videos/M09_S4.mp4 > It looks basic but it is so true. > > > Current status > (1) > Hernan started to work on the Setting Browser > I know someone started to work on Finder but I think the effort was stalled. > We need help there. > As a reference so that anyone can check the new Settings current status, this is the repository I'm working on: https://github.com/hernanmd/new-settings-browser > > Regarding the FileList, I'm afraid we duplicate efforts unnecessarily: I worked some time ago on https://github.com/hernanmd/file-dialog and then I saw that https://github.com/pharo-spec/NewTools appeared, it's a pity to have such a bad communication. > > The issue to close is the following: https://github.com/pharo-project/pharo/issues/15455 > > > Cheers, > > Hernán > > (2) > We started to clean the refactorings and we are making progress but this is slow. > I started to remove references to UIManager because it should go away. > > In Spec we introduced dialog, check the examples in subclasses of SpDialogPresenter > In addition, an application is able to create some default dialog > check ui - dialogs in SpApplication > I introduced a simple notification center that should play a kind of growl. > The inform: calls should be redirected to notify: because inform: was in P11 not blocking and now in P12 there are. > > I created special issues about the references to UIManager > I opened issues with a special tag > https://github.com/pharo-project/pharo/issues?q=is%3Aissue+is%3Aopen+label%3A%22Project%3A+RemoveUIManager+BAD+dependencies%22 > > The analysis is here > > https://github.com/pharo-project/pharo/issues/14174 > > Here are some scripts. > > # Here we see the dependencies from Spec to UIManager > | allSpec results | > results := Dictionary new. > allSpec := SpPresenter withAllSubclasses. > > UIManager selectors do: > [ :sel | > | size | > size := ((SystemNavigation default allCallsOn: sel ) > select: [ :mth | allSpec includes: mth methodClass ]) size. > size isZero ifFalse: [ > results at: sel put: size]]. > String streamContents: [ :s | > results keys sorted do: [ :k | > s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] > # The following script shows the callers that are not in Spec nor in Morphic > | allSpec results allMorphs | > results := Dictionary new. > allSpec := SpPresenter withAllSubclasses. > allMorphs := Morph withAllSubclasses. > allClasses := Smalltalk allClasses. > allClasses := allClasses reject: [ :c | allSpec includes: c ]. > allClasses := allClasses reject: [ :c | allMorphs includes: c ]. > > UIManager selectors sorted do: > [ :sel | > | size | > size := ((SystemNavigation default allCallsOn: sel ) > select: [ :mth | allClasses includes: mth methodClass ]) size. > size isZero ifFalse: [ > results at: sel put: size]]. > String streamContents: [ :s | > results keys sorted do: [ :k | > s nextPutAll: k , ' -> ', (results at: k) asString. s cr. ]] > > abort: -> 1 > abort:title: -> 5 > activate -> 15 > alert: -> 4 > alert:title: -> 4 > alert:title:configure: -> 2 > beDefault -> 2 > chooseDirectory -> 1 > chooseDirectory: -> 1 > chooseDirectory:from: -> 2 > chooseDirectoryFrom: -> 1 > chooseFrom: -> 2 > chooseFrom:lines: -> 2 > chooseFrom:lines:message: -> 1 > chooseFrom:lines:message:title: -> 2 > chooseFrom:lines:title: -> 8 > chooseFrom:title: -> 5 > chooseFrom:values: -> 5 > chooseFrom:values:lines: -> 1 > chooseFrom:values:lines:message: -> 1 > chooseFrom:values:lines:message:title: -> 3 > chooseFrom:values:lines:title: -> 4 > chooseFrom:values:message:title: -> 4 > chooseFrom:values:title: -> 8 > chooseFullFileNameMatching: -> 1 > chooseFullFileNameMatching:label: -> 1 > chooseOrRequestFrom:values:lines:title: -> 3 > confirm: -> 47 > confirm:label: -> 5 > confirm:label:trueChoice:falseChoice:cancelChoice:default: -> 1 > confirm:orCancel: -> 1 > confirm:trueChoice:falseChoice: -> 2 > confirm:trueChoice:falseChoice:cancelChoice:default: -> 6 > deactivate -> 5 > debugProcess:context:label:fullView:notification: -> 1 > defer: -> 24 > deny: -> 2565 > deny:title: -> 2 > displayProgress:from:to:during: -> 4 > edit:label: -> 4 > edit:label:accept: -> 3 > fileExistsDefaultAction: -> 1 > handleDebugRequest:fromDebuggerSystem: -> 1 > handleError: -> 2 > handleError:log: -> 2 > handleWarningDebugRequest:fromDebuggerSystem: -> 1 > inform: -> 98 > inform:actionOnClick: -> 1 > informUser:during: -> 13 > informUserDuring: -> 5 > logError: -> 2 > lowSpaceWatcherDefaultAction: -> 1 > merge:informing: -> 2 > multiLineRequest:initialAnswer:answerHeight: -> 5 > newDisplayDepthNoRestore: -> 1 > newMenuIn:for: -> 15 > onPrimitiveError: -> 1 > proceed:title: -> 2 > question:title: -> 2 > questionWithoutCancel: -> 1 > questionWithoutCancel:title: -> 2 > request: -> 13 > request:initialAnswer: -> 19 > request:initialAnswer:entryCompletion: -> 1 > request:initialAnswer:title: -> 13 > request:initialAnswer:title:entryCompletion: -> 6 > requestDebuggerOpeningFor: -> 1 > requestDebuggerOpeningForProcess:named:inContext: -> 1 > requestDebuggerOpeningForWarning: -> 1 > requestDebuggerOpeningNamed:inContext: -> 1 > requestPassword: -> 3 > restoreDisplay -> 3 > restoreDisplayAfter: -> 1 > spawnNewProcess -> 4 > systemNotificationDefaultAction: -> 1 > terminateUIProcess -> 1 > textEntry: -> 2 > textEntry:title: -> 2 > textEntry:title:entryText: -> 2 > unhandledErrorDefaultAction: -> 3 > warningDefaultAction: -> 1 > > > > -------------------------------------------- > Stéphane Ducasse > http://stephane.ducasse.free.fr / http://www.pharo.org > 03 59 35 87 52 > Assistant: Aurore Dalle > FAX 03 59 57 78 50 > TEL 03 59 35 86 16 > S. Ducasse - Inria > 40, avenue Halley, > Parc Scientifique de la Haute Borne, Bât.A, Park Plaza > Villeneuve d'Ascq 59650 > France -------------------------------------------- Stéphane Ducasse http://stephane.ducasse.free.fr / http://www.pharo.org 03 59 35 87 52 Assistant: Aurore Dalle FAX 03 59 57 78 50 TEL 03 59 35 86 16 S. Ducasse - Inria 40, avenue Halley, Parc Scientifique de la Haute Borne, Bât.A, Park Plaza Villeneuve d'Ascq 59650 France