ツールバーアイテムの有効・無効を切替える
validateToolbarItem:メッセージに応答する
ツールバーの導入に伴い、ToolbarControllerクラスを追加しましたが、このクラスはツールバーアイテムを有効にすべきか、無効にすべきかの情報を持たないので、validateToolbarItem:メッセージをそのままウィンドウコントローラに投げる様にしています。RMGWindowControllerはそのメッセージを受け止めて、有効にすべきであればYES、無効にすべきであればNOを返す様にします。
ツールバーアイテムを見分ける方法
どんなツールバーアイテムが対象なのかを見分けるには、引数のtheItemにitemIdentifierメッセージを送ればわかります。各アイテムにどんな文字列がitemIdentifierとして設定されているのかは、ToolbarControllerのページを見ればわかります。
各アイテムの説明
ツールバーは以下の様になっています。
ランダムボタンのitemIdentifierはrandomizeです。ランダムボタンを有効にすべき時はcurrentRepeatingMotifに何かしらセットされている時ですから、currentRepeatingMotif != nilを返せばOKです。
書き出しボタンのitemIdentifierはexportです。書き出しボタンを有効にすべき時は、書き出すべき画像情報が存在する時です。これは繰返し紋様画像のタブが選ばれている時と、基本単位画像のタブが選ばれている時で異なります。繰返し紋様画像のタブが選ばれている時はimageに何かしらセットされている時に有効にすべきですから、image != nilを返せばOKです。基本単位画像のタブが選ばれている時はfragmentImageに何かしらセットされている時に有効にすべきですから、fragmentImage != nilを返せばOKです。
エディタボタンはドロワーを出し入れするだけの役割なので、常にYESを返せばOKです。
ソースコード
以上よりvalidateToolbarItem:メソッドのソースコードは以下の様になります。
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
{
if([[theItem itemIdentifier] isEqualToString:@"randomize"])
return (currentRepeatingMotif != nil);
if([[theItem itemIdentifier] isEqualToString:@"export"])
{
if(tabSelection == REPEATING_MOTIF_IMAGE_TAB)
return (image != nil);
else if(tabSelection == FRAGMENT_IMAGE_TAB)
return (fragmentImage != nil);
else
return NO;
}
if([[theItem itemIdentifier] isEqualToString:@"editor"])
return YES;
return NO;
}