[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 メーリングリストの案内