Adding implementation for NSSelection and skeletal implementation for NSOutlineView. GJC

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@11248 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2001-10-25 21:41:03 +00:00
parent 764d34c0c3
commit ef8619cb63
7 changed files with 493 additions and 11 deletions

View file

@ -1,3 +1,17 @@
Thu Oct 25 16:42:00 2001 Gregory John Casamento <greg_casamento@yahoo.com>
* Source/NSSelection.m implemented bodies of methods for NSSelection.
The behaviour implemented is identical to that observed when testing
NSSelection under OPENSTEP with the exception that I have replaced
the word "NeXT" with "GNUstep" in the selection marker descriptions.
* Source/NSOutlineView.m implelemented a skeletal version of this
class to be filled in later.
* Headers/NSOutlineView.h created a skeletal version of this header
to be filled in later.
* Headers/AppKit.h added #include for NSOutlineView.h.
* Source/GNUmakefile added reference to NSOutlineView.h and
NSOutlineView.m
Wed Oct 24 11:01:33 2001 Nicola Pero <nicola@brainstorm.co.uk>
* Source/NSBrowser.m ([NSBrowser -_getTitleOfColumn:]): Make sure

View file

@ -93,6 +93,7 @@
#include <AppKit/NSMenuView.h>
#include <AppKit/NSNibLoading.h>
#include <AppKit/NSOpenPanel.h>
#include <AppKit/NSOutlineView.h>
#include <AppKit/NSPageLayout.h>
#include <AppKit/NSPanel.h>
#include <AppKit/NSParagraphStyle.h>

View file

@ -0,0 +1,153 @@
/*
NSOutlineView.h
The outline class.
Copyright (C) 2001 Free Software Foundation, Inc.
Author: Gregory John Casamento <greg_casamento@yahoo.com>
Date: October 2001
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _GNUstep_H_NSOutlineView
#define _GNUstep_H_NSOutlineView
#include <AppKit/NSTableView.h>
@interface NSOutlineView : NSTableView
{
BOOL _resize;
BOOL _followsCell;
BOOL _autosave;
float _indentLevel;
NSTableColumn *_outlineTableColumn;
BOOL _shouldCollapse;
}
// Instance methods
- (BOOL)autoResizesOutlineColumn;
- (BOOL)autosaveExpandedItems;
- (void)collapseItem: (id)item;
- (void)collapseItem: (id)item collapseChildren: (BOOL)collapseChildren;
- (void)expandItem: (id)item;
- (void)expandItem:(id)item expandChildren:(BOOL)expandChildren;
- (BOOL)indentationMarkerFollowsCell;
- (float)indentationPerLevel;
- (BOOL)isExpandable: (id)item;
- (BOOL)isItemExpanded: (id)item;
- (id)itemAtRow: (int)row;
- (int)levelForItem: (id)item;
- (int)levelForRow:(int)row;
- (NSTableColumn *)outlineTableColumn;
- (void)reloadItem: (id)item;
- (void)reloadItem: (id)item reloadChildren: (BOOL)reloadChildren;
- (int)rowForItem: (id)item;
- (void)setAutoresizesOutlineColumn: (BOOL)resize;
- (void)setAutosaveExpandedItems: (BOOL)flag;
- (void)setDropItem:(id)item dropChildIndex: (int)index;
- (void)setIndentationMarkerFollowsCell: (BOOL)followsCell;
- (void)setIndentationPerLevel: (float)newIndentLevel;
- (void)setOutlineTableColumn: (NSTableColumn *)outlineTableColumn;
- (BOOL)shouldCollapseAutoExpandedItemsForDeposited: (BOOL)deposited;
@end /* interface of NSTableView */
/*
* Informal protocol NSOutlineViewDataSource
*/
@interface NSObject (NSOutlineViewDataSource)
- (BOOL)outlineView: (NSOutlineView *)outlineView
acceptDrop: (id <NSDraggingInfo>)info
item: (id)item
childIndex: (int)index;
- (id)outlineView: (NSOutlineView *)outlineView
child: (int)index
ofItem:(id)item;
- (BOOL)outlineView: (NSOutlineView *)outlineView
isItemExpandable: (id)item;
- (id)outlineView: (NSOutlineView *)outlineView
itemForPersistentObject:(id)object;
- (int)outlineView: (NSOutlineView *)outlineView
numberOfChildrenOfItem: (id)item;
- (id)outlineView: (NSOutlineView *)outlineView
objectValueForTableColumn:(NSTableColumn *)tableColumn
byItem:(id)item;
- (id)outlineView: (NSOutlineView *)outlineView
persistentObjectForItem: (id)item;
- (void)outlineView: (NSOutlineView *)outlineView
setObjectView: (id)object
forTableColumn: (NSTableColumn *)tableColumn;
- (NSDragOperation)outlineView: (NSOutlineView*)outlineView
validateDrop: (id <NSDraggingInfo>)info
proposedItem: (id)item proposedChildIndex:(int)index;
- (BOOL)outlineView: (NSOutlineView *)outlineView
writeItems: (NSArray*)items
toPasteboard: (NSPasteboard*)pboard;
@end
/*
* Constants
*/
enum { NSOutlineViewDropOnItemIndex = -1 };
/*
* Notifications
*/
APPKIT_EXPORT NSString *NSOutlineViewColumnDidMoveNotification;
APPKIT_EXPORT NSString *NSOutlineViewColumnDidResizeNotification;
APPKIT_EXPORT NSString *NSOutlineViewSelectionDidChangeNotification;
APPKIT_EXPORT NSString *NSOutlineViewSelectionIsChangingNotification;
APPKIT_EXPORT NSString *NSOutlineViewItemDidExpandNotification;
APPKIT_EXPORT NSString *NSOutlineViewItemDidCollapseNotification;
/*
* Methods Implemented by the Delegate
*/
@interface NSObject (NSOutlineViewDelegate)
- (BOOL) outlineView: (NSOutlineView *)aOutlineView
shouldEditTableColumn: (NSTableColumn *)aTableColumn
row: (int)rowIndex;
- (BOOL) outlineView: (NSOutlineView *)aOutlineView
shouldSelectRow: (int)rowIndex;
- (BOOL) outlineView: (NSOutlineView *)aOutlineView
shouldSelectTableColumn: (NSTableColumn *)aTableColumn;
- (void) outlineView: (NSOutlineView *)aOutlineView
willDisplayCell: (id)aCell
forTableColumn: (NSTableColumn *)aTableColumn
row: (int)rowIndex;
- (void) outlineViewColumnDidMove: (NSNotification *)aNotification;
- (void) outlineViewColumnDidResize: (NSNotification *)aNotification;
- (void) outlineViewSelectionDidChange: (NSNotification *)aNotification;
- (void) outlineViewSelectionIsChanging: (NSNotification *)aNotification;
- (void) outlineViewItemDidExpand: (NSNotification *)aNotification;
- (void) outlineViewItemDidCollapse: (NSNotification *)aNotification;
@end
#endif /* _GNUstep_H_NSOutlineView */

View file

@ -37,6 +37,10 @@
@interface NSSelection : NSObject <NSCoding>
{
// Attributes
@private
NSData *_descriptionData;
BOOL _isWellKnownSelection;
int _selectionType;
}
//

View file

@ -99,6 +99,7 @@ NSMenuView.m \
NSMenuItem.m \
NSMenuItemCell.m \
NSOpenPanel.m \
NSOutlineView.m \
NSObjectProtocols.m \
NSPageLayout.m \
NSPanel.m \
@ -251,6 +252,7 @@ NSNibConnector.h \
NSNibDeclarations.h \
NSNibLoading.h \
NSOpenPanel.h \
NSOutlineView.h \
NSPageLayout.h \
NSPanel.h \
NSParagraphStyle.h \

174
Source/NSOutlineView.m Normal file
View file

@ -0,0 +1,174 @@
/*
NSOutlineView.h
The outline class.
Copyright (C) 2001 Free Software Foundation, Inc.
Author: Gregory John Casamento <greg_casamento@yahoo.com>
Date: October 2001
This file is part of the GNUstep GUI Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <AppKit/NSOutlineView.h>
@implementation NSOutlineView
// Instance methods
- (id)init
{
[super init];
_resize = NO;
_followsCell = NO;
_autosave = NO;
_indentLevel = 0.0;
_outlineTableColumn = nil;
_shouldCollapse = NO;
return self;
}
- (BOOL)autoResizesOutlineColumn
{
return _resize;
}
- (BOOL)autosaveExpandedItems
{
return _autosave;
}
- (void)collapseItem: (id)item
{
// Nothing yet...
}
- (void)collapseItem: (id)item collapseChildren: (BOOL)collapseChildren
{
// Nothing yet...
}
- (void)expandItem: (id)item
{
// Nothing yet...
}
- (void)expandItem:(id)item expandChildren:(BOOL)expandChildren
{
// Nothing yet...
}
- (BOOL)indentationMarkerFollowsCell
{
return _followsCell;
}
- (float)indentationPerLevel
{
return _indentLevel;
}
- (BOOL)isExpandable: (id)item
{
// Nothing yet...
return NO;
}
- (BOOL)isItemExpanded: (id)item
{
// Nothing yet...
return NO;
}
- (id)itemAtRow: (int)row
{
// Nothing yet...
return nil;
}
- (int)levelForItem: (id)item
{
// Nothing yet...
return -1;
}
- (int)levelForRow: (int)row
{
// Nothing yet...
return -1;
}
- (NSTableColumn *)outlineTableColumn
{
return _outlineTableColumn;
}
- (void)reloadItem: (id)item
{
// Nothing yet...
}
- (void)reloadItem: (id)item reloadChildren: (BOOL)reloadChildren
{
// Nothing yet...
}
- (int)rowForItem: (id)item
{
// Nothing yet...
return -1;
}
- (void)setAutoresizesOutlineColumn: (BOOL)resize
{
_resize = resize;
}
- (void)setAutosaveExpandedItems: (BOOL)flag
{
_autosave = flag;
}
- (void)setDropItem:(id)item dropChildIndex: (int)index
{
// Nothing yet...
}
- (void)setIndentationMarkerFollowsCell: (BOOL)followsCell
{
_followsCell = followsCell;
}
- (void)setIndentationPerLevel: (float)newIndentLevel
{
_indentLevel = newIndentLevel;
}
- (void)setOutlineTableColumn: (NSTableColumn *)outlineTableColumn
{
_outlineTableColumn = outlineTableColumn;
}
- (BOOL)shouldCollapseAutoExpandedItemsForDeposited: (BOOL)deposited
{
return _shouldCollapse;
}
@end /* implementation of NSTableView */

View file

@ -1,10 +1,14 @@
/*
NSSelection.m
Description...
Description: NSSelection is used by NSDataLink to refer to a
selection within a document.
Copyright (C) 1996 Free Software Foundation, Inc.
Author: Gregory John Casamento <greg_casamento@yahoo.com>
Date: 2001
Author: Scott Christley <scottc@net-community.com>
Date: 1996
@ -27,10 +31,64 @@
*/
#include <gnustep/gui/config.h>
#include <Foundation/NSCoder.h>
#include <Foundation/NSData.h>
#include <AppKit/NSSelection.h>
#include <AppKit/NSPasteboard.h>
//
// Global instances of these selections
//
static NSSelection *_sharedAllSelection = nil;
static NSSelection *_sharedCurrentSelection = nil;
static NSSelection *_sharedEmptySelection = nil;
// Private methods and variables for NSSelection
typedef enum
{
GSCustomSelection,
GSAllSelection,
GSCurrentSelection,
GSEmptySelection
} GSSelectionType;
@interface NSSelection (PrivateMethods)
- (void)_setIsWellKnownSelection: (BOOL)wellknown;
- (GSSelectionType)_selectionType;
- (void)_setSelectionType: (GSSelectionType)type;
+ (NSSelection *)_wellKnownSelection: (char *)description;
@end
@implementation NSSelection (PrivateMethods)
- (void)_setIsWellKnownSelection: (BOOL)wellknown
{
_isWellKnownSelection = wellknown;
}
- (void)_setSelectionType: (GSSelectionType)type
{
_selectionType = type;
}
- (GSSelectionType)_selectionType
{
return _selectionType;
}
+ (NSSelection *)_wellKnownSelection: (char *)description
{
NSData *selectionData = [NSData dataWithBytes: description
length: strlen(description)];
NSSelection *selection =
[NSSelection selectionWithDescriptionData: selectionData];
[selection _setIsWellKnownSelection: YES];
return selection;
}
@end
@implementation NSSelection
//
// Class methods
//
@ -46,19 +104,41 @@
//
// Returning Special Selection Shared Instances
//
//
// NOTE: The description returned for each of these is similar to the one
// returned under OPENSTEP.
//
+ (NSSelection *)allSelection
{
return nil;
if(!_sharedAllSelection)
{
_sharedAllSelection =
[NSSelection _wellKnownSelection: "GNUstep All selection marker"];
[_sharedEmptySelection _setSelectionType: GSAllSelection];
}
return _sharedAllSelection;
}
+ (NSSelection *)currentSelection
{
return nil;
if(!_sharedCurrentSelection)
{
_sharedCurrentSelection =
[NSSelection _wellKnownSelection: "GNUstep Current selection marker"];
[_sharedCurrentSelection _setSelectionType: GSCurrentSelection];
}
return _sharedCurrentSelection;
}
+ (NSSelection *)emptySelection
{
return nil;
if(!_sharedEmptySelection)
{
_sharedEmptySelection =
[NSSelection _wellKnownSelection: "GNUstep Empty selection marker"];
[_sharedEmptySelection _setSelectionType: GSEmptySelection];
}
return _sharedEmptySelection;
}
//
@ -66,7 +146,9 @@
//
+ (NSSelection *)selectionWithDescriptionData:(NSData *)data
{
return nil;
NSSelection *selection =
AUTORELEASE([[NSSelection alloc] initWithDescriptionData: data]);
return selection;
}
//
@ -78,12 +160,21 @@
//
- (id)initWithDescriptionData:(NSData *)newData
{
return nil;
[super init];
ASSIGN(_descriptionData, newData);
_isWellKnownSelection = NO;
_selectionType = GSCustomSelection;
return self;
}
- (id)initWithPasteboard:(NSPasteboard *)pasteboard
{
return nil;
[super init];
ASSIGN(_descriptionData, [pasteboard dataForType: NSGeneralPboardType]);
_isWellKnownSelection = NO;
return self;
}
//
@ -91,29 +182,72 @@
//
- (NSData *)descriptionData
{
return nil;
return _descriptionData;
}
- (BOOL)isWellKnownSelection
{
return NO;
return _isWellKnownSelection;
}
//
// Writing a Selection to the Pasteboard
//
- (void)writeToPasteboard:(NSPasteboard *)pasteboard
{}
{
[pasteboard setData: _descriptionData
forType: NSGeneralPboardType];
}
//
// NSCoding protocol
//
- (void) encodeWithCoder: (NSCoder*)aCoder
{
[aCoder encodeValueOfObjCType: @encode(BOOL)
at: &_isWellKnownSelection];
[aCoder encodeValueOfObjCType: @encode(int)
at: &_selectionType];
[aCoder encodeValueOfObjCType: @encode(id)
at: _descriptionData];
}
- (id) initWithCoder: (NSCoder*)aDecoder
{
[super init];
[aDecoder decodeValueOfObjCType: @encode(BOOL)
at: &_isWellKnownSelection];
[aDecoder decodeValueOfObjCType: @encode(int)
at: &_selectionType];
// if it's a well known selection then determine which one it is.
if(_isWellKnownSelection)
{
switch(_selectionType)
{
case GSAllSelection:
RELEASE(self);
self = RETAIN([NSSelection allSelection]);
break;
case GSCurrentSelection:
RELEASE(self);
self = RETAIN([NSSelection currentSelection]);
break;
case GSEmptySelection:
RELEASE(self);
self = RETAIN([NSSelection emptySelection]);
break;
default:
// Shouldn't get here.
break;
}
}
else
{
[aDecoder decodeValueOfObjCType: @encode(id)
at: _descriptionData];
}
return self;
}