Add a bit more code to the classes to make them usable.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@25886 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2008-01-07 17:22:49 +00:00
parent 83a6e40893
commit b9419b8387
2 changed files with 238 additions and 33 deletions

View file

@ -1,3 +1,7 @@
2008-01-07 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSSegmentedCell.m: Added a bit more code.
2008-01-07 09:33-EST Gregory John Casamento <greg_casamento@yahoo.com>
* Headers/AppKit/AppKit.h

View file

@ -23,18 +23,17 @@
* USA.
*/
#include <AppKit/NSSegmentedCell.h>
#include <AppKit/NSMenu.h>
#include <AppKit/NSImage.h>
#include <Foundation/NSArray.h>
#include <Foundation/NSEnumerator.h>
#include <Foundation/NSException.h>
#include <AppKit/NSImage.h>
#include <AppKit/NSMenu.h>
#include <AppKit/NSSegmentedCell.h>
@interface NSSegmentItem : NSObject
{
BOOL _selected;
BOOL _enabled;
BOOL _is_key;
int _tag;
float _width;
NSMenu *_menu;
@ -47,8 +46,6 @@
- (void) setSelected: (BOOL)flag;
- (BOOL) isSelected;
- (void) setSelected: (BOOL)flag;
- (BOOL) isKey;
- (void) setKey: (BOOL)flag;
- (NSMenu *) menu;
- (void) setMenu: (NSMenu *)menu;
- (NSString *) label;
@ -64,6 +61,24 @@
@end
@implementation NSSegmentItem
- (id) init
{
self = [super init];
return self;
}
- (void) dealloc
{
TEST_RELEASE(_label);
TEST_RELEASE(_image);
TEST_RELEASE(_menu);
TEST_RELEASE(_tool_tip);
[super dealloc];
}
- (BOOL) isSelected
{
return _selected;
@ -84,16 +99,6 @@
_enabled = flag;
}
- (BOOL) isKey
{
return _is_key;
}
- (void) setKey: (BOOL)flag
{
_is_key = flag;
}
- (NSMenu *) menu
{
return _menu;
@ -101,7 +106,7 @@
- (void) setMenu: (NSMenu *)menu
{
_menu = menu;
ASSIGN(_menu, menu);
}
- (NSString *) label
@ -153,13 +158,135 @@
{
_width = width;
}
- (void) encodeWithCoder:(NSCoder *) aCoder
{
if ([aCoder allowsKeyedCoding])
{
if (_label != nil)
[aCoder encodeObject: _label forKey: @"NSSegmentItemLabel"];
if (_image != nil)
[aCoder encodeObject: _image forKey: @"NSSegmentItemImage"];
if (_menu != nil)
[aCoder encodeObject: _menu forKey: @"NSSegmentItemMenu"];
if (_enabled)
[aCoder encodeBool: YES forKey: @"NSSegmentItemEnabled"];
else
[aCoder encodeBool: YES forKey: @"NSSegmentItemDisabled"];
if (_selected)
[aCoder encodeBool: YES forKey: @"NSSegmentItemSelected"];
if (_width != 0.0)
[aCoder encodeFloat: _width forKey: @"NSSegmentItemWidth"];
if (_tag != 0)
[aCoder encodeInt: _tag forKey: @"NSSegmentItemTag"];
}
else
{
// FIXME
}
}
- (id) initWithCoder: (NSCoder *)aDecoder
{
if ([aDecoder allowsKeyedCoding])
{
if ([aDecoder containsValueForKey: @"NSSegmentItemLabel"])
[self setLabel: [aDecoder decodeObjectForKey: @"NSSegmentItemLabel"]];
if ([aDecoder containsValueForKey: @"NSSegmentItemImage"])
[self setImage: [aDecoder decodeObjectForKey: @"NSSegmentItemImage"]];
if ([aDecoder containsValueForKey: @"NSSegmentItemMenu"])
[self setMenu: [aDecoder decodeObjectForKey: @"NSSegmentItemMenu"]];
if ([aDecoder containsValueForKey: @"NSSegmentItemEnabled"])
_enabled = [aDecoder decodeBoolForKey: @"NSSegmentItemEnabled"];
else if ([aDecoder containsValueForKey: @"NSSegmentItemDisabled"])
_enabled = ![aDecoder decodeBoolForKey: @"NSSegmentItemDisabled"];
else
_enabled = YES;
if ([aDecoder containsValueForKey: @"NSSegmentItemSelected"])
_selected = [aDecoder decodeBoolForKey: @"NSSegmentItemSelected"];
if ([aDecoder containsValueForKey: @"NSSegmentItemWidth"])
_width = [aDecoder decodeFloatForKey: @"NSSegmentItemWidth"];
if ([aDecoder containsValueForKey: @"NSSegmentItemTag"])
_tag = [aDecoder decodeIntForKey: @"NSSegmentItemTag"];
}
else
{
// FIXME
}
return self;
}
@end
@implementation NSSegmentedCell
// Specifying number of segments...
- (void) setSegmentCount: (int) count
- (id) initImageCell: (NSImage*)anImage
{
self = [super initImageCell: anImage];
if (!self)
return nil;
_items = [[NSMutableArray alloc] initWithCapacity: 2];
_selected_segment = -1;
return self;
}
- (id) initTextCell: (NSString*)aString
{
self = [super initTextCell: aString];
if (!self)
return nil;
_items = [[NSMutableArray alloc] initWithCapacity: 2];
_selected_segment = -1;
return self;
}
- (id) copyWithZone: (NSZone *)zone;
{
NSSegmentedCell *c = (NSSegmentedCell *)[super copyWithZone: zone];
if (c)
{
// FIXME: Need a deep copy here
c->_items = [_items copyWithZone: zone];
}
return c;
}
- (void) dealloc
{
TEST_RELEASE(_items);
[super dealloc];
}
// Specifying number of segments...
- (void) setSegmentCount: (int)count
{
int size;
if ((count < 0) || (count > 2048))
{
[NSException raise: NSRangeException
format: @"Illegal segment count."];
}
size = [_items count];
if (count < size)
[_items removeObjectsInRange: NSMakeRange(count, size - count)];
while (count-- > size)
{
NSSegmentItem *item = [[NSSegmentItem alloc] init];
[_items addObject: item];
RELEASE(item);
}
}
- (int) segmentCount
@ -168,15 +295,20 @@
}
// Specifying selected segment...
- (void) setSelectedSegment: (int) segment
- (void) setSelectedSegment: (int)segment
{
_selected_segment = segment;
[self setSelected: YES forSegment: segment];
}
- (void) setSelected: (BOOL)flag forSegment: (int)seg
{
NSSegmentItem *segment = [_items objectAtIndex: seg];
[segment setSelected: flag];
if (flag)
_selected_segment = seg;
else if (seg == _selected_segment)
_selected_segment = -1;
}
- (int) selectedSegment
@ -184,39 +316,54 @@
return _selected_segment;
}
- (void) selectSegmentWithTag: (int) tag
- (void) selectSegmentWithTag: (int)tag
{
NSEnumerator *en = [_items objectEnumerator];
id o = nil;
int segment = 0;
while((o = [en nextObject]) != nil)
while ((o = [en nextObject]) != nil)
{
if([o tag] == tag)
{
break;
}
{
break;
}
segment++;
}
[o setSelected: YES];
_selected_segment = segment;
[self setSelected: YES forSegment: segment];
}
- (void) makeNextSegmentKey
{
if(_selected_segment < [_items count])
int next;
if (_selected_segment < [_items count])
{
_selected_segment++;
next = _selected_segment + 1;
}
else
{
next = 0;
}
[self setSelected: NO forSegment: _selected_segment];
[self setSelected: YES forSegment: next];
}
- (void) makePreviousSegmentKey
{
if(_selected_segment > 0)
int prev;
if (_selected_segment > 0)
{
_selected_segment--;
prev = _selected_segment - 1;
}
else
{
prev = 0;
}
[self setSelected: NO forSegment: _selected_segment];
[self setSelected: YES forSegment: prev];
}
@ -329,4 +476,58 @@
withView: (NSView *)view
{
}
- (void) drawInteriorWithFrame: (NSRect)cellFrame
inView: (NSView*)controlView
{
int i;
unsigned int count = [_items count];
NSRect frame = cellFrame;
for (i = 0; i < count;i++)
{
frame.size.width = [[_items objectAtIndex: i] width];
[self drawSegment: i inFrame: frame withView: controlView];
frame.origin.x += frame.size.width;
if (frame.origin.x >= cellFrame.size.width)
break;
}
}
- (void) encodeWithCoder: (NSCoder*)aCoder
{
[super encodeWithCoder: aCoder];
if ([aCoder allowsKeyedCoding])
{
[aCoder encodeObject: _items forKey: @"NSSegmentImages"];
if (_selected_segment != -1)
[aCoder encodeInt: _selected_segment forKey: @"NSSelectedSegment"];
}
else
{
// FIXME
}
}
- (id) initWithCoder: (NSCoder*)aDecoder
{
self = [super initWithCoder: aDecoder];
if (!self)
return nil;
if ([aDecoder allowsKeyedCoding])
{
if ([aDecoder containsValueForKey: @"NSSegmentImages"])
ASSIGN(_items, [aDecoder decodeObjectForKey: @"NSSegmentImages"]);
if ([aDecoder containsValueForKey: @"NSSelectedSegment"])
_selected_segment = [aDecoder decodeIntForKey: @"NSSelectedSegment"];
}
else
{
// FIXME
}
return self;
}
@end