mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 19:10:48 +00:00
More keyed decoding.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@18541 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
2e61ea63b4
commit
7f0f23fc00
4 changed files with 139 additions and 66 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2004-02-05 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/NSMenu.m
|
||||||
|
* Source/NSMenuItem.m
|
||||||
|
* Source/NSPopUpButtonCell.m
|
||||||
|
Added keyed decoding.
|
||||||
|
|
||||||
2004-02-04 01:24 Alexander Malmberg <alexander@malmberg.org>
|
2004-02-04 01:24 Alexander Malmberg <alexander@malmberg.org>
|
||||||
|
|
||||||
* Source/NSView.m: Remove uses of the deprecated "casts as lvalues"
|
* Source/NSView.m: Remove uses of the deprecated "casts as lvalues"
|
||||||
|
|
|
@ -1067,17 +1067,25 @@ static NSNotificationCenter *nc;
|
||||||
[encoder encodeValueOfObjCType: @encode(BOOL) at: &_autoenable];
|
[encoder encodeValueOfObjCType: @encode(BOOL) at: &_autoenable];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)decoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
NSString *dTitle;
|
NSString *dTitle;
|
||||||
NSArray *dItems;
|
NSArray *dItems;
|
||||||
BOOL dAuto;
|
BOOL dAuto;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
dTitle = [decoder decodeObject];
|
if ([aDecoder allowsKeyedCoding])
|
||||||
dItems = [decoder decodeObject];
|
{
|
||||||
[decoder decodeValueOfObjCType: @encode(BOOL) at: &dAuto];
|
dAuto = YES;
|
||||||
|
dTitle = [aDecoder decodeObjectForKey: @"NSTitle"];
|
||||||
|
dItems = [aDecoder decodeObjectForKey: @"NSMenuItems"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dTitle = [aDecoder decodeObject];
|
||||||
|
dItems = [aDecoder decodeObject];
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &dAuto];
|
||||||
|
}
|
||||||
self = [self initWithTitle: dTitle];
|
self = [self initWithTitle: dTitle];
|
||||||
[self setAutoenablesItems: dAuto];
|
[self setAutoenablesItems: dAuto];
|
||||||
|
|
||||||
|
|
|
@ -456,30 +456,44 @@ static Class imageClass;
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
int version = [aDecoder versionForClassName:
|
if ([aDecoder allowsKeyedCoding])
|
||||||
@"NSMenuItem"];
|
|
||||||
|
|
||||||
if (version == 2)
|
|
||||||
{
|
{
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_title];
|
NSString *title = [aDecoder decodeObjectForKey: @"NSTitle"];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_keyEquivalent];
|
NSString *action = [aDecoder decodeObjectForKey: @"NSAction"];
|
||||||
[aDecoder decodeValueOfObjCType: "I" at: &_keyEquivalentModifierMask];
|
NSString *key = [aDecoder decodeObjectForKey: @"NSKeyEquiv"];
|
||||||
[aDecoder decodeValueOfObjCType: "I" at: &_mnemonicLocation];
|
//NSMenu *menu = [aDecoder decodeObjectForKey: @"NSMenu"];
|
||||||
[aDecoder decodeValueOfObjCType: "i" at: &_state];
|
NSImage *mixedImage = [aDecoder decodeObjectForKey: @"NSMixedImage"];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_enabled];
|
NSImage *onImage = [aDecoder decodeObjectForKey: @"NSOnImage"];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_image];
|
id target = [aDecoder decodeObjectForKey: @"NSTarget"];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_onStateImage];
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_offStateImage];
|
self = [self initWithTitle: title
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_mixedStateImage];
|
action: NSSelectorFromString(action)
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_changesState];
|
keyEquivalent: key];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(SEL) at: &_action];
|
[self setTarget: target];
|
||||||
[aDecoder decodeValueOfObjCType: "i" at: &_tag];
|
[self setMixedStateImage: mixedImage];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_representedObject];
|
[self setOnStateImage: onImage];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_submenu];
|
|
||||||
_target = [aDecoder decodeObject];
|
if ([aDecoder containsValueForKey: @"NSKeyEquivModMask"])
|
||||||
|
{
|
||||||
|
//int keyMask = [aDecoder decodeIntForKey: @"NSKeyEquivModMask"];
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSMnemonicLoc"])
|
||||||
|
{
|
||||||
|
int loc = [aDecoder decodeIntForKey: @"NSMnemonicLoc"];
|
||||||
|
[self setMnemonicLocation: loc];
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSState"])
|
||||||
|
{
|
||||||
|
int state = [aDecoder decodeIntForKey: @"NSState"];
|
||||||
|
|
||||||
|
[self setState: state];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int version = [aDecoder versionForClassName:
|
||||||
|
@"NSMenuItem"];
|
||||||
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_title];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_title];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_keyEquivalent];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_keyEquivalent];
|
||||||
[aDecoder decodeValueOfObjCType: "I" at: &_keyEquivalentModifierMask];
|
[aDecoder decodeValueOfObjCType: "I" at: &_keyEquivalentModifierMask];
|
||||||
|
@ -491,11 +505,18 @@ static Class imageClass;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_offStateImage];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_offStateImage];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_mixedStateImage];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_mixedStateImage];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_changesState];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &_changesState];
|
||||||
_target = [aDecoder decodeObject];
|
if (version == 1)
|
||||||
|
{
|
||||||
|
_target = [aDecoder decodeObject];
|
||||||
|
}
|
||||||
[aDecoder decodeValueOfObjCType: @encode(SEL) at: &_action];
|
[aDecoder decodeValueOfObjCType: @encode(SEL) at: &_action];
|
||||||
[aDecoder decodeValueOfObjCType: "i" at: &_tag];
|
[aDecoder decodeValueOfObjCType: "i" at: &_tag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_representedObject];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_representedObject];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &_submenu];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &_submenu];
|
||||||
|
if (version == 2)
|
||||||
|
{
|
||||||
|
_target = [aDecoder decodeObject];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
|
@ -812,55 +812,92 @@ static NSImage *_pbc_image[2];
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
int flag;
|
|
||||||
id<NSMenuItem> selectedItem;
|
id<NSMenuItem> selectedItem;
|
||||||
NSMenu *menu;
|
NSMenu *menu;
|
||||||
int version = [aDecoder versionForClassName:
|
|
||||||
@"NSPopUpButtonCell"];
|
|
||||||
|
|
||||||
self = [super initWithCoder: aDecoder];
|
self = [super initWithCoder: aDecoder];
|
||||||
menu = [aDecoder decodeObject];
|
|
||||||
/*
|
|
||||||
FIXME: This same ivar already gets set in NSCell initWithCoder,
|
|
||||||
but there it is used directly not via a method call. So here we first
|
|
||||||
unset it and than set it again as our setMenu: method tries to optimize
|
|
||||||
duplicate calls.
|
|
||||||
*/
|
|
||||||
[self setMenu: nil];
|
|
||||||
[self setMenu: menu];
|
|
||||||
selectedItem = [aDecoder decodeObject];
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
|
||||||
_pbcFlags.pullsDown = flag;
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
|
||||||
_pbcFlags.preferredEdge = flag;
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
|
||||||
_pbcFlags.usesItemFromMenu = flag;
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
|
||||||
_pbcFlags.altersStateOfSelectedItem = flag;
|
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
|
||||||
_pbcFlags.arrowPosition = flag;
|
|
||||||
|
|
||||||
if (version < 2)
|
if ([aDecoder allowsKeyedCoding])
|
||||||
{
|
{
|
||||||
int i;
|
if ([aDecoder containsValueForKey: @"NSAltersState"])
|
||||||
|
|
||||||
// Not the stored format did change but the interpretation of it.
|
|
||||||
// in version 1 most of the ivars were not used, so their values may
|
|
||||||
// be arbitray. We overwrite them with valid settings.
|
|
||||||
[self setPullsDown: _pbcFlags.pullsDown];
|
|
||||||
_pbcFlags.usesItemFromMenu = YES;
|
|
||||||
|
|
||||||
for (i = 0; i < [_menu numberOfItems]; i++)
|
|
||||||
{
|
{
|
||||||
id <NSMenuItem> anItem = [menu itemAtIndex: i];
|
BOOL alters = [aDecoder decodeBoolForKey: @"NSAltersState"];
|
||||||
|
|
||||||
[anItem setOnStateImage: nil];
|
[self setAltersStateOfSelectedItem: alters];
|
||||||
[anItem setMixedStateImage: nil];
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSUsesItemFromMenu"])
|
||||||
|
{
|
||||||
|
BOOL usesItem = [aDecoder decodeBoolForKey: @"NSUsesItemFromMenu"];
|
||||||
|
|
||||||
|
[self setUsesItemFromMenu: usesItem];
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSArrowPosition"])
|
||||||
|
{
|
||||||
|
NSPopUpArrowPosition position = [aDecoder decodeIntForKey:
|
||||||
|
@"NSArrowPosition"];
|
||||||
|
|
||||||
|
[self setArrowPosition: position];
|
||||||
|
}
|
||||||
|
if ([aDecoder containsValueForKey: @"NSPreferredEdge"])
|
||||||
|
{
|
||||||
|
NSRectEdge edge = [aDecoder decodeIntForKey: @"NSPreferredEdge"];
|
||||||
|
|
||||||
|
[self setPreferredEdge: edge];
|
||||||
}
|
}
|
||||||
[self setEnabled: YES];
|
|
||||||
}
|
|
||||||
|
|
||||||
[self selectItem: selectedItem];
|
menu = [aDecoder decodeObjectForKey: @"NSMenu"];
|
||||||
|
[self setMenu: menu];
|
||||||
|
selectedItem = [aDecoder decodeObjectForKey: @"NSMenuItem"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int flag;
|
||||||
|
int version = [aDecoder versionForClassName:
|
||||||
|
@"NSPopUpButtonCell"];
|
||||||
|
|
||||||
|
menu = [aDecoder decodeObject];
|
||||||
|
/*
|
||||||
|
FIXME: This same ivar already gets set in NSCell initWithCoder,
|
||||||
|
but there it is used directly not via a method call. So here we first
|
||||||
|
unset it and than set it again as our setMenu: method tries to optimize
|
||||||
|
duplicate calls.
|
||||||
|
*/
|
||||||
|
[self setMenu: nil];
|
||||||
|
[self setMenu: menu];
|
||||||
|
selectedItem = [aDecoder decodeObject];
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
||||||
|
_pbcFlags.pullsDown = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
||||||
|
_pbcFlags.preferredEdge = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
||||||
|
_pbcFlags.usesItemFromMenu = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
||||||
|
_pbcFlags.altersStateOfSelectedItem = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &flag];
|
||||||
|
_pbcFlags.arrowPosition = flag;
|
||||||
|
|
||||||
|
if (version < 2)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
// Not the stored format did change but the interpretation of it.
|
||||||
|
// in version 1 most of the ivars were not used, so their values may
|
||||||
|
// be arbitray. We overwrite them with valid settings.
|
||||||
|
[self setPullsDown: _pbcFlags.pullsDown];
|
||||||
|
_pbcFlags.usesItemFromMenu = YES;
|
||||||
|
|
||||||
|
for (i = 0; i < [_menu numberOfItems]; i++)
|
||||||
|
{
|
||||||
|
id <NSMenuItem> anItem = [menu itemAtIndex: i];
|
||||||
|
|
||||||
|
[anItem setOnStateImage: nil];
|
||||||
|
[anItem setMixedStateImage: nil];
|
||||||
|
}
|
||||||
|
[self setEnabled: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
[self selectItem: selectedItem];
|
||||||
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue