ページ

2009年6月25日木曜日

ホットキー変更対応(14) - ダブルクリックで設定モードへ

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

キー入力の基本ができたので、次は実際の設定インターフェイスを作り込んでいく。

動作は次のようにする。
(1) NSTextViewへホットキー初期設定を表示する。
  この時点ではキー入力を受け付けない。

(2) NSTextViewをダブルクリックすると
  キー入力を受け付けるようになる。
  この時、表示されている文字を変更可能であることが
  わかるように選択状態にする。

(3) キーを入力するとその値を表示し、
  再びキーを受け付けないようになる。


キーを受け付けるモードを管理する為にメンバ変数を追加する。
TextView.h

@class HotkeyFormatter;
@interface TextView : NSTextView {
IBOutlet HotkeyFormatter* _hotkey_formatter;
NSNumber* _hotkey;

BOOL _is_editing; // キー受付モード
}



キー受付開始と終了時の処理を受け持つメソッドをそれぞれ追加する。
TextView.m
- (void)startEdit
{
[[self window] makeFirstResponder:self];
[self setSelectable:YES];
_is_editing = YES;
NSRange range = NSMakeRange(0, [[self string] length]);
[self setSelectedRange:range];
}


- (void)endEdit
{
[self setSelectable:NO];
_is_editing = NO;
}


startEdit では TextViewをファーストレスポンダにしてキー入力を受け取れるようにする。また現在の設定値(文字列)を選択状態にする。

endEdit では入力モードをオフにする。


ダブルクリックされたら startEdit を呼び出す。
- (void)mouseDown:(id)theEvent
{
if ([theEvent clickCount] >= 2) {
[self startEdit];
}
}


後は前回のコードとほぼ同じ。
入力モードがオフの場合はキー入力を受け付けない処理だけ書いておく。
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"%@", theEvent);

if (!_is_editing) {
return;
}
:


この辺りの動作は以前ファイル名の変更の時にも書いた。詳細は下記を参照のこと。
ファイル名変更(その3)テキストボックス CommentsAdd Star



さて動かしてみよう。

まず実行直後は初期設定が表示される。


ダブルクリックすると入力モードがオンになる。


そこでキーを入力すると、入力キーが表示され、入力モードがオフとなる。



サンプル:HotKeyUI-3.zip

- - - -
だんだん形になってきた。