先日の修正でプリファレンス上でビューアから使えるアプリケーションを設定できるようになった。
ただ後から気がついたのだが、設定を外す方法が無い。今は一度設定したら他のアプリに変更することしかできない。
実害は無いのだが、アプリとしは不完全なのでアプリ設定を消す事ができるようにする。
横に削除用のボタンを付けることも考えたが、場所を取るのでこれはやめよう。
その代わりに "Choose..."で開くオープンパネルにアプリを解除するチェックボックスを付けることにする。
このチェックがついている場合はプリファレンスからアプリを解除する。
オープンパネルの表示には NSOpenPanel を使っている。この親クラスにあたる NSSavePanel にカスタムビューを追加するメソッド setAccessoryView: が用意されているのでこれが使えそうだ。
- (void)setAccessoryView:(NSView *)aView
チェックボックスが一つあれば良いので複雑なことはせず簡単に済まそう。コードはこんな感じ。
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:NO];
[openPanel setCanCreateDirectories:NO];
[openPanel setAllowsMultipleSelection:NO];
NSString* title = NSLocalizedString(@"PreferenceRemoveApplication", @"");
NSRect rect = NSZeroRect;
rect.size = [title sizeWithAttributes:[NSDictionary dictionary]];
rect.size.width += 20;
NSButton* check_box =
[[[NSButton alloc] initWithFrame:rect] autorelease];
[check_box setButtonType:NSSwitchButton];
[check_box setTitle:title];
[openPanel setAccessoryView:check_box];
チェックボックス check_box を作り、#setAccessoryView: でオープンパネルに表示させる。チェックボックスの大きさは文字列からサイズを #sizeWithAttributes: で取得し、チェックボックスの大きさ(おおよそ)20ピクセルを加えて用意する。
するとこうなる。
一旦表示できれば後はその値を使うだけ。パネルが閉じられた後は [check_box intValue] でチェッック状態を取得して適切な処理を行えば良い。
解除することができるようになった。