[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