カウントの増加が1秒単位だけだと1分など長い時間に設定したい時に使いづらい。ボタンを増やしたくないので Shiftキーを押した時には 10秒単位の増減にしよう。
Shiftキーが押されたかどうかは NSEvent#modifierFlags が利用できる。ボタンが押された時にこの値と NSSfhitKeyMask で論理積(AND)をとってやる。
Shiftキーの有無によってカウントの増減量 dc の設定を変えている。
ThimerControllerm.m
-(void)clickedAtTag:(NSNumber*)tag event:(NSEvent*)event
{
BOOL is_shiftkey = ([event modifierFlags] & NSShiftKeyMask) ? YES : NO;
int dc = 1;
if (is_shiftkey) {
dc = 10;
}
:
元々 ThinButtonBar からのコールバックには NSEventは含まれていなかったので今回これも追加した。
[_delegate performSelector:@selector(clickedAtTag:event:)
withObject:[NSNumber numberWithInt:[hitButton tag]]
withObject:theEvent];
幸いなことに performSelector: には引数2個まで対応しているので簡単にできた。
NSObject.h
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
調子に乗って1000秒まで増やしてみた(それだけ)。