Re: Unlock "String"?

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

Re: 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
Reply | Threaded
Open this post in threaded view
|

Re: Unlock "String"?

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