[Squeak-ev] Praktische Fragen zu EToys

Andreas Gerdes squeak at skalarsoft.com
Die Dez 7 02:37:24 UTC 2004


Klaus,

ich glaube, was  additionsToViewer etc. angeht, bist du auf der 
squeak-dev-Liste besser aufgehoben - du schreibst ja selbst, du willst 
einen Morph erfinden...

Ich hab grad mal selbst experimentiert. Einer eigenen Morphklasse einen 
Slot hinzuzufügen, ist kein Problem, einer bestehenden Klasse eine neue 
Viewer-Kategorie, auch nicht, aber da dann einen Slot oder einen Befehl 
hineinzubekommen, geht nicht, jedenfalls nicht beim SketchMorph.
Hm...

 > Das hängt mit der Sprachunterstützung zusammen.

Inwiefern? Was weißt du noch zu dem Thema?
Kann hier jemand mal den Begriff Vokabular/EToy-Vokabular etwas näher 
erläutern?

Zu deiner letzten Mail:

 >- Wie bekomme ich die Mausposition in einem Script?
Playfield hat in der Viewer-Kategorie playfield die aktuellen 
Mauskoordinaten.

 >- Wie kann ich ein Skript triggern, wenn das Objekt gedreht wird?

Indem du in seinem Owner (einem Spielfeld/Playfield) einen Test "Objekts 
richtung ~= Objekts alteRichtung" einbaust? - wobei Objekts alteRichtung 
eine Instanzvariable von Objekt ist - Instanzvariablen sind auch der 
Schlüssel zur Schleifenprogrammierung.

 >- Wie verhindert man einen Resize?
Im Menü aller Morphe findest du "be locked/geschützt" und "resist being 
picked up/verankert"

 >- Wie kann man einen eigenen Morph-Typ dem Objekt-Manager zufügen?

http://minnow.cc.gatech.edu/squeak/2998:
Add a class side method #descriptionForPartsBin (browse implementors). 
This method returns a description of how to create and present a new 
morph. If you want several different entries in the Objects Tool, you 
can use #supplementaryPartsDescriptions.
Wirf auch einen Blick in die Kategorie Morphic-Demo.

 >- Was macht man genau mit einem Skriptfenster?*

ich glaub, es unterscheidet sich vom Spielfeld vor allem dadurch, dass 
es eigene, *private* Stop-Step-Go buttons hat. So kannst du mehrere 
unabhängige Skriptingbereiche in einem Projekt oder zb GeeMailMorph haben.

 >   - Wie sorgt man dafür, dass Größenänderungen an die Submorphs
 >     weitergegeben werden?
 >   - Umgekehrt: Wie sorgt man dafür, dass ein Resize im Submorph an den
 >     Besitzer weitergegeben wird ODER

Du musst wohl neue Morphklassen ableiten, die sich in ihrer Step-Methode 
entsprechend verhalten.
Oder aber du befasst dich mit layoutPolicy/Tablelayouts (z.B. im Menü 
eines Rechtecks, gibt ein Tutorial dazu auf Squeakmap), vielleicht 
reicht das ja schon?


 >wie sorgt man dafür, dass man einen Submorph nicht selektieren kann.

Schwierig - selektieren von Morphs explizit zu verbieten... ist 
irgendwie nicht squeaklike - ALLES in Squeak lässt sich selektieren, 
inspizieren, kopieren -


 >- Wenn ich Morphs zusammensetze: Welche Koordinate verwende ich?
 >     Offensichtlich verwendet man in drawOn absolute Screenkoordinaten.
 >     Wenn ich aber mit addMorph einen Morph hinzufüge, erscheint dieser
 >     an einer 'position' relativ zur oberen linken Ecke des Morphs.

Das scheint nur so. Wenn du deinem Morph *keine* layoutPolicy zuweist 
und ihn *vor* dem addMorph:xyz schon verschiebst, erscheint der neu 
hinzugefügte xyz an 0/0 auf dem Screen.
Im Morph-Protokoll geometry findest du alles, was du für 
relative/globale Koordinaten brauchst.

 >  - Wie kann ich eigenes Vokabular definieren? Ich will einen Morph
 >    (z.B. "Koordinatensystem") definieren. Der soll "skalieren" u.ä.
 >    "verstehen"

Zuerst mal geht's doch darum, eine *Message* "skalieren: faktor" zu 
implementieren?

Schon mal Diego Gomez' Plotmorph probiert (bekommst du über 
Weltmenü->Öffnen->SqueakMap-Packageloader)

Was hast du eigentlich vor?
Willst du mit EToy einen Graph-Editor bauen? KRASS...
Mich würd auch interessieren, wo, mit welcher Altersgruppe etc. du 
Squeak einsetzt.

Viele Grüße
Andreas
	



Klaus Füller schrieb:
> Esther Mietzsch wrote:
> 
>> Hallo Klaus,
>>
>> Am Sunday 21 November 2004 22:48 schrieb Klaus Füller:
>>
>>> Fragen zu EToys
> 
> ...
> 
>>>    - Wie kann ich eigenes Vokabular definieren? Ich will einen Morph
>>>      (z.B. "Koordinatensystem") definieren. Der soll "skalieren" u.ä.
>>>      "verstehen"
> 
> ...
> (Bitte schaut noch einmal am Ende dieser Mail. Ich begründe dort noch 
> einmal, warum ich eigenes Vokabular definieren will...)
> 
> Das ist die Kernfrage, ich kann sie nun genauer stellen:
> 
> Eine Morph-Klasse kommuniziert mit dem EToy-System über die 
> Klassenmethode #additionsToViewerCategories. Diese Methode gibt eine 
> Liste von Einträgen mit, wie sie im "Viewer" erscheinen sollen. Das 
> verstehe ich.
> 
> Allerdings gelingt es mit nicht, Änderungen an dieser Liste vorzunehmen. 
> Neueinträge erscheinen nicht im Viewer; Geänderte Einträge verschwinden 
> aus dem Viewer. Das hängt mit der Sprachunterstützung zusammen. 
> Neuerdings gibt es eine andere Möglichkeit, dass ein Morph über ein 
> "Vocabulary" (oder ist es ein "EToyVocabulary"?) irgendwie dem Viewer 
> sagt ... und da versiegt meine Intuition.
> 
> Ein Hinweis gibt es von Ned Konz in squeak-dev am 24.Juni 04. Ich 
> verstehe den zweiten Teil aber nicht richtig.
> 
> Zusammenfassung: Ich will einen Morph erfinden, der neue Einträge im 
> Viewer macht, die man in "Kacheln" verwenden kann, um Programme zu 
> schreiben. Ich möchte das in der / für die neuste Version schreiben, 
> wenn #additionsToViewerCategories veraltet ist, will ich es überhaupt 
> nicht verwenden.
> 
> Was will ich damit?
> 
> Mir ist immer noch nicht ganz klar, ob die Scripting-Umgebung in Squeak 
> dem Einstein-Spruch folgt "Make it as simple as possible *but not 
> simpler* . Mir ist nicht klar, wie ich beispielsweise eine Schleife 
> programmieren lassen kann. Beispielsweise könnte ich die Schülerinnen 
> Programme schreiben lassen, die Wertetabellen und Säulendiagramme von 
> Funktionen anzeigen.
> 
> HILFE!
> 
> klaus
> 
> 
>