From 325a28d51bb65cb5dea6a3afcc223dd52f8ef391 Mon Sep 17 00:00:00 2001 From: fredkiefer Date: Sat, 3 Nov 2007 21:20:41 +0000 Subject: [PATCH] Better support for keyed encoding to support PictureFrame. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@25551 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++ Source/NSControl.m | 17 ++++++++--- Source/NSMenuItem.m | 69 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 73 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 678eba87e..34e4acf86 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-03 Fred Kiefer + + * Source/NSControl.m, + * Source/NSMenuItem.m (-initWithCoder:, -encodeWithCoder:): Better + support for keyed encoding (Tag, separator,...). + 2007-11-01 Fred Kiefer * Source/NSBrowser.m (+initialize): Create titleCell here to have diff --git a/Source/NSControl.m b/Source/NSControl.m index b5b25c13f..9bf4e519e 100644 --- a/Source/NSControl.m +++ b/Source/NSControl.m @@ -911,6 +911,10 @@ static NSNotificationCenter *nc; { [aCoder encodeObject: [self cell] forKey: @"NSCell"]; [aCoder encodeBool: [self isEnabled] forKey: @"NSEnabled"]; + if (_tag) + { + [aCoder encodeInt: [self tag] forKey: @"NSTag"]; + } } else { @@ -930,12 +934,17 @@ static NSNotificationCenter *nc; if (cell != nil) { - [self setCell: cell]; - } + [self setCell: cell]; + } if ([aDecoder containsValueForKey: @"NSEnabled"]) { - [self setEnabled: [aDecoder decodeBoolForKey: @"NSEnabled"]]; - } + [self setEnabled: [aDecoder decodeBoolForKey: @"NSEnabled"]]; + } + if ([aDecoder containsValueForKey: @"NSTag"]) + { + int tag = [aDecoder decodeIntForKey: @"NSTag"]; + [self setTag: tag]; + } } else { diff --git a/Source/NSMenuItem.m b/Source/NSMenuItem.m index 7c5f48e05..446590a48 100644 --- a/Source/NSMenuItem.m +++ b/Source/NSMenuItem.m @@ -483,6 +483,10 @@ static Class imageClass; { if ([aCoder allowsKeyedCoding]) { + if ([self isSeparatorItem]) + { + [aCoder encodeBool: YES forKey: @"NSIsSeparator"]; + } [aCoder encodeObject: _title forKey: @"NSTitle"]; [aCoder encodeObject: NSStringFromSelector(_action) forKey: @"NSAction"]; [aCoder encodeObject: _keyEquivalent forKey: @"NSKeyEquiv"]; @@ -495,6 +499,11 @@ static Class imageClass; [aCoder encodeInt: _keyEquivalentModifierMask forKey: @"NSKeyEquivModMask"]; [aCoder encodeInt: _mnemonicLocation forKey: @"NSMnemonicLoc"]; [aCoder encodeInt: _state forKey: @"NSState"]; + [aCoder encodeBool: ![self isEnabled] forKey: @"NSIsDisabled"]; + if (_tag) + { + [aCoder encodeInt: _tag forKey: @"NSTag"]; + } } else { @@ -529,28 +538,48 @@ static Class imageClass; NSString *title; NSString *action; NSString *key; - NSImage *mixedImage; - NSImage *onImage; - id target; - NSMenu *submenu; + BOOL isSeparator = NO; + + if ([aDecoder containsValueForKey: @"NSIsSeparator"]) + { + isSeparator = [aDecoder decodeBoolForKey: @"NSIsSeparator"]; + } + + if (isSeparator) + { + RELEASE(self); + return [NSMenuItem separatorItem]; + } title = [aDecoder decodeObjectForKey: @"NSTitle"]; action = [aDecoder decodeObjectForKey: @"NSAction"]; key = [aDecoder decodeObjectForKey: @"NSKeyEquiv"]; - mixedImage = [aDecoder decodeObjectForKey: @"NSMixedImage"]; - onImage = [aDecoder decodeObjectForKey: @"NSOnImage"]; - target = [aDecoder decodeObjectForKey: @"NSTarget"]; - [aDecoder decodeObjectForKey: @"NSMenu"]; - submenu = [aDecoder decodeObjectForKey: @"NSSubmenu"]; self = [self initWithTitle: title - action: NSSelectorFromString(action) - keyEquivalent: key]; - [self setTarget: target]; - [self setMixedStateImage: mixedImage]; - [self setOnStateImage: onImage]; - [self setSubmenu: submenu]; + action: NSSelectorFromString(action) + keyEquivalent: key]; + //[aDecoder decodeObjectForKey: @"NSMenu"]; + if ([aDecoder containsValueForKey: @"NSTarget"]) + { + id target = [aDecoder decodeObjectForKey: @"NSTarget"]; + [self setTarget: target]; + } + if ([aDecoder containsValueForKey: @"NSMixedImage"]) + { + NSImage *mixedImage = [aDecoder decodeObjectForKey: @"NSMixedImage"]; + [self setMixedStateImage: mixedImage]; + } + if ([aDecoder containsValueForKey: @"NSOnImage"]) + { + NSImage *onImage = [aDecoder decodeObjectForKey: @"NSOnImage"]; + [self setOnStateImage: onImage]; + } + if ([aDecoder containsValueForKey: @"NSSubmenu"]) + { + NSMenu *submenu = [aDecoder decodeObjectForKey: @"NSSubmenu"]; + [self setSubmenu: submenu]; + } if ([aDecoder containsValueForKey: @"NSKeyEquivModMask"]) { int keyMask = [aDecoder decodeIntForKey: @"NSKeyEquivModMask"]; @@ -566,6 +595,16 @@ static Class imageClass; int state = [aDecoder decodeIntForKey: @"NSState"]; [self setState: state]; } + if ([aDecoder containsValueForKey: @"NSIsDisabled"]) + { + BOOL flag = [aDecoder decodeBoolForKey: @"NSIsDisabled"]; + [self setEnabled: !flag]; + } + if ([aDecoder containsValueForKey: @"NSTag"]) + { + int tag = [aDecoder decodeIntForKey: @"NSTag"]; + [self setTag: tag]; + } } else {