更新履歴
広告
PRサイト
関連サイト

ツールバーアイテムの有効・無効を切替える


validateToolbarItem:メッセージに応答する

ツールバーの導入に伴い、ToolbarControllerクラスを追加しましたが、このクラスはツールバーアイテムを有効にすべきか、無効にすべきかの情報を持たないので、validateToolbarItem:メッセージをそのままウィンドウコントローラに投げる様にしています。RMGWindowControllerはそのメッセージを受け止めて、有効にすべきであればYES、無効にすべきであればNOを返す様にします。

ツールバーアイテムを見分ける方法

どんなツールバーアイテムが対象なのかを見分けるには、引数のtheItemにitemIdentifierメッセージを送ればわかります。各アイテムにどんな文字列がitemIdentifierとして設定されているのかは、ToolbarControllerのページを見ればわかります。

各アイテムの説明

ツールバーは以下の様になっています。

toolbar


ランダムボタンのitemIdentifierはrandomizeです。ランダムボタンを有効にすべき時はcurrentRepeatingMotifに何かしらセットされている時ですから、currentRepeatingMotif != nilを返せばOKです。

書き出しボタンのitemIdentifierはexportです。書き出しボタンを有効にすべき時は、書き出すべき画像情報が存在する時です。これは繰返し紋様画像のタブが選ばれている時と、基本単位画像のタブが選ばれている時で異なります。繰返し紋様画像のタブが選ばれている時はimageに何かしらセットされている時に有効にすべきですから、image != nilを返せばOKです。基本単位画像のタブが選ばれている時はfragmentImageに何かしらセットされている時に有効にすべきですから、fragmentImage != nilを返せばOKです。

エディタボタンはドロワーを出し入れするだけの役割なので、常にYESを返せばOKです。

ソースコード

以上よりvalidateToolbarItem:メソッドのソースコードは以下の様になります。

RMGWindowController.m
- (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;
}



ページの先頭へ戻る