[squeak-dev] MorphicProject subclass: #EtoysProject
David T. Lewis
lewis at mail.msen.com
Sun Oct 22 00:33:20 UTC 2017
On Fri, Oct 06, 2017 at 03:48:56PM +0200, Bert Freudenberg wrote:
> On Fri, Oct 6, 2017 at 2:44 PM, David T. Lewis <lewis at mail.msen.com> wrote:
> > So we might have some kind of rule in project loading that says "if
> > the current project is an EtoysProject, and if I am loading a *.pr for
> > a MorphicProject, then make it an EtoysProject". And perhaps when saving
> > a project, we could reverse the rule and always save a project as
> > MorphicProject, because we know that a loader in EtoysProject will know
> > how to do the right thing with it.
> ???Actually, projects saved from the Squeakland image store a class named
> "Project???". Since this has been made abstract now, we instead load it as
> ???The logic is mostly in SmartRefStream, in this case, #initKnownRenames.
I decided to play around with this a bit, and put some experimental updates
in the http://www.squeaksource.com/EtoysProject repository. This allows a
project file to be dropped into an EtoysProject, and the resulting new project
will be EtoysProject rather than MorphicProject. When transitioning from an
EtoysProject to something else (usually a MorphicProject), the Etoys-specific
preference overrides are restored to normal. When moving from one EtoysProject
to another, the preference overrides should stay in effect.
Dropping a project file into a MorphicProject still creates a new MorphicProject
I'm not sure this is a good idea, and it is surely going to be full of bugs,
but it does seem to work.
Time: 21 October 2017, 7:44:28.846825 pm
Assuming that the object saved as a Dictionary value may be any object that
responds to #value (i.e. a block), implement keyAtEvaluatedValue: to look
up the key corresponding the the evaluated object.
Time: 21 October 2017, 7:51:39.874717 pm
The #renamed dictionary of a SmartReferenceStream maps a serialized class,
such as Project, to the expected class to be used for materialization, such
as MorphicProject. In some cases it may be desirable to let the mapping choice
be decided at load time. Therefore, let the value stored in #renamed be
either a symbol or a block. If it is a block, evaluated it to determine the
new mapped class. For example, if EtoysProject is a specialized implementation
of MorphicProject, then it may be desirable to map a saved Project to a new
EtoysProject rather than a new MorphicProject.
Time: 21 October 2017, 7:55:23.65049 pm
Restore saved global preferences only if the project being entered is not
an EtoysProject. Thus retain the preference overrides while moving from one
EtoysProject to another.
More information about the Squeak-dev