[SML 7889] Re: 第27回Smalltalk勉強会@京都

hirowadenden hirowadenden @ hera.eonet.ne.jp
2011年 1月 3日 (月) 16:07:35 JST


ハンドル名で失礼します、hirowadendenと申します。

(2011年01月02日 20:24), 濱崎治 さんは書きました:
>> 投稿するのが随分遅くなってしまいました。お待たせしてしまった皆さん、
>> ご容赦ください。

お忙しいところ、解説とコードの投稿ありがとうございます。
前回のピザパーティの時に少しお話ししましたが、濱崎さんの
SSK9_hamasaki_final -> SSK10_hamasaki_final の修正とは異なる方法で、
同じ名前のメソッドがある場合そのメソッドの選択を保持する機能を書いて
みたので投稿します。

SSK9_hamasaki_final.stを元にした修正になります。
方法は、選択されたクラスが変わるたびに、methodListが更新される前に選択
されていたメソッドを覚えておき、methodListが更新されたあとcodeTextが
更新される前に、同じ名前のメソッドが存在するか調べ、存在する場合
methodListのselectionを前に選択されていたものに戻すようにしました。

まず、前に選択されていたメソッドを覚えるために、インスタンス変数に
formerSelectorを追加し、accessorsをプロトコルprivateに追加します。

OldFashionedBrowser >> formerSelector

	^formerSelector


OldFashionedBrowser >> formerSelector: aSelector

	formerSelector := aSelector

以下は、OldFashionedBrowser >> initialize の修正になります。
selectedClass := BlockValue〜の行とmethodList := SelectionInList new〜
の行の間に次を追加します。

	selectedClass compute: [:aClass | aClass ifNotNil: [self
formerSelector: self methodList selection]].

methodList := SelectionInList new〜の行とcodeText := BlockValue〜
の行の間に次を追加します。

	selectedClass compute:
			[:aClass |
			aClass
				ifNotNil:
					[(self methodList list includes: self formerSelector) ifTrue: [self
methodList selection: self formerSelector].
					self formerSelector: self methodList selection]].

以上です。

-- hirowadenden


SML メーリングリストの案内