はじめての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、がお約束です。