[squeak-dev] MorphicProject subclass: #EtoysProject

H. Hirzel hannes.hirzel at gmail.com
Thu Oct 5 18:21:41 UTC 2017


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