mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 12:00:52 +00:00
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:
parent
83a6e40893
commit
b9419b8387
2 changed files with 238 additions and 33 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue