2011年5月25日水曜日

Cocoa FileManager NSMenu popUpMenuPositioningItem: atLocation: inView:

考えていた機能がそれほど重要なものではないので、とりあえずpopupMenuで表示出来てるからいいか、と思いかけたけれど、ドキュメントにあったNSMenuクラスのpopUpMenuPositioningItem: atLocation: inView:をもう少しだけ研究してみることにした。

popUpContextMenu: withEvent: forView:がクラスメソッドなのに対し、popUpMenuPositioningItemはインスタンスメソッド。

第1引数がNSMenuItemなので、特定のItemだけpopupさせるのかと思ったのだけれど、よく読めばItemはnilでも構わないということなので試してみる。
NSPoint point= NSMakePoint([cell drawedRect].origin.x, [cell drawedRect].size.height);
NSMenuItem* activeitem=[menu itemAtIndex:1];
[menu popUpMenuPositioningItem:activeitem atLocation:point inView:self];

これでこうなった。

マウスカーソルがある場所でクリックしているので、これで期待通りの動作となった。なーんだ、できるんじゃん。ドキュメントをもっとしっかり読まないといかんなあ。

ただし初めはMenuが無効な状態で表示されていた。itemを生成するとき、setTargetしないと有効にならないのね。(^^;)

第1引数でNSMenuItemを指定すると、そのItemが指定したポジションのTopLeftにくるように描画されている。なるほど便利だなあ。

あとはMenuで選択されたディレクトリを表示できるようにすればいい、と。これは明日以降。

0 件のコメント:

コメントを投稿