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