[SML 7963] Re: 第34回Smalltalk勉強会@京都
hirowadenden
hirowadenden @ hera.eonet.ne.jp
2011年 8月 6日 (土) 11:54:42 JST
ハンドル名で失礼します、hirowadendenと申します。
(2011年08月04日 11:38), 安田さん wrote:
> これ非常にコンパクトなのですが、しかしこれ、GUI では使えない
> ですよね、、、
> (GUI でインスタンスを書くことはできない、、、)
>
> GUI ツールなしで上みたいにコードするのなら良いのですが、僕は
> なんで X には ResEdit とか InterfaceBuilder が無いんだと悲しく
> なった人なので、できれば、、いや何とかして GUI は使いたい。。。
GUIで作成したメニューを修正していいものかよくわかりませんが、GUIで
作成したメニューにインスタンスでnameKeyをセットすることで以下のように
出来ました。(SSK_PaneMVC_20110803.stからの修正です)
PaneModel>>yellowButtonMenu
| aMenu |
aMenu := self class yellowButtonMenu.
aMenu menuItems do: [:item | item nameKey: self].
^aMenu
PaneController>>yellowButtonPressedEvent: event
| aMenu aSymbol selectedMenuItem aKeyObject |
aMenu := self model yellowButtonMenu.
aSymbol := aMenu startUp.
(aSymbol isKindOf: Symbol)
ifTrue:
[selectedMenuItem := aMenu selectionMemory.
aKeyObject := selectedMenuItem nameKey.
"aKeyObject inspect."
aKeyObject perform: aSymbol].
^nil
PaneModel>>selectImageFile
Transcript
cr;
show: thisContext printString;
space;
show: self label
MenuItemのvalueは"selector or block"とMenuItemのコメントにあるので、
nameKeyを使わずに以下のようにもできました。
PaneModel>>yellowButtonMenu
| aMenu |
aMenu := self class yellowButtonMenu.
aMenu menuItems do:
[:anItem |
| aSymbol |
aSymbol := anItem value.
(aSymbol isKindOf: Symbol) ifTrue: [anItem value: [self perform:
aSymbol]]].
^aMenu
PaneController>>yellowButtonPressedEvent: event
| aMenu selectedMenuItemValue |
aMenu := self model yellowButtonMenu.
selectedMenuItemValue := aMenu startUp.
(selectedMenuItemValue isKindOf: BlockClosure) ifTrue:
[selectedMenuItemValue value].
^nil
PaneModel>>selectImageFileは上記と同じ。
以上です。
-- hirowadenden
SML メーリングリストの案内