<span id="goog_26648629"></span><span id="goog_26648630"></span><a href="/"></a>I created an issue in Tracker for this problem: <a href="http://tracker.squeakland.org/browse/SQ-747">http://tracker.squeakland.org/browse/SQ-747</a><div>
<br></div><div><a href="http://tracker.squeakland.org/browse/SQ-747"></a>I created a separate issues for:</div><div><ul><li>Etoys only supports one video format (MPEG) and a very old format and hard to find conversion programs <a href="http://tracker.squeakland.org/browse/SQ-748">SQ-748</a></li>
</ul><div>There is already an issue for:</div><div><ul><li>Camera does not work on all platforms <a href="http://tracker.squeakland.org/browse/SQ-615">SQ-615</a></li></ul><div>Stephen</div></div><br><div class="gmail_quote">
On Tue, Aug 10, 2010 at 4:38 PM, Avigail Snir <span dir="ltr">&lt;<a href="mailto:avigail@snir.org">avigail@snir.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">









<div lang="EN-US" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Hi All,</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I would like to add my voice to the ones who oppose adding a
book and a flap to the opening project as a default. This will point to a
certain use of this tool as primary and will make other ways secondary. We can
talk about means to look at the process as a product: when, how, why... not
that I have easy answers, just strong feelings and some experiments. I don&#39;t
see a flap or a book as the answer.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">I do think that we need to have an easy way to get a flap and
the sooner the better.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">There is one more issue I would like to raise.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> We just put the gravity project I presented at Squeak Fest
on our Illinois website. The user has to get 2 separate files (the Etoys
project and the video), store the one of the video in the Etoys projects folder
and then open it from the Etoys project. We did it by putting a note with a URL
of the video on the opening screen of the Etoys project. It is not an elegant
solution. Is there a way to embed the video in the project itself? I have no
idea how to put this project on the Squeakland website without sending the user
to EtoysIllinois website for the video.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">This  adds another layer to the difficulties the video
player has by accepting only the old MPEG format, and not any of its current
versions like MPEG2, 3, or 4.</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D">Avigail</span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;color:#1F497D"> </span></p>

<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">

<p class="MsoNormal"><b><span style="font-size:10.0pt">From:</span></b><span style="font-size:10.0pt">
<a href="mailto:etoys-education-team@googlegroups.com" target="_blank">etoys-education-team@googlegroups.com</a>
[mailto:<a href="mailto:etoys-education-team@googlegroups.com" target="_blank">etoys-education-team@googlegroups.com</a>] <b>On Behalf Of </b>Steve Thomas<br>
<b>Sent:</b> Monday, August 09, 2010 3:33 PM<br>
<b>To:</b> <a href="mailto:kharness@illinois.edu" target="_blank">kharness@illinois.edu</a><br>
<b>Cc:</b> Rita Freudenberg; etoys-dev dev;
<a href="mailto:etoys-education-team@googlegroups.com" target="_blank">etoys-education-team@googlegroups.com</a>; Walter Bender</span></p><div><div></div><div class="h5"><br>
<b>Subject:</b> Re: [etoys-dev] Persistent preferences</div></div><p></p>

</div><div><div></div><div class="h5">

<p class="MsoNormal"> </p>

<p class="MsoNormal">The questions I understood Walter to raise are how do we: (I
have included him in this email so he can comment).</p>

<div>

<ul type="disc">
 <li class="MsoNormal">encourage children to get into the habit of
     taking notes and reflection</li>
 <li class="MsoNormal">encourage children to store versions of their
     work for later review and reflection</li>
</ul>

<div>

<p class="MsoNormal">My initial thoughts were  simply to allow an individual
user to specify the initial project state. This could be accomplished by having
a project that is in that state that they use as a basis for projects. In my
case I am starting to do all projects in a book with flaps.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">I was not suggesting we change what happens by default when
you &quot;start a new project&quot;.  I was considering whether we should
allow individual users could change the default state of their starting
projects.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">One thing I believe we should do and can hopefully all agree
upon is putting a flap in the Supplies Bin as now they are too hard to discover
and most people don&#39;t easily or quickly figure out how to copy the flap from
the home page to a new project.</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">The other point I was thinking about was how we deal with
re-usable artifacts which I would prefer to deal with in a separate email
thread and after I have thought harder about the problem. (I still remember
your questions Kathleen, they are good ones, and I am still thinking about
them).</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">Stephen</p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal"> </p>

</div>

<div>

<p class="MsoNormal">On Mon, Aug 9, 2010 at 1:20 PM, &lt;<a href="mailto:kharness@illinois.edu" target="_blank">kharness@illinois.edu</a>&gt; wrote:</p>

<p class="MsoNormal">Rita,<br>
Sure I can compromise, I was just giving an opinion not an edict.</p>

<div>

<p class="MsoNormal">Contrary to Kathleen&#39;s approach, everything I say is an
edict (which only applies to me ;)</p>

</div>

<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">

<p class="MsoNormal"> </p>

</blockquote>

<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">

<p class="MsoNormal">Some things to consider if a flap is added:<br>
What label will be the default? What location, what color?<br>
Also, a flap that an author decides not to fill will need to be deleted, so
make that simple to do. An empty flap may lead the person using the project,
not the author, to wonder if something is missing or broken.<br>
<br>
Here are some concerns about a book on the opening screen.<br>
Books are conveniently available in Supplies but using them is not conveniently
straightforward for beginners. I am thinking of my young students who click on
a book, then click on a page turn arrow and nothing happens. The far left arrow
that opens more controls is not the first thing they usually try and then the
burst of new icons takes a while to understand. I have watched children delete
pages thinking they were turning back; the same for the plus which adds new
pages but which young children think will move them from page to page.<br>
<br>
Books also require working with layers and that too is not intuitive. We know
the halos are labeled but beginning readers don&#39;t always see the label nor if
they do, read it for meaning. Putting objects on the page of a book using the
black halo handle is required and yet many children close the paints and see
their drawing above a page and then are dismayed when they turn the page and
the drawing appears to be on it too. Of course, all of this can be learned but
for beginners, and we have so many of those, is this the first thing we want
them to confront?<br>
<br>
I used all three of the other OOPLs and I think they each have strengths and
features than compliment learning from the others.  It has been a great
joy to me to find the knowledge I have gained from Etoys has made it easy to
learn the others. And where they differ is not a problem either because I have
a scaffolding of knowledge from Etoys that lets me say, hmm that is how it is
different.<br>
<br>
Colors, strong colors do influence us just think of all the ads in print and
TV; calming colors for hospitals and jails, the orange in McDonalds was chosen
to encourage people to move on, red white blue national identities, camouflage
military, etc. A strong colorful interface makes pastel colors look weak and
yet if a project is best expressed with pastels the author must ignore the
contrast with the interface and count on the visitor to do the same.<br>
Regards,<br>
Kathleen</p>

<div>

<p class="MsoNormal"><br>
<br>
<br>
---- Original message ----<br>
&gt;Date: Mon, 9 Aug 2010 15:42:37 +0200<br>
&gt;From: Rita Freudenberg &lt;<a href="mailto:rita@isg.cs.uni-magdeburg.de" target="_blank">rita@isg.cs.uni-magdeburg.de</a>&gt;<br>
&gt;Subject: Re: [etoys-dev] Persistent preferences</p>

</div>

<div>

<div>

<p class="MsoNormal">&gt;To: &lt;<a href="mailto:kharness@illinois.edu" target="_blank">kharness@illinois.edu</a>&gt;<br>
&gt;Cc: etoys-dev dev &lt;<a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a>&gt;,
<a href="mailto:etoys-education-team@googlegroups.com" target="_blank">etoys-education-team@googlegroups.com</a><br>
&gt;<br>
&gt;<br>
&gt;On Aug 9, 2010, at 3:00 PM, &lt;<a href="mailto:kharness@illinois.edu" target="_blank">kharness@illinois.edu</a>&gt;
wrote:<br>
&gt;<br>
&gt;&gt; Hi,<br>
&gt;&gt; I think the real estate of the blank screen is a valuable feature of
Etoys and adding an extra flap and book to the opening page sort of demands
that authors decide to use them or to discard them. I&#39;d prefer that we not try
to manage their thinking that much.<br>
&gt;&gt;<br>
&gt;&gt; If you give lined paper to people, they follow the lines and thinking
is linear and text based. If you give them graph paper you send them in another
direction and if you give them a blank slate you give them the option to do . .
. anything.<br>
&gt;<br>
&gt;Kathleen, I agree. I think Etoys should stay as open as possible. But maybe
we could find a compromise here? At Squeakfest, Walter embraced the habit of
students taking notes and reflecting on their work during the process of
creation. So maybe having a flap as a temporary place for notes, painted
objects, scripts, etc. would be valuable?<br>
&gt;It just happens that I did put a flap in my own project to outline my plans
instead of opening a word document writing it down.<br>
&gt;&gt;<br>
&gt;&gt; Making template projects for your uses of Etoys is a good one. I would
not want to start every project by having to delete a flap and book. Since it
is so easy to move objects from one project to another I do not understand what
benefit to authors, who we will never meet, is gained by loading the Supplies
Bin and Object Catalog with objects. The clip art in Alice, Scratch and
StarLogo TNG is one of the features I like the least; the images limit
imagination, creativity, and originality.<br>
&gt;&gt;<br>
&gt;&gt; A different topic but I will add it here. I also like the lack of
strong colors in the Etoys interface; it is a functional and neutral place to
work.<br>
&gt;<br>
&gt;Interesting, since Scratch has rather strong colors, and I assume that they
did some testing of the user interface. Do I understand you correct that you prefer
the Etoys colors because they do not distract the kids from their creative
process?<br>
&gt;<br>
&gt;Greetings,<br>
&gt;Rita<br>
&gt;<br>
&gt;&gt; Regards,<br>
&gt;&gt; Kathleen<br>
&gt;&gt;<br>
&gt;&gt; ---- Original message ----<br>
&gt;&gt;&gt; Date: Sun, 8 Aug 2010 23:53:29 -0400<br>
&gt;&gt;&gt; From: Steve Thomas &lt;<a href="mailto:sthomas1@gosargon.com" target="_blank">sthomas1@gosargon.com</a>&gt;<br>
&gt;&gt;&gt; Subject: Re: [etoys-dev] Persistent preferences<br>
&gt;&gt;&gt; To: <a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  Does this change apply only to preferences?<br>
&gt;&gt;&gt;  Or does it cover the things Scott Wallace mentioned<br>
&gt;&gt;&gt;  in tracker:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    More things than just preference values might also<br>
&gt;&gt;&gt;    be stored in such a file, e.g. default screen<br>
&gt;&gt;&gt;    background color/picture, maybe even presence of<br>
&gt;&gt;&gt;    some &quot;standard morphs&quot; to be inserted into
new<br>
&gt;&gt;&gt;    projects, etc<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  The ability to have &quot;standard morphs&quot; (either in
the<br>
&gt;&gt;&gt;  Object Catalog,  or Supplies Bin) would be useful.<br>
&gt;&gt;&gt;  Also after Squeakfest and thinking about Walter<br>
&gt;&gt;&gt;  Benders comments on flaps and books, the ability to<br>
&gt;&gt;&gt;  start all new projects with a book and default flap<br>
&gt;&gt;&gt;  would be nice as well.  Of course I could<br>
&gt;&gt;&gt;  accomplish this with a few extra mouse clicks by<br>
&gt;&gt;&gt;  simply making a &quot;starter project&quot; that has these<br>
&gt;&gt;&gt;  objects and then modify  and rename that project.<br>
&gt;&gt;&gt;  Stephen<br>
&gt;&gt;&gt;  On Sun, Aug 8, 2010 at 12:58 PM, Bert Freudenberg<br>
&gt;&gt;&gt;  &lt;<a href="mailto:bert@freudenbergs.de" target="_blank">bert@freudenbergs.de</a>&gt;
wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    Hi folks,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    I uploaded a proposed implementation to the inbox.<br>
&gt;&gt;&gt;    This allows you a user to change certain<br>
&gt;&gt;&gt;    preferences automatically on startup. The feature<br>
&gt;&gt;&gt;    has been requested quite often, e.g. you could<br>
&gt;&gt;&gt;    turn on unlimitedPaintArea permanently, or<br>
&gt;&gt;&gt;    debugHaloHandle, etc.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    We are in feature freeze, but OTH we still have no<br>
&gt;&gt;&gt;    alpha version yet. I think it&#39;s relatively low<br>
&gt;&gt;&gt;    risk. Please comment.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    - Bert -<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    On 08.08.2010, at 16:46, <a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a><br>
&gt;&gt;&gt;    wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Bert Freudenberg uploaded a new version of<br>
&gt;&gt;&gt;    System to project Etoys Inbox:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;    <a href="http://source.squeak.org/etoysinbox/System-bf.26.mcz" target="_blank">http://source.squeak.org/etoysinbox/System-bf.26.mcz</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ==================== Summary<br>
&gt;&gt;&gt;    ====================<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Name: System-bf.26<br>
&gt;&gt;&gt;&gt; Author: bf<br>
&gt;&gt;&gt;&gt; Time: 8 August 2010, 6:46:40 pm<br>
&gt;&gt;&gt;&gt; UUID: 49a53b17-2294-4f3a-9fe1-f4051afce791<br>
&gt;&gt;&gt;&gt; Ancestors: System-bf.25<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - allow to persist preferences (SQ-134)<br>
&gt;&gt;&gt;&gt; - store value using menu in preferences tool<br>
&gt;&gt;&gt;&gt; - restore on startup<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; =============== Diff against System-bf.25<br>
&gt;&gt;&gt;    ===============<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistedValueFor: (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedValueFor: aSymbol<br>
&gt;&gt;&gt;&gt; +     ^self persistedValueFor: aSymbol in:<br>
&gt;&gt;&gt;    ExternalSettings preferenceDirectory!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistedFileNameFor: (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedFileNameFor: aSymbol<br>
&gt;&gt;&gt;&gt; +     ^aSymbol, self<br>
&gt;&gt;&gt;    persistedFileNameExtension!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;fetchExternalSettingsIn: (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + fetchExternalSettingsIn: aDirectory<br>
&gt;&gt;&gt;&gt; +     &quot;Load persisted preferences&quot;<br>
&gt;&gt;&gt;&gt; +     &quot;Preferences fetchExternalSettingsIn:<br>
&gt;&gt;&gt;    ExternalSettings preferenceDirectory&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     ^ (aDirectory fileNamesMatching: &#39;*&#39;,<br>
&gt;&gt;&gt;    self persistedFileNameExtension)<br>
&gt;&gt;&gt;&gt; +                
    do: [:fileName |<br>
&gt;&gt;&gt;&gt; +                
            |<br>
&gt;&gt;&gt;    pref value |<br>
&gt;&gt;&gt;&gt; +                
            pref<br>
&gt;&gt;&gt;    := fileName allButLast: self<br>
&gt;&gt;&gt;    persistedFileNameExtension size.<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    value := self persistedValueFor: pref in:<br>
&gt;&gt;&gt;    aDirectory.<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    (value isKindOf: Boolean) ifTrue:<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;          [self enableOrDisable: pref
asSymbol<br>
&gt;&gt;&gt;    asPer: value]]!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method:<br>
&gt;&gt;&gt;    Preference&gt;&gt;isNotSetOnStartupString (in
category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + isNotSetOnStartupString<br>
&gt;&gt;&gt;&gt; +     &quot;Answer a string representing whether<br>
&gt;&gt;&gt;    this preference is not persisted&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     | aStr |<br>
&gt;&gt;&gt;&gt; +     aStr :=  &#39;do not set preference on<br>
&gt;&gt;&gt;    startup&#39; translated.<br>
&gt;&gt;&gt;&gt; +     ^ self persistedValue == nil<br>
&gt;&gt;&gt;&gt; +             ifTrue:
[&#39;&lt;yes&gt;&#39;, aStr]<br>
&gt;&gt;&gt;&gt; +             ifFalse:  
     [&#39;&lt;no&gt;&#39;,<br>
&gt;&gt;&gt;    aStr]!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;  ----- Method: ExternalSettings<br>
&gt;&gt;&gt;    class&gt;&gt;preferenceDirectory (in category<br>
&gt;&gt;&gt;    &#39;accessing&#39;) -----<br>
&gt;&gt;&gt;&gt;  preferenceDirectory<br>
&gt;&gt;&gt;&gt; +     | prefDirName imgPath vmPath secDir |<br>
&gt;&gt;&gt;&gt; -     | prefDirName imgPath vmPath |<br>
&gt;&gt;&gt;&gt;       prefDirName := self<br>
&gt;&gt;&gt;    preferenceDirectoryName.<br>
&gt;&gt;&gt;&gt; +     Preferences startInUntrustedDirectory<br>
&gt;&gt;&gt;&gt; +             ifTrue: [<br>
&gt;&gt;&gt;&gt; +                
    secDir :=<br>
&gt;&gt;&gt;    (FileDirectory on: SecurityManager default<br>
&gt;&gt;&gt;    secureUserDirectory)<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    directoryNamed: prefDirName.<br>
&gt;&gt;&gt;&gt; +                
    ^secDir exists<br>
&gt;&gt;&gt;    ifTrue: [secDir]].<br>
&gt;&gt;&gt;&gt;       imgPath := SmalltalkImage current<br>
&gt;&gt;&gt;    imagePath. &quot;might be different from
default!!&quot;<br>
&gt;&gt;&gt;&gt;       vmPath := SmalltalkImage current<br>
&gt;&gt;&gt;    vmPath.<br>
&gt;&gt;&gt;&gt;       ^((FileDirectory on: imgPath)<br>
&gt;&gt;&gt;    directoryExists: prefDirName)<br>
&gt;&gt;&gt;&gt;               ifTrue:
[(FileDirectory on:<br>
&gt;&gt;&gt;    imgPath) directoryNamed: prefDirName]<br>
&gt;&gt;&gt;&gt;               ifFalse: [<br>
&gt;&gt;&gt;&gt;                  
    ((FileDirectory<br>
&gt;&gt;&gt;    on: vmPath) directoryExists: prefDirName)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;    ifTrue: [(FileDirectory on: vmPath)<br>
&gt;&gt;&gt;    directoryNamed: prefDirName]<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;    ifFalse: [nil]]<br>
&gt;&gt;&gt;&gt;  !<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistedFileNameExtension (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedFileNameExtension<br>
&gt;&gt;&gt;&gt; +     ^&#39;.pref&#39;!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistValue:for: (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistValue: aBooleanOrNil for: aSymbol<br>
&gt;&gt;&gt;&gt; +     &quot;Save the preference aSymbol on file, so<br>
&gt;&gt;&gt;    it can be restored to the given value on startup.<br>
&gt;&gt;&gt;    If nil, delete persistent value.&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     | fileName file |<br>
&gt;&gt;&gt;&gt; +     fileName := self persistedFileNameFor:<br>
&gt;&gt;&gt;    aSymbol.<br>
&gt;&gt;&gt;&gt; +     aBooleanOrNil ifNil: [<br>
&gt;&gt;&gt;&gt; +             ^ExternalSettings<br>
&gt;&gt;&gt;    preferenceDirectory ifNotNilDo: [:fd |<br>
&gt;&gt;&gt;&gt; +                
    fd<br>
&gt;&gt;&gt;    deleteFileNamed: fileName ifAbsent: []]].<br>
&gt;&gt;&gt;&gt; +     file := ExternalSettings<br>
&gt;&gt;&gt;    assuredPreferenceDirectory<br>
&gt;&gt;&gt;&gt; +             forceNewFileNamed:
fileName.<br>
&gt;&gt;&gt;&gt; +     [file<br>
&gt;&gt;&gt;&gt; +            
wantsLineEndConversion:<br>
&gt;&gt;&gt;    true;<br>
&gt;&gt;&gt;&gt; +             nextPutAll:
&#39;value: &#39;;<br>
&gt;&gt;&gt;    print: aBooleanOrNil; cr.<br>
&gt;&gt;&gt;&gt; +     ]       ensure: [file close]!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistedValueFor:in: (in category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedValueFor: aSymbol in: aDirectory<br>
&gt;&gt;&gt;&gt; +     &quot;Read the value of preference aSymbol<br>
&gt;&gt;&gt;    from file. Answer nil if not found.&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     | tokens value f |<br>
&gt;&gt;&gt;&gt; +     aDirectory ifNil: [^nil].<br>
&gt;&gt;&gt;&gt; +     f := (aDirectory oldFileOrNoneNamed:<br>
&gt;&gt;&gt;    (self persistedFileNameFor: aSymbol)) ifNil:<br>
&gt;&gt;&gt;    [^nil].<br>
&gt;&gt;&gt;&gt; +     [<br>
&gt;&gt;&gt;&gt; +             f
wantsLineEndConversion:<br>
&gt;&gt;&gt;    true.<br>
&gt;&gt;&gt;&gt; +             f
contentsOfEntireFile<br>
&gt;&gt;&gt;    linesDo: [:line |<br>
&gt;&gt;&gt;&gt; +                
    tokens := line<br>
&gt;&gt;&gt;    findTokens: &#39;    :&#39; keep: &#39;:&#39;.<br>
&gt;&gt;&gt;&gt; +                
    (tokens size = 3<br>
&gt;&gt;&gt;    and: [tokens second = &#39;:&#39;]) ifTrue: [<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    tokens first caseOf: {<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;          [&#39;value&#39;] -&gt; [tokens third
caseOf: {<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;                
 [&#39;true&#39;] -&gt; [value := true].<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;                
 [&#39;false&#39;] -&gt; [value :=<br>
&gt;&gt;&gt;    false].<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;          } otherwise: []].<br>
&gt;&gt;&gt;&gt; +                
            }<br>
&gt;&gt;&gt;    otherwise: []]].<br>
&gt;&gt;&gt;&gt; +     ] ensure: [f close].<br>
&gt;&gt;&gt;&gt; +     ^value!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;  ----- Method: Preferences class&gt;&gt;initialize<br>
&gt;&gt;&gt;    (in category &#39;class initialization&#39;) -----<br>
&gt;&gt;&gt;&gt;  initialize<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; +     ExternalSettings registerClient: self.<br>
&gt;&gt;&gt;&gt; +     self registerInFlapsRegistry.<br>
&gt;&gt;&gt;&gt; + !<br>
&gt;&gt;&gt;&gt; -     self registerInFlapsRegistry.   !<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;  ----- Method: ExternalSettings<br>
&gt;&gt;&gt;    class&gt;&gt;assuredPreferenceDirectory (in category<br>
&gt;&gt;&gt;    &#39;accessing&#39;) -----<br>
&gt;&gt;&gt;&gt;  assuredPreferenceDirectory<br>
&gt;&gt;&gt;&gt;       &quot;Answer the preference directory,<br>
&gt;&gt;&gt;    creating it if necessary&quot;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; +     |  prefDir topDir |<br>
&gt;&gt;&gt;&gt; +     prefDir := self preferenceDirectory.<br>
&gt;&gt;&gt;&gt; -     |  prefDir |<br>
&gt;&gt;&gt;&gt; -     prefDir _ self preferenceDirectory.<br>
&gt;&gt;&gt;&gt;       prefDir<br>
&gt;&gt;&gt;&gt;               ifNil:<br>
&gt;&gt;&gt;&gt; +                
    [topDir :=<br>
&gt;&gt;&gt;    Preferences startInUntrustedDirectory<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    ifTrue: [FileDirectory on: SecurityManager default<br>
&gt;&gt;&gt;    secureUserDirectory]<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;    ifFalse: [FileDirectory default].<br>
&gt;&gt;&gt;&gt; +                
    prefDir :=<br>
&gt;&gt;&gt;    topDir directoryNamed: self<br>
&gt;&gt;&gt;    preferenceDirectoryName.<br>
&gt;&gt;&gt;&gt; -                
    [prefDir _<br>
&gt;&gt;&gt;    FileDirectory default directoryNamed: self<br>
&gt;&gt;&gt;    preferenceDirectoryName.<br>
&gt;&gt;&gt;&gt;                  
    prefDir<br>
&gt;&gt;&gt;    assureExistence].<br>
&gt;&gt;&gt;&gt;       ^ prefDir!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method:<br>
&gt;&gt;&gt;    Preference&gt;&gt;isDisabledOnStartupString (in
category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + isDisabledOnStartupString<br>
&gt;&gt;&gt;&gt; +     &quot;Answer a string representing whether<br>
&gt;&gt;&gt;    this preference is persisted to false&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     | aStr |<br>
&gt;&gt;&gt;&gt; +     aStr :=  &#39;disable preference on<br>
&gt;&gt;&gt;    startup&#39; translated.<br>
&gt;&gt;&gt;&gt; +     ^ self persistedValue == false<br>
&gt;&gt;&gt;&gt; +             ifTrue:
[&#39;&lt;yes&gt;&#39;, aStr]<br>
&gt;&gt;&gt;&gt; +             ifFalse:  
     [&#39;&lt;no&gt;&#39;,<br>
&gt;&gt;&gt;    aStr]!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method:<br>
&gt;&gt;&gt;    Preference&gt;&gt;isEnabledOnStartupString (in
category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + isEnabledOnStartupString<br>
&gt;&gt;&gt;&gt; +     &quot;Answer a string representing whether<br>
&gt;&gt;&gt;    this preference is persisted to true&quot;<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     | aStr |<br>
&gt;&gt;&gt;&gt; +     aStr :=  &#39;enable preference on startup&#39;<br>
&gt;&gt;&gt;    translated.<br>
&gt;&gt;&gt;&gt; +     ^ self persistedValue == true<br>
&gt;&gt;&gt;&gt; +             ifTrue:
[&#39;&lt;yes&gt;&#39;, aStr]<br>
&gt;&gt;&gt;&gt; +             ifFalse:  
     [&#39;&lt;no&gt;&#39;,<br>
&gt;&gt;&gt;    aStr]!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was changed:<br>
&gt;&gt;&gt;&gt;  ----- Method:<br>
&gt;&gt;&gt;  
 BooleanPreferenceView&gt;&gt;offerPreferenceNameMenu:with:in:<br>
&gt;&gt;&gt;    (in category &#39;user interface&#39;) -----<br>
&gt;&gt;&gt;&gt;  offerPreferenceNameMenu: aPanel with: ignored1<br>
&gt;&gt;&gt;    in: ignored2<br>
&gt;&gt;&gt;&gt;       &quot;the user clicked on a preference
name<br>
&gt;&gt;&gt;    -- put up a menu&quot;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       | aMenu |<br>
&gt;&gt;&gt;&gt;       ActiveHand showTemporaryCursor: nil.<br>
&gt;&gt;&gt;&gt;       aMenu := MenuMorph new defaultTarget:<br>
&gt;&gt;&gt;    self preference.<br>
&gt;&gt;&gt;&gt;       aMenu addTitle: self preference name.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       (Preferences<br>
&gt;&gt;&gt;    okayToChangeProjectLocalnessOf: self preference<br>
&gt;&gt;&gt;    name) ifTrue:<br>
&gt;&gt;&gt;&gt;               [aMenu
addUpdating:<br>
&gt;&gt;&gt;    #isProjectLocalString target: self preference<br>
&gt;&gt;&gt;    action: #toggleProjectLocalness.<br>
&gt;&gt;&gt;&gt;               aMenu<br>
&gt;&gt;&gt;    balloonTextForLastItem: &#39;Some preferences are best<br>
&gt;&gt;&gt;    applied uniformly to all projects, and others are<br>
&gt;&gt;&gt;    best set by each individual project.  If this<br>
&gt;&gt;&gt;    item is checked, then this preference will be<br>
&gt;&gt;&gt;    printed in bold and will have a separate value for<br>
&gt;&gt;&gt;    each project&#39; translated].<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       aMenu add: &#39;browse senders&#39; translated<br>
&gt;&gt;&gt;    target: self systemNavigation selector:<br>
&gt;&gt;&gt;    #browseAllCallsOn: argument: self preference name.<br>
&gt;&gt;&gt;&gt;       aMenu balloonTextForLastItem: &#39;This<br>
&gt;&gt;&gt;    will open a method-list browser on all methods<br>
&gt;&gt;&gt;    that the send the preference &quot;&#39; translated, self<br>
&gt;&gt;&gt;    preference name, &#39;&quot;.&#39;.<br>
&gt;&gt;&gt;&gt;       aMenu add: &#39;show category...&#39;<br>
&gt;&gt;&gt;    translated target: aPanel selector:<br>
&gt;&gt;&gt;    #findCategoryFromPreference: argument: self<br>
&gt;&gt;&gt;    preference name.<br>
&gt;&gt;&gt;&gt;       aMenu balloonTextForLastItem: &#39;Allows<br>
&gt;&gt;&gt;    you to find out which category, or categories,<br>
&gt;&gt;&gt;    this preference belongs to.&#39; translated.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       Smalltalk isMorphic ifTrue:<br>
&gt;&gt;&gt;&gt;               [aMenu add:
&#39;hand me a<br>
&gt;&gt;&gt;    button for this preference&#39; translated target:<br>
&gt;&gt;&gt;    self selector: #tearOffButton.<br>
&gt;&gt;&gt;&gt;               aMenu<br>
&gt;&gt;&gt;    balloonTextForLastItem: &#39;Will give you a button<br>
&gt;&gt;&gt;    that governs this preference, which you may<br>
&gt;&gt;&gt;    deposit wherever you wish&#39; translated].<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       aMenu add: &#39;copy this name to<br>
&gt;&gt;&gt;    clipboard&#39; translated target: self preference<br>
&gt;&gt;&gt;    selector: #copyName.<br>
&gt;&gt;&gt;&gt;       aMenu balloonTextForLastItem: &#39;Copy the<br>
&gt;&gt;&gt;    name of the preference to the text clipboard, so<br>
&gt;&gt;&gt;    that you can paste into code somewhere&#39;<br>
&gt;&gt;&gt;    translated.<br>
&gt;&gt;&gt;&gt; +     aMenu add: &#39;set automatically on<br>
&gt;&gt;&gt;    startup...&#39; translated target: self selector:<br>
&gt;&gt;&gt;    #offerPersistenceMenu.<br>
&gt;&gt;&gt;&gt; +     aMenu balloonTextForLastItem: &#39;Store a<br>
&gt;&gt;&gt;    value for this preference on file. On startup, it<br>
&gt;&gt;&gt;    will be automatically restored.&#39; translated.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;       aMenu popUpInWorld!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method:<br>
&gt;&gt;&gt;    BooleanPreferenceView&gt;&gt;offerPersistenceMenu (in<br>
&gt;&gt;&gt;    category &#39;user interface&#39;) -----<br>
&gt;&gt;&gt;&gt; + offerPersistenceMenu<br>
&gt;&gt;&gt;&gt; +     | aMenu |<br>
&gt;&gt;&gt;&gt; +     Preferences<br>
&gt;&gt;&gt;    persistedPreferencesAccessible<br>
&gt;&gt;&gt;&gt; +             ifFalse: [^self
inform:<br>
&gt;&gt;&gt;    (&#39;{1} is in secure mode.<br>
&gt;&gt;&gt;&gt; + You cannot access the persistent preferences<br>
&gt;&gt;&gt;    now.<br>
&gt;&gt;&gt;&gt; + To change them, start {1} without loading a<br>
&gt;&gt;&gt;    project.&#39; translated<br>
&gt;&gt;&gt;&gt; +     format: {SystemVersion current baseName<br>
&gt;&gt;&gt;    capitalized})].<br>
&gt;&gt;&gt;&gt; +<br>
&gt;&gt;&gt;&gt; +     aMenu := MenuMorph new defaultTarget:<br>
&gt;&gt;&gt;    self preference.<br>
&gt;&gt;&gt;&gt; +     aMenu addTitle: self preference name.<br>
&gt;&gt;&gt;&gt; +     aMenu addUpdating:<br>
&gt;&gt;&gt;    #isEnabledOnStartupString target: self preference<br>
&gt;&gt;&gt;     selector: #persistValue: argumentList: {true}.<br>
&gt;&gt;&gt;&gt; +     aMenu addUpdating:<br>
&gt;&gt;&gt;    #isDisabledOnStartupString target: self preference<br>
&gt;&gt;&gt;     selector: #persistValue: argumentList: {false}.<br>
&gt;&gt;&gt;&gt; +     aMenu addUpdating:<br>
&gt;&gt;&gt;    #isNotSetOnStartupString target: self preference<br>
&gt;&gt;&gt;     selector: #persistValue: argumentList: {nil}.<br>
&gt;&gt;&gt;&gt; +     aMenu popUpInWorld!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preference&gt;&gt;persistValue: (in<br>
&gt;&gt;&gt;    category &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistValue: aBooleanOrNil<br>
&gt;&gt;&gt;&gt; +     &quot;Save this preference on file, so it can<br>
&gt;&gt;&gt;    be restored on startup. If nil, delete persistent<br>
&gt;&gt;&gt;    value.&quot;<br>
&gt;&gt;&gt;&gt; +     Preferences persistValue: aBooleanOrNil<br>
&gt;&gt;&gt;    for: self name!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preference&gt;&gt;persistedValue (in<br>
&gt;&gt;&gt;    category &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedValue<br>
&gt;&gt;&gt;&gt; +     &quot;Answer the value of this preference<br>
&gt;&gt;&gt;    saved on file, otherwise nil&quot;<br>
&gt;&gt;&gt;&gt; +     ^Preferences persistedValueFor: self<br>
&gt;&gt;&gt;    name!<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Item was added:<br>
&gt;&gt;&gt;&gt; + ----- Method: Preferences<br>
&gt;&gt;&gt;    class&gt;&gt;persistedPreferencesAccessible (in
category<br>
&gt;&gt;&gt;    &#39;persistence&#39;) -----<br>
&gt;&gt;&gt;&gt; + persistedPreferencesAccessible<br>
&gt;&gt;&gt;&gt; +     ^SecurityManager default hasFileAccess<br>
&gt;&gt;&gt;&gt; + !<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    _______________________________________________<br>
&gt;&gt;&gt;    etoys-dev mailing list<br>
&gt;&gt;&gt;    <a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a><br>
&gt;&gt;&gt;    <a href="http://lists.squeakland.org/mailman/listinfo/etoys-dev" target="_blank">http://lists.squeakland.org/mailman/listinfo/etoys-dev</a><br>
&gt;&gt;&gt; ________________<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; etoys-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a><br>
&gt;&gt;&gt; <a href="http://lists.squeakland.org/mailman/listinfo/etoys-dev" target="_blank">http://lists.squeakland.org/mailman/listinfo/etoys-dev</a><br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; etoys-dev mailing list<br>
&gt;&gt; <a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a><br>
&gt;&gt; <a href="http://lists.squeakland.org/mailman/listinfo/etoys-dev" target="_blank">http://lists.squeakland.org/mailman/listinfo/etoys-dev</a><br>
&gt;&gt;<br>
&gt;<br>
_______________________________________________<br>
etoys-dev mailing list<br>
<a href="mailto:etoys-dev@squeakland.org" target="_blank">etoys-dev@squeakland.org</a><br>
<a href="http://lists.squeakland.org/mailman/listinfo/etoys-dev" target="_blank">http://lists.squeakland.org/mailman/listinfo/etoys-dev</a></p>

</div>

</div>

</blockquote>

</div>

<p class="MsoNormal"> </p>

</div>

</div></div></div>

</div>


</blockquote></div><br></div>