[Squeak-ev] Re: Unlock "String"?
Markus Schlager
m.slg at gmx.de
Mit Jul 28 17:09:33 UTC 2010
Ohne die eigentlich angehängten Screenshots. Sind Anhänge auf der Liste
verboten?
Markus
On Wed, 28 Jul 2010, Markus Schlager wrote:
>
>
> On Tue, 27 Jul 2010, Rüdeger Baumann wrote:
>
>> Heute mal 'ne ganz dumme Frage. Im Menü zu "Klick mich" und anderen Knöpfen
>> findet man die Option
>>
>> unlock "S" (deutsch: "S" freigeben)
>>
>> Was bedeutet das eigentlich?
>
> Dumme Fragen gibt es bekanntlich ja nicht. Noch weiß ich es nicht, aber mal
> suchen. Nachdem das auch für andere interessant sein könnte, schicke ich die
> Antwort auch über die Liste. In der aktuellen Etoys-Version lautet der
> deutsche Menüeintrag '"Zeichenkette" freigeben'.
>
> Relevant ist hier wohl (es geht um 'unlock "{1}"' translated )
>
> Morph>>addLockingItemsTo:
> ---8X-----------------------------------
> addLockingItemsTo: aMenu
> "Add locking-related items to the given menu. If any items are
> needed, a line will be added before them, and it is incumbent on the sender
> to add a line after them, if required."
>
> | unlockables |
> unlockables _ self submorphs select:
> [:m | m isLocked].
> unlockables size = 0 ifTrue: [^ self].
>
> aMenu addLine.
> unlockables size == 1 ifTrue:
> [aMenu add: ('unlock "{1}"' translated format:{unlockables
> first externalName})action: #unlockContents].
> unlockables size > 1 ifTrue:
> [aMenu add: 'unlock all contents' translated action:
> #unlockContents.
> aMenu add: 'unlock...' translated action: #unlockOneSubpart].
> ---X8-----------------------------------
>
> Morph>>unlockContents
> ---8X-----------------------------------
> unlockContents
> self submorphsDo:
> [:m | m unlock]
> ---X8-----------------------------------
>
> Morph>>unlock
> ---8X-----------------------------------
> unlock
> self lock: false
> ---X8-----------------------------------
>
> Morph>>lock:
> ---8X-----------------------------------
> lock: aBoolean
> "change the receiver's lock property"
> (extension isNil and: [aBoolean not]) ifTrue: [^ self].
> self assureExtension locked: aBoolean
> ---X8-----------------------------------
>
> Morph>>isLocked
> ---8X-----------------------------------
> isLocked
> "answer whether the receiver is Locked"
> extension ifNil: [^ false].
> ^ extension locked
> ---X8-----------------------------------
>
> Wenn man nach Sendern von #isLocked sucht, findet man die vielleicht
> hilfreichste Beschreibung in
>
> Morph>>containsPoint:event:
> ---8X-----------------------------------
> containsPoint: aPoint event: anEvent
> "Return true if aPoint is considered to be inside the receiver for
> the given event.
> The default implementation treats locked children as integral part of
> their owners."
> (self fullBounds containsPoint: aPoint) ifFalse:[^false].
> (self containsPoint: aPoint) ifTrue:[^true].
> self submorphsDo:[:m|
> (m isLocked and:[m fullContainsPoint:
> ((m transformedFrom: self) globalPointToLocal:
> aPoint)]) ifTrue:[^true]].
> ^false
> ---X8-----------------------------------
>
> Wohl eher historisch zu sehen, aber von der Idee her relevant sind wohl auch
> die Kommentare in View>>isLocked und View>>lock.
>
> #isLocked wird in einer ganzen Reihe von Methoden ausgewertet, in denen es um
> Verhalten und Darstellung/Beachtung von Submorphen geht.
>
> Letztlich findet sich des Rätsels Lösung wohl in der Hilfeblase (s. Bild
> isLocked.png im Anhang) des Halomenüs der Knopfbeschriftung (das ist der
> "String", um den es hier geht). Man muß dazu *zweimal* mit der rechten
> Maustaste auf den Knopf klicken und dann den Menüknauf im Halo des Strings
> wählen.
>
> Dort gibt es (wie bei allen Morphen) den Menüpunkt "be locked" (deutsch
> "Geschützt"), über dem sich folgende Hilfeblase öffnet:
> ---8X-----------------------------------
> when "locked", I am inert to all user interactions
> ---X8-----------------------------------
>
> Will konkret heißen: Die Knopfbeschriftung, die von Haus aus "locked" ist,
> reagiert auf keine Klicks mit der linken Maustaste und weigert sich, den
> Tastaturfokus anzunehmen. Genau diese Einstellung wird mit dem 'unlock
> "String"' im Knopf-Menü umgestellt, was man im String-Menü auch sehen kann.
>
> Wozu kann das gut sein: z.B. wenn sich die Farbe der Knopfbeschriftung bei
> Mausaktionen ändern soll, vgl. Bild hover-knopf.png im Anhang. Das
> funktioniert nur, wenn man die Zeichenkette freigibt, also 'unlock "String"'
> ausführt.
>
> Mängel/Bugs:
> - Der Menüeintrag hat keine Hilfeblase.
> - Ich finde keine Kachel, um den Inhalt des Strings zu verändern.
> - Beim Ändern der Knopfbeschriftung wird eine neue String-Instanz erzeugt,
> sodaß Skripte, wie ich sie im Beispiel gebastelt habe, samt dem alten String
> verloren gehen.
>
> Markus