Controllerと たわむれる12-2

前回のつづき


つづき。第二弾。

変な所で切れてる事に気付いたので速攻で続き。

まず、ControllersWindowController

ControllersWindowController.h

#import <Cocoa/Cocoa.h>

enum {
    typeUnknown = 0,
    typeList = 1,
    typeIcon = 2,
    typeFlow = 3,
};

@class QLPreviewPanel;
@class ControllersViewController; // 追加
@interface ControllersWindowController : NSWindowController
{
    NSArray *contents;
    IBOutlet NSView *placeholder;
    IBOutlet NSArrayController *controller;
    ControllersViewController *viewController; // 変更
    NSMutableDictionary *viewControllers;
    NSInteger viewType;
    
    QLPreviewPanel *previewPanel;
}

@property (retain) NSArray *contents;
@property (assign) ControllersViewController *viewController; // 変更
@property NSInteger viewType;
@property (retain) QLPreviewPanel *previewPanel;

- (IBAction)togglePreviewPanel:(id)seder;
@end

viewControllerをControllersViewControllerに変更しました。


ControllersWindowController.m の一部

(snip)
- (void)switchViewByType:(NSInteger)type
{
    (snip)
    [placeholder addSubview:view];
    
    previewPanel.delegate = self.viewController; // 追加
}

(snip)

- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel
{
    self.previewPanel = panel;
    panel.dataSource = self;
    panel.delegate = self.viewController; // 追加
}
- (void)endPreviewPanelControl:(QLPreviewPanel *)panel
{
    panel.delegate = nil;
    panel.dataSource = nil;
    self.previewPanel = nil; // 追加
}

QLPreviewPanelのDelegateをviewControllerとします。
QLPreviewPanelControllerのメソッドはもちろん、ビューが入れ替わるときも再設定が必要です。previewPanel変数はControllerになっていないときはnilになってますのでControllerになっているかどうかを気にせず代入出来ます。


つぎにViewControllerたち。

ControllerListViewController.mの一部

#pragma mark#### QLPreviewPanel Deleate ####
- (NSView *)previewTragetView
{
    return [(NSScrollView *)[self view] documentView];
}
@end

ControllerIconViewController.mの一部

#pragma mark#### QLPreviewPanel Deleate ####
- (NSView *)previewTragetView
{
    return [(NSScrollView *)[self view] documentView];
}
@end

どちらも同じです。[self view]がNSScrollViewなのでその中身を返します。

ControllersFlowViewController.mの一部

#pragma mark#### QLPreviewPanel Deleate ####
- (NSView *)previewTragetView
{
    return (NSView *)coverFlow;
}

そのまま。IKImageFlowViewのオブジェクトを返します。

前回、これらのスーパークラスControllerViewControllerでQLPreviewPanelのDelegateメソッド -previewPanel:handleEvent:を -previewTragetViewが正しくビューを返せば動くように実装しましたので、プレビューパネルが出ている状態で、矢印キーを押す事で選択アイテムを変更出来るようになりました。


これで、ビルドすれば試せる状態になりました。


では次回は第三弾!


つづき