はじめての2chブラウザのつくりかた(その3)

http://d.hatena.ne.jp/RNatori/20080715
からまた20行くらい(数えてません)いじると3ペインの2chブラウザが出来上がります。予想以上に簡単で驚いた。

http://homepage.mac.com/k_natori/Cocoa/downloads/MyFirst2chBrowser030.zip
完成図はこちら。

左ペインのアウトラインビューから板を選ぶと右上ペインに板が表示され、スレッドを選択すると右下ペインにスレッドが表示されます。そのままですね。「Load」ボタンはリロードになってます。
NSTreeControllerを使っているので、Tiger以上でしか動かなくなりました。


重要な変更の部分だけ解説。というかCocoa Bindingの設定が結構大切なのだけれど。

MyDocument.h, MyDocument.m
-(NSArray *)rootListFaces {
	T2PluginManager *pluginManager = [T2PluginManager sharedManager];
	return [pluginManager rootListFaces];
}

2ch>カテゴリ>板、と辿るには、まずT2PluginManagerに聞いて根元のT2ListFaceを得ます。T2ListFaceからT2Listを得て、objectsで子のT2ListFaceが入ったNSArrayが得られます。その繰り返し。
rootListFacesメソッドを実装することで、NSTreeControllerにMyDocumentのrootListFacesプロパティをBindできます。あとはNSTreeControllerに任せてます。

- (void)outlineViewSelectionDidChange:(NSNotification *)notification {
	T2ListFace *listFace = [[_sourcesController selectedObjects] lastObject];
	if (listFace) {
		T2List *list = [listFace list];
		if ([list isKindOfClass:[T2ThreadList class]]) {
			[self setThreadList:(T2ThreadList *)list];
		}
		[list load];
	}
			
}

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification {
	T2ThreadFace *threadFace = [[_threadFacesController selectedObjects] lastObject];
	if (threadFace) {
		T2Thread *thread = [threadFace thread];
		[_threadView setThread:thread];
		[thread load];
	}
}

前回はアクションを使いましたが、今回はデリゲートに変更しました。左ペインで何かが選択されたら、それが板なのかカテゴリのような中間リストなのかチェックして、板だったら自身にセットします。前回同様、T2Listを得るにはT2ListFace、T2Threadを得るにはT2ThreadFace、がお約束です。