昨日の続き。
Selection のコンテキストメニューでプリファレンスウィンドウを開いたら、選択範囲のタブを表示させたい。
まず NSMenuItem にどのタブを開くか仕込む。この目的には NSMenuItem#setRepresentedObject: が使える。こんな感じ。
NSMenuItem* item;
:
[item setRepresentedObject:[NSNumber numberWithInt:2]];
ここでは NSNumberにタブのIndexとして2を持たせている。
メニューが選択するとターゲットのアクションが呼出される。アクションにはこの時の引数 senderに先ほどの NSMenuItemがわたってくるので、representedObject でタブのIndexを取り出せば良い。SimpleCapの実装ではそれをプリファレンスのコントローラへ渡して、プリファレンスウィンドウを表示させる。
- (IBAction)openPereferecesWindow:(id)sender
{
NSInteger tab_index = -1;
if ([sender isKindOfClass:[NSMenuItem class]]) {
id rep_obj = [sender representedObject];
if (rep_obj) {
tab_index = [rep_obj intValue];
}
}
[_preference_controller openAtTabIndex:tab_index];
:
プリファレンスコントローラは渡されたインデックスのタブを表示させウィンドウを表示する。
- (void)openAtTabIndex:(NSInteger)tab_index
{
switch (tab_index) {
case 0:
[_tab_ivew selectTabViewItemAtIndex:tab_index];
[_toolbar setSelectedItemIdentifier:TOOLBAR_GENERAL];
break;
case 1:
[_tab_ivew selectTabViewItemAtIndex:tab_index];
[_toolbar setSelectedItemIdentifier:TOOLBAR_WINDOWS];
break;
case 2:
[_tab_ivew selectTabViewItemAtIndex:tab_index];
[_toolbar setSelectedItemIdentifier:TOOLBAR_SELECTION];
break;
case 3:
[_tab_ivew selectTabViewItemAtIndex:tab_index];
[_toolbar setSelectedItemIdentifier:TOOLBAR_ADVANCED];
break;
default:
break;
}
[_window makeKeyAndOrderFront:self];
}
タブは NSTabView#selectTabViewItemAtIndex: で変更できる。またタブだけでなくツールバーも忘れずに NSToolBar#setSelectedItemIdentifier: で目的のものに変更しておく。