apps-gorm/Palettes/0Menus/GormMenuItemAttributesInspector.m

292 lines
6.6 KiB
Mathematica
Raw Normal View History

/*
GormMenuItemAttributesInspector.m
Copyright (C) 1999-2005 Free Software Foundation, Inc.
Author: Richard frith-Macdonald (richard@brainstorm.co.uk>
Date: 1999
This file is part of GNUstep.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA.
*/
/*
July 2005 : Spilt inspector in separate classes.
Always use ok: revert: methods
Clean up
Author : Fabien Vallon <fabien@sonappart.net>
*/
#include "GormMenuItemAttributesInspector.h"
#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>
const unichar up[]={NSUpArrowFunctionKey};
const unichar dn[]={NSDownArrowFunctionKey};
const unichar lt[]={NSLeftArrowFunctionKey};
const unichar rt[]={NSRightArrowFunctionKey};
NSString *upString = nil;
NSString *dnString = nil;
NSString *ltString = nil;
NSString *rtString = nil;
#define VSTR(str) ({NSString *_str = (NSString *)str; ((NSString *)_str) ? (NSString *)_str : (NSString *)@"";})
@implementation GormMenuItemAttributesInspector
- (id) init
{
if ([super init] == nil)
return nil;
if ([NSBundle loadNibNamed: @"GormMenuItemAttributesInspector" owner: self]
== NO)
{
NSLog(@"Could not gorm GormMenuItemAttributesInspector");
return nil;
}
// initialize the strings.
upString = RETAIN([NSString stringWithCharacters: up length: 1]);
dnString = RETAIN([NSString stringWithCharacters: dn length: 1]);
ltString = RETAIN([NSString stringWithCharacters: lt length: 1]);
rtString = RETAIN([NSString stringWithCharacters: rt length: 1]);
return self;
}
- (void) dealloc
{
RELEASE(upString);
RELEASE(dnString);
RELEASE(ltString);
RELEASE(rtString);
[super dealloc];
}
- (void) revert : (id)sender
{
unsigned int flags = [object keyEquivalentModifierMask];
NSString *key = VSTR([object keyEquivalent]);
if ( object == nil )
return;
[titleText setStringValue: VSTR([object title])];
[shortCut setStringValue: key];
[tagText setIntValue: [object tag]];
if([key isEqualToString: @"\n"])
{
[keyPopup selectItemAtIndex: 1];
}
else if([key isEqualToString: @"\b"])
{
[keyPopup selectItemAtIndex: 2];
}
else if([key isEqualToString: @"\E"])
{
[keyPopup selectItemAtIndex: 3];
}
else if([key isEqualToString: @"\t"])
{
[keyPopup selectItemAtIndex: 4];
}
else if([key isEqualToString: upString])
{
[keyPopup selectItemAtIndex: 5];
}
else if([key isEqualToString: dnString])
{
[keyPopup selectItemAtIndex: 6];
}
else if([key isEqualToString: ltString])
{
[keyPopup selectItemAtIndex: 7];
}
else if([key isEqualToString: rtString])
{
[keyPopup selectItemAtIndex: 8];
}
else
{
[keyPopup selectItem: nil];
}
// key modifier mask...
[altBtn setState: NSOffState];
[ctrlBtn setState: NSOffState];
[shiftBtn setState: NSOffState];
[cmdBtn setState: NSOffState];
if(flags & NSAlternateKeyMask)
{
[altBtn setState: NSOnState];
}
if(flags & NSControlKeyMask)
{
[ctrlBtn setState: NSOnState];
}
if(flags & NSShiftKeyMask)
{
[shiftBtn setState: NSOnState];
}
if(flags & NSCommandKeyMask)
{
[cmdBtn setState: NSOnState];
}
}
-(void) ok: (id) sender
{
if (sender == titleText)
{
[object setTitle: [titleText stringValue]];
}
if (sender == shortCut)
{
[object setKeyEquivalent:[[shortCut stringValue] stringByTrimmingSpaces]];
}
if (sender == tagText)
{
[object setTag: [tagText intValue]];
}
else if (sender == keyPopup)
{
unsigned int tag = [[keyPopup selectedItem] tag];
switch(tag)
{
case 0: // none
{
[object setKeyEquivalent: nil];
}
break;
case 1: // return
{
[object setKeyEquivalent: @"\n"];
}
break;
case 2: // delete
{
[object setKeyEquivalent: @"\b"];
}
break;
case 3: // escape
{
[object setKeyEquivalent: @"\E"];
}
break;
case 4: // tab
{
[object setKeyEquivalent: @"\t"];
}
break;
case 5: // up
{
[object setKeyEquivalent: upString];
}
break;
case 6: // down
{
[object setKeyEquivalent: dnString];
}
break;
case 7: // left
{
[object setKeyEquivalent: ltString];
}
break;
case 8: // right
{
[object setKeyEquivalent: rtString];
}
break;
default: // should never happen..
{
[object setKeyEquivalent: nil];
NSLog(@"This shouldn't happen.");
}
break;
}
}
else if (sender == altBtn)
{
if([altBtn state] == NSOnState)
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] | NSAlternateKeyMask];
}
else
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] & ~NSAlternateKeyMask];
}
[[object menu] itemChanged: object];
}
else if (sender == ctrlBtn)
{
if([ctrlBtn state] == NSOnState)
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] | NSControlKeyMask];
}
else
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] & ~NSControlKeyMask];
}
[[object menu] itemChanged: object];
}
else if (sender == shiftBtn)
{
if([shiftBtn state] == NSOnState)
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] | NSShiftKeyMask];
}
else
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] & ~NSShiftKeyMask];
}
[[object menu] itemChanged: object];
}
else if (sender == cmdBtn)
{
if([cmdBtn state] == NSOnState)
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] | NSCommandKeyMask];
}
else
{
[object setKeyEquivalentModifierMask:
[object keyEquivalentModifierMask] & ~NSCommandKeyMask];
}
[[object menu] itemChanged: object];
}
[super ok:sender];
}
- (void)controlTextDidChange:(NSNotification *)aNotification
{
[self ok: [aNotification object]];
}
@end