Added some more keyed decoding.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@20211 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2004-10-08 21:24:25 +00:00
parent d85cafebe1
commit 08529677f0
5 changed files with 217 additions and 73 deletions

View file

@ -1,3 +1,12 @@
2004-10-08 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSFormCell.m: (-initWithCoder:):
* Source/NSMatrix.m: (-initWithCoder:): Implemented keyed decoding.
* Source/NSColor.m: (-initWithCoder:): Corrected handling of alpha
values (use 1 instead of 0)
* Source/NSCell.m: (-initWithCoder:): Added some more flag
handling and rearranged code.
2004-10-08 09:17 Chad Hardin <cehardin@mac.com>
* Printing/GSLPR/GSLPRPageLayout.m: Fixed a #define

View file

@ -2006,7 +2006,8 @@ static NSColor *shadowCol;
if ([aDecoder allowsKeyedCoding])
{
NSString *contents = [aDecoder decodeObjectForKey: @"NSContents"];
NSFont *support = [aDecoder decodeObjectForKey: @"NSSupport"];
self = [self initTextCell: contents];
if ([aDecoder containsValueForKey: @"NSCellFlags"])
{
@ -2022,6 +2023,10 @@ static NSColor *shadowCol;
[self setSelectable: ((cFlags & 0x200001) == 0x200001)];
[self setBezeled: ((cFlags & 0x400000) == 0x400000)];
[self setBordered: ((cFlags & 0x800000) == 0x800000)];
if ((cFlags & 0x4000000) == 0x4000000)
{
[self setType: NSTextCellType];
}
[self setEditable: ((cFlags & 0x10000000) == 0x10000000)];
// This bit flag is the other way around!
[self setEnabled: ((cFlags & 0x20000000) != 0x20000000)];
@ -2036,13 +2041,39 @@ static NSColor *shadowCol;
cFlags2 = [aDecoder decodeIntForKey: @"NSCellFlags2"];
[self setAllowsMixedState: ((cFlags2 & 0x1000000) == 0x1000000)];
[self setRefusesFirstResponder: ((cFlags2 & 0x2000000) == 0x2000000)];
if ((cFlags2 & 0x4000000) == 0x4000000)
{
[self setAlignment: NSRightTextAlignment];
}
if ((cFlags2 & 0x8000000) == 0x8000000)
{
[self setAlignment: NSCenterTextAlignment];
}
if ((cFlags2 & 0xC000000) == 0xC000000)
{
[self setAlignment: NSJustifiedTextAlignment];
}
if ((cFlags2 & 0x10000000) == 0x10000000)
{
[self setAlignment: NSNaturalTextAlignment];
}
[self setImportsGraphics: ((cFlags2 & 0x20000000) == 0x20000000)];
[self setAllowsEditingTextAttributes: ((cFlags2 & 0x40000000) == 0x40000000)];
// FIXME
}
if ([aDecoder containsValueForKey: @"NSSupport"])
{
NSFont *support = [aDecoder decodeObjectForKey: @"NSSupport"];
self = [self initTextCell: contents];
[self setFont: support];
[self setFont: support];
}
if ([aDecoder containsValueForKey: @"NSFormatter"])
{
NSFormatter *formatter = [aDecoder decodeObjectForKey: @"NSFormatter"];
[self setFormatter: formatter];
}
}
else
{

View file

@ -1056,7 +1056,7 @@ systemColorWithName(NSString *name)
float red = 0.0;
float green = 0.0;
float blue = 0.0;
float alpha = 0.0;
float alpha = 1.0;
NSString *str;
NSScanner *scanner;
@ -1069,8 +1069,10 @@ systemColorWithName(NSString *name)
[scanner scanFloat: &red];
[scanner scanFloat: &green];
[scanner scanFloat: &blue];
RELEASE(scanner);
RELEASE(str);
}
self = [NSColor colorWithCalibratedRed: red
green: green
blue: blue
@ -1081,7 +1083,7 @@ systemColorWithName(NSString *name)
unsigned length;
const uint8_t *data;
float white = 0.0;
float alpha = 0.0;
float alpha = 1.0;
NSString *str;
NSScanner *scanner;
@ -1092,6 +1094,8 @@ systemColorWithName(NSString *name)
str = [[NSString alloc] initWithCString: data length: length];
scanner = [[NSScanner alloc] initWithString: str];
[scanner scanFloat: &white];
RELEASE(scanner);
RELEASE(str);
}
self = [NSColor colorWithDeviceWhite: white

View file

@ -368,12 +368,24 @@ static NSColor *shadowCol;
BOOL tmp;
[super initWithCoder: aDecoder];
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &tmp];
_formcell_auto_title_width = tmp;
[aDecoder decodeValueOfObjCType: @encode(float) at: &_displayedTitleWidth];
[aDecoder decodeValueOfObjCType: @encode(id)
at: &_titleCell];
if ([aDecoder allowsKeyedCoding])
{
if ([aDecoder containsValueForKey: @"NSTitleWidth"])
{
[self setTitleWidth: [aDecoder decodeFloatForKey: @"NSTitleWidth"]];
}
if ([aDecoder containsValueForKey: @"NSTitleCell"])
{
ASSIGN(_titleCell, [aDecoder decodeObjectForKey: @"NSTitleCell"]);
}
}
else
{
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &tmp];
_formcell_auto_title_width = tmp;
[aDecoder decodeValueOfObjCType: @encode(float) at: &_displayedTitleWidth];
[aDecoder decodeValueOfObjCType: @encode(id) at: &_titleCell];
}
return self;
}

View file

@ -55,6 +55,7 @@
#include <Foundation/NSArray.h>
#include <Foundation/NSAutoreleasePool.h>
#include <Foundation/NSException.h>
#include <Foundation/NSKeyedArchiver.h>
#include <Foundation/NSNotification.h>
#include <Foundation/NSFormatter.h>
#include <Foundation/NSDebug.h>
@ -2477,77 +2478,164 @@ static SEL getSel;
[super initWithCoder: aDecoder];
_myZone = [self zone];
[aDecoder decodeValueOfObjCType: @encode (int) at: &_mode];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_allowsEmptySelection];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_selectionByRect];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_autosizesCells];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_autoscroll];
_cellSize = [aDecoder decodeSize];
_intercell = [aDecoder decodeSize];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_backgroundColor];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_cellBackgroundColor];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_drawsBackground];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_drawsCellBackground];
class = NSClassFromString ((NSString *)[aDecoder decodeObject]);
if (class != Nil)
if ([aDecoder allowsKeyedCoding])
{
[self setCellClass: class];
}
if ([aDecoder containsValueForKey: @"NSBackgroundColor"])
{
[self setBackgroundColor: [aDecoder decodeObjectForKey: @"NSBackgroundColor"]];
}
if ([aDecoder containsValueForKey: @"NSCellBackgroundColor"])
{
[self setBackgroundColor: [aDecoder decodeObjectForKey: @"NSCellBackgroundColor"]];
}
if ([aDecoder containsValueForKey: @"NSProtoCell"])
{
[self setPrototype: [aDecoder decodeObjectForKey: @"NSProtoCell"]];
}
if ([aDecoder containsValueForKey: @"NSCellClass"])
{
class = NSClassFromString((NSString *)[aDecoder decodeObjectForKey: @"NSCellClass"]);
if (class != Nil)
{
[self setCellClass: class];
}
}
if ([aDecoder containsValueForKey: @"NSCellSize"])
{
[self setCellSize: [aDecoder decodeSizeForKey: @"NSCellSize"]];
}
if ([aDecoder containsValueForKey: @"NSIntercellSpacing"])
{
[self setIntercellSpacing: [aDecoder decodeSizeForKey: @"NSIntercellSpacing"]];
}
if ([aDecoder containsValueForKey: @"NSMatrixFlags"])
{
int mFlags;
cell = [aDecoder decodeObject];
if (cell != nil)
{
[self setPrototype: cell];
}
mFlags = [aDecoder decodeIntForKey: @"NSMatrixFlags"];
// FIXME
}
if ([aDecoder containsValueForKey: @"NSNumCols"])
{
columns = [aDecoder decodeIntForKey: @"NSNumCols"];
}
if ([aDecoder containsValueForKey: @"NSNumRows"])
{
rows = [aDecoder decodeIntForKey: @"NSNumRows"];
}
if (_cellPrototype == nil)
{
[self setCellClass: [isa cellClass]];
}
array = [aDecoder decodeObjectForKey: @"NSCells"];
[self renewRows: rows columns: columns];
count = [array count];
if (count != rows * columns)
{
NSLog (@"Trying to decode an invalid NSMatrix: cell number does not fit matrix dimension");
// Quick fix to do what we can
if (count > rows * columns)
{
count = rows * columns;
}
}
[aDecoder decodeValueOfObjCType: @encode (int) at: &rows];
[aDecoder decodeValueOfObjCType: @encode (int) at: &columns];
/* NB: This works without changes for NSForm */
array = [aDecoder decodeObject];
[self renewRows: rows columns: columns];
count = [array count];
if (count != rows * columns)
{
NSLog (@"Trying to decode an invalid NSMatrix: cell number does not fit matrix dimension");
// Quick fix to do what we can
if (count > rows * columns)
{
count = rows * columns;
for (i = 0; i < count; i++)
{
int row, column;
cell = [array objectAtIndex: i];
row = i / columns;
column = i % columns;
[self putCell:cell atRow: row column: column];
if ([cell state])
{
[self selectCellAtRow: row column: column];
}
}
if ([aDecoder containsValueForKey: @"NSSelectedCol"])
{
_selectedColumn = [aDecoder decodeIntForKey: @"NSSelectedCol"];
}
if ([aDecoder containsValueForKey: @"NSSelectedRow"])
{
_selectedRow = [aDecoder decodeIntForKey: @"NSSelectedRow"];
}
}
_selectedRow = _selectedColumn = 0;
for (i = 0; i < count; i++)
else
{
int row, column;
cell = [array objectAtIndex: i];
row = i / columns;
column = i % columns;
_myZone = [self zone];
[aDecoder decodeValueOfObjCType: @encode (int) at: &_mode];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_allowsEmptySelection];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_selectionByRect];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_autosizesCells];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_autoscroll];
_cellSize = [aDecoder decodeSize];
_intercell = [aDecoder decodeSize];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_backgroundColor];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_cellBackgroundColor];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_drawsBackground];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_drawsCellBackground];
[self putCell:cell atRow: row column: column];
if ([cell state])
{
[self selectCellAtRow: row column: column];
}
}
class = NSClassFromString ((NSString *)[aDecoder decodeObject]);
if (class != Nil)
{
[self setCellClass: class];
}
cell = [aDecoder decodeObject];
if (cell != nil)
{
[self setPrototype: cell];
}
if (_cellPrototype == nil)
{
[self setCellClass: [isa cellClass]];
}
[aDecoder decodeValueOfObjCType: @encode (int) at: &rows];
[aDecoder decodeValueOfObjCType: @encode (int) at: &columns];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_delegate];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_target];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_action];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_doubleAction];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_errorAction];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_tabKeyTraversesCells];
[self setKeyCell: [aDecoder decodeObject]];
/* NB: This works without changes for NSForm */
array = [aDecoder decodeObject];
[self renewRows: rows columns: columns];
count = [array count];
if (count != rows * columns)
{
NSLog (@"Trying to decode an invalid NSMatrix: cell number does not fit matrix dimension");
// Quick fix to do what we can
if (count > rows * columns)
{
count = rows * columns;
}
}
_selectedRow = _selectedColumn = 0;
for (i = 0; i < count; i++)
{
int row, column;
cell = [array objectAtIndex: i];
row = i / columns;
column = i % columns;
[self putCell:cell atRow: row column: column];
if ([cell state])
{
[self selectCellAtRow: row column: column];
}
}
[aDecoder decodeValueOfObjCType: @encode (id) at: &_delegate];
[aDecoder decodeValueOfObjCType: @encode (id) at: &_target];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_action];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_doubleAction];
[aDecoder decodeValueOfObjCType: @encode (SEL) at: &_errorAction];
[aDecoder decodeValueOfObjCType: @encode (BOOL) at: &_tabKeyTraversesCells];
[self setKeyCell: [aDecoder decodeObject]];
}
return self;
}