<!doctype html public "-//W3C//DTD W3 HTML//EN">
<html><head><style type="text/css"><!--
blockquote, dl, ul, ol, li { padding-top: 0 ; padding-bottom: 0 }
 --></style><title>Re: New version of
MorphicWrappers</title></head><body>
<div>Sorry list, I'm having problems sending this directly to Gerardo.
Read or ignore as you please.<br>
</div>
<div>5 minutes after starting it up, I can say it's definately
cool.<br>
&nbsp;<br>
</div>
<div>Some rough edges I want to jot down before I get too used to them
(or I wouldn't be a good beta tester, would I?)-<br>
</div>
<ul>
<li>You can talk to all Morphs but you can't get their messages menus,
which is not consistent. The menu is *very* important to me- the fact
that it allows me to find immediatly what messages I can send allows
me to learn new protocols quickly. Morphs have protocols too. 8-)
<li>The actions required to talk to Morphs are difficult (you have to
go through a menu). As we agree, simplify and merge with UI for MWs.
<li>An object can have arguments, and you can see they have them, but
you can't see what they are and in what order. Coolest solution -
insert short string representation of arguments into the message names
(so after dropping 4 on String, you get message names like
&quot;comment: aSmallInteger&quot; rather than &quot;comment:&quot;).
This would be particularly useful with multiple argument sends. A
useful code snippent to do that -&nbsp;<br>
((#selector:one: keywords) with: #(1 2) collect: [:keyword :number |
keyword, ' ', number printString, ' '] ) inject: '' into: [:sum :each
| sum, each]<br>
I would have made the change myself, but I couldn't find precisely
where. Oops, I went ahead and did it after all. I made the change in
menuForDropping:event:. The change should be done also in
doubleClickMenu:, assuming you agree it's better to use the arguments
we already have, but in that case I'd strive to merge the two methods
anyway. See next comment. I'm sending my change set, tell me what you
think.
<li>After you give an object an argument, if you ask for it's message
menu without another argument, you get the messages for 0 arguments,
though you already have one. One fix - have doubleClickMenu use
selectorsForDropping: nil<br>
Better fix - merge this with menuForDropping:event:
<li>You have defined the messages object and object:. I'd suggest you
consider alternatives, as this is a very, very general name.
&quot;target&quot; might be better, I'd even consider the dog ugly but
crystal clear &quot;wrapee&quot;. I'm thinking that the message object
is protocol that all morphs you want to be able to drop on an MW
should be able to answer, and object might not make sense to them.
Though it's true Inspectors also use object/object:.
<li>The satellites are cute, but can get annoying. I'd make 'em go
aroud in a circle, more slowly. Actually, i've made them do precisely
that, the changes are trivial, of course. After doing that I noticed
some clipping problems. The satellite does not appear some of the time
(about one quarter of it's orbit). Crude changeset included, if you
want to look into it.
<li>Sometimes, i see &quot;ghosts&quot; of old balloonMorphs. they
show up when I delete things or close MVC windows over the Morph
world.
<li>When you drag around an ellipse with satellites you sometimes
leave traces of the satellite around.
<li>Want to see more nice update bugs? use the RegularPolygon example.
Give it a line width of 78 or so (big). you get a small full red
square. Ugly, but not a bug. Now give a line width of 3 again. Move it
around. It seems these bugs are an interaction of your animating stuff
with Morphic's update scheme, not really yours, but you might want to
check them out.<br>
</ul>
<div>I've looked at the way the MorphicWrapper class is built, and I
see a few interesting things.<br>
There are a lot of delegation methods, some of which are very simple.
Why have an &quot;objectClass&quot; (for example) method?<br>
The selector list is created on the fly, whenever something is dropped
on a MW. Doesn't seem to hurt responsiveness on my machine, but it's
something to consider. However, detect: can be used instead of
collect: when checking whether there are any selectors with the
specific of args. objectSelectorsForArguments: is one example of a
delegation method that seems more encumbering than helpful.<br>
</div>
<div>Gerardo Richarte wrote:<br>
&nbsp;<br>
</div>
<blockquote type="cite" cite>Hi Daniel!&nbsp;&nbsp;&nbsp; (you never
answered if you do speak spanish...)<br>
&nbsp;<br>
</blockquote>
<div>Actually, I did. I've sent you directly two messages already, and
it seems they haven't gotten to you, so I'm sending this through the
list too.<br>
Please respond asap to confirm arrival (and of how many copies).<br>
Appended are my previous messages, though they are a little dated.
Please ignore parts that are completely irrelevant by now.<br>
</div>
<blockquote type="cite" cite>&nbsp;<br>
</blockquote>
<blockquote type="cite" cite><br>
&nbsp;&nbsp;&nbsp; Here I send you the beta version of the next
release of<br>
MorphicWrappers. As you said in your last mail (I haven't answered
it<br>
yet), we don't want to make interfaces too hard to remember. We
are<br>
moving to something simpler and unified...<br>
</blockquote>
<blockquote type="cite" cite>&nbsp;&nbsp;&nbsp; Keyboard focus now
changes when mouse enters and leaves a<br>
MorphicWrapper.<br>
&nbsp;<br>
</blockquote>
<blockquote type="cite" cite>&nbsp;&nbsp; You can talk to any Morph
(yes!) including MorphicWrappers.<br>
</blockquote>
<blockquote type="cite" cite>&nbsp;&nbsp;&nbsp; You know when some
Wrapper has saved arguments.<br>
&nbsp;&nbsp;&nbsp; Some very important visual goodies... (we are
planning to add some<br>
sounds, what do you think?<br>
</blockquote>
<div>Sounds might be very useful cues. I'd avoid annoying BOINGs and
such, though..<br>
</div>
<blockquote type="cite" cite>&nbsp;&nbsp;&nbsp; ok, here it's goes...
tell us what you think.<br>
</blockquote>
<blockquote type="cite" cite>&nbsp;&nbsp;&nbsp; Beta Bye!<br>
&nbsp;&nbsp;&nbsp; Richie++<br>
</blockquote>
<blockquote type="cite" cite>&nbsp;&nbsp;&nbsp; Still missing are:
Some juicy examples<br>
&nbsp;<br>
</blockquote>
<div>A cool direction to take this would be to make it more useful in
writing code. I'm think of either logging messages sent to some kind
of transcript, or creating a kind of codepane that interacts with the
WrappedObjects. Some ideas in this direction are below, in my first
message.<br>
</div>
<div>************ previously sent and apperently lost in transmission
-<br>
Subject:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Re:
MorphicWrappers<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Tue, 22 Sep 1998 19:38:42 +0200<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; From:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Daniel Vainsencher &lt;danielv@netvision.net.il&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;Gerardo Richarte (CORE-SDI)&quot;
&lt;richie@securenetworks.com&gt;<br>
&nbsp;References:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1<br>
&nbsp;<br>
&nbsp;<br>
&nbsp;<br>
</div>
<div>Gerardo Richarte (CORE-SDI) wrote:<br>
</div>
<div>&gt; On Tue, 22 Sep 1998, Daniel Vainsencher wrote:<br>
&gt;<br>
&gt; &gt; Dear Len and Ritchie,<br>
&gt; &gt;<br>
&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hi Daniel! (can
you speack spanish? there is a smalltalk list in spanish,
www.sugarweb.com<br>
is the main door)<br>
</div>
<div>Mi espanol es debil, me fui a Israel quando tenia 5 anos. Boi a
tratar de leer un poqo en el website<br>
y ver si puedo participar en el maillist.<br>
</div>
<div>&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I'll answer
latter your mail (it deservs some time) but I can tell you that the
problem<br>
you describe (wanting to interact with every morph as it were a
Wrapper) is a very important issue,<br>
we are planning something in that direction.<br>
&gt;<br>
</div>
<div>BTW, i'd sent a mail to the list previously, as answer to your
request for comments about MW, but I<br>
didn't get an answer, so I'm wondering if you got it. It's appended as
sent.<br>
(please ignore the drooling, if you will 8-)<br>
</div>
<div>I forwarded my mail to the list.<br>
</div>
<div>*************Here the old mail -<br>
</div>
<div>Hi,<br>
Ritchie.<br>
</div>
<div>First of all, the Wrappers, though I've only started messing with
them, are, well, AWESOME.<br>
</div>
<div>I've been half-planning, half-fantasizing about something like
that for morphs, but for the<br>
distinctly unfortunate fact that I had no idea how to do them.<br>
</div>
<div>Very cool.<br>
</div>
<div>Things that appeared in my dreams and might be handy, or that I
find myself wishing were there in the<br>
WrapperWorld -<br>
* An optional stack that, if it exists, is the default target for
results. (I'd put it down the right<br>
edge of the world).<br>
* A graphic representation of variables known in the WrapperWorld. (A
list down the left side? maybe<br>
boxes with values or arrows to them?)<br>
* A recorder that once turned on notices what I'm doing and creates an
equivalent code snippet, or<br>
some other representation of the process that can be then run step by
step.<br>
</div>
<div>And some interface luxuries -<br>
* Some tools for organizing all those resulting objects - an auto grid
or something like that<br>
* An obvious marking of the current focus of attention.<br>
* A possibility to easily get the store string of an object.<br>
</div>
<div>BTW, how is it that you choose the protocol to display?<br>
because storeString is something all objects can respond to.<br>
&nbsp;</div>
<div><br>
'From Squeak 2.2 of Sept 23, 1998 on 5 October 1998 at 12:50:58
pm'!<br>
<br>
!SatelliteMorph methodsFor: 'stepping' stamp: 'DVF 10/5/1998
09:39'!<br>
step<br>
<x-tab>&nbsp;&nbsp;&nbsp; </x-tab>| direction length |<br>
<x-tab>&nbsp;&nbsp;&nbsp; </x-tab>self owner isNil ifTrue: [^ self
stopStepping].<br>
<x-tab> </x-tab>ticks1 _ ticks1 + increment1 \\ 360.<br>
<x-tab>&nbsp;&nbsp;&nbsp; </x-tab>ticks2 _ ticks2 + increment2 \\
360.<br>
<x-tab>&nbsp;&nbsp;&nbsp; </x-tab>direction _ ticks1 degreeCos @
ticks1 degreeSin.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>length _
self owner extent // 2 * delta.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>self
position: direction * length + self owner center - (self extent // 2)!
!<br>
<br>
'From Squeak 2.2 of Sept 23, 1998 on 5 October 1998 at 12:50:18
pm'!<br>
<br>
!MorphicWrapper methodsFor: 'dropping/grabbing' stamp: 'DVF 10/5/1998
12:39'!<br>
menuForDropping: aMorph event: evt <br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>&quot;Answer a
propper menu in response to a drop event.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>r++ 11/27/97 16:00 <br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>added so subclasses can add their own options to
droppingMenu.<br>
<x-tab>&nbsp; </x-tab>len 5/14/1998 15:39<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>renamed from droppingMenu:event:.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>DVF 10/5/1998
12:31<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>caused to insert arg representation into message
names.&quot;<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>| selectors
variables menu moreLines submenu |<br>
<x-tab>&nbsp; </x-tab>moreLines _ false.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>selectors _ self
selectorsForDropping: aMorph.<br>
<x-tab>&nbsp; </x-tab>variables _ self arguments isEmpty<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>ifFalse: [#()]<br>
<x-tab>&nbsp; </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>ifTrue: [self objectInstVarNames].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>moreLines _ selectors
isEmpty not.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>((selectors isEmpty and:
[variables isEmpty])<br>
<x-tab>&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>and:
[self moreSelectors not])<br>
<x-tab>&nbsp; </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>ifTrue: [^ self flash].<br>
<x-tab> </x-tab>menu _ MenuMorph new.<br>
<x-tab>&nbsp;&nbsp; </x-tab>(self objectCategorizedSelectors:
selectors) do: [ :assoc |<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>submenu _ MenuMorph new.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>assoc value do: [ :each |<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>submenu add: ((((each keywords) with: arguments collect:
[:keyword :argument | keyword, ' ', (argument printString
truncateWithElipsisTo: 10), ' '] ) inject: '' into: [:tot :argString |
tot, argString] ) withBlanksTrimmed)<br>
<x-tab>&nbsp; </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>target: self<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>selector: #objectPerform:with:event:<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>argumentList: (Array with: each with: aMorph object with:
evt)].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>menu
add: assoc key subMenu: submenu.<br>
<x-tab>&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines _ true].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>1 to: variables size do:
[:each | <br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>((each = 1) and: [moreLines])<br>
<x-tab>&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>ifTrue: [menu addLine].<br>
<x-tab> </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines _ true.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>menu<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>add:
(variables at: each)<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>, '
_ ...'<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>target: self<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>selector: #objectInstVarAt:put:<br>
<x-tab> </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>argumentList: (Array with: each with: aMorph object)].<br>
<x-tab>&nbsp; </x-tab>self moreSelectors ifTrue: [<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines ifTrue: [menu addLine].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>menu<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>add:
'save argument'<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>target: self<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>selector: #yourself<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>argumentList: Array new.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines _ false].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>self arguments size ~= 1
ifTrue: [<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines ifTrue: [menu addLine].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>menu<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>add:
'forget arguments'<br>
<x-tab> </x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>target: self<br>
<x-tab>&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>selector: #forgetArguments.<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab><x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</x-tab>moreLines _ true].<br>
<x-tab>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </x-tab>^ menu! !</div>
</body>
</html>