[squeak-dev] MorphicProject subclass: #EtoysProject

H. Hirzel hannes.hirzel at gmail.com
Thu Oct 5 20:49:33 UTC 2017


#fixUponLoad:seg:

as called in  (see mark *******)


ProjectLoading class

loadImageSegment: morphOrList  fromDirectory: aDirectoryOrNil
withProjectView: existingView numberOfFontSubstitutes:
numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr

	| proj projectsToBeDeleted ef f |

	(f := (Flaps globalFlapTabWithID: 'Navigator' translated)) ifNotNil:
[f hideFlap].
	proj := morphOrList arrayOfRoots
			detect: [:mm | mm isKindOf: Project]
			ifNone: [^ nil].
	numberOfFontSubstitutes > 0 ifTrue: [
		proj projectParameterAt: #substitutedFont put: substituteFont].
	ef := proj projectParameterAt: #eToysFont.
	(ef isNil or: [ef ~= substituteFont familySizeFace]) ifTrue: [
		proj projectParameterAt: #substitutedFont put: substituteFont.
	].

	proj projectParameters at: #MultiSymbolInWrongPlace put: false.
		"Yoshiki did not put MultiSymbols into outPointers in older images!"

	morphOrList arrayOfRoots do: [:obj |
		obj fixUponLoad: proj seg: morphOrList "imageSegment  ******* "].

	(proj projectParameters at: #MultiSymbolInWrongPlace) ifTrue: [
		morphOrList arrayOfRoots do: [:obj | (obj isKindOf: Set) ifTrue:
[obj rehash]]].

	proj resourceManager: mgr.
	"proj versionFrom: preStream."
	proj lastDirectory: aDirectoryOrNil.
	proj setParent: Project current.
	projectsToBeDeleted := OrderedCollection new.
	existingView == #none ifFalse: [
		self makeExistingView: existingView project: proj
projectsToBeDeleted: projectsToBeDeleted].
	ChangeSorter allChangeSets add: proj changeSet.
	Project current projectParameters
		at: #deleteWhenEnteringNewProject
		ifPresent: [ :ignored |
			projectsToBeDeleted add: Project current.
			Project current removeParameter: #deleteWhenEnteringNewProject.
		].
	projectsToBeDeleted isEmpty ifFalse: [
		proj projectParameters
			at: #projectsToBeDeleted
			put: projectsToBeDeleted.
	].
	proj removeParameter: #eToysFont.
	^ proj

On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
> To adapt
>
> #fixUponLoad:seg:
>
> is the issue here if we want to change MorphicProjects to
> EtoysProjects when loading old Etoys pr projects.
>
> As
>     MorphicProject subclass: #EtoysProject
> holds an now new instance variables the changes should be minimal.
> Have all objects from aMorphicProject added to a new EtoysProject and
> then a become:
>
> Comments?
>
>
>
> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>> Later on in
>>
>>
>> ProjectLoading class>>loadImageSegment: morphOrList  fromDirectory:
>> aDirectoryOrNil withProjectView: existingView numberOfFontSubstitutes:
>> numberOfFontSubstitutes substituteFont: substituteFont mgr: mgr
>>
>>
>>
>> 	| proj projectsToBeDeleted ef f |
>> 	(f := (Flaps globalFlapTabWithID: 'Navigator' translated)) ifNotNil:
>> [f hideFlap].
>> 	proj := morphOrList arrayOfRoots
>> 			detect: [:mm | mm isKindOf: Project]
>> 			ifNone: [^ nil].
>>
>>
>> The project 'proj' is read which is a MorphicProject.
>>
>> We need to convert this into an EtoysProject if we want to follow the
>> path of upgrading MorphicProjects to EtoysProjects.
>>
>> Probably a good idea but a matter of discussion.
>>
>> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>> If you drop
>>>
>>>     http://etoys.laptop.org/src/Content/ExampleEtoys/CarAndPen.014.pr
>>>
>>> on to the desktop Squeak asks you for a replacement for
>>> 'MultiNewParagraph' as this class was removed in April (The Trunk:
>>> EToys-nice.292.mcz)
>>>
>>> Answer 'NewParagraph'. Then the Etoys project loads and gives some
>>> error messages. Some are related to preferences. An issue to fix
>>> first.
>>>
>>> Another issue is that actually a MorphicProject is created instead of
>>> the new #EtoysProject type we want.
>>>
>>> I do not now yet where to do this.
>>> The call chain passes through
>>>
>>> MultiByteBinaryOrTextStream>>fileInObjectAndCodeForProject [1]
>>>
>>> The stream [2] has code and an  object to be read by a SmartRefStream.
>>>
>>> More investigation needed.
>>>
>>> --Hannes
>>>
>>>
>>>
>>>
>>>
>>>
>>> [1] MultiByteBinaryOrTextStream>>fileInObjectAndCodeForProject
>>>
>>> fileInObjectAndCodeForProject
>>> 	"This file may contain:
>>> 1) a fileIn of code
>>> 2) just an object in SmartReferenceStream format
>>> 3) both code and an object.
>>> 	File it in and return the object.  Note that self must be a
>>> FileStream or RWBinaryOrTextStream.  Maybe ReadWriteStream incorporate
>>> RWBinaryOrTextStream?"
>>> 	| refStream object |
>>> 	self halt.
>>> 	self text.
>>> 	self peek asciiValue = 4
>>> 		ifTrue: [  "pure object file"
>>> 			self binary.
>>> 			refStream := SmartRefStream on: self.
>>> 			object := refStream nextAndClose]
>>> 		ifFalse: [  "objects mixed with a fileIn"
>>> 			self fileInProject.  "reads code and objects, then closes the file"
>>> 			self binary.
>>> 			object := SmartRefStream scannedObject].	"set by side effect of one
>>> of the chunks"
>>> 	SmartRefStream scannedObject: nil.  "clear scannedObject"
>>> 	^ object
>>>
>>>
>>>
>>>
>>>
>>>
>>> [2] Content of the Etoys pr file readstream
>>>
>>> '''From etoys4.0 of 9 October 2008 [latest update: #2319] on 18
>>> September 2009 at 3:39:18 pm''!
>>>  | cont | (Smalltalk includesKey: #MorphExtensionPlus) ifFalse: [self
>>> inform: ''This project cannot be loaded into an older system.\Please
>>> use an OLPC Etoys compatible image.'' translated withCRs.
>>> 		cont _ thisContext.
>>> 		[cont notNil] whileTrue: [
>>> 			cont selector == #handleEvent: ifTrue: [cont return: nil].
>>> 			cont _ cont sender.
>>> 		]]!
>>>
>>> !ObjectScanner new initialize!
>>>
>>>
>>>
>>> !self smartRefStream!
>>>
>>> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>> This later on goes to
>>>>
>>>>
>>>> ProjectLoading class>>
>>>>
>>>> openName: aFileName stream: preStream fromDirectory: aDirectoryOrNil
>>>> withProjectView: existingView clearOriginFlag: clearOriginFlag
>>>> 	"Reconstitute a Morph from the selected file, presumed to
>>>> represent a Morph saved via the SmartRefStream mechanism, and open it
>>>> in an appropriate Morphic world."
>>>>
>>>>    	| morphOrList archive mgr substituteFont numberOfFontSubstitutes
>>>> resultArray anObject project manifests dict |
>>>> 	(self checkStream: preStream) ifTrue: [^ self].
>>>> 	ProgressNotification signal: '0.2'.
>>>> 	archive := preStream isZipArchive
>>>> 		ifTrue:[ZipArchive new readFrom: preStream]
>>>> 		ifFalse:[nil].
>>>> 	archive ifNotNil:[
>>>> 	manifests := (archive membersMatching: '*manifest').
>>>> 	(manifests size = 1 and: [((dict := self parseManifest: manifests
>>>> first contents) at: 'Project-Format' ifAbsent: []) = 'S-Expression'])
>>>> 		ifTrue: [
>>>> 			^ (self respondsTo:
>>>> #openSexpProjectDict:stream:fromDirectory:withProjectView:)
>>>> 				ifTrue: [self openSexpProjectDict: dict stream: preStream
>>>> fromDirectory: aDirectoryOrNil withProjectView: existingView]
>>>> 				ifFalse: [self inform: 'Cannot load S-Expression format projects
>>>> without Etoys' translated]]].
>>>>
>>>> 	morphOrList := self morphOrList: aFileName stream: preStream
>>>> fromDirectory: aDirectoryOrNil archive: archive.
>>>> 	morphOrList ifNil: [^ self].
>>>> 	ProgressNotification  signal: '0.4'.
>>>> 	resultArray := self fileInName: aFileName archive: archive
>>>> morphOrList: morphOrList.
>>>> 	anObject := resultArray first.
>>>> 	numberOfFontSubstitutes := resultArray second.
>>>> 	substituteFont := resultArray third.
>>>> 	mgr := resultArray fourth.
>>>> 	preStream close.
>>>> 	ProgressNotification  signal: '0.7'.
>>>> 		"the hard part is over"
>>>> 	(anObject isKindOf: ImageSegment) ifTrue: [
>>>> 		project := self loadImageSegment: anObject
>>>> 			fromDirectory: aDirectoryOrNil
>>>> 			withProjectView: existingView
>>>> 			numberOfFontSubstitutes: numberOfFontSubstitutes
>>>> 			substituteFont: substituteFont
>>>> 			mgr: mgr.
>>>> 		project noteManifestDetailsIn: dict.
>>>> 		project removeParameter: #sugarProperties.
>>>> 		Smalltalk at: #SugarPropertiesNotification ifPresent: [:sp |
>>>> 			sp signal ifNotNil: [:props |
>>>> 				project keepSugarProperties: props monitor: true]].
>>>> 		clearOriginFlag ifTrue: [project forgetExistingURL].
>>>> 		ProgressNotification  signal: '0.8'.
>>>> 			^ project
>>>> 				ifNil: [self inform: 'No project found in this file' translated]
>>>> 				ifNotNil: [ProjectEntryNotification signal: project]].
>>>> 	Project current openViewAndEnter: anObject
>>>>
>>>> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>>> A few steps more: when I drop a project file onto the desktop the
>>>>> following methods are called
>>>>>
>>>>> PasteUpMorph handleDroppedItem: anItem event: anEvent
>>>>> ExternalDropHandler lookupExternalDropHandler: anItem
>>>>> ExternalDropHandler handle: dropStream in: pasteUp dropEvent: anEvent
>>>>> ExternalDropHandler class defaultProjectHandler
>>>>>
>>>>> ProjectLoading openOn: aMultiByteFileStream:
>>>>> "'/home/user/Downloads/CarAndPen.014(2).pr'"
>>>>>
>>>>> So we have to fix ProjectLoading
>>>>>
>>>>>
>>>>> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>>>> Note: MorphWithGrid does not really make sense unless you have a
>>>>>> superclass MorphWithDnD (Drag and Drop) which handles the morph
>>>>>> droped
>>>>>> and makes them 'sticky'.
>>>>>>
>>>>>> Though refactoring PastUpMorph by inserting superclasses is an issue
>>>>>> I
>>>>>> suggest to put this on the backburner at the moment and focus on
>>>>>> getting the Etoys setting straight as Dave suggests in the initial
>>>>>> mail.
>>>>>>
>>>>>> A use case to follow: What happens when you drop  the exapme project
>>>>>>
>>>>>>     http://etoys.laptop.org/src/Content/ExampleEtoys/CarAndPen.014.pr
>>>>>>
>>>>>> on to the desktop.
>>>>>>
>>>>>> ExternalDropHandler>>handleDroppedItem:event:  [21]
>>>>>>
>>>>>> is called in this case and then dispatches to do the necessary things
>>>>>> to deal with the
>>>>>>     ExampleEtoys/CarAndPen.014.pr
>>>>>> file.
>>>>>>
>>>>>> There is a message box which needs attention.
>>>>>>
>>>>>> And I assume that in the course of these events some settings are
>>>>>> necessary. Most prominently to choose EtoysProject and no longer
>>>>>> MorphicProject
>>>>>>
>>>>>> --Hannes
>>>>>>
>>>>>> [21] http://wiki.squeak.org/squeak/4283
>>>>>>
>>>>>> On 10/5/17, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>>>>>>> I added a demo file Morphic-hjh.1354 [11] to the repository
>>>>>>>
>>>>>>> MCHttpRepository
>>>>>>> 	location: 'http://www.squeaksource.com/EtoysProject'
>>>>>>> 	user: ''
>>>>>>> 	password: ''
>>>>>>>
>>>>>>> This file should be loaded into a fully updated trunk test image.
>>>>>>>
>>>>>>> I agree with what Tobias noted earlier in this thread that it is
>>>>>>> probably better to avoid renaming PasteUpMorph. I see as a solution
>>>>>>> to
>>>>>>> easier deal with PasteUpMorph functions the insertion of
>>>>>>> superclasses
>>>>>>> of PasteUpMorph (and thus subclasses of BorderedMorph) [12]
>>>>>>>
>>>>>>> The next thing I will come up with is a class
>>>>>>>     MorphWithDnD
>>>>>>>
>>>>>>> a morph class which supports drag and drop.
>>>>>>> As a superclass of MorphWithGrid
>>>>>>>
>>>>>>> A third class would be PlayField which contains all the Etoys
>>>>>>> selectors.
>>>>>>> In an image without Etoys that class would then be just empty.
>>>>>>>
>>>>>>> --Hannes
>>>>>>>
>>>>>>>
>>>>>>> --------------------
>>>>>>>
>>>>>>> [11]
>>>>>>> Name: Morphic-hjh.1354
>>>>>>> Author: hjh
>>>>>>> Time: 5 October 2017, 11:51:21.903338 am
>>>>>>> UUID: e96d5a46-453f-418c-b95f-26f1674ca329
>>>>>>> Ancestors: Morphic-hjh.1353
>>>>>>>
>>>>>>> Demo which shows how to remove selectors from PasteUpMorph and
>>>>>>> insert
>>>>>>> them into a newy created superclass
>>>>>>>
>>>>>>> Inserted
>>>>>>>      MorphWithGrid
>>>>>>> as a subclass of BorderedMorph and superclass of
>>>>>>>     PasteUpMorph
>>>>>>>
>>>>>>> gridding protocol was moved from
>>>>>>>     PasteUpMorph
>>>>>>> to
>>>>>>>     MorphWithGrid
>>>>>>>
>>>>>>>
>>>>>>> Morphic-hjh.1353:
>>>>>>> 	Ancestors: Morphic-hjh.1352
>>>>>>>
>>>>>>> Note: I tried to save this update several times. That accounts for
>>>>>>> the
>>>>>>> empty updates in between.
>>>>>>>
>>>>>>>
>>>>>>> ---------
>>>>>>> [12]
>>>>>>> After filing in Morphic-hjh.1354
>>>>>>> PasteUpMorph printHierarchy '
>>>>>>> ProtoObject #()
>>>>>>> 	Object #()
>>>>>>> 		Morph #()
>>>>>>> 			BorderedMorph #()
>>>>>>> 				MorphWithGrid #(''griddingOn'')
>>>>>>> 					PasteUpMorph #(...)
>>>>>>> 						ComponentLayout #(...)
>>>>>>> 						EventTimeline #(...)
>>>>>>> 						GeeBookPageMorph #(...)
>>>>>>> 						IndexTabs #(...)
>>>>>>> 						MouseEventEditor #(...)
>>>>>>> 						PartsBin #(...)
>>>>>>> 						QuickGuideHolderMorph #(...)
>>>>>>> 						SyntaxTestMethods #(...)
>>>>>>> 						TetrisBoard #(...)
>>>>>>> 						TextPlusPasteUpMorph #(...)
>>>>>>> 						WiWPasteUpMorph #(...)
>>>>>>> 							MVCWiWPasteUpMorph #(...)
>>>>>>> 						Worldlet #(...)
>>>>>>> 						ZASMScriptMorph #(...)
>>>>>>> 						ZoomAndScrollMorph #(...)'
>>>>>>>
>>>>>>> On 10/5/17, Marcel Taeumel <marcel.taeumel at hpi.de> wrote:
>>>>>>>> Done. :)
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Marcel
>>>>>>>> Am 05.10.2017 06:21:44 schrieb David T. Lewis
>>>>>>>> <lewis at mail.msen.com>:
>>>>>>>> We did have a problem on squeaksource.com, but I think it is mostly
>>>>>>>> resolved
>>>>>>>> now.
>>>>>>>>
>>>>>>>> Hannes,
>>>>>>>>
>>>>>>>> The password reset for your HJH account was lost, so I set it back
>>>>>>>> to
>>>>>>>> the
>>>>>>>> new password that I sent to you earlier in private email. Hopefully
>>>>>>>> your
>>>>>>>> access is working again now.
>>>>>>>>
>>>>>>>> Marcel,
>>>>>>>>
>>>>>>>> Your new account disappeared when squeaksource recovered from some
>>>>>>>> internal
>>>>>>>> problem. Sorry, I do not know the cause. But could I ask you to
>>>>>>>> please
>>>>>>>> register
>>>>>>>> again on squeaksource.com, and I will then add you back to
>>>>>>>> EtoysProject?
>>>>>>>>
>>>>>>>> Sorry for the disruption,
>>>>>>>> Dave
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Oct 05, 2017 at 02:03:47AM +0200, H. Hirzel wrote:
>>>>>>>>> Dave
>>>>>>>>>
>>>>>>>>> Earlier today login worked. Currently it does not.
>>>>>>>>>
>>>>>>>>> --Hannes
>>>>>>>>>
>>>>>>>>> On 10/5/17, David T. Lewis wrote:
>>>>>>>>> > Hannes,
>>>>>>>>> >
>>>>>>>>> > You did not cause the problem. It may have been me, I saved the
>>>>>>>>> > squeaksource.com
>>>>>>>>> > image from a VNC session (because I wanted to make an up to date
>>>>>>>>> > backup
>>>>>>>>> > of
>>>>>>>>> > it),
>>>>>>>>> > and I am now unable to log in to squeaksource. Maybe I triggered
>>>>>>>>> > a
>>>>>>>>> > bug
>>>>>>>>> > :-/
>>>>>>>>> >
>>>>>>>>> > Can you please tell me if you are able to log in to your
>>>>>>>>> > http://squeaksource.com
>>>>>>>>> > page? I am getting authorization errors, and I suspect it is a
>>>>>>>>> > problem
>>>>>>>>> > that
>>>>>>>>> > affects
>>>>>>>>> > everyone.
>>>>>>>>> >
>>>>>>>>> > Thanks,
>>>>>>>>> > Dave
>>>>>>>>> >
>>>>>>>>> > On Thu, Oct 05, 2017 at 01:52:35AM +0200, H. Hirzel wrote:
>>>>>>>>> >> Dave,
>>>>>>>>> >>
>>>>>>>>> >> Yes, I encounter problems. They might be related to what I just
>>>>>>>>> >> tried
>>>>>>>>> >> to
>>>>>>>>> >> do:
>>>>>>>>> >>
>>>>>>>>> >> I wanted to save an updated version of Morphic to the
>>>>>>>>> >> ProjectEtoys
>>>>>>>>> >> repository but by mistake I tried to commit it to the trunk. As
>>>>>>>>> >> I
>>>>>>>>> >> do
>>>>>>>>> >> not have commit rights to trunk this prevented me from changing
>>>>>>>>> >> it
>>>>>>>>> >> inadvertently. Later on I wanted to commit that version to
>>>>>>>>> >> ProjectEtoys. It did not work.
>>>>>>>>> >>
>>>>>>>>> >> --Hannes
>>>>>>>>> >>
>>>>>>>>> >>
>>>>>>>>> >>
>>>>>>>>> >> On 10/5/17, David T. Lewis wrote:
>>>>>>>>> >> > I'm seeing problems with SqueakSource right now, trying to
>>>>>>>>> >> > figure
>>>>>>>>> >> > out
>>>>>>>>> >> > what is wrong. So the project may not be accessible right now
>>>>>>>>> >> > :-/
>>>>>>>>> >> >
>>>>>>>>> >> > Dave
>>>>>>>>> >> >
>>>>>>>>> >> >
>>>>>>>>> >> > On Thu, Oct 05, 2017 at 01:17:58AM +0200, H. Hirzel wrote:
>>>>>>>>> >> >> Karl,
>>>>>>>>> >> >>
>>>>>>>>> >> >> So far entering and existing the Etoys project works
>>>>>>>>> >> >> smoothly.
>>>>>>>>> >> >>
>>>>>>>>> >> >> Load mcz from into current Squeak 6.0a
>>>>>>>>> >> >>
>>>>>>>>> >> >> MCHttpRepository
>>>>>>>>> >> >> location: 'http://www.squeaksource.com/EtoysProject'
>>>>>>>>> >> >> user: ''
>>>>>>>>> >> >> password: ''
>>>>>>>>> >> >>
>>>>>>>>> >> >> The issue is about providing more settings when entering.
>>>>>>>>> >> >>
>>>>>>>>> >> >> Karl, do you want to be added to the list of developers?
>>>>>>>>> >> >>
>>>>>>>>> >> >> --HH
>>>>>>>>> >> >>
>>>>>>>>> >> >> On 10/5/17, H. Hirzel wrote:
>>>>>>>>> >> >> > PasteUpMorph is useful and the functions have to be
>>>>>>>>> >> >> > maintained.
>>>>>>>>> >> >> >
>>>>>>>>> >> >> > However adding more functions to Morph does not make
>>>>>>>>> >> >> > sense.
>>>>>>>>> >> >> >
>>>>>>>>> >> >> > Squeak 6.0a
>>>>>>>>> >> >> > Morph selectors size 1345
>>>>>>>>> >> >> > PasteUpMorph selectors size 530
>>>>>>>>> >> >> >
>>>>>>>>> >> >> > --Hannes
>>>>>>>>> >> >> >
>>>>>>>>> >> >> > On 10/4/17, karl ramberg wrote:
>>>>>>>>> >> >> >> I'm not sure anybody uses Etoys anymore, but PasteUpMorph
>>>>>>>>> >> >> >> is
>>>>>>>>> >> >> >> very
>>>>>>>>> >> >> >> useful
>>>>>>>>> >> >> >> in
>>>>>>>>> >> >> >> direct manipulation because of it's various layout and
>>>>>>>>> >> >> >> event
>>>>>>>>> >> >> >> handling
>>>>>>>>> >> >> >> options. It also act as a container of other morphs, with
>>>>>>>>> >> >> >> automatic
>>>>>>>>> >> >> >> layout, enumeration etc.
>>>>>>>>> >> >> >> I'm sure most of this could be refactored into Morph
>>>>>>>>> >> >> >> class
>>>>>>>>> >> >> >> or
>>>>>>>>> >> >> >> another
>>>>>>>>> >> >> >> class.
>>>>>>>>> >> >> >>
>>>>>>>>> >> >> >> Best,
>>>>>>>>> >> >> >> Karl
>>>>>>>>> >> >> >>
>>>>>>>>> >> >> >> On Tue, Oct 3, 2017 at 3:03 PM, Marcel Taeumel
>>>>>>>>> >> >> >>
>>>>>>>>> >> >> >> wrote:
>>>>>>>>> >> >> >>
>>>>>>>>> >> >> >>> +1 :)
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>> And then later: Rename PasteUpMorph to WorldMorph, and
>>>>>>>>> >> >> >>> keep
>>>>>>>>> >> >> >>> an
>>>>>>>>> >> >> >>> empty
>>>>>>>>> >> >> >>> PasteUpMorph subclass around for compatibility reasons.
>>>>>>>>> >> >> >>> So
>>>>>>>>> >> >> >>> many
>>>>>>>>> >> >> >>> ideas
>>>>>>>>> >> >> >>> have
>>>>>>>>> >> >> >>> been ported down to Morph class over the past years. New
>>>>>>>>> >> >> >>> applications
>>>>>>>>> >> >> >>> have
>>>>>>>>> >> >> >>> no reason to ever use other instances of PasteUpMorph.
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>> Best,
>>>>>>>>> >> >> >>> Marcel
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>> Am 03.10.2017 14:57:55 schrieb H. Hirzel :
>>>>>>>>> >> >> >>> On 10/3/17, H. Hirzel wrote:
>>>>>>>>> >> >> >>> > Dave
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > your change set contains the class EtoysProject with
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > EtoysProject selectors
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > #(#finalEnterActions: #restoreGlobalPreferences
>>>>>>>>> >> >> >>> > #saveGlobalPreferences
>>>>>>>>> >> >> >>> > #initializeProjectPreferences #configureOnFirstEntry
>>>>>>>>> >> >> >>> > #finalExitActions:)
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > For complete configuration of a EtoysProject it might
>>>>>>>>> >> >> >>> > be
>>>>>>>>> >> >> >>> > necessary
>>>>>>>>> >> >> >>> > to
>>>>>>>>> >> >> >>> > do
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > PasteUpMorph subclass: EtoysPasteUpMorph
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > as well. http://wiki.squeak.org/squeak/6461
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > Then Etoys related methods may be pushed down to
>>>>>>>>> >> >> >>> > EtoysPasteUpMorph.
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>> See screen shot attached.
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>> > And probably an Etoys specific subclass of WorldMenu
>>>>>>>>> >> >> >>> > would
>>>>>>>>> >> >> >>> > be
>>>>>>>>> >> >> >>> > fine
>>>>>>>>> >> >> >>> > as
>>>>>>>>> >> >> >>> well
>>>>>>>>> >> >> >>> > http://wiki.squeak.org/squeak/6461
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > there is a test project [2] and some more information
>>>>>>>>> >> >> >>> > about
>>>>>>>>> >> >> >>> > adaptions
>>>>>>>>> >> >> >>> > needed because of the UI changes in the thread 'Etoys
>>>>>>>>> >> >> >>> > in
>>>>>>>>> >> >> >>> > 2017?' -
>>>>>>>>> >> >> >>> > UI
>>>>>>>>> >> >> >>> > preferences [3]. And it would be good to have Etoys
>>>>>>>>> >> >> >>> > methods
>>>>>>>>> >> >> >>> > /
>>>>>>>>> >> >> >>> > configuration separate [4].
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > I suggest that you start go ahead and start
>>>>>>>>> >> >> >>> > implementing
>>>>>>>>> >> >> >>> > this
>>>>>>>>> >> >> >>> > while
>>>>>>>>> >> >> >>> > using a test Etoys project dropped onto the desktop.
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > --Hannes
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > [2] > You simply drop it in. E.g. download this
>>>>>>>>> >> >> >>> > project
>>>>>>>>> >> >> >>> >> http://etoys.laptop.org/src/Content/ExampleEtoys/CarAndPen.014.pr
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > [3] Hannes Hirzel, 'Etoys in 2017?' mail, Wed, Feb 22,
>>>>>>>>> >> >> >>> > 2017
>>>>>>>>> >> >> >>> > at
>>>>>>>>> >> >> >>> > 11:01
>>>>>>>>> >> >> >>> > AM
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > [4] David T. Lewis, Sep 4, 2016 at 3:34 PM
>>>>>>>>> >> >> >>> > "I think it would be great if both Etoys and Scratch
>>>>>>>>> >> >> >>> > were
>>>>>>>>> >> >> >>> > easily
>>>>>>>>> >> >> >>> > loadable and unloadable in trunk."
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>> > On 10/2/17, David T. Lewis wrote:
>>>>>>>>> >> >> >>> >> An EtoysProject is a project that is configured for
>>>>>>>>> >> >> >>> >> running
>>>>>>>>> >> >> >>> >> Etoys.
>>>>>>>>> >> >> >>> >> On
>>>>>>>>> >> >> >>> >> first entry to a new EtoysProject, the playground and
>>>>>>>>> >> >> >>> >> project
>>>>>>>>> >> >> >>> preferences
>>>>>>>>> >> >> >>> >> are initialized to provide an environment similar to
>>>>>>>>> >> >> >>> >> that
>>>>>>>>> >> >> >>> >> of
>>>>>>>>> >> >> >>> >> a
>>>>>>>>> >> >> >>> >> traditional
>>>>>>>>> >> >> >>> >> standalone Etoys image.
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >> Certain preferences that are required for Etoys are
>>>>>>>>> >> >> >>> >> initialized
>>>>>>>>> >> >> >>> >> on
>>>>>>>>> >> >> >>> >> project
>>>>>>>>> >> >> >>> >> entry, overriding their global preference values
>>>>>>>>> >> >> >>> >> while
>>>>>>>>> >> >> >>> >> this
>>>>>>>>> >> >> >>> EtoysProject
>>>>>>>>> >> >> >>> >> is active. On leaving the project, these preferences
>>>>>>>>> >> >> >>> >> are
>>>>>>>>> >> >> >>> >> restored
>>>>>>>>> >> >> >>> >> to
>>>>>>>>> >> >> >>> >> their
>>>>>>>>> >> >> >>> >> previous values.
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >> "ProjectViewMorph openOn: EtoysProject new"
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >> Change set attached for a minimal implementation.
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >> Anyone with Etoys knowledge care to help? I do not
>>>>>>>>> >> >> >>> >> know
>>>>>>>>> >> >> >>> >> enough
>>>>>>>>> >> >> >>> >> about
>>>>>>>>> >> >> >>> >> Etoys
>>>>>>>>> >> >> >>> >> to fill in the rest of the initialization that will
>>>>>>>>> >> >> >>> >> be
>>>>>>>>> >> >> >>> >> required,
>>>>>>>>> >> >> >>> >> but
>>>>>>>>> >> >> >>> >> it
>>>>>>>>> >> >> >>> >> should not be hard to do.
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >> Dave
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >>
>>>>>>>>> >> >> >>> >
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>>
>>>>>>>>> >> >> >>
>>>>>>>>> >> >> >
>>>>>>>>> >> >
>>>>>>>>> >> >
>>>>>>>>> >> >>
>>>>>>>>> >> >
>>>>>>>>> >> >
>>>>>>>>> >> >
>>>>>>>>> >>
>>>>>>>>> >
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


More information about the Squeak-dev mailing list