2009年12月10日木曜日

複数のcolorWellの使い分け


1つのウインドウに複数のColorWellを配置した時のColorPanelの共用方法の覚え書き。

下のように1つのウインドウに2個のColorWellを配置すると、どちらをクリックしてもColorPanelが開きますが、このColorPanelからのdelegateの- (void)changeColor:(id)sender
は1つしか書けません。

以前、複数のタブにColorWellを置いたときは、タブの番号で対象のColorWellを特定していました。今回はこの手が使えないので少し悩みました。

NSColorWellのインスタンスメソッドを調べてみると、- (BOOL)isActiveというのを発見。
これを使って対象のColorWellの特定ができました。

ヘッダー:CfCalApp.h

@interface CfCalApp : NSObject {

IBOutlet id o_1st_colorWell; // 1個目のcolorWellへのアウトレット

IBOutlet id o_2nd_colorWell; // 2個目のcolorWellへのアウトレット

}


ソース:CfCalApp.m

// ColorPanelのデリゲート

- (void)changeColor:(id)sender

{

NSColor *color = [sender color];


if ( [o_1st_colorWell isActive] ) {

// 1個目のColorWellに対応した処理

}

if ( [o_2nd_colorWell isActive] ) {

// 2個目のColorWellに対応した処理

}


}


1つのウインドウに配置した複数のColorWellは排他的にActive/DeactiveになるのでこれでOKでした。