2023-03-08 15:43:41 +00:00
|
|
|
/*
|
|
|
|
NSTreeController.m
|
2013-08-19 19:10:22 +00:00
|
|
|
|
|
|
|
The tree controller class.
|
|
|
|
|
|
|
|
Copyright (C) 2012 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
Author: Gregory Casamento <greg.casamento@gmail.com>
|
|
|
|
Date: 2012
|
2023-03-08 15:43:41 +00:00
|
|
|
|
2013-08-19 19:10:22 +00:00
|
|
|
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 Lesser 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
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; see the file COPYING.LIB.
|
2023-03-08 15:43:41 +00:00
|
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
2013-08-19 19:10:22 +00:00
|
|
|
Boston, MA 02110-1301, USA.
|
2023-03-08 15:43:41 +00:00
|
|
|
*/
|
2013-08-19 19:10:22 +00:00
|
|
|
|
|
|
|
#import <Foundation/NSArray.h>
|
|
|
|
#import <Foundation/NSIndexPath.h>
|
2023-03-08 15:43:41 +00:00
|
|
|
#import <Foundation/NSKeyValueObserving.h>
|
2013-08-19 19:10:22 +00:00
|
|
|
#import <Foundation/NSString.h>
|
|
|
|
#import <Foundation/NSSortDescriptor.h>
|
|
|
|
|
2023-03-08 15:43:41 +00:00
|
|
|
#import "AppKit/NSKeyValueBinding.h"
|
|
|
|
#import "AppKit/NSTreeController.h"
|
|
|
|
#import "AppKit/NSTreeNode.h"
|
|
|
|
|
|
|
|
#import "GSBindingHelpers.h"
|
|
|
|
#import "GSFastEnumeration.h"
|
2012-02-29 15:32:09 +00:00
|
|
|
|
|
|
|
@implementation NSTreeController
|
|
|
|
|
2023-03-08 15:43:41 +00:00
|
|
|
+ (void) initialize
|
|
|
|
{
|
|
|
|
if (self == [NSTreeController class])
|
|
|
|
{
|
|
|
|
[self exposeBinding: NSContentArrayBinding];
|
|
|
|
[self setKeys: [NSArray arrayWithObjects: NSContentBinding, NSContentObjectBinding, nil]
|
|
|
|
triggerChangeNotificationsForDependentKey: @"arrangedObjects"];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-19 19:10:22 +00:00
|
|
|
- (id) initWithContent: (id)content
|
|
|
|
{
|
|
|
|
if ((self = [super initWithContent: content]) != nil)
|
|
|
|
{
|
2023-03-08 15:43:41 +00:00
|
|
|
_childrenKeyPath = nil;
|
|
|
|
_countKeyPath = nil;
|
|
|
|
_leafKeyPath = nil;
|
|
|
|
_sortDescriptors = nil;
|
2013-08-19 19:10:22 +00:00
|
|
|
}
|
2023-03-08 15:43:41 +00:00
|
|
|
|
2013-08-19 19:10:22 +00:00
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) dealloc
|
|
|
|
{
|
|
|
|
RELEASE(_childrenKeyPath);
|
|
|
|
RELEASE(_countKeyPath);
|
|
|
|
RELEASE(_leafKeyPath);
|
|
|
|
RELEASE(_sortDescriptors);
|
|
|
|
[super dealloc];
|
|
|
|
}
|
|
|
|
|
2023-03-01 18:19:27 +00:00
|
|
|
- (BOOL) addSelectionIndexPaths: (NSArray *)indexPaths
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) alwaysUsesMultipleValuesMarker
|
|
|
|
{
|
|
|
|
return _alwaysUsesMultipleValuesMarker;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) avoidsEmptySelection
|
|
|
|
{
|
|
|
|
return _avoidsEmptySelection;
|
|
|
|
}
|
|
|
|
|
2023-03-01 18:19:27 +00:00
|
|
|
- (BOOL) canAddChild
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) canInsert
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) canInsertChild
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) preservesSelection
|
|
|
|
{
|
|
|
|
return _preservesSelection;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (BOOL) selectsInsertedObjects
|
|
|
|
{
|
|
|
|
return _selectsInsertedObjects;
|
|
|
|
}
|
|
|
|
|
2023-03-01 18:19:27 +00:00
|
|
|
- (BOOL) setSelectionIndexPath: (NSIndexPath *)indexPath
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
2023-03-01 18:19:27 +00:00
|
|
|
- (BOOL) setSelectionIndexPaths: (NSArray *)indexPaths
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return NO;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (id) arrangedObjects
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
2023-03-01 18:19:27 +00:00
|
|
|
- (NSArray *) selectedObjects
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return [super selectedObjects];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSIndexPath*) selectionIndexPath
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSArray*) selectionIndexPaths
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSArray*) sortDescriptors
|
|
|
|
{
|
|
|
|
return _sortDescriptors;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) childrenKeyPath
|
|
|
|
{
|
|
|
|
return _childrenKeyPath;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) countKeyPath
|
|
|
|
{
|
|
|
|
return _countKeyPath;;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) leafKeyPath
|
|
|
|
{
|
|
|
|
return _leafKeyPath;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) addChild: (id)sender
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) add: (id)sender
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
[super add: sender];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) insertChild: (id)sender
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) insertObject: (id)object atArrangedObjectIndexPath: (NSIndexPath*)indexPath
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) insertObjects: (NSArray*)objects atArrangedObjectIndexPaths: (NSArray*)indexPaths
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) insert: (id)sender
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) rearrangeObjects
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) removeObjectAtArrangedObjectIndexPath: (NSIndexPath*)indexPath
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) removeObjectsAtArrangedObjectIndexPaths: (NSArray*)indexPaths
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) removeSelectionIndexPaths: (NSArray*)indexPaths
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) remove: (id)sender
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
[super remove: sender];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setAlwaysUsesMultipleValuesMarker: (BOOL)flag
|
|
|
|
{
|
|
|
|
_alwaysUsesMultipleValuesMarker = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setAvoidsEmptySelection: (BOOL)flag
|
|
|
|
{
|
|
|
|
_avoidsEmptySelection = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setChildrenKeyPath: (NSString*)path
|
|
|
|
{
|
|
|
|
ASSIGN(_childrenKeyPath, path);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setContent: (id)content
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
[super setContent: content];
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setCountKeyPath: (NSString*)path
|
|
|
|
{
|
|
|
|
ASSIGN(_countKeyPath, path);
|
|
|
|
}
|
|
|
|
|
2023-03-08 15:43:41 +00:00
|
|
|
- (void) setLeafKeyPath: (NSString*)key
|
2013-08-19 19:10:22 +00:00
|
|
|
{
|
|
|
|
ASSIGN(_leafKeyPath, key);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setPreservesSelection: (BOOL)flag
|
|
|
|
{
|
|
|
|
_preservesSelection = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setSelectsInsertedObjects: (BOOL)flag
|
|
|
|
{
|
|
|
|
_selectsInsertedObjects = flag;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) setSortDescriptors: (NSArray*)descriptors
|
|
|
|
{
|
|
|
|
ASSIGN(_sortDescriptors, descriptors);
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) childrenKeyPathForNode: (NSTreeNode*)node
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) countKeyPathForNode: (NSTreeNode*)node
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSString*) leafKeyPathForNode: (NSTreeNode*)node
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) moveNode: (NSTreeNode*)node toIndexPath: (NSIndexPath*)indexPath
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void) moveNodes: (NSArray*)nodes toIndexPath: (NSIndexPath*)startingIndexPath
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
- (NSArray*) selectedNodes
|
|
|
|
{
|
|
|
|
// FIXME
|
|
|
|
return nil;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (id) initWithCoder: (NSCoder*)coder
|
2012-02-29 15:32:09 +00:00
|
|
|
{
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2013-08-19 19:10:22 +00:00
|
|
|
- (void) encodeWithCoder: (NSCoder*)coder
|
2012-02-29 15:32:09 +00:00
|
|
|
{
|
|
|
|
// Do nothing...
|
|
|
|
}
|
|
|
|
|
2013-08-19 19:10:22 +00:00
|
|
|
- (id) copyWithZone: (NSZone*)zone
|
2012-02-29 15:32:09 +00:00
|
|
|
{
|
|
|
|
return [self retain];
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|