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