Unlock "String"?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Unlock "String"?

Markus Schlager-2
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

isLocked.png (154K) Download Attachment
hover-knopf.png (196K) Download Attachment