[squeak-dev] The Inbox: ShoutCore-ul.65.mcz

Levente Uzonyi leves at caesar.elte.hu
Wed Jul 10 08:54:45 UTC 2019


Hi Marcel,

Thanks for the feedback.
I checked the senders of #view: and didn't see the possibility of setting 
it to nil. Based on the current usage, it could even be a "constructor" 
parameter.

I have the following senders in my image:
- MorphicToolBuilder >> #buildPluggableText:
 	- the argument will be the result of a #new send
- PBClassPreferenceView >> #textField
 	- the argument will be a PluggableTextMorphPlus
- PluggableTextMorphPlus >> #useDefaultStyler
 	- the argument will be a PluggableTextMorphPlus

By the way, what should the styler do with the styled text when view is 
nil?

Levente

On Wed, 10 Jul 2019, Marcel Taeumel wrote:

> Hi Levente,
> nice! :-) For the background process, I would either closure "view" or check for nil because any do-it in the UI process might re-configure the styler. 
> 
> Best,
> Marcel
>
>       Am 09.07.2019 23:00:45 schrieb commits at source.squeak.org <commits at source.squeak.org>:
>
>       Levente Uzonyi uploaded a new version of ShoutCore to project The Inbox:
>       http://source.squeak.org/inbox/ShoutCore-ul.65.mcz
>
>       ==================== Summary ====================
>
>       Name: ShoutCore-ul.65
>       Author: ul
>       Time: 9 July 2019, 11:00:06.496443 pm
>       UUID: 5b4b23fe-b7de-4498-a16b-80959cfb1e62
>       Ancestors: ShoutCore-mt.64
>
>       Further SHTextStyler refactorings:
>       - replaced text instance variable with temporiaries
>       - removed monitor. backgroundProcess consistency is ensured by atomic execution of certain instructions
>       - assume that view is never nil. It makes no sense to style when there's no view, and view is always assigned once, when a styler instance is created
>
>       =============== Diff against ShoutCore-mt.64 ===============
>
>       Item was changed:
>       Object subclass: #SHTextStyler
>       + instanceVariableNames: 'backgroundProcess view stylingEnabled'
>       - instanceVariableNames: 'backgroundProcess text monitor view stylingEnabled'
>       classVariableNames: ''
>       poolDictionaries: ''
>       category: 'ShoutCore-Styling'!
>
>       !SHTextStyler commentStamp: 'tween 8/27/2004 10:54' prior: 0!
>       I am an Abstract class.
>       Subclasses of me can create formatted, coloured, and styled copies of Text that is given to them.
>       They may perform their styling asynchronously, in a background process which I create and manage.
>
>       My public interface is...
>
>       view: aViewOrMorph - set the view that will receive notifications when styling has completed.
>
>       format: aText - modifies aText's string
>
>       style: aText - modifies the TextAttributes of aText, but does not change the string, then sends #stylerStyled: to the view.
>
>       styleInBackgroundProcess: aText - performs style: in a background process, then sends #stylerStylednBackground: to the view.
>
>       styledTextFor: aText - answers a formatted and styled copy of aText
>
>       unstyledTextFrom: aText - answers a copy of aText with all TextAttributes removed
>
>       Subclasses of me should re-implement...
>
>       privateFormat: aText - answer a formatted version of aText; the String may be changed
>       privateStyle: aText - modify the TextAttributes of aText; but do not change the String
> 
> 
> 
>
>       !
>
>       Item was removed:
>       - ----- Method: SHTextStyler>>monitor (in category 'private') -----
>       - monitor
>       - ^monitor ifNil: [monitor := Monitor new]!
>
>       Item was changed:
>       ----- Method: SHTextStyler>>style: (in category 'styling') -----
>       style: aText
>       +
>       + | text |
>       self terminateBackgroundStylingProcess.
>       + stylingEnabled ifFalse: [ ^self ].
>       + text := aText copy.
>       + self privateStyle: text.
>       + view stylerStyled: text!
>       - stylingEnabled ifTrue:[
>       - text := aText copy.
>       - self privateStyle: text.
>       - view ifNotNil:[view stylerStyled: text] ]!
>
>       Item was changed:
>       ----- Method: SHTextStyler>>styleInBackgroundProcess: (in category 'styling') -----
>       styleInBackgroundProcess: aText
>
>       + | text newBackgroundProcess |
>       self terminateBackgroundStylingProcess.
>       + stylingEnabled ifFalse: [ ^self ].
>       + text := aText copy.
>       + newBackgroundProcess := [
>       + self privateStyle: text.
>       + Project current addDeferredUIMessage: [
>       + view stylerStyledInBackground: text ].
>       + Processor activeProcess == backgroundProcess ifTrue: [
>       + backgroundProcess := nil ] ] newProcess
>       + priority: Processor userBackgroundPriority;
>       + yourself.
>       + backgroundProcess ifNil: [
>       + (backgroundProcess := newBackgroundProcess) resume ]!
>       -
>       - stylingEnabled ifTrue: [
>       - text := aText copy.
>       - self monitor critical: [
>       - backgroundProcess := [
>       - self privateStyle: text.
>       - view ifNotNil: [:v | Project current addDeferredUIMessage: [v stylerStyledInBackground: text]].
>       - ] forkAt: Processor userBackgroundPriority] ]
>       - !
>
>       Item was changed:
>       ----- Method: SHTextStyler>>terminateBackgroundStylingProcess (in category 'private') -----
>       terminateBackgroundStylingProcess
>       + "Terminate the background styling process if it exists. Assume that the first two lines are executed atomically."
>
>       + backgroundProcess ifNotNil: [ :backgroundProcessToTerminate |
>       + backgroundProcess := nil.
>       + backgroundProcessToTerminate terminate ]!
>       - self monitor critical: [
>       - backgroundProcess
>       - ifNotNil: [
>       - backgroundProcess terminate.
>       - backgroundProcess := nil]].!
>
>       Item was changed:
>       ----- Method: SHTextStyler>>veryDeepInner: (in category 'copying') -----
>       veryDeepInner: aDeepCopier
>       +
>       super veryDeepInner: aDeepCopier.
>       + backgroundProcess := nil.
>       - backgroundProcess := monitor := nil.
>       - text := text veryDeepCopyWith: aDeepCopier.
>       view := view veryDeepCopyWith: aDeepCopier!
> 
> 
> 
>


More information about the Squeak-dev mailing list