ページ

2008年11月27日木曜日

simpleCapへコンテキストメニューを追加 (2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

昨日の続き。コンテキストメニューで3種類の画像フォーマットを選択する個所の実装について。


これら3つのメニューは排他的で1つを選ぶと他の二つのチェックを外さなければならない。最初は Cocoa Bindings で簡単にできるだろうと高をくくっていたが、結局複数のパス(Model Key Path)が必要だったり、既にチェック済みの状態で選ぶとチェックが外れてしまうなど、どうもうまくいかなかった。結局いい方法が思い浮かばず IBOutletとIBActionを3つのメニューそれぞれに接続して、ベタに制御することにした。

AppController


@interface AppController : NSObject {
IBOutlet NSMenuItem* _menu_png;
IBOutlet NSMenuItem* _menu_gif;
IBOutlet NSMenuItem* _menu_jpeg;
:

@implements
- (void)setImageFormat:(int)image_format
{
[_menu_png setState:0];
[_menu_gif setState:0];
[_menu_jpeg setState:0];

switch (image_format) {
case 0:
[_menu_png setState:1];
break;
case 1:
[_menu_gif setState:1];
break;
case 2:
[_menu_jpeg setState:1];
break;
}
[UserDefaults setValue:[NSNumber numberWithFloat:image_format]
forKey:UDKEY_IMAGE_FORMAT];
[UserDefaults save];
}

- (IBAction)setImageFormatPNG:(id)sender
{
[self setImageFormat:0];
}
- (IBAction)setImageFormatGIF:(id)sender
{
[self setImageFormat:1];
}
- (IBAction)setImageFormatJPEG:(id)sender
{
[self setImageFormat:2];
}


これらを InterfaceBuilderで接続する。



あまりにもベタな実装になってしまった。。