2003-07-31 23:52:10 +00:00
|
|
|
/*
|
|
|
|
NSBrowser.h
|
|
|
|
|
|
|
|
Control to display and select from hierarchal lists
|
|
|
|
|
|
|
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
Author: Scott Christley <scottc@net-community.com>
|
|
|
|
Date: 1996
|
|
|
|
|
|
|
|
This file is part of the GNUstep GUI Library.
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
2007-10-29 21:16:17 +00:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
2003-07-31 23:52:10 +00:00
|
|
|
License as published by the Free Software Foundation; either
|
2008-06-10 04:01:49 +00:00
|
|
|
version 2 of the License, or (at your option) any later version.
|
2007-10-29 21:16:17 +00:00
|
|
|
|
2003-07-31 23:52:10 +00:00
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
2007-10-29 21:16:17 +00:00
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
2003-07-31 23:52:10 +00:00
|
|
|
|
2007-10-29 21:16:17 +00:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2003-07-31 23:52:10 +00:00
|
|
|
License along with this library; see the file COPYING.LIB.
|
2007-10-29 21:16:17 +00:00
|
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
2006-11-06 13:58:37 +00:00
|
|
|
Boston, MA 02110-1301, USA.
|
2003-07-31 23:52:10 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _GNUstep_H_NSBrowser
|
|
|
|
#define _GNUstep_H_NSBrowser
|
2006-11-06 13:58:37 +00:00
|
|
|
#import <GNUstepBase/GSVersionMacros.h>
|
2003-07-31 23:52:10 +00:00
|
|
|
|
2010-03-24 22:41:21 +00:00
|
|
|
#import <AppKit/NSControl.h>
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
@class NSString;
|
|
|
|
@class NSArray;
|
2015-06-20 21:02:13 +00:00
|
|
|
@class NSIndexPath;
|
|
|
|
@class NSIndexSet;
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
@class NSCell;
|
2015-06-20 21:02:13 +00:00
|
|
|
@class NSEvent;
|
2003-07-31 23:52:10 +00:00
|
|
|
@class NSMatrix;
|
|
|
|
@class NSScroller;
|
|
|
|
//@class NSBox;
|
|
|
|
|
2007-07-28 13:41:18 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
2013-08-09 14:24:48 +00:00
|
|
|
enum _NSBrowserColumnResizingType
|
2007-07-28 13:41:18 +00:00
|
|
|
{
|
|
|
|
NSBrowserNoColumnResizing,
|
|
|
|
NSBrowserAutoColumnResizing,
|
|
|
|
NSBrowserUserColumnResizing
|
2013-08-09 14:24:48 +00:00
|
|
|
};
|
|
|
|
typedef NSUInteger NSBrowserColumnResizingType;
|
2007-07-28 13:41:18 +00:00
|
|
|
#endif
|
|
|
|
|
2003-07-31 23:52:10 +00:00
|
|
|
@interface NSBrowser : NSControl <NSCoding>
|
|
|
|
{
|
|
|
|
// Attributes
|
2008-02-02 21:01:43 +00:00
|
|
|
NSCell *_browserCellPrototype;
|
|
|
|
Class _browserMatrixClass;
|
2003-07-31 23:52:10 +00:00
|
|
|
NSString *_pathSeparator;
|
|
|
|
|
|
|
|
//NSBox *_horizontalScrollerBox;
|
|
|
|
NSScroller *_horizontalScroller;
|
|
|
|
NSTimeInterval _lastKeyPressed;
|
|
|
|
NSString *_charBuffer;
|
|
|
|
|
|
|
|
BOOL _isLoaded;
|
|
|
|
BOOL _allowsBranchSelection;
|
|
|
|
BOOL _allowsEmptySelection;
|
|
|
|
BOOL _allowsMultipleSelection;
|
|
|
|
BOOL _reusesColumns;
|
|
|
|
BOOL _separatesColumns;
|
|
|
|
BOOL _takesTitleFromPreviousColumn;
|
|
|
|
BOOL _isTitled;
|
|
|
|
BOOL _hasHorizontalScroller;
|
|
|
|
BOOL _skipUpdateScroller;
|
|
|
|
BOOL _acceptsArrowKeys;
|
|
|
|
BOOL _sendsActionOnArrowKeys;
|
|
|
|
BOOL _acceptsAlphaNumericalKeys;
|
|
|
|
BOOL _sendsActionOnAlphaNumericalKeys;
|
2007-07-28 13:41:18 +00:00
|
|
|
BOOL _prefersAllColumnUserResizing;
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
BOOL _passiveDelegate;
|
|
|
|
id _browserDelegate;
|
|
|
|
id _target;
|
|
|
|
SEL _action;
|
|
|
|
SEL _doubleAction;
|
|
|
|
NSMutableArray *_browserColumns;
|
|
|
|
NSSize _columnSize;
|
|
|
|
NSRect _scrollerRect;
|
|
|
|
int _alphaNumericalLastColumn;
|
|
|
|
int _maxVisibleColumns;
|
2013-08-09 14:24:48 +00:00
|
|
|
CGFloat _minColumnWidth;
|
2003-07-31 23:52:10 +00:00
|
|
|
int _lastColumnLoaded;
|
|
|
|
int _firstVisibleColumn;
|
|
|
|
int _lastVisibleColumn;
|
2007-07-28 13:41:18 +00:00
|
|
|
NSString *_columnsAutosaveName;
|
2013-08-09 14:24:48 +00:00
|
|
|
NSBrowserColumnResizingType _columnResizing;
|
2003-07-31 23:52:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Setting the Delegate
|
|
|
|
//
|
|
|
|
- (id) delegate;
|
|
|
|
- (void) setDelegate: (id)anObject;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Target and Action
|
|
|
|
//
|
|
|
|
- (SEL) doubleAction;
|
|
|
|
- (BOOL) sendAction;
|
|
|
|
- (void) setDoubleAction: (SEL)aSelector;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Setting Component Classes
|
|
|
|
//
|
|
|
|
+ (Class) cellClass;
|
|
|
|
- (id) cellPrototype;
|
|
|
|
- (Class) matrixClass;
|
|
|
|
- (void) setCellClass: (Class)classId;
|
|
|
|
- (void) setCellPrototype: (NSCell *)aCell;
|
|
|
|
- (void) setMatrixClass: (Class)classId;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Setting NSBrowser Behavior
|
|
|
|
//
|
|
|
|
- (BOOL) reusesColumns;
|
|
|
|
- (void) setReusesColumns: (BOOL)flag;
|
|
|
|
- (void) setTakesTitleFromPreviousColumn: (BOOL)flag;
|
|
|
|
- (BOOL) takesTitleFromPreviousColumn;
|
2015-06-20 21:02:13 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
|
|
|
|
- (BOOL) autohidesScroller;
|
|
|
|
- (void) setAutohidesScroller: (BOOL)flag;
|
|
|
|
- (NSColor *) backgroundColor;
|
|
|
|
- (void) setBackgroundColor: (NSColor *)backgroundColor;
|
|
|
|
#endif
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
|
|
|
|
- (BOOL) canDragRowsWithIndexes: (NSIndexSet *)rowIndexes
|
|
|
|
inColumn: (NSInteger)columnIndex
|
|
|
|
withEvent: (NSEvent *)dragEvent;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Allowing Different Types of Selection
|
|
|
|
//
|
|
|
|
- (BOOL) allowsBranchSelection;
|
|
|
|
- (BOOL) allowsEmptySelection;
|
|
|
|
- (BOOL) allowsMultipleSelection;
|
|
|
|
- (void) setAllowsBranchSelection: (BOOL)flag;
|
|
|
|
- (void) setAllowsEmptySelection: (BOOL)flag;
|
|
|
|
- (void) setAllowsMultipleSelection: (BOOL)flag;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Setting Arrow Key Behavior
|
|
|
|
//
|
|
|
|
- (BOOL) acceptsArrowKeys;
|
|
|
|
- (BOOL) sendsActionOnArrowKeys;
|
|
|
|
- (void) setAcceptsArrowKeys: (BOOL)flag;
|
|
|
|
- (void) setSendsActionOnArrowKeys: (BOOL)flag;
|
|
|
|
|
2015-06-20 21:02:13 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
|
|
|
|
- (BOOL) allowsTypeSelect;
|
|
|
|
- (void) setAllowsTypeSelect: (BOOL)allowsTypeSelection;
|
|
|
|
#endif
|
|
|
|
|
2003-07-31 23:52:10 +00:00
|
|
|
//
|
|
|
|
// Showing a Horizontal Scroller
|
|
|
|
//
|
|
|
|
- (void) setHasHorizontalScroller: (BOOL)flag;
|
|
|
|
- (BOOL) hasHorizontalScroller;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Setting the NSBrowser's Appearance
|
|
|
|
//
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSInteger) maxVisibleColumns;
|
|
|
|
- (CGFloat) minColumnWidth;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (BOOL) separatesColumns;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) setMaxVisibleColumns: (NSInteger)columnCount;
|
|
|
|
- (void) setMinColumnWidth: (CGFloat)columnWidth;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) setSeparatesColumns: (BOOL)flag;
|
2007-07-28 13:41:18 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
2013-08-09 14:24:48 +00:00
|
|
|
- (CGFloat) columnWidthForColumnContentWidth: (CGFloat)columnContentWidth;
|
|
|
|
- (CGFloat) columnContentWidthForColumnWidth: (CGFloat)columnWidth;
|
2007-07-28 13:41:18 +00:00
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Manipulating Columns
|
|
|
|
//
|
|
|
|
- (void) addColumn;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSInteger) columnOfMatrix: (NSMatrix *)matrix;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) displayAllColumns;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) displayColumn: (NSInteger)column;
|
|
|
|
- (NSInteger) firstVisibleColumn;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (BOOL) isLoaded;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSInteger) lastColumn;
|
|
|
|
- (NSInteger) lastVisibleColumn;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) loadColumnZero;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSInteger) numberOfVisibleColumns;
|
|
|
|
- (void) reloadColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) selectAll: (id)sender;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) selectRow: (NSInteger)row inColumn: (NSInteger)column;
|
|
|
|
- (NSInteger) selectedColumn;
|
|
|
|
- (NSInteger) selectedRowInColumn: (NSInteger)column;
|
|
|
|
- (void) setLastColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) validateVisibleColumns;
|
2015-06-20 21:02:13 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
|
|
|
|
- (NSIndexPath *) selectionIndexPath;
|
|
|
|
- (NSArray *) selectionIndexPaths;
|
|
|
|
- (void) setSelectionIndexPath: (NSIndexPath *)path;
|
|
|
|
- (void) setSelectionIndexPaths: (NSArray *)paths;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Manipulating Column Titles
|
|
|
|
//
|
|
|
|
- (void) drawTitle: (NSString *)title
|
|
|
|
inRect: (NSRect)aRect
|
2013-08-09 14:24:48 +00:00
|
|
|
ofColumn: (NSInteger)column;
|
2006-11-06 13:58:37 +00:00
|
|
|
#if OS_API_VERSION(GS_API_MACOSX, GS_API_LATEST)
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) drawTitleOfColumn: (NSInteger)column
|
2003-07-31 23:52:10 +00:00
|
|
|
inRect: (NSRect)aRect;
|
|
|
|
#endif
|
|
|
|
- (BOOL) isTitled;
|
|
|
|
- (void) setTitled: (BOOL)flag;
|
|
|
|
- (void) setTitle: (NSString *)aString
|
2013-08-09 14:24:48 +00:00
|
|
|
ofColumn: (NSInteger)column;
|
|
|
|
- (NSRect) titleFrameOfColumn: (NSInteger)column;
|
|
|
|
- (CGFloat) titleHeight;
|
|
|
|
- (NSString *) titleOfColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Scrolling an NSBrowser
|
|
|
|
//
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) scrollColumnsLeftBy: (NSInteger)shiftAmount;
|
|
|
|
- (void) scrollColumnsRightBy: (NSInteger)shiftAmount;
|
|
|
|
- (void) scrollColumnToVisible: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) scrollViaScroller: (NSScroller *)sender;
|
|
|
|
- (void) updateScroller;
|
2011-01-31 22:42:49 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
|
|
|
|
- (void) scrollRowToVisible: (NSInteger)row inColumn: (NSInteger)column;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Event Handling
|
|
|
|
//
|
|
|
|
- (void) doClick: (id)sender;
|
|
|
|
- (void) doDoubleClick: (id)sender;
|
2015-06-20 21:02:13 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST)
|
|
|
|
- (NSInteger) clickedColumn;
|
|
|
|
- (NSInteger) clickedRow;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Getting Matrices and Cells
|
|
|
|
//
|
2013-08-09 14:24:48 +00:00
|
|
|
- (id) loadedCellAtRow: (NSInteger)row
|
|
|
|
column: (NSInteger)column;
|
|
|
|
- (NSMatrix *) matrixInColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (id) selectedCell;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (id) selectedCellInColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (NSArray *) selectedCells;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Getting Column Frames
|
|
|
|
//
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSRect) frameOfColumn: (NSInteger)column;
|
|
|
|
- (NSRect) frameOfInsideOfColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Manipulating Paths
|
|
|
|
//
|
|
|
|
- (NSString *) path;
|
|
|
|
- (NSString *) pathSeparator;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (NSString *) pathToColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (BOOL) setPath: (NSString *)path;
|
|
|
|
- (void) setPathSeparator: (NSString *)aString;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Arranging an NSBrowser's Components
|
|
|
|
//
|
|
|
|
- (void) tile;
|
|
|
|
|
2007-07-28 13:41:18 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
|
|
|
//
|
|
|
|
// Resizing
|
|
|
|
//
|
|
|
|
- (NSBrowserColumnResizingType) columnResizingType;
|
|
|
|
- (void) setColumnResizingType:(NSBrowserColumnResizingType) type;
|
|
|
|
- (BOOL) prefersAllColumnUserResizing;
|
|
|
|
- (void) setPrefersAllColumnUserResizing: (BOOL)flag;
|
2013-08-09 14:24:48 +00:00
|
|
|
- (CGFloat) widthOfColumn: (NSInteger)column;
|
|
|
|
- (void) setWidth: (CGFloat)columnWidth ofColumn: (NSInteger)columnIndex;
|
2007-07-28 13:41:18 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// Autosave names
|
|
|
|
//
|
|
|
|
+ (void) removeSavedColumnsWithAutosaveName: (NSString *)name;
|
|
|
|
- (NSString *) columnsAutosaveName;
|
|
|
|
- (void) setColumnsAutosaveName: (NSString *)name;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
@end
|
|
|
|
|
|
|
|
//
|
|
|
|
// Controlling the alphanumerical keys behaviour
|
|
|
|
//
|
|
|
|
@interface NSBrowser (GNUstepExtensions)
|
|
|
|
- (BOOL)acceptsAlphaNumericalKeys;
|
|
|
|
- (void) setAcceptsAlphaNumericalKeys: (BOOL)flag;
|
|
|
|
- (BOOL) sendsActionOnAlphaNumericalKeys;
|
|
|
|
- (void) setSendsActionOnAlphaNumericalKeys: (BOOL)flag;
|
|
|
|
@end
|
|
|
|
|
|
|
|
//
|
|
|
|
// Methods Implemented by the Delegate
|
|
|
|
//
|
2015-06-20 21:02:13 +00:00
|
|
|
@protocol NSBrowserDelegate <NSObject>
|
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_6, GS_API_LATEST) && GS_PROTOCOLS_HAVE_OPTIONAL
|
|
|
|
@optional
|
|
|
|
#else
|
|
|
|
@end
|
2003-07-31 23:52:10 +00:00
|
|
|
@interface NSObject (NSBrowserDelegate)
|
2015-06-20 21:02:13 +00:00
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
2013-08-09 14:24:48 +00:00
|
|
|
- (void) browser: (NSBrowser *)sender createRowsForColumn: (NSInteger)column
|
2003-07-31 23:52:10 +00:00
|
|
|
inMatrix: (NSMatrix *)matrix;
|
2005-01-14 15:15:54 +00:00
|
|
|
/** Returns YES iff */
|
2013-08-09 14:24:48 +00:00
|
|
|
- (BOOL) browser: (NSBrowser *)sender isColumnValid: (NSInteger)column;
|
|
|
|
- (NSInteger) browser: (NSBrowser *)sender numberOfRowsInColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (BOOL) browser: (NSBrowser *)sender selectCellWithString: (NSString *)title
|
2013-08-09 14:24:48 +00:00
|
|
|
inColumn: (NSInteger)column;
|
|
|
|
- (BOOL) browser: (NSBrowser *)sender selectRow: (NSInteger)row inColumn: (NSInteger)column;
|
|
|
|
- (NSString *) browser: (NSBrowser *)sender titleOfColumn: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) browser: (NSBrowser *)sender
|
|
|
|
willDisplayCell: (id)cell
|
2013-08-09 14:24:48 +00:00
|
|
|
atRow: (NSInteger)row
|
|
|
|
column: (NSInteger)column;
|
2003-07-31 23:52:10 +00:00
|
|
|
- (void) browserDidScroll: (NSBrowser *)sender;
|
|
|
|
- (void) browserWillScroll: (NSBrowser *)sender;
|
|
|
|
|
2007-07-28 13:41:18 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
2013-08-09 14:24:48 +00:00
|
|
|
- (CGFloat) browser: (NSBrowser *)browser
|
|
|
|
shouldSizeColumn: (NSInteger)column
|
|
|
|
forUserResize: (BOOL)flag
|
|
|
|
toWidth: (CGFloat)width;
|
|
|
|
- (CGFloat) browser: (NSBrowser *)browser
|
|
|
|
sizeToFitWidthOfColumn: (NSInteger)column;
|
2007-07-28 13:41:18 +00:00
|
|
|
- (void) browserColumnConfigurationDidChange: (NSNotification *)notification;
|
|
|
|
#endif
|
2015-06-20 21:02:13 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_5, GS_API_LATEST)
|
|
|
|
- (BOOL) browser: (NSBrowser *)browser
|
|
|
|
canDragRowsWithIndexes: (NSIndexSet *)rowIndexes
|
|
|
|
inColumn: (NSInteger)column
|
|
|
|
withEvent: (NSEvent *)event;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
@end
|
|
|
|
|
2007-07-28 13:41:18 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_3, GS_API_LATEST)
|
|
|
|
APPKIT_EXPORT NSString *NSBrowserColumnConfigurationDidChangeNotification;
|
|
|
|
#endif
|
2003-07-31 23:52:10 +00:00
|
|
|
|
|
|
|
#endif // _GNUstep_H_NSBrowser
|