mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-06-02 18:30:58 +00:00
* Source/NSButtonCell.m ([NSButtonCell -setCellAttribute:to:]):
implemented. ([NSButtonCell -cellAttribute:]): implemented. * Source/NSPopUpButton.m ([NSPopUpButton -keyDown:]): implemented keyboard selection. ([NSPopUpButton -resignFirstResponder]): implemented. ([NSPopUpButton -resignKeyWindow]): implemented. * Source/NSPopUpButtonCell.m ([NSPopUpButtonCell -drawInteriorWithFrame:inView:]): from -drawWithFrame:inView: * Source/NSButton.m ([NSButton -becomeFirstResponder]): set cell first responder. ([NSButton -resignFirstResponder]): likewise. ([NSButton -becomeKeyWindow]): likewise. ([NSButton -resignKeyWindow]): likewise. * Source/NSBrowserCell.m ([NSBrowserCell -drawInteriorWithFrame: inView:]): draw correct dotted box. * Source/NSBrowser.m ([NSBrowser -becomeFirstResponder]): make first responder the latest column. ([NSBrowser -acceptsFirstResponder]): accepts first responder status. ([NSBrowser -keyDown:]): handle tabs to select next/previous key view. ([NSBrowser -moveRight:]): make browser column the first responder. ([NSBrowser -moveUp:]): likewise. ([NSBrowser -moveDown:]): likewise. ([NSBrowser -moveLeft:]): likewise. ([NSBrowser -_unloadFromColumn:]): remove columns from superview and array. ([NSBrowser -_remapColumnSubviews:]): set the correct first responder. * Source/NSWindow.m ([NSWindow -sendEvent:]): retain/release first responder for keyUp/keyDown events. Discard NSLeftMouseDown for closed windows. ([NSWindow -dealloc]): release _originalResponder * Source/NSView.m ([NSView -removeSubview:]): remove next responder. * Source/NSCell.m ([NSCell -setUpFieldEditorAttributes:]): clear selected range. ([NSCell -editWithFrame:inView:editor:delegate:event:]): redisplay textObject after invoking mouseDown: ([NSCell -drawInteriorWithFrame:inView:]): draw dotted-line outline when first responder. ([NSCell -setCellAttribute:to:]): implemented. * Source/NSTextView.m ([NSTextView -moveUp:]): don't call _illegalMovement: for the text field editor. ([NSTextView -moveDown:]): likewise. ([NSTextView -moveLeft:]): likewise. ([NSTextView -moveRight:]): likewise. * Source/NSTextField.m ([NSTextField -textDidEndEditing:]): fixed return/tab/backtab text movement code. * Headers/gnustep/gui/NSGraphics.h: added NSDottedFrameRect prototype. * Headers/gnustep/gui/NSMatrix.h: added ivars for dotted frame rect. * Source/NSMatrix.m ([NSMatrix -selectCell:]): implemented. ([NSMatrix -_selectCell:atRow:column:]): new method. ([NSMatrix -selectCellAtRow:column:]): call _selectCell:atRow:column: ([NSMatrix -selectCellWithTag:]): likewise. ([NSMatrix -selectAll:]): Do not select disabled or editable cells. ([NSMatrix -textDidEndEditing:]): fixed return/tab/backtab text movement code. ([NSMatrix -_selectNextSelectableCellAfterRow:column:]): don't select disabled cells. ([NSMatrix -_selectPreviousSelectableCellBeforeRow:column:]): likewise. ([NSMatrix -_privateFrame:mode:numberOfRows:numberOfColumns:]): set dottedRow and dottedColumn. ([NSMatrix -insertRow:withCells:]): likewise. ([NSMatrix -removeColumn:]): likewise. ([NSMatrix -removeRow:]): likewise. ([NSMatrix -mouseDown:]): likewise and discard disabled cells. ([NSMatrix -drawRect:]): set shows cell first responder. ([NSMatrix -becomeFirstResponder]): draw dotted box for cell. ([NSMatrix -resignFirstResponder]): likewise. ([NSMatrix -becomeKeyWindow]): likewise. ([NSMatrix -resignKeyWindow]): likewise. ([NSMatrix -_setNeedsDisplayDottedCell]): likewise. ([NSMatrix -selectTextAtRow:column:]): set shows cell first responder. ([NSMatrix -setState:atRow:column:]): likewise. Deselect previous selected cell in radio mode. * Source/NSSavePanel.m (createRowsForColumn:): use _gsSavePanelCompare: and check extension against _requiredFileType and not "app", "bundle", etc. ([NSString -_gsSavePanelCompare:]): filename compare. ([NSSavePanel -_initWithoutGModel]): set key view for keyboard interaction. ([NSSavePanel -keyDown:]): removed. ([NSSavePanel -controlTextDidEndEditing:]): removed. * Source/NSOpenPanel.m ([NSOpenPanel -_shouldShowExtension:isDir:]): added isDir argument. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@9473 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
96b026ab00
commit
5a0ddcdeba
17 changed files with 1001 additions and 290 deletions
100
ChangeLog
100
ChangeLog
|
@ -1,3 +1,103 @@
|
||||||
|
2001-03-22 Mirko Viviani <mirko.viviani@rccr.cremona.it>
|
||||||
|
|
||||||
|
* Source/NSButtonCell.m ([NSButtonCell -setCellAttribute:to:]):
|
||||||
|
implemented.
|
||||||
|
([NSButtonCell -cellAttribute:]): implemented.
|
||||||
|
|
||||||
|
* Source/NSPopUpButton.m ([NSPopUpButton -keyDown:]): implemented
|
||||||
|
keyboard selection.
|
||||||
|
([NSPopUpButton -resignFirstResponder]): implemented.
|
||||||
|
([NSPopUpButton -resignKeyWindow]): implemented.
|
||||||
|
|
||||||
|
* Source/NSPopUpButtonCell.m ([NSPopUpButtonCell
|
||||||
|
-drawInteriorWithFrame:inView:]): from -drawWithFrame:inView:
|
||||||
|
|
||||||
|
* Source/NSButton.m ([NSButton -becomeFirstResponder]): set cell first
|
||||||
|
responder.
|
||||||
|
([NSButton -resignFirstResponder]): likewise.
|
||||||
|
([NSButton -becomeKeyWindow]): likewise.
|
||||||
|
([NSButton -resignKeyWindow]): likewise.
|
||||||
|
|
||||||
|
* Source/NSBrowserCell.m ([NSBrowserCell -drawInteriorWithFrame:
|
||||||
|
inView:]): draw correct dotted box.
|
||||||
|
|
||||||
|
* Source/NSBrowser.m ([NSBrowser -becomeFirstResponder]): make first
|
||||||
|
responder the latest column.
|
||||||
|
([NSBrowser -acceptsFirstResponder]): accepts first responder status.
|
||||||
|
([NSBrowser -keyDown:]): handle tabs to select next/previous key view.
|
||||||
|
([NSBrowser -moveRight:]): make browser column the first responder.
|
||||||
|
([NSBrowser -moveUp:]): likewise.
|
||||||
|
([NSBrowser -moveDown:]): likewise.
|
||||||
|
([NSBrowser -moveLeft:]): likewise.
|
||||||
|
([NSBrowser -_unloadFromColumn:]): remove columns from superview and
|
||||||
|
array.
|
||||||
|
([NSBrowser -_remapColumnSubviews:]): set the correct first responder.
|
||||||
|
|
||||||
|
* Source/NSWindow.m ([NSWindow -sendEvent:]): retain/release first
|
||||||
|
responder for keyUp/keyDown events. Discard NSLeftMouseDown for closed
|
||||||
|
windows.
|
||||||
|
([NSWindow -dealloc]): release _originalResponder
|
||||||
|
|
||||||
|
* Source/NSView.m ([NSView -removeSubview:]): remove next responder.
|
||||||
|
|
||||||
|
* Source/NSCell.m ([NSCell -setUpFieldEditorAttributes:]): clear
|
||||||
|
selected range.
|
||||||
|
([NSCell -editWithFrame:inView:editor:delegate:event:]): redisplay
|
||||||
|
textObject after invoking mouseDown:
|
||||||
|
([NSCell -drawInteriorWithFrame:inView:]): draw dotted-line outline
|
||||||
|
when first responder.
|
||||||
|
([NSCell -setCellAttribute:to:]): implemented.
|
||||||
|
|
||||||
|
* Source/NSTextView.m ([NSTextView -moveUp:]): don't call
|
||||||
|
_illegalMovement: for the text field editor.
|
||||||
|
([NSTextView -moveDown:]): likewise.
|
||||||
|
([NSTextView -moveLeft:]): likewise.
|
||||||
|
([NSTextView -moveRight:]): likewise.
|
||||||
|
|
||||||
|
* Source/NSTextField.m ([NSTextField -textDidEndEditing:]): fixed
|
||||||
|
return/tab/backtab text movement code.
|
||||||
|
|
||||||
|
* Headers/gnustep/gui/NSGraphics.h: added NSDottedFrameRect prototype.
|
||||||
|
|
||||||
|
* Headers/gnustep/gui/NSMatrix.h: added ivars for dotted frame rect.
|
||||||
|
* Source/NSMatrix.m ([NSMatrix -selectCell:]): implemented.
|
||||||
|
([NSMatrix -_selectCell:atRow:column:]): new method.
|
||||||
|
([NSMatrix -selectCellAtRow:column:]): call _selectCell:atRow:column:
|
||||||
|
([NSMatrix -selectCellWithTag:]): likewise.
|
||||||
|
([NSMatrix -selectAll:]): Do not select disabled or editable cells.
|
||||||
|
([NSMatrix -textDidEndEditing:]): fixed return/tab/backtab text
|
||||||
|
movement code.
|
||||||
|
([NSMatrix -_selectNextSelectableCellAfterRow:column:]): don't select
|
||||||
|
disabled cells.
|
||||||
|
([NSMatrix -_selectPreviousSelectableCellBeforeRow:column:]): likewise.
|
||||||
|
([NSMatrix -_privateFrame:mode:numberOfRows:numberOfColumns:]): set
|
||||||
|
dottedRow and dottedColumn.
|
||||||
|
([NSMatrix -insertRow:withCells:]): likewise.
|
||||||
|
([NSMatrix -removeColumn:]): likewise.
|
||||||
|
([NSMatrix -removeRow:]): likewise.
|
||||||
|
([NSMatrix -mouseDown:]): likewise and discard disabled cells.
|
||||||
|
([NSMatrix -drawRect:]): set shows cell first responder.
|
||||||
|
([NSMatrix -becomeFirstResponder]): draw dotted box for cell.
|
||||||
|
([NSMatrix -resignFirstResponder]): likewise.
|
||||||
|
([NSMatrix -becomeKeyWindow]): likewise.
|
||||||
|
([NSMatrix -resignKeyWindow]): likewise.
|
||||||
|
([NSMatrix -_setNeedsDisplayDottedCell]): likewise.
|
||||||
|
([NSMatrix -selectTextAtRow:column:]): set shows cell first responder.
|
||||||
|
([NSMatrix -setState:atRow:column:]): likewise. Deselect previous
|
||||||
|
selected cell in radio mode.
|
||||||
|
|
||||||
|
* Source/NSSavePanel.m (createRowsForColumn:): use _gsSavePanelCompare:
|
||||||
|
and check extension against _requiredFileType and not "app", "bundle",
|
||||||
|
etc.
|
||||||
|
([NSString -_gsSavePanelCompare:]): filename compare.
|
||||||
|
([NSSavePanel -_initWithoutGModel]): set key view for keyboard
|
||||||
|
interaction.
|
||||||
|
([NSSavePanel -keyDown:]): removed.
|
||||||
|
([NSSavePanel -controlTextDidEndEditing:]): removed.
|
||||||
|
|
||||||
|
* Source/NSOpenPanel.m ([NSOpenPanel -_shouldShowExtension:isDir:]):
|
||||||
|
added isDir argument.
|
||||||
|
|
||||||
2001-03-21 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
2001-03-21 Richard Frith-Macdonald <richard@brainstorm.co.uk>
|
||||||
|
|
||||||
* Source/NSColor.m: Change archiving/unarchiving of colors to avoid
|
* Source/NSColor.m: Change archiving/unarchiving of colors to avoid
|
||||||
|
|
|
@ -105,6 +105,7 @@ NSRect NSDrawTiledRects(NSRect aRect, const NSRect clipRect,
|
||||||
const NSRectEdge *sides, const float *grays,
|
const NSRectEdge *sides, const float *grays,
|
||||||
int count);
|
int count);
|
||||||
void NSDrawWhiteBezel(const NSRect aRect, const NSRect clipRect);
|
void NSDrawWhiteBezel(const NSRect aRect, const NSRect clipRect);
|
||||||
|
void NSDottedFrameRect(const NSRect aRect);
|
||||||
void NSFrameRect(const NSRect aRect);
|
void NSFrameRect(const NSRect aRect);
|
||||||
void NSFrameRectWithWidth(const NSRect aRect, float frameWidth);
|
void NSFrameRectWithWidth(const NSRect aRect, float frameWidth);
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,8 @@ typedef enum _NSMatrixMode {
|
||||||
BOOL _autosizesCells;
|
BOOL _autosizesCells;
|
||||||
BOOL _autoscroll;
|
BOOL _autoscroll;
|
||||||
id _keyCell;
|
id _keyCell;
|
||||||
|
int _dottedRow;
|
||||||
|
int _dottedColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include <AppKit/NSTextFieldCell.h>
|
#include <AppKit/NSTextFieldCell.h>
|
||||||
#include <AppKit/PSOperators.h>
|
#include <AppKit/PSOperators.h>
|
||||||
#include <AppKit/NSEvent.h>
|
#include <AppKit/NSEvent.h>
|
||||||
|
#include <AppKit/NSWindow.h>
|
||||||
|
|
||||||
/* Cache */
|
/* Cache */
|
||||||
static float scrollerWidth; // == [NSScroller scrollerWidth]
|
static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
|
@ -767,7 +768,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
|
|
||||||
// Create a scrollview
|
// Create a scrollview
|
||||||
sc = [[NSScrollView alloc]
|
sc = [[NSScrollView alloc]
|
||||||
initWithFrame: rect];
|
initWithFrame: rect];
|
||||||
[sc setHasHorizontalScroller: NO];
|
[sc setHasHorizontalScroller: NO];
|
||||||
[sc setHasVerticalScroller: YES];
|
[sc setHasVerticalScroller: YES];
|
||||||
[bc setColumnScrollView: sc];
|
[bc setColumnScrollView: sc];
|
||||||
|
@ -780,6 +781,28 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
[self tile];
|
[self tile];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL) acceptsFirstResponder
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) becomeFirstResponder
|
||||||
|
{
|
||||||
|
NSMatrix *matrix;
|
||||||
|
int selectedColumn;
|
||||||
|
|
||||||
|
selectedColumn = [self selectedColumn];
|
||||||
|
if (selectedColumn == -1)
|
||||||
|
matrix = [self matrixInColumn: 0];
|
||||||
|
else
|
||||||
|
matrix = [self matrixInColumn: selectedColumn];
|
||||||
|
|
||||||
|
if (matrix)
|
||||||
|
[_window makeFirstResponder: matrix];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Updates the NSBrowser to display all loaded columns.
|
// Updates the NSBrowser to display all loaded columns.
|
||||||
//
|
//
|
||||||
|
@ -2092,7 +2115,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
|
|
||||||
if ([sender class] != _browserMatrixClass)
|
if ([sender class] != _browserMatrixClass)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
column = [self columnOfMatrix: sender];
|
column = [self columnOfMatrix: sender];
|
||||||
// If the matrix isn't ours then just return
|
// If the matrix isn't ours then just return
|
||||||
if (column == -1)
|
if (column == -1)
|
||||||
|
@ -2312,7 +2335,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
[NSStringFromRect(rect) cString]);
|
[NSStringFromRect(rect) cString]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[super initWithFrame: rect];
|
self = [super initWithFrame: rect];
|
||||||
|
|
||||||
// Class setting
|
// Class setting
|
||||||
_browserCellClass = [NSBrowser cellClass];
|
_browserCellClass = [NSBrowser cellClass];
|
||||||
|
@ -2518,7 +2541,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
|
|
||||||
- (void)moveUp:(id)sender
|
- (void)moveUp:(id)sender
|
||||||
{
|
{
|
||||||
if(_acceptsArrowKeys == YES)
|
if (_acceptsArrowKeys == YES)
|
||||||
{
|
{
|
||||||
NSArray *cells;
|
NSArray *cells;
|
||||||
NSMatrix *matrix;
|
NSMatrix *matrix;
|
||||||
|
@ -2527,29 +2550,30 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
||||||
|
|
||||||
selectedColumn = [self selectedColumn];
|
selectedColumn = [self selectedColumn];
|
||||||
if(selectedColumn == -1)
|
if (selectedColumn == -1)
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:0];
|
matrix = [self matrixInColumn: 0];
|
||||||
cells = [matrix cells];
|
cells = [matrix cells];
|
||||||
numberOfRows = [cells count];
|
numberOfRows = [cells count];
|
||||||
oldSelectedRow = selectedRow = numberOfRows - 1;
|
oldSelectedRow = selectedRow = numberOfRows - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:selectedColumn];
|
matrix = [self matrixInColumn: selectedColumn];
|
||||||
cells = [matrix cells];
|
cells = [matrix cells];
|
||||||
numberOfRows = [cells count];
|
numberOfRows = [cells count];
|
||||||
oldSelectedRow = selectedRow = [matrix selectedRow];
|
oldSelectedRow = selectedRow = [matrix selectedRow];
|
||||||
}
|
}
|
||||||
|
|
||||||
while(1)
|
while (1)
|
||||||
{
|
{
|
||||||
if(selectedColumn == -1)
|
if (selectedColumn == -1)
|
||||||
{
|
{
|
||||||
if(numberOfRows)
|
if (numberOfRows)
|
||||||
{
|
{
|
||||||
[matrix selectCellAtRow:selectedRow column:0];
|
[matrix selectCellAtRow: selectedRow column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
selectedColumn = 0;
|
selectedColumn = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2557,7 +2581,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!selectedRow)
|
if (!selectedRow)
|
||||||
{
|
{
|
||||||
numberOfRows = [cells count];
|
numberOfRows = [cells count];
|
||||||
if(numberOfRows <= 1)
|
if(numberOfRows <= 1)
|
||||||
|
@ -2570,25 +2594,26 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
selectedRow--;
|
selectedRow--;
|
||||||
|
|
||||||
[matrix deselectAllCells];
|
[matrix deselectAllCells];
|
||||||
[matrix selectCellAtRow:selectedRow column:0];
|
[matrix selectCellAtRow: selectedRow column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedCell = [matrix selectedCell];
|
selectedCell = [matrix selectedCell];
|
||||||
|
|
||||||
if(selectedCell ||
|
if (selectedCell ||
|
||||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_sendsActionOnArrowKeys == YES)
|
if (_sendsActionOnArrowKeys == YES)
|
||||||
[super sendAction:_action to:_target];
|
[super sendAction: _action to: _target];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)moveDown:(id)sender
|
- (void)moveDown:(id)sender
|
||||||
{
|
{
|
||||||
if(_acceptsArrowKeys)
|
if (_acceptsArrowKeys)
|
||||||
{
|
{
|
||||||
NSArray *cells;
|
NSArray *cells;
|
||||||
NSMatrix *matrix;
|
NSMatrix *matrix;
|
||||||
|
@ -2597,28 +2622,29 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
||||||
|
|
||||||
selectedColumn = [self selectedColumn];
|
selectedColumn = [self selectedColumn];
|
||||||
if(selectedColumn == -1)
|
if (selectedColumn == -1)
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:0];
|
matrix = [self matrixInColumn: 0];
|
||||||
oldSelectedRow = selectedRow = 0;
|
oldSelectedRow = selectedRow = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:selectedColumn];
|
matrix = [self matrixInColumn: selectedColumn];
|
||||||
oldSelectedRow = selectedRow = [matrix selectedRow];
|
oldSelectedRow = selectedRow = [matrix selectedRow];
|
||||||
}
|
}
|
||||||
|
|
||||||
cells = [matrix cells];
|
cells = [matrix cells];
|
||||||
numberOfRows = [cells count];
|
numberOfRows = [cells count];
|
||||||
|
|
||||||
while(1)
|
while (1)
|
||||||
{
|
{
|
||||||
if(selectedColumn == -1)
|
if (selectedColumn == -1)
|
||||||
{
|
{
|
||||||
if(numberOfRows)
|
if (numberOfRows)
|
||||||
{
|
{
|
||||||
[matrix selectCellAtRow:0 column:0];
|
[matrix selectCellAtRow: 0 column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
selectedColumn = 0;
|
selectedColumn = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2628,9 +2654,9 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
{
|
{
|
||||||
selectedRow++;
|
selectedRow++;
|
||||||
|
|
||||||
if(selectedRow >= numberOfRows)
|
if (selectedRow >= numberOfRows)
|
||||||
{
|
{
|
||||||
if(numberOfRows <= 1)
|
if (numberOfRows <= 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
selectedRow = 0;
|
selectedRow = 0;
|
||||||
|
@ -2638,86 +2664,92 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
}
|
}
|
||||||
|
|
||||||
[matrix deselectAllCells];
|
[matrix deselectAllCells];
|
||||||
[matrix selectCellAtRow:selectedRow column:0];
|
[matrix selectCellAtRow: selectedRow column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedCell = [matrix selectedCell];
|
selectedCell = [matrix selectedCell];
|
||||||
|
|
||||||
if(selectedCell ||
|
if (selectedCell ||
|
||||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_sendsActionOnArrowKeys == YES)
|
if (_sendsActionOnArrowKeys == YES)
|
||||||
[super sendAction:_action to:_target];
|
[super sendAction: _action to: _target];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)moveLeft:(id)sender
|
- (void)moveLeft:(id)sender
|
||||||
{
|
{
|
||||||
if(_acceptsArrowKeys)
|
if (_acceptsArrowKeys)
|
||||||
{
|
{
|
||||||
NSMatrix *matrix;
|
NSMatrix *matrix;
|
||||||
NSCell *selectedCell;
|
NSCell *selectedCell;
|
||||||
int selectedRow, selectedColumn;
|
int selectedRow, selectedColumn;
|
||||||
|
|
||||||
selectedColumn = [self selectedColumn];
|
selectedColumn = [self selectedColumn];
|
||||||
if(selectedColumn >= 0)
|
if (selectedColumn >= 0)
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:selectedColumn];
|
matrix = [self matrixInColumn: selectedColumn];
|
||||||
selectedCell = [matrix selectedCell];
|
selectedCell = [matrix selectedCell];
|
||||||
selectedRow = [matrix selectedRow];
|
selectedRow = [matrix selectedRow];
|
||||||
|
|
||||||
[matrix deselectAllCells];
|
[matrix deselectAllCells];
|
||||||
|
|
||||||
if(selectedColumn+1 <= [self lastColumn])
|
if(selectedColumn+1 <= [self lastColumn])
|
||||||
[self setLastColumn:selectedColumn];
|
[self setLastColumn: selectedColumn];
|
||||||
|
|
||||||
if(_sendsActionOnArrowKeys == YES)
|
matrix = [self matrixInColumn: [self selectedColumn]];
|
||||||
[super sendAction:_action to:_target];
|
[_window makeFirstResponder: matrix];
|
||||||
|
|
||||||
|
if (_sendsActionOnArrowKeys == YES)
|
||||||
|
[super sendAction: _action to: _target];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)moveRight:(id)sender
|
- (void)moveRight:(id)sender
|
||||||
{
|
{
|
||||||
if(_acceptsArrowKeys)
|
if (_acceptsArrowKeys)
|
||||||
{
|
{
|
||||||
NSMatrix *matrix;
|
NSMatrix *matrix;
|
||||||
BOOL selectFirstRow = NO;
|
BOOL selectFirstRow = NO;
|
||||||
int selectedColumn;
|
int selectedColumn;
|
||||||
|
|
||||||
selectedColumn = [self selectedColumn];
|
selectedColumn = [self selectedColumn];
|
||||||
if(selectedColumn == -1)
|
if (selectedColumn == -1)
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:0];
|
matrix = [self matrixInColumn: 0];
|
||||||
|
|
||||||
if([[matrix cells] count])
|
if ([[matrix cells] count])
|
||||||
{
|
{
|
||||||
[matrix selectCellAtRow:0 column:0];
|
[matrix selectCellAtRow: 0 column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
selectedColumn = 0;
|
selectedColumn = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:selectedColumn];
|
matrix = [self matrixInColumn: selectedColumn];
|
||||||
selectFirstRow = YES;
|
selectFirstRow = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(selectFirstRow == YES)
|
if(selectFirstRow == YES)
|
||||||
{
|
{
|
||||||
matrix = [self matrixInColumn:[self lastColumn]];
|
matrix = [self matrixInColumn: [self lastColumn]];
|
||||||
if([[matrix cells] count])
|
if ([[matrix cells] count])
|
||||||
{
|
{
|
||||||
[matrix selectCellAtRow:0 column:0];
|
[matrix selectCellAtRow: 0 column: 0];
|
||||||
[self doClick:matrix];
|
[_window makeFirstResponder: matrix];
|
||||||
|
[self doClick: matrix];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_sendsActionOnArrowKeys == YES)
|
if (_sendsActionOnArrowKeys == YES)
|
||||||
[super sendAction:_action to:_target];
|
[super sendAction: _action to: _target];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2731,7 +2763,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
character = [characters characterAtIndex: 0];
|
character = [characters characterAtIndex: 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_acceptsArrowKeys)
|
if (_acceptsArrowKeys)
|
||||||
{
|
{
|
||||||
switch (character)
|
switch (character)
|
||||||
{
|
{
|
||||||
|
@ -2747,6 +2779,14 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
case NSRightArrowFunctionKey:
|
case NSRightArrowFunctionKey:
|
||||||
[self moveRight:self];
|
[self moveRight:self];
|
||||||
return;
|
return;
|
||||||
|
case NSTabCharacter:
|
||||||
|
{
|
||||||
|
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
||||||
|
[_window selectKeyViewPrecedingView: self];
|
||||||
|
else
|
||||||
|
[_window selectKeyViewFollowingView: self];
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2913,20 +2953,25 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
{
|
{
|
||||||
id bc, sc;
|
id bc, sc;
|
||||||
int i, count;
|
int i, count;
|
||||||
|
id firstResponder = nil;
|
||||||
|
BOOL setFirstResponder = NO;
|
||||||
|
|
||||||
#if defined NSBTRACE__remapColumnSubviews || defined NSBTRACE_all
|
#if defined NSBTRACE__remapColumnSubviews || defined NSBTRACE_all
|
||||||
fprintf(stderr, "NSBrowser - (void)_remapColumnSubviews: %d\n", fromFirst);
|
fprintf(stderr, "NSBrowser - (void)_remapColumnSubviews: %d\n", fromFirst);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Removes all column subviews.
|
// Removes all column subviews.
|
||||||
count = [_browserColumns count];
|
count = [_browserColumns count];
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
bc = [_browserColumns objectAtIndex: i];
|
bc = [_browserColumns objectAtIndex: i];
|
||||||
sc = [bc columnScrollView];
|
sc = [bc columnScrollView];
|
||||||
[sc removeFromSuperviewWithoutNeedingDisplay];
|
|
||||||
|
if (!firstResponder && [bc columnMatrix] == [_window firstResponder])
|
||||||
|
firstResponder = [bc columnMatrix];
|
||||||
|
if (sc)
|
||||||
|
[sc removeFromSuperviewWithoutNeedingDisplay];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_firstVisibleColumn > _lastVisibleColumn)
|
if (_firstVisibleColumn > _lastVisibleColumn)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2939,7 +2984,18 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
bc = [_browserColumns objectAtIndex: i];
|
bc = [_browserColumns objectAtIndex: i];
|
||||||
sc = [bc columnScrollView];
|
sc = [bc columnScrollView];
|
||||||
[self addSubview: sc];
|
[self addSubview: sc];
|
||||||
|
|
||||||
|
if ([bc columnMatrix] == firstResponder)
|
||||||
|
{
|
||||||
|
[_window makeFirstResponder: firstResponder];
|
||||||
|
setFirstResponder = YES;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (firstResponder && setFirstResponder == NO)
|
||||||
|
[_window makeFirstResponder:
|
||||||
|
[[_browserColumns objectAtIndex: _firstVisibleColumn]
|
||||||
|
columnMatrix]];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2948,7 +3004,18 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
bc = [_browserColumns objectAtIndex: i];
|
bc = [_browserColumns objectAtIndex: i];
|
||||||
sc = [bc columnScrollView];
|
sc = [bc columnScrollView];
|
||||||
[self addSubview: sc];
|
[self addSubview: sc];
|
||||||
|
|
||||||
|
if ([bc columnMatrix] == firstResponder)
|
||||||
|
{
|
||||||
|
[_window makeFirstResponder: firstResponder];
|
||||||
|
setFirstResponder = YES;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (firstResponder && setFirstResponder == NO)
|
||||||
|
[_window makeFirstResponder:
|
||||||
|
[[_browserColumns objectAtIndex: _lastVisibleColumn]
|
||||||
|
columnMatrix]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2966,8 +3033,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
fprintf(stderr, "NSBrowser - (void)_performLoadOfColumn: %d\n", column);
|
fprintf(stderr, "NSBrowser - (void)_performLoadOfColumn: %d\n", column);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!(bc = [_browserColumns objectAtIndex: column]))
|
bc = [_browserColumns objectAtIndex: column];
|
||||||
return;
|
|
||||||
|
|
||||||
if (!(sc = [bc columnScrollView]))
|
if (!(sc = [bc columnScrollView]))
|
||||||
return;
|
return;
|
||||||
|
@ -3072,19 +3138,22 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||||
count = [_browserColumns count];
|
count = [_browserColumns count];
|
||||||
for (i = column; i < count; ++i)
|
for (i = column; i < count; ++i)
|
||||||
{
|
{
|
||||||
if (!(bc = [_browserColumns objectAtIndex: i]))
|
bc = [_browserColumns objectAtIndex: i];
|
||||||
{
|
sc = [bc columnScrollView];
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ([bc isLoaded])
|
if ([bc isLoaded])
|
||||||
{
|
{
|
||||||
if (!(sc = [bc columnScrollView]))
|
|
||||||
continue;
|
|
||||||
// Make the column appear empty by removing the matrix
|
// Make the column appear empty by removing the matrix
|
||||||
[sc setDocumentView: nil];
|
if (sc)
|
||||||
[sc setNeedsDisplay: YES];
|
{
|
||||||
|
[sc setDocumentView: nil];
|
||||||
|
[sc setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
[bc setIsLoaded: NO];
|
[bc setIsLoaded: NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_reusesColumns && i >= _maxVisibleColumns)
|
||||||
|
[_browserColumns removeObject:bc];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (column == 0)
|
if (column == 0)
|
||||||
|
|
|
@ -220,6 +220,7 @@ static NSFont *_leafFont;
|
||||||
NSImage *image = nil;
|
NSImage *image = nil;
|
||||||
NSColor *backColor;
|
NSColor *backColor;
|
||||||
NSWindow *cvWin = [controlView window];
|
NSWindow *cvWin = [controlView window];
|
||||||
|
BOOL showsFirstResponder;
|
||||||
|
|
||||||
if (!cvWin)
|
if (!cvWin)
|
||||||
return;
|
return;
|
||||||
|
@ -244,6 +245,8 @@ static NSFont *_leafFont;
|
||||||
// Clear the background
|
// Clear the background
|
||||||
NSRectFill(cellFrame);
|
NSRectFill(cellFrame);
|
||||||
|
|
||||||
|
showsFirstResponder = _cell.shows_first_responder;
|
||||||
|
|
||||||
// Draw the branch image if there is one
|
// Draw the branch image if there is one
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
|
@ -290,9 +293,16 @@ static NSFont *_leafFont;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Draw image, or text
|
// Draw image, or text
|
||||||
|
_cell.shows_first_responder = NO;
|
||||||
|
|
||||||
[super drawInteriorWithFrame: title_rect inView: controlView];
|
[super drawInteriorWithFrame: title_rect inView: controlView];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (showsFirstResponder == YES)
|
||||||
|
NSDottedFrameRect(cellFrame);
|
||||||
|
|
||||||
|
_cell.shows_first_responder = showsFirstResponder;
|
||||||
|
|
||||||
[controlView unlockFocus];
|
[controlView unlockFocus];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -323,6 +323,34 @@ id _nsbuttonCellClass = nil;
|
||||||
return [self isEnabled];
|
return [self isEnabled];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL) becomeFirstResponder
|
||||||
|
{
|
||||||
|
[_cell setShowsFirstResponder: YES];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) resignFirstResponder
|
||||||
|
{
|
||||||
|
[_cell setShowsFirstResponder: NO];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) becomeKeyWindow
|
||||||
|
{
|
||||||
|
[_cell setShowsFirstResponder: YES];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) resignKeyWindow
|
||||||
|
{
|
||||||
|
[_cell setShowsFirstResponder: NO];
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) keyDown: (NSEvent*)theEvent
|
- (void) keyDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
if ([self isEnabled])
|
if ([self isEnabled])
|
||||||
|
|
|
@ -127,6 +127,79 @@
|
||||||
return _altContents;
|
return _altContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (int) cellAttribute: (NSCellAttribute)aParameter
|
||||||
|
{
|
||||||
|
int value = 0;
|
||||||
|
|
||||||
|
switch (aParameter)
|
||||||
|
{
|
||||||
|
case NSPushInCell:
|
||||||
|
if (_highlightsByMask & NSPushInCellMask)
|
||||||
|
value = 1;
|
||||||
|
break;
|
||||||
|
case NSChangeGrayCell:
|
||||||
|
if (_highlightsByMask & NSChangeGrayCellMask)
|
||||||
|
value = 1;
|
||||||
|
break;
|
||||||
|
case NSChangeBackgroundCell:
|
||||||
|
if (_highlightsByMask & NSChangeBackgroundCellMask)
|
||||||
|
value = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
value = [super cellAttribute: aParameter];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setCellAttribute: (NSCellAttribute)aParameter to: (int)value
|
||||||
|
{
|
||||||
|
switch (aParameter)
|
||||||
|
{
|
||||||
|
case NSPushInCell:
|
||||||
|
if (value)
|
||||||
|
_highlightsByMask |= NSPushInCellMask;
|
||||||
|
else
|
||||||
|
_highlightsByMask &= ~NSPushInCellMask;
|
||||||
|
break;
|
||||||
|
case NSChangeGrayCell:
|
||||||
|
if (value)
|
||||||
|
_highlightsByMask |= NSChangeGrayCellMask;
|
||||||
|
else
|
||||||
|
_highlightsByMask &= ~NSChangeGrayCellMask;
|
||||||
|
break;
|
||||||
|
case NSChangeBackgroundCell:
|
||||||
|
if (value)
|
||||||
|
_highlightsByMask |= NSChangeBackgroundCellMask;
|
||||||
|
else
|
||||||
|
_highlightsByMask &= ~NSChangeBackgroundCellMask;
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case NSCellLightsByContents:
|
||||||
|
_cell. = value;
|
||||||
|
break;
|
||||||
|
case NSCellChangesContents:
|
||||||
|
_cell. = value;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case NSCellLightsByGray:
|
||||||
|
if (value)
|
||||||
|
_highlightsByMask |= NSChangeGrayCellMask;
|
||||||
|
else
|
||||||
|
_highlightsByMask &= ~NSChangeGrayCellMask;
|
||||||
|
break;
|
||||||
|
case NSCellLightsByBackground:
|
||||||
|
if (value)
|
||||||
|
_highlightsByMask |= NSChangeBackgroundCellMask;
|
||||||
|
else
|
||||||
|
_highlightsByMask &= ~NSChangeBackgroundCellMask;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
[super setCellAttribute: aParameter to: value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void) setFont: (NSFont*)fontObject
|
- (void) setFont: (NSFont*)fontObject
|
||||||
{
|
{
|
||||||
// TODO Should change the size of the key equivalent font
|
// TODO Should change the size of the key equivalent font
|
||||||
|
@ -739,6 +812,16 @@
|
||||||
{
|
{
|
||||||
[self _drawText: titleToDisplay inFrame: titleRect];
|
[self _drawText: titleToDisplay inFrame: titleRect];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_cell.shows_first_responder
|
||||||
|
&& [[controlView window] firstResponder] == controlView)
|
||||||
|
{
|
||||||
|
if (_cell.is_bordered || _cell.is_bezeled)
|
||||||
|
NSDottedFrameRect(cellFrame);
|
||||||
|
else
|
||||||
|
NSDottedFrameRect(titleRect);
|
||||||
|
}
|
||||||
|
|
||||||
[controlView unlockFocus];
|
[controlView unlockFocus];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -395,7 +395,76 @@ static NSColor *shadowCol;
|
||||||
|
|
||||||
- (void) setCellAttribute: (NSCellAttribute)aParameter to: (int)value
|
- (void) setCellAttribute: (NSCellAttribute)aParameter to: (int)value
|
||||||
{
|
{
|
||||||
// TODO
|
switch (aParameter)
|
||||||
|
{
|
||||||
|
case NSCellDisabled:
|
||||||
|
_cell.is_disabled = value;
|
||||||
|
break;
|
||||||
|
case NSCellState:
|
||||||
|
_cell.state = value;
|
||||||
|
break;
|
||||||
|
case NSCellEditable:
|
||||||
|
_cell.is_editable = value;
|
||||||
|
break;
|
||||||
|
case NSCellHighlighted:
|
||||||
|
_cell.is_highlighted = value;
|
||||||
|
break;
|
||||||
|
case NSCellHasOverlappingImage:
|
||||||
|
if (value)
|
||||||
|
_cell.image_position = NSImageOverlaps;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_cell.image_position == NSImageOverlaps)
|
||||||
|
_cell.image_position = NSImageLeft;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NSCellHasImageHorizontal:
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
if (_cell.image_position != NSImageLeft
|
||||||
|
&& _cell.image_position != NSImageRight)
|
||||||
|
_cell.image_position = NSImageLeft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_cell.image_position == NSImageLeft)
|
||||||
|
_cell.image_position = NSImageAbove;
|
||||||
|
else if (_cell.image_position == NSImageRight)
|
||||||
|
_cell.image_position = NSImageBelow;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NSCellHasImageOnLeftOrBottom:
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
if (_cell.image_position == NSImageAbove)
|
||||||
|
_cell.image_position = NSImageBelow;
|
||||||
|
else
|
||||||
|
_cell.image_position = NSImageLeft;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_cell.image_position == NSImageBelow)
|
||||||
|
_cell.image_position = NSImageAbove;
|
||||||
|
else
|
||||||
|
_cell.image_position = NSImageRight;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
/*
|
||||||
|
case NSCellChangesContents:
|
||||||
|
_cell. = value;
|
||||||
|
break;
|
||||||
|
case NSCellIsInsetButton:
|
||||||
|
_cell. = value;
|
||||||
|
break;
|
||||||
|
*/
|
||||||
|
case NSCellIsBordered:
|
||||||
|
_cell.is_bordered = value;
|
||||||
|
break;
|
||||||
|
case NSCellAllowsMixedState:
|
||||||
|
_cell.allows_mixed_state = value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -714,6 +783,7 @@ static NSColor *shadowCol;
|
||||||
[textObject setSelectable: _cell.is_selectable || _cell.is_editable];
|
[textObject setSelectable: _cell.is_selectable || _cell.is_editable];
|
||||||
[textObject setRichText: _cell.is_rich_text];
|
[textObject setRichText: _cell.is_rich_text];
|
||||||
[textObject setImportsGraphics: _cell.imports_graphics];
|
[textObject setImportsGraphics: _cell.imports_graphics];
|
||||||
|
[textObject setSelectedRange: NSMakeRange(0, 0)];
|
||||||
|
|
||||||
return textObject;
|
return textObject;
|
||||||
}
|
}
|
||||||
|
@ -1438,11 +1508,6 @@ static NSColor *shadowCol;
|
||||||
|
|
||||||
[controlView lockFocus];
|
[controlView lockFocus];
|
||||||
|
|
||||||
/* TODO: Enable this when NSDottedFrameRect is implemented.
|
|
||||||
if (_cell.show_first_responder && [controlView isFirstResponder])
|
|
||||||
NSDottedFrameRect(cellFrame);
|
|
||||||
*/
|
|
||||||
|
|
||||||
switch (_cell.type)
|
switch (_cell.type)
|
||||||
{
|
{
|
||||||
case NSTextCellType:
|
case NSTextCellType:
|
||||||
|
@ -1480,6 +1545,11 @@ static NSColor *shadowCol;
|
||||||
case NSNullCellType:
|
case NSNullCellType:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_cell.shows_first_responder
|
||||||
|
&& [[controlView window] firstResponder] == controlView)
|
||||||
|
NSDottedFrameRect(cellFrame);
|
||||||
|
|
||||||
// NB: We don't do any highlighting to make it easier for subclasses
|
// NB: We don't do any highlighting to make it easier for subclasses
|
||||||
// to reuse this code while doing their own custom highlighting and
|
// to reuse this code while doing their own custom highlighting and
|
||||||
// prettyfying
|
// prettyfying
|
||||||
|
@ -1576,12 +1646,13 @@ static NSColor *shadowCol;
|
||||||
|
|
||||||
[textObject setDelegate: anObject];
|
[textObject setDelegate: anObject];
|
||||||
[[controlView window] makeFirstResponder: textObject];
|
[[controlView window] makeFirstResponder: textObject];
|
||||||
[textObject display];
|
|
||||||
|
|
||||||
if ([theEvent type] == NSLeftMouseDown)
|
if ([theEvent type] == NSLeftMouseDown)
|
||||||
{
|
{
|
||||||
[textObject mouseDown: theEvent];
|
[textObject mouseDown: theEvent];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[textObject display];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) endEditing: (NSText*)textObject
|
- (void) endEditing: (NSText*)textObject
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
Date: November 1999
|
Date: November 1999
|
||||||
Implementation of Editing: Nicola Pero <n.pero@mi.flashnet.it>
|
Implementation of Editing: Nicola Pero <n.pero@mi.flashnet.it>
|
||||||
Date: November 1999
|
Date: November 1999
|
||||||
|
Modified: Mirko Viviani <mirko.viviani@rccr.cremona.it>
|
||||||
|
Date: March 2001
|
||||||
|
|
||||||
This file is part of the GNUstep GUI Library.
|
This file is part of the GNUstep GUI Library.
|
||||||
|
|
||||||
|
@ -210,6 +212,7 @@ static SEL getSel;
|
||||||
[self setCellBackgroundColor: [NSColor controlBackgroundColor]];
|
[self setCellBackgroundColor: [NSColor controlBackgroundColor]];
|
||||||
[self setSelectionByRect: YES];
|
[self setSelectionByRect: YES];
|
||||||
[self setAutosizesCells: YES];
|
[self setAutosizesCells: YES];
|
||||||
|
_dottedRow = _dottedColumn = -1;
|
||||||
if (_mode == NSRadioModeMatrix && _numRows > 0 && _numCols > 0)
|
if (_mode == NSRadioModeMatrix && _numRows > 0 && _numCols > 0)
|
||||||
{
|
{
|
||||||
[self selectCellAtRow: 0 column: 0];
|
[self selectCellAtRow: 0 column: 0];
|
||||||
|
@ -437,6 +440,9 @@ static SEL getSel;
|
||||||
_selectedCells[row] = olds;
|
_selectedCells[row] = olds;
|
||||||
if (_selectedCell && (_selectedRow >= row))
|
if (_selectedCell && (_selectedRow >= row))
|
||||||
_selectedRow++;
|
_selectedRow++;
|
||||||
|
|
||||||
|
if (_dottedRow != -1 && _dottedRow >= row)
|
||||||
|
_dottedRow++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -452,7 +458,8 @@ static SEL getSel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_mode == NSRadioModeMatrix && !_allowsEmptySelection && _selectedCell == nil)
|
if (_mode == NSRadioModeMatrix && !_allowsEmptySelection
|
||||||
|
&& _selectedCell == nil)
|
||||||
[self selectCellAtRow: 0 column: 0];
|
[self selectCellAtRow: 0 column: 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -546,7 +553,14 @@ static SEL getSel;
|
||||||
if (col == _selectedColumn)
|
if (col == _selectedColumn)
|
||||||
{
|
{
|
||||||
_selectedCell = nil;
|
_selectedCell = nil;
|
||||||
[self selectCellAtRow: 0 column: 0];
|
[self selectCellAtRow: _selectedRow column: 0];
|
||||||
|
}
|
||||||
|
if (col == _dottedColumn)
|
||||||
|
{
|
||||||
|
if (_numCols && [_cells[_dottedRow][0] acceptsFirstResponder])
|
||||||
|
_dottedColumn = 0;
|
||||||
|
else
|
||||||
|
_dottedRow = _dottedColumn = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -585,7 +599,14 @@ static SEL getSel;
|
||||||
if (row == _selectedRow)
|
if (row == _selectedRow)
|
||||||
{
|
{
|
||||||
_selectedCell = nil;
|
_selectedCell = nil;
|
||||||
[self selectCellAtRow: 0 column: 0];
|
[self selectCellAtRow: 0 column: _selectedColumn];
|
||||||
|
}
|
||||||
|
if (row == _dottedRow)
|
||||||
|
{
|
||||||
|
if (_numRows && [_cells[0][_dottedColumn] acceptsFirstResponder])
|
||||||
|
_dottedRow = 0;
|
||||||
|
else
|
||||||
|
_dottedRow = _dottedColumn = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -782,10 +803,22 @@ static SEL getSel;
|
||||||
{
|
{
|
||||||
if (value)
|
if (value)
|
||||||
{
|
{
|
||||||
|
if (_selectedRow > -1 && _selectedColumn > -1)
|
||||||
|
{
|
||||||
|
_selectedCells[_selectedRow][_selectedColumn] = NO;
|
||||||
|
}
|
||||||
|
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
[_selectedCell setState: 1];
|
|
||||||
|
if ([_cells[_dottedRow][_dottedColumn] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
|
|
||||||
|
[_selectedCell setState: value];
|
||||||
_selectedCells[row][column] = YES;
|
_selectedCells[row][column] = YES;
|
||||||
}
|
}
|
||||||
else if (_allowsEmptySelection)
|
else if (_allowsEmptySelection)
|
||||||
|
@ -861,46 +894,37 @@ static SEL getSel;
|
||||||
{
|
{
|
||||||
unsigned i, j;
|
unsigned i, j;
|
||||||
|
|
||||||
|
_selectedCell = nil;
|
||||||
|
_selectedRow = -1;
|
||||||
|
_selectedColumn = -1;
|
||||||
|
|
||||||
for (i = 0; i < _numRows; i++)
|
for (i = 0; i < _numRows; i++)
|
||||||
{
|
{
|
||||||
for (j = 0; j < _numCols; j++)
|
for (j = 0; j < _numCols; j++)
|
||||||
{
|
{
|
||||||
[_cells[i][j] setState: 1];
|
if ([_cells[i][j] isEnabled] == YES
|
||||||
_selectedCells[i][j] = YES;
|
&& [_cells[i][j] isEditable] == NO)
|
||||||
}
|
{
|
||||||
}
|
_selectedCell = _cells[i][j];
|
||||||
|
[_selectedCell setState: 1];
|
||||||
|
_selectedCells[i][j] = YES;
|
||||||
|
|
||||||
/*
|
_selectedRow = i;
|
||||||
* Make the selected cell the last cell
|
_selectedColumn = j;
|
||||||
*/
|
}
|
||||||
if ((_numRows >0) && (_numCols > 0))
|
else
|
||||||
{
|
{
|
||||||
_selectedCell = [self cellAtRow: _numRows - 1 column: _numCols - 1];
|
_selectedCells[i][j] = NO;
|
||||||
_selectedRow = _numRows - 1;
|
[_cells[i][j] setShowsFirstResponder: NO];
|
||||||
_selectedColumn = _numCols - 1;
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_selectedCell = nil;
|
|
||||||
_selectedRow = -1;
|
|
||||||
_selectedColumn = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[self setNeedsDisplay: YES];
|
[self setNeedsDisplay: YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) selectCellAtRow: (int)row column: (int)column
|
- (void) _selectCell: (NSCell *)aCell atRow: (int)row column: (int)column
|
||||||
{
|
{
|
||||||
NSCell *aCell;
|
|
||||||
|
|
||||||
if ((row == -1) || (column == -1))
|
|
||||||
{
|
|
||||||
[self deselectAllCells];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
aCell = [self cellAtRow: row column: column];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We always deselect the current selection unless the new selection
|
* We always deselect the current selection unless the new selection
|
||||||
* is the same. (in NSRadioModeMatrix)
|
* is the same. (in NSRadioModeMatrix)
|
||||||
|
@ -916,10 +940,25 @@ static SEL getSel;
|
||||||
|
|
||||||
if (aCell != nil)
|
if (aCell != nil)
|
||||||
{
|
{
|
||||||
|
if (_selectedCell && _selectedCell != aCell)
|
||||||
|
{
|
||||||
|
[_selectedCell setShowsFirstResponder: NO];
|
||||||
|
[self setNeedsDisplayInRect: [self cellFrameAtRow: _selectedRow
|
||||||
|
column: _selectedColumn]];
|
||||||
|
}
|
||||||
|
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
_selectedCells[row][column] = YES;
|
_selectedCells[row][column] = YES;
|
||||||
|
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
[_selectedCell setShowsFirstResponder: YES];
|
||||||
|
}
|
||||||
|
|
||||||
[_selectedCell setState: 1];
|
[_selectedCell setState: 1];
|
||||||
|
|
||||||
// Note: we select the cell iff it is 'selectable', not 'editable'
|
// Note: we select the cell iff it is 'selectable', not 'editable'
|
||||||
|
@ -932,6 +971,30 @@ static SEL getSel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) selectCell: (NSCell *)aCell
|
||||||
|
{
|
||||||
|
int row, column;
|
||||||
|
|
||||||
|
if ([self getRow: &row column: &column ofCell: aCell] == YES)
|
||||||
|
[self _selectCell: aCell atRow: row column: column];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) selectCellAtRow: (int)row column: (int)column
|
||||||
|
{
|
||||||
|
NSCell *aCell;
|
||||||
|
|
||||||
|
if ((row == -1) || (column == -1))
|
||||||
|
{
|
||||||
|
[self deselectAllCells];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
aCell = [self cellAtRow: row column: column];
|
||||||
|
|
||||||
|
if (aCell)
|
||||||
|
[self _selectCell:aCell atRow: row column: column];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL) selectCellWithTag: (int)anInt
|
- (BOOL) selectCellWithTag: (int)anInt
|
||||||
{
|
{
|
||||||
id aCell;
|
id aCell;
|
||||||
|
@ -946,7 +1009,7 @@ static SEL getSel;
|
||||||
aCell = _cells[i][j];
|
aCell = _cells[i][j];
|
||||||
if ([aCell tag] == anInt)
|
if ([aCell tag] == anInt)
|
||||||
{
|
{
|
||||||
[self selectCellAtRow: i column: j];
|
[self _selectCell: aCell atRow: i column: j];
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1268,9 +1331,24 @@ static SEL getSel;
|
||||||
if ([t resignFirstResponder] == NO)
|
if ([t resignFirstResponder] == NO)
|
||||||
return nil;
|
return nil;
|
||||||
|
|
||||||
|
if (_selectedCell && _selectedCell != _cells[row][column])
|
||||||
|
{
|
||||||
|
[_selectedCell setShowsFirstResponder: NO];
|
||||||
|
[self setNeedsDisplayInRect: [self cellFrameAtRow: _selectedRow
|
||||||
|
column: _selectedColumn]];
|
||||||
|
}
|
||||||
|
|
||||||
_selectedCell = _cells[row][column];
|
_selectedCell = _cells[row][column];
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
[_selectedCell setShowsFirstResponder: YES];
|
||||||
|
}
|
||||||
|
|
||||||
/* See comment in NSTextField */
|
/* See comment in NSTextField */
|
||||||
length = [[_selectedCell stringValue] length];
|
length = [[_selectedCell stringValue] length];
|
||||||
_textObject = [_selectedCell setUpFieldEditorAttributes: t];
|
_textObject = [_selectedCell setUpFieldEditorAttributes: t];
|
||||||
|
@ -1412,7 +1490,11 @@ static SEL getSel;
|
||||||
switch ([(NSNumber *)textMovement intValue])
|
switch ([(NSNumber *)textMovement intValue])
|
||||||
{
|
{
|
||||||
case NSReturnTextMovement:
|
case NSReturnTextMovement:
|
||||||
[self sendAction];
|
if ([self sendAction] == NO)
|
||||||
|
{
|
||||||
|
if ([self performKeyEquivalent: [_window currentEvent]] == NO)
|
||||||
|
[self selectText: self];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NSTabTextMovement:
|
case NSTabTextMovement:
|
||||||
if (_tabKeyTraversesCells)
|
if (_tabKeyTraversesCells)
|
||||||
|
@ -1422,6 +1504,17 @@ static SEL getSel;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[_window selectKeyViewFollowingView: self];
|
[_window selectKeyViewFollowingView: self];
|
||||||
|
|
||||||
|
if ([_window firstResponder] == _window)
|
||||||
|
{
|
||||||
|
if (_tabKeyTraversesCells)
|
||||||
|
{
|
||||||
|
if([self _selectNextSelectableCellAfterRow: -1
|
||||||
|
column: -1])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
[self selectText: self];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NSBacktabTextMovement:
|
case NSBacktabTextMovement:
|
||||||
if (_tabKeyTraversesCells)
|
if (_tabKeyTraversesCells)
|
||||||
|
@ -1431,6 +1524,17 @@ static SEL getSel;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[_window selectKeyViewPrecedingView: self];
|
[_window selectKeyViewPrecedingView: self];
|
||||||
|
|
||||||
|
if ([_window firstResponder] == _window)
|
||||||
|
{
|
||||||
|
if (_tabKeyTraversesCells)
|
||||||
|
{
|
||||||
|
if([self _selectPreviousSelectableCellBeforeRow: _numRows
|
||||||
|
column: _numCols])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
[self selectText: self];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1595,12 +1699,23 @@ static SEL getSel;
|
||||||
if (col1 < 0)
|
if (col1 < 0)
|
||||||
col1 = 0;
|
col1 = 0;
|
||||||
|
|
||||||
|
if (_dottedRow != -1 && _dottedColumn != -1
|
||||||
|
&& [_cells[_dottedRow][_dottedColumn] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
[_cells[_dottedRow][_dottedColumn]
|
||||||
|
setShowsFirstResponder: ([_window isKeyWindow]
|
||||||
|
&& [_window firstResponder] == self)];
|
||||||
|
}
|
||||||
|
|
||||||
/* Draw the cells within the drawing rectangle. */
|
/* Draw the cells within the drawing rectangle. */
|
||||||
for (i = row1; i <= row2 && i < _numRows; i++)
|
for (i = row1; i <= row2 && i < _numRows; i++)
|
||||||
for (j = col1; j <= col2 && j < _numCols; j++)
|
for (j = col1; j <= col2 && j < _numCols; j++)
|
||||||
{
|
{
|
||||||
[self drawCellAtRow: i column: j];
|
[self drawCellAtRow: i column: j];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_dottedRow != -1 && _dottedColumn != -1)
|
||||||
|
[_cells[_dottedRow][_dottedColumn] setShowsFirstResponder: NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isOpaque
|
- (BOOL) isOpaque
|
||||||
|
@ -1931,40 +2046,48 @@ static SEL getSel;
|
||||||
column: &column
|
column: &column
|
||||||
forPoint: lastLocation])
|
forPoint: lastLocation])
|
||||||
{
|
{
|
||||||
if ((_mode == NSRadioModeMatrix) && _selectedCell != nil)
|
if ([_cells[row][column] isEnabled])
|
||||||
{
|
{
|
||||||
[_selectedCell setState: NSOffState];
|
if ((_mode == NSRadioModeMatrix) && _selectedCell != nil)
|
||||||
[self drawCellAtRow: _selectedRow column: _selectedColumn];
|
|
||||||
[_window flushWindow];
|
|
||||||
_selectedCells[_selectedRow][_selectedColumn] = NO;
|
|
||||||
_selectedCell = nil;
|
|
||||||
_selectedRow = _selectedColumn = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ([_cells[row][column] isSelectable])
|
|
||||||
{
|
|
||||||
NSText* t = [_window fieldEditor: YES forObject: self];
|
|
||||||
|
|
||||||
if ([t superview] != nil)
|
|
||||||
{
|
{
|
||||||
if ([t resignFirstResponder] == NO)
|
[_selectedCell setState: NSOffState];
|
||||||
{
|
[self drawCellAtRow: _selectedRow column: _selectedColumn];
|
||||||
if ([_window makeFirstResponder: _window] == NO)
|
[_window flushWindow];
|
||||||
return;
|
_selectedCells[_selectedRow][_selectedColumn] = NO;
|
||||||
}
|
_selectedCell = nil;
|
||||||
|
_selectedRow = _selectedColumn = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([_cells[row][column] isSelectable])
|
||||||
|
{
|
||||||
|
NSText* t = [_window fieldEditor: YES forObject: self];
|
||||||
|
|
||||||
|
if ([t superview] != nil)
|
||||||
|
{
|
||||||
|
if ([t resignFirstResponder] == NO)
|
||||||
|
{
|
||||||
|
if ([_window makeFirstResponder: _window] == NO)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// During editing, the selected cell is the cell being edited
|
||||||
|
_selectedCell = _cells[row][column];
|
||||||
|
_selectedRow = row;
|
||||||
|
_selectedColumn = column;
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
|
_textObject = [_selectedCell setUpFieldEditorAttributes: t];
|
||||||
|
[_selectedCell editWithFrame: [self cellFrameAtRow: row
|
||||||
|
column: column]
|
||||||
|
inView: self
|
||||||
|
editor: _textObject
|
||||||
|
delegate: self
|
||||||
|
event: theEvent];
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
// During editing, the selected cell is the cell being edited
|
|
||||||
_selectedCell = _cells[row][column];
|
|
||||||
_selectedRow = row;
|
|
||||||
_selectedColumn = column;
|
|
||||||
_textObject = [_selectedCell setUpFieldEditorAttributes: t];
|
|
||||||
[_selectedCell editWithFrame: [self cellFrameAtRow: row
|
|
||||||
column: column]
|
|
||||||
inView: self
|
|
||||||
editor: _textObject
|
|
||||||
delegate: self
|
|
||||||
event: theEvent];
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2008,7 +2131,7 @@ static SEL getSel;
|
||||||
{
|
{
|
||||||
aCell = [self cellAtRow: row column: column];
|
aCell = [self cellAtRow: row column: column];
|
||||||
rect = [self cellFrameAtRow: row column: column];
|
rect = [self cellFrameAtRow: row column: column];
|
||||||
if (aCell != previousCell)
|
if (aCell != previousCell && [aCell isEnabled] == YES)
|
||||||
{
|
{
|
||||||
switch (_mode)
|
switch (_mode)
|
||||||
{
|
{
|
||||||
|
@ -2019,6 +2142,11 @@ static SEL getSel;
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
if ([aCell trackMouse: lastEvent
|
if ([aCell trackMouse: lastEvent
|
||||||
inRect: rect
|
inRect: rect
|
||||||
ofView: self
|
ofView: self
|
||||||
|
@ -2034,6 +2162,11 @@ static SEL getSel;
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
[aCell highlight: YES withFrame: rect inView: self];
|
[aCell highlight: YES withFrame: rect inView: self];
|
||||||
[_window flushWindow];
|
[_window flushWindow];
|
||||||
|
|
||||||
|
@ -2069,6 +2202,11 @@ static SEL getSel;
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
[aCell setState: 1];
|
[aCell setState: 1];
|
||||||
[aCell highlight: YES withFrame: rect inView: self];
|
[aCell highlight: YES withFrame: rect inView: self];
|
||||||
_selectedCells[row][column] = YES;
|
_selectedCells[row][column] = YES;
|
||||||
|
@ -2102,6 +2240,12 @@ static SEL getSel;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
|
|
||||||
[_selectedCell setState: 1];
|
[_selectedCell setState: 1];
|
||||||
[_selectedCell highlight: YES
|
[_selectedCell highlight: YES
|
||||||
withFrame: rect
|
withFrame: rect
|
||||||
|
@ -2121,6 +2265,11 @@ static SEL getSel;
|
||||||
_selectedCell = aCell;
|
_selectedCell = aCell;
|
||||||
_selectedRow = row;
|
_selectedRow = row;
|
||||||
_selectedColumn = column;
|
_selectedColumn = column;
|
||||||
|
if ([_cells[row][column] acceptsFirstResponder])
|
||||||
|
{
|
||||||
|
_dottedRow = row;
|
||||||
|
_dottedColumn = column;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2735,6 +2884,39 @@ static SEL getSel;
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) _setNeedsDisplayDottedCell
|
||||||
|
{
|
||||||
|
if (_dottedRow != -1 && _dottedColumn != -1)
|
||||||
|
{
|
||||||
|
[self setNeedsDisplayInRect: [self cellFrameAtRow: _dottedRow
|
||||||
|
column: _dottedColumn]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) becomeFirstResponder
|
||||||
|
{
|
||||||
|
[self _setNeedsDisplayDottedCell];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL) resignFirstResponder
|
||||||
|
{
|
||||||
|
[self _setNeedsDisplayDottedCell];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) becomeKeyWindow
|
||||||
|
{
|
||||||
|
[self _setNeedsDisplayDottedCell];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) resignKeyWindow
|
||||||
|
{
|
||||||
|
[self _setNeedsDisplayDottedCell];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL) abortEditing
|
- (BOOL) abortEditing
|
||||||
{
|
{
|
||||||
if (_textObject)
|
if (_textObject)
|
||||||
|
@ -2984,7 +3166,7 @@ static SEL getSel;
|
||||||
// First look for cells in the same row
|
// First look for cells in the same row
|
||||||
for (j = column + 1; j < _numCols; j++)
|
for (j = column + 1; j < _numCols; j++)
|
||||||
{
|
{
|
||||||
if ([_cells[row][j] isSelectable])
|
if ([_cells[row][j] isEnabled] && [_cells[row][j] isSelectable])
|
||||||
{
|
{
|
||||||
_selectedCell = [self selectTextAtRow: row
|
_selectedCell = [self selectTextAtRow: row
|
||||||
column: j];
|
column: j];
|
||||||
|
@ -2999,7 +3181,7 @@ static SEL getSel;
|
||||||
{
|
{
|
||||||
for (j = 0; j < _numCols; j++)
|
for (j = 0; j < _numCols; j++)
|
||||||
{
|
{
|
||||||
if ([_cells[i][j] isSelectable])
|
if ([_cells[i][j] isEnabled] && [_cells[i][j] isSelectable])
|
||||||
{
|
{
|
||||||
_selectedCell = [self selectTextAtRow: i
|
_selectedCell = [self selectTextAtRow: i
|
||||||
column: j];
|
column: j];
|
||||||
|
@ -3011,16 +3193,17 @@ static SEL getSel;
|
||||||
}
|
}
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(BOOL) _selectPreviousSelectableCellBeforeRow: (int)row
|
-(BOOL) _selectPreviousSelectableCellBeforeRow: (int)row
|
||||||
column: (int)column
|
column: (int)column
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
if (row < _numCols)
|
if (row < _numRows)
|
||||||
{
|
{
|
||||||
// First look for cells in the same row
|
// First look for cells in the same row
|
||||||
for (j = column - 1; j > -1; j--)
|
for (j = column - 1; j > -1; j--)
|
||||||
{
|
{
|
||||||
if ([_cells[row][j] isSelectable])
|
if ([_cells[row][j] isEnabled] && [_cells[row][j] isSelectable])
|
||||||
{
|
{
|
||||||
_selectedCell = [self selectTextAtRow: row
|
_selectedCell = [self selectTextAtRow: row
|
||||||
column: j];
|
column: j];
|
||||||
|
@ -3035,7 +3218,7 @@ static SEL getSel;
|
||||||
{
|
{
|
||||||
for (j = _numCols - 1; j > -1; j--)
|
for (j = _numCols - 1; j > -1; j--)
|
||||||
{
|
{
|
||||||
if ([_cells[i][j] isSelectable])
|
if ([_cells[i][j] isEnabled] && [_cells[i][j] isSelectable])
|
||||||
{
|
{
|
||||||
_selectedCell = [self selectTextAtRow: i
|
_selectedCell = [self selectTextAtRow: i
|
||||||
column: j];
|
column: j];
|
||||||
|
|
|
@ -62,7 +62,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
||||||
|
|
||||||
@interface NSOpenPanel (_PrivateMethods)
|
@interface NSOpenPanel (_PrivateMethods)
|
||||||
- (void) _resetDefaults;
|
- (void) _resetDefaults;
|
||||||
- (BOOL) _shouldShowExtension: (NSString *)extension;
|
- (BOOL) _shouldShowExtension: (NSString *)extension isDir: (BOOL *)isDir;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation NSOpenPanel (_PrivateMethods)
|
@implementation NSOpenPanel (_PrivateMethods)
|
||||||
|
@ -75,16 +75,27 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
||||||
[self setAllowsMultipleSelection: NO];
|
[self setAllowsMultipleSelection: NO];
|
||||||
[_okButton setEnabled: YES];
|
[_okButton setEnabled: YES];
|
||||||
}
|
}
|
||||||
// NB: Invoked only for files.
|
|
||||||
- (BOOL) _shouldShowExtension: (NSString *)extension;
|
|
||||||
{
|
|
||||||
if ((_fileTypes) && ([_fileTypes containsObject: extension] == NO))
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
if (_canChooseFiles == NO)
|
|
||||||
return NO;
|
|
||||||
|
|
||||||
return YES;
|
- (BOOL) _shouldShowExtension: (NSString *)extension
|
||||||
|
isDir: (BOOL *)isDir;
|
||||||
|
{
|
||||||
|
BOOL found = YES;
|
||||||
|
|
||||||
|
if (_fileTypes)
|
||||||
|
{
|
||||||
|
if ([_fileTypes containsObject: extension] == YES)
|
||||||
|
{
|
||||||
|
if ([self treatsFilePackagesAsDirectories] == NO)
|
||||||
|
*isDir = NO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
found = NO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*isDir == YES || (found == YES && _canChooseFiles == YES))
|
||||||
|
return YES;
|
||||||
|
|
||||||
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _selectTextInColumn: (int)column
|
- (void) _selectTextInColumn: (int)column
|
||||||
|
@ -110,7 +121,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||||
[_form selectTextAtIndex:0];
|
// [_form selectTextAtIndex:0];
|
||||||
[_okButton setEnabled:YES];
|
[_okButton setEnabled:YES];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,7 +129,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
||||||
{
|
{
|
||||||
[_form abortEditing];
|
[_form abortEditing];
|
||||||
[[_form cellAtIndex: 0] setStringValue:nil];
|
[[_form cellAtIndex: 0] setStringValue:nil];
|
||||||
[_form selectTextAtIndex:0];
|
// [_form selectTextAtIndex:0];
|
||||||
[_form setNeedsDisplay:YES];
|
[_form setNeedsDisplay:YES];
|
||||||
[_okButton setEnabled:YES];
|
[_okButton setEnabled:YES];
|
||||||
}
|
}
|
||||||
|
@ -132,7 +143,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
||||||
if([[[_form cellAtIndex: 0] stringValue] length] > 0)
|
if([[[_form cellAtIndex: 0] stringValue] length] > 0)
|
||||||
{
|
{
|
||||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||||
[_form selectTextAtIndex:0];
|
// [_form selectTextAtIndex:0];
|
||||||
[_form setNeedsDisplay:YES];
|
[_form setNeedsDisplay:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -296,7 +296,20 @@ Class _nspopupbuttonCellClass = 0;
|
||||||
{
|
{
|
||||||
[[popb_menu menuRepresentation] sizeToFit];
|
[[popb_menu menuRepresentation] sizeToFit];
|
||||||
[super sizeToFit];
|
[super sizeToFit];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL) resignFirstResponder
|
||||||
|
{
|
||||||
|
[_cell dismissPopUp];
|
||||||
|
|
||||||
|
return [super resignFirstResponder];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) resignKeyWindow
|
||||||
|
{
|
||||||
|
[_cell dismissPopUp];
|
||||||
|
[super resignKeyWindow];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) mouseDown: (NSEvent*)theEvent
|
- (void) mouseDown: (NSEvent*)theEvent
|
||||||
{
|
{
|
||||||
|
@ -342,6 +355,102 @@ Class _nspopupbuttonCellClass = 0;
|
||||||
to: [self target]];
|
to: [self target]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) keyDown: (NSEvent*)theEvent
|
||||||
|
{
|
||||||
|
if ([self isEnabled])
|
||||||
|
{
|
||||||
|
NSString *characters = [theEvent characters];
|
||||||
|
unichar character = 0;
|
||||||
|
|
||||||
|
if ([characters length] > 0)
|
||||||
|
{
|
||||||
|
character = [characters characterAtIndex: 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (character)
|
||||||
|
{
|
||||||
|
case NSNewlineCharacter:
|
||||||
|
case NSEnterCharacter:
|
||||||
|
case NSCarriageReturnCharacter:
|
||||||
|
case ' ':
|
||||||
|
{
|
||||||
|
if ([[[_cell menu] window] isVisible] == NO)
|
||||||
|
{
|
||||||
|
int selectedIndex;
|
||||||
|
|
||||||
|
[[NSNotificationCenter defaultCenter]
|
||||||
|
postNotificationName: NSPopUpButtonWillPopUpNotification
|
||||||
|
object: self];
|
||||||
|
|
||||||
|
// Attach the popUp
|
||||||
|
[_cell attachPopUpWithFrame: _bounds
|
||||||
|
inView: self];
|
||||||
|
|
||||||
|
selectedIndex = [self indexOfSelectedItem];
|
||||||
|
|
||||||
|
if (selectedIndex > -1)
|
||||||
|
[[[_cell menu] menuRepresentation]
|
||||||
|
setHighlightedItemIndex: selectedIndex];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Update our selected item
|
||||||
|
[self synchronizeTitleAndSelectedItem];
|
||||||
|
|
||||||
|
// Dismiss the popUp
|
||||||
|
[_cell dismissPopUp];
|
||||||
|
|
||||||
|
[super sendAction: [self action]
|
||||||
|
to: [self target]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case '\e':
|
||||||
|
[_cell dismissPopUp];
|
||||||
|
return;
|
||||||
|
case NSUpArrowFunctionKey:
|
||||||
|
{
|
||||||
|
NSMenuView *menuView;
|
||||||
|
int selectedIndex, numberOfItems;
|
||||||
|
|
||||||
|
menuView = [[_cell menu] menuRepresentation];
|
||||||
|
selectedIndex = [menuView highlightedItemIndex];
|
||||||
|
numberOfItems = [self numberOfItems];
|
||||||
|
|
||||||
|
switch (selectedIndex)
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
selectedIndex = numberOfItems - 1;
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
selectedIndex--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
[menuView setHighlightedItemIndex: selectedIndex];
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
case NSDownArrowFunctionKey:
|
||||||
|
{
|
||||||
|
NSMenuView *menuView;
|
||||||
|
int selectedIndex, numberOfItems;
|
||||||
|
|
||||||
|
menuView = [[_cell menu] menuRepresentation];
|
||||||
|
selectedIndex = [menuView highlightedItemIndex];
|
||||||
|
numberOfItems = [self numberOfItems];
|
||||||
|
|
||||||
|
if (selectedIndex < numberOfItems-1)
|
||||||
|
[menuView setHighlightedItemIndex: selectedIndex + 1];
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[super keyDown: theEvent];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* NSCoding protocol
|
* NSCoding protocol
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -525,8 +525,8 @@ static NSImage *_pbc_image[2];
|
||||||
* that is used to draw cells in the menu.
|
* that is used to draw cells in the menu.
|
||||||
* This looks like a mess to do in this framework.
|
* This looks like a mess to do in this framework.
|
||||||
*/
|
*/
|
||||||
- (void) drawWithFrame: (NSRect)cellFrame
|
- (void) drawInteriorWithFrame: (NSRect)cellFrame
|
||||||
inView: (NSView*)view
|
inView: (NSView*)view
|
||||||
{
|
{
|
||||||
NSSize size;
|
NSSize size;
|
||||||
NSPoint position;
|
NSPoint position;
|
||||||
|
@ -538,11 +538,19 @@ static NSImage *_pbc_image[2];
|
||||||
|
|
||||||
[view lockFocus];
|
[view lockFocus];
|
||||||
|
|
||||||
[super drawWithFrame: cellFrame inView: view];
|
// [super drawWithFrame: cellFrame inView: view];
|
||||||
|
|
||||||
|
cellFrame = [self drawingRectForBounds: cellFrame];
|
||||||
|
if (_cell.is_bordered || _cell.is_bezeled)
|
||||||
|
{
|
||||||
|
cellFrame.origin.x += 3;
|
||||||
|
cellFrame.size.width -= 6;
|
||||||
|
cellFrame.origin.y += 1;
|
||||||
|
cellFrame.size.height -= 2;
|
||||||
|
}
|
||||||
// Skip 5 points from left side
|
// Skip 5 points from left side
|
||||||
cellFrame.origin.x += 5;
|
// cellFrame.origin.x += 5;
|
||||||
cellFrame.size.width -= 5;
|
// cellFrame.size.width -= 5;
|
||||||
|
|
||||||
[self _drawText: [self titleOfSelectedItem] inFrame: cellFrame];
|
[self _drawText: [self titleOfSelectedItem] inFrame: cellFrame];
|
||||||
|
|
||||||
|
@ -562,6 +570,16 @@ static NSImage *_pbc_image[2];
|
||||||
position.y += size.height;
|
position.y += size.height;
|
||||||
[anImage compositeToPoint: position operation: NSCompositeCopy];
|
[anImage compositeToPoint: position operation: NSCompositeCopy];
|
||||||
|
|
||||||
|
if (_cell.is_bordered || _cell.is_bezeled)
|
||||||
|
{
|
||||||
|
cellFrame.origin.x -= 1;
|
||||||
|
cellFrame.size.width += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_cell.shows_first_responder
|
||||||
|
&& [[view window] firstResponder] == view)
|
||||||
|
NSDottedFrameRect(cellFrame);
|
||||||
|
|
||||||
[view unlockFocus];
|
[view unlockFocus];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
// Subclasses (read NSOpenPanel) may implement this
|
// Subclasses (read NSOpenPanel) may implement this
|
||||||
// to filter some extensions out of displayed files.
|
// to filter some extensions out of displayed files.
|
||||||
@interface NSObject (_SavePanelPrivate)
|
@interface NSObject (_SavePanelPrivate)
|
||||||
-(BOOL) _shouldShowExtension: (NSString*)extension;
|
-(BOOL) _shouldShowExtension: (NSString*)extension isDir: (BOOL *)isDir;
|
||||||
@end
|
@end
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
NSButton *button;
|
NSButton *button;
|
||||||
NSImage *image;
|
NSImage *image;
|
||||||
NSRect r;
|
NSRect r;
|
||||||
|
id lastKeyView;
|
||||||
|
|
||||||
//
|
//
|
||||||
// WARNING: We create the panel sized (308, 317), which is the
|
// WARNING: We create the panel sized (308, 317), which is the
|
||||||
|
@ -122,6 +123,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
|
|
||||||
r = NSMakeRect (8, 68, 292, 177);
|
r = NSMakeRect (8, 68, 292, 177);
|
||||||
_browser = [[NSBrowser alloc] initWithFrame: r];
|
_browser = [[NSBrowser alloc] initWithFrame: r];
|
||||||
|
lastKeyView = _browser;
|
||||||
[_browser setDelegate: self];
|
[_browser setDelegate: self];
|
||||||
[_browser setMaxVisibleColumns: 2];
|
[_browser setMaxVisibleColumns: 2];
|
||||||
[_browser setHasHorizontalScroller: YES];
|
[_browser setHasHorizontalScroller: YES];
|
||||||
|
@ -146,6 +148,8 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[_form setAutoresizingMask: NSViewWidthSizable];
|
[_form setAutoresizingMask: NSViewWidthSizable];
|
||||||
[_form setDelegate: self];
|
[_form setDelegate: self];
|
||||||
[_bottomView addSubview: _form];
|
[_bottomView addSubview: _form];
|
||||||
|
[lastKeyView setNextKeyView: _form];
|
||||||
|
lastKeyView = _form;
|
||||||
[_form release];
|
[_form release];
|
||||||
|
|
||||||
r = NSMakeRect (43, 6, 27, 27);
|
r = NSMakeRect (43, 6, 27, 27);
|
||||||
|
@ -161,6 +165,8 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[button setAutoresizingMask: NSViewMinXMargin];
|
[button setAutoresizingMask: NSViewMinXMargin];
|
||||||
[button setTag: NSFileHandlingPanelHomeButton];
|
[button setTag: NSFileHandlingPanelHomeButton];
|
||||||
[_bottomView addSubview: button];
|
[_bottomView addSubview: button];
|
||||||
|
[lastKeyView setNextKeyView: button];
|
||||||
|
lastKeyView = button;
|
||||||
[button release];
|
[button release];
|
||||||
|
|
||||||
r = NSMakeRect (78, 6, 27, 27);
|
r = NSMakeRect (78, 6, 27, 27);
|
||||||
|
@ -175,6 +181,8 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[button setAutoresizingMask: NSViewMinXMargin];
|
[button setAutoresizingMask: NSViewMinXMargin];
|
||||||
[button setTag: NSFileHandlingPanelDiskButton];
|
[button setTag: NSFileHandlingPanelDiskButton];
|
||||||
[_bottomView addSubview: button];
|
[_bottomView addSubview: button];
|
||||||
|
[lastKeyView setNextKeyView: button];
|
||||||
|
lastKeyView = button;
|
||||||
[button release];
|
[button release];
|
||||||
|
|
||||||
r = NSMakeRect (112, 6, 27, 27);
|
r = NSMakeRect (112, 6, 27, 27);
|
||||||
|
@ -189,6 +197,8 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[button setAutoresizingMask: NSViewMinXMargin];
|
[button setAutoresizingMask: NSViewMinXMargin];
|
||||||
[button setTag: NSFileHandlingPanelDiskEjectButton];
|
[button setTag: NSFileHandlingPanelDiskEjectButton];
|
||||||
[_bottomView addSubview: button];
|
[_bottomView addSubview: button];
|
||||||
|
[lastKeyView setNextKeyView: button];
|
||||||
|
lastKeyView = button;
|
||||||
[button release];
|
[button release];
|
||||||
|
|
||||||
r = NSMakeRect (148, 6, 71, 27);
|
r = NSMakeRect (148, 6, 71, 27);
|
||||||
|
@ -202,6 +212,8 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[button setAutoresizingMask: NSViewMinXMargin];
|
[button setAutoresizingMask: NSViewMinXMargin];
|
||||||
[button setTag: NSFileHandlingPanelCancelButton];
|
[button setTag: NSFileHandlingPanelCancelButton];
|
||||||
[_bottomView addSubview: button];
|
[_bottomView addSubview: button];
|
||||||
|
[lastKeyView setNextKeyView: button];
|
||||||
|
lastKeyView = button;
|
||||||
[button release];
|
[button release];
|
||||||
|
|
||||||
r = NSMakeRect (228, 6, 71, 27);
|
r = NSMakeRect (228, 6, 71, 27);
|
||||||
|
@ -215,11 +227,12 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[_okButton setTarget: self];
|
[_okButton setTarget: self];
|
||||||
[_okButton setAction: @selector(ok:)];
|
[_okButton setAction: @selector(ok:)];
|
||||||
[_okButton setEnabled: NO];
|
[_okButton setEnabled: NO];
|
||||||
// [_okButton setNextKeyView: _form];
|
|
||||||
[_okButton setAutoresizingMask: NSViewMinXMargin];
|
[_okButton setAutoresizingMask: NSViewMinXMargin];
|
||||||
[_okButton setTag: NSFileHandlingPanelOKButton];
|
[_okButton setTag: NSFileHandlingPanelOKButton];
|
||||||
[_bottomView addSubview: _okButton];
|
[_bottomView addSubview: _okButton];
|
||||||
[self setDefaultButtonCell:[_okButton cell]];
|
[lastKeyView setNextKeyView: _okButton];
|
||||||
|
[_okButton setNextKeyView: _browser];
|
||||||
|
[self setDefaultButtonCell: [_okButton cell]];
|
||||||
[_okButton release];
|
[_okButton release];
|
||||||
|
|
||||||
[_browser setDoubleAction: @selector(performClick:)];
|
[_browser setDoubleAction: @selector(performClick:)];
|
||||||
|
@ -259,6 +272,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
[bar release];
|
[bar release];
|
||||||
|
|
||||||
[self setContentSize: NSMakeSize (384, 426)];
|
[self setContentSize: NSMakeSize (384, 426)];
|
||||||
|
[self setInitialFirstResponder: _form];
|
||||||
[super setTitle: @""];
|
[super setTitle: @""];
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
@ -317,7 +331,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
if (isLeaf)
|
if (isLeaf)
|
||||||
{
|
{
|
||||||
[[_form cellAtIndex: 0] setStringValue: [selectedCell stringValue]];
|
[[_form cellAtIndex: 0] setStringValue: [selectedCell stringValue]];
|
||||||
[_form selectTextAtIndex:0];
|
// [_form selectTextAtIndex:0];
|
||||||
[_form setNeedsDisplay:YES];
|
[_form setNeedsDisplay:YES];
|
||||||
[_okButton setEnabled:YES];
|
[_okButton setEnabled:YES];
|
||||||
}
|
}
|
||||||
|
@ -327,7 +341,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
{
|
{
|
||||||
[_okButton setEnabled:YES];
|
[_okButton setEnabled:YES];
|
||||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||||
[_form selectTextAtIndex:0];
|
// [_form selectTextAtIndex:0];
|
||||||
[_form setNeedsDisplay:YES];
|
[_form setNeedsDisplay:YES];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -448,7 +462,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
_delegateHasShowFilenameFilter = NO;
|
_delegateHasShowFilenameFilter = NO;
|
||||||
_delegateHasValidNameFilter = NO;
|
_delegateHasValidNameFilter = NO;
|
||||||
|
|
||||||
if ([self respondsToSelector: @selector(_shouldShowExtension:)])
|
if ([self respondsToSelector: @selector(_shouldShowExtension:isDir:)])
|
||||||
_selfHasShowExtensionFilter = YES;
|
_selfHasShowExtensionFilter = YES;
|
||||||
else
|
else
|
||||||
_selfHasShowExtensionFilter = NO;
|
_selfHasShowExtensionFilter = NO;
|
||||||
|
@ -767,6 +781,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
|
|
||||||
switch (character)
|
switch (character)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
case NSTabCharacter:
|
case NSTabCharacter:
|
||||||
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
||||||
{
|
{
|
||||||
|
@ -794,7 +809,7 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
isARepeat:NO
|
isARepeat:NO
|
||||||
keyCode:0]];
|
keyCode:0]];
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case NSUpArrowFunctionKey:
|
case NSUpArrowFunctionKey:
|
||||||
case NSDownArrowFunctionKey:
|
case NSDownArrowFunctionKey:
|
||||||
case NSLeftArrowFunctionKey:
|
case NSLeftArrowFunctionKey:
|
||||||
|
@ -806,52 +821,6 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) keyDown: (NSEvent *)theEvent
|
|
||||||
{
|
|
||||||
NSString *characters = [theEvent characters];
|
|
||||||
unichar character = 0;
|
|
||||||
|
|
||||||
if ([characters length] > 0)
|
|
||||||
{
|
|
||||||
character = [characters characterAtIndex: 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (character)
|
|
||||||
{
|
|
||||||
case NSTabCharacter:
|
|
||||||
case NSUpArrowFunctionKey:
|
|
||||||
case NSDownArrowFunctionKey:
|
|
||||||
case NSLeftArrowFunctionKey:
|
|
||||||
case NSRightArrowFunctionKey:
|
|
||||||
[self selectText:self];
|
|
||||||
return;
|
|
||||||
|
|
||||||
case NSEnterCharacter:
|
|
||||||
case NSFormFeedCharacter:
|
|
||||||
case NSCarriageReturnCharacter:
|
|
||||||
if([_okButton isEnabled] == YES)
|
|
||||||
{
|
|
||||||
NSMatrix *matrix;
|
|
||||||
int selectedColumn;
|
|
||||||
|
|
||||||
selectedColumn = [_browser selectedColumn];
|
|
||||||
if(selectedColumn == -1 || selectedColumn != [_browser lastColumn])
|
|
||||||
break;
|
|
||||||
|
|
||||||
matrix = [_browser matrixInColumn:selectedColumn];
|
|
||||||
|
|
||||||
if([[matrix selectedCell] isLeaf] == NO)
|
|
||||||
{
|
|
||||||
[_form abortEditing];
|
|
||||||
[[_form cellAtIndex: 0] setStringValue: nil];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
[super keyDown:theEvent];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) setDelegate: (id)aDelegate
|
- (void) setDelegate: (id)aDelegate
|
||||||
{
|
{
|
||||||
if ([aDelegate respondsToSelector:
|
if ([aDelegate respondsToSelector:
|
||||||
|
@ -889,6 +858,91 @@ static BOOL _gs_display_reading_progress = NO;
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
//
|
||||||
|
// SavePanel filename compare
|
||||||
|
//
|
||||||
|
@interface NSString (_gsSavePanel)
|
||||||
|
- (NSComparisonResult)_gsSavePanelCompare:(NSString *)other;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation NSString (_gsSavePanel)
|
||||||
|
- (NSComparisonResult)_gsSavePanelCompare:(NSString *)other
|
||||||
|
{
|
||||||
|
int sLength, oLength;
|
||||||
|
unichar sChar, oChar;
|
||||||
|
NSComparisonResult result;
|
||||||
|
NSRange range;
|
||||||
|
|
||||||
|
sLength = [self length];
|
||||||
|
oLength = [other length];
|
||||||
|
range.location = 0;
|
||||||
|
range.length = sLength;
|
||||||
|
|
||||||
|
if (sLength == 0)
|
||||||
|
{
|
||||||
|
if (oLength == 0)
|
||||||
|
return NSOrderedSame;
|
||||||
|
else
|
||||||
|
return NSOrderedAscending;
|
||||||
|
}
|
||||||
|
else if (oLength == 0)
|
||||||
|
{
|
||||||
|
return NSOrderedDescending;
|
||||||
|
}
|
||||||
|
|
||||||
|
sChar = [self characterAtIndex: 0];
|
||||||
|
oChar = [other characterAtIndex: 0];
|
||||||
|
|
||||||
|
if (sChar == '.' && oChar != '.')
|
||||||
|
return NSOrderedDescending;
|
||||||
|
else if (sChar != '.' && oChar == '.')
|
||||||
|
return NSOrderedAscending;
|
||||||
|
|
||||||
|
if (sLength == oLength)
|
||||||
|
{
|
||||||
|
result = [self compare: other
|
||||||
|
options: NSCaseInsensitiveSearch
|
||||||
|
range: range];
|
||||||
|
|
||||||
|
if (result == NSOrderedSame)
|
||||||
|
result = [self compare: other options: 0 range: range];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (sLength < oLength)
|
||||||
|
{
|
||||||
|
result = [other compare: self
|
||||||
|
options: NSCaseInsensitiveSearch
|
||||||
|
range: range];
|
||||||
|
|
||||||
|
if (result == NSOrderedAscending)
|
||||||
|
result = NSOrderedDescending;
|
||||||
|
else if (result == NSOrderedDescending)
|
||||||
|
result = NSOrderedAscending;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = [other compare: self options: 0 range: range];
|
||||||
|
|
||||||
|
if (result == NSOrderedAscending)
|
||||||
|
result = NSOrderedDescending;
|
||||||
|
else
|
||||||
|
result = NSOrderedAscending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
result = [self compare: other
|
||||||
|
options: NSCaseInsensitiveSearch
|
||||||
|
range: range];
|
||||||
|
|
||||||
|
if (result == NSOrderedSame)
|
||||||
|
result = [self compare: other options: 0 range: range];
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
//
|
//
|
||||||
// NSSavePanel browser delegate methods
|
// NSSavePanel browser delegate methods
|
||||||
//
|
//
|
||||||
|
@ -990,7 +1044,7 @@ createRowsForColumn: (int)column
|
||||||
context: nil];
|
context: nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
files = [files sortedArrayUsingSelector: @selector(compare:)];
|
files = [files sortedArrayUsingSelector: @selector(_gsSavePanelCompare:)];
|
||||||
|
|
||||||
addedRows = 0;
|
addedRows = 0;
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
|
@ -1020,17 +1074,14 @@ createRowsForColumn: (int)column
|
||||||
if (_treatsFilePackagesAsDirectories == NO && isDir == YES && exists)
|
if (_treatsFilePackagesAsDirectories == NO && isDir == YES && exists)
|
||||||
{
|
{
|
||||||
// Ones with more chance first
|
// Ones with more chance first
|
||||||
if ([extension isEqualToString: @"app"]
|
if ([self isMemberOfClass: [NSSavePanel class]] == YES)
|
||||||
|| [extension isEqualToString: @"bundle"]
|
if ([extension isEqualToString: _requiredFileType] == YES)
|
||||||
|| [extension isEqualToString: @"palette"]
|
isDir = NO;
|
||||||
|| [extension isEqualToString: @"debug"]
|
|
||||||
|| [extension isEqualToString: @"profile"])
|
|
||||||
isDir = NO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_selfHasShowExtensionFilter && exists && (isDir == NO))
|
if (_selfHasShowExtensionFilter && exists)
|
||||||
{
|
{
|
||||||
exists = [self _shouldShowExtension: extension];
|
exists = [self _shouldShowExtension: extension isDir: &isDir];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists)
|
if (exists)
|
||||||
|
@ -1149,33 +1200,10 @@ selectCellWithString: (NSString*)title
|
||||||
// NSForm delegate methods
|
// NSForm delegate methods
|
||||||
//
|
//
|
||||||
@interface NSSavePanel (FormDelegate)
|
@interface NSSavePanel (FormDelegate)
|
||||||
- (void) controlTextDidEndEditing: (NSNotification*)aNotification;
|
|
||||||
- (void) controlTextDidChange: (NSNotification *)aNotification;
|
- (void) controlTextDidChange: (NSNotification *)aNotification;
|
||||||
@end
|
@end
|
||||||
@implementation NSSavePanel (FormDelegate)
|
@implementation NSSavePanel (FormDelegate)
|
||||||
|
|
||||||
- (void) controlTextDidEndEditing: (NSNotification*)aNotification
|
|
||||||
{
|
|
||||||
id textMovement = [[aNotification userInfo] objectForKey: @"NSTextMovement"];
|
|
||||||
|
|
||||||
if (textMovement)
|
|
||||||
{
|
|
||||||
switch ([(NSNumber *)textMovement intValue])
|
|
||||||
{
|
|
||||||
case NSTabTextMovement:
|
|
||||||
case NSBacktabTextMovement:
|
|
||||||
case NSUpTextMovement:
|
|
||||||
case NSDownTextMovement:
|
|
||||||
case NSLeftTextMovement:
|
|
||||||
case NSRightTextMovement:
|
|
||||||
case NSReturnTextMovement:
|
|
||||||
[NSApp postEvent:[self currentEvent]
|
|
||||||
atStart:YES];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) controlTextDidChange: (NSNotification *)aNotification;
|
- (void) controlTextDidChange: (NSNotification *)aNotification;
|
||||||
{
|
{
|
||||||
NSString *s, *selectedString;
|
NSString *s, *selectedString;
|
||||||
|
|
|
@ -458,13 +458,23 @@ static NSNotificationCenter *nc;
|
||||||
switch ([(NSNumber *)textMovement intValue])
|
switch ([(NSNumber *)textMovement intValue])
|
||||||
{
|
{
|
||||||
case NSReturnTextMovement:
|
case NSReturnTextMovement:
|
||||||
[self sendAction: [self action] to: [self target]];
|
if ([self sendAction: [self action] to: [self target]] == NO)
|
||||||
|
{
|
||||||
|
if ([self performKeyEquivalent: [_window currentEvent]] == NO)
|
||||||
|
[self selectText: self];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case NSTabTextMovement:
|
case NSTabTextMovement:
|
||||||
[_window selectKeyViewFollowingView: self];
|
[_window selectKeyViewFollowingView: self];
|
||||||
|
|
||||||
|
if ([_window firstResponder] == _window)
|
||||||
|
[self selectText: self];
|
||||||
break;
|
break;
|
||||||
case NSBacktabTextMovement:
|
case NSBacktabTextMovement:
|
||||||
[_window selectKeyViewPrecedingView: self];
|
[_window selectKeyViewPrecedingView: self];
|
||||||
|
|
||||||
|
if ([_window firstResponder] == _window)
|
||||||
|
[self selectText: self];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2264,10 +2264,7 @@ afterString in order over charRange. */
|
||||||
unsigned newLocation;
|
unsigned newLocation;
|
||||||
|
|
||||||
if (_tf.is_field_editor)
|
if (_tf.is_field_editor)
|
||||||
{
|
return;
|
||||||
[self _illegalMovement: NSUpTextMovement];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do nothing if we are at beginning of text */
|
/* Do nothing if we are at beginning of text */
|
||||||
if (_selected_range.location == 0)
|
if (_selected_range.location == 0)
|
||||||
|
@ -2303,10 +2300,7 @@ afterString in order over charRange. */
|
||||||
unsigned newLocation;
|
unsigned newLocation;
|
||||||
|
|
||||||
if (_tf.is_field_editor)
|
if (_tf.is_field_editor)
|
||||||
{
|
return;
|
||||||
[self _illegalMovement: NSDownTextMovement];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do nothing if we are at end of text */
|
/* Do nothing if we are at end of text */
|
||||||
if (_selected_range.location == [_textStorage length])
|
if (_selected_range.location == [_textStorage length])
|
||||||
|
@ -2341,13 +2335,7 @@ afterString in order over charRange. */
|
||||||
|
|
||||||
/* Do nothing if we are at beginning of text with no selection */
|
/* Do nothing if we are at beginning of text with no selection */
|
||||||
if (_selected_range.location == 0 && _selected_range.length == 0)
|
if (_selected_range.location == 0 && _selected_range.length == 0)
|
||||||
{
|
return;
|
||||||
if (_tf.is_field_editor)
|
|
||||||
{
|
|
||||||
[self _illegalMovement: NSLeftTextMovement];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_selected_range.location == 0)
|
if (_selected_range.location == 0)
|
||||||
{
|
{
|
||||||
|
@ -2368,13 +2356,7 @@ afterString in order over charRange. */
|
||||||
|
|
||||||
/* Do nothing if we are at end of text */
|
/* Do nothing if we are at end of text */
|
||||||
if (_selected_range.location == length)
|
if (_selected_range.location == length)
|
||||||
{
|
return;
|
||||||
if (_tf.is_field_editor)
|
|
||||||
{
|
|
||||||
[self _illegalMovement: NSRightTextMovement];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
newLocation = MIN (NSMaxRange (_selected_range) + 1, length);
|
newLocation = MIN (NSMaxRange (_selected_range) + 1, length);
|
||||||
|
|
||||||
|
|
|
@ -425,6 +425,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
}
|
}
|
||||||
aSubview->_super_view = nil;
|
aSubview->_super_view = nil;
|
||||||
[aSubview viewWillMoveToWindow: nil];
|
[aSubview viewWillMoveToWindow: nil];
|
||||||
|
[aSubview setNextResponder: nil];
|
||||||
[_sub_views removeObjectIdenticalTo: aSubview];
|
[_sub_views removeObjectIdenticalTo: aSubview];
|
||||||
if ([_sub_views count] == 0)
|
if ([_sub_views count] == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -555,6 +555,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
TEST_RELEASE(_windowTitle);
|
TEST_RELEASE(_windowTitle);
|
||||||
TEST_RELEASE(_rectsBeingDrawn);
|
TEST_RELEASE(_rectsBeingDrawn);
|
||||||
TEST_RELEASE(_initialFirstResponder);
|
TEST_RELEASE(_initialFirstResponder);
|
||||||
|
TEST_RELEASE(_originalResponder);
|
||||||
TEST_RELEASE(_defaultButtonCell);
|
TEST_RELEASE(_defaultButtonCell);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2440,24 +2441,27 @@ resetCursorRectsForView(NSView *theView)
|
||||||
{
|
{
|
||||||
[NSApp activateIgnoringOtherApps: YES];
|
[NSApp activateIgnoringOtherApps: YES];
|
||||||
}
|
}
|
||||||
if (_f.is_key == NO)
|
if (_f.has_closed == NO)
|
||||||
{
|
{
|
||||||
[self makeKeyAndOrderFront: self];
|
if (_f.is_key == NO)
|
||||||
}
|
|
||||||
v = [_contentView hitTest: [theEvent locationInWindow]];
|
|
||||||
if (_firstResponder != v)
|
|
||||||
{
|
|
||||||
[self makeFirstResponder: v];
|
|
||||||
}
|
|
||||||
if (wasKey == YES || [v acceptsFirstMouse: theEvent] == YES)
|
|
||||||
{
|
|
||||||
if ([NSHelpManager isContextHelpModeActive])
|
|
||||||
{
|
{
|
||||||
[v helpRequested: theEvent];
|
[self makeKeyAndOrderFront: self];
|
||||||
}
|
}
|
||||||
else
|
v = [_contentView hitTest: [theEvent locationInWindow]];
|
||||||
|
if (_firstResponder != v)
|
||||||
{
|
{
|
||||||
[v mouseDown: theEvent];
|
[self makeFirstResponder: v];
|
||||||
|
}
|
||||||
|
if (wasKey == YES || [v acceptsFirstMouse: theEvent] == YES)
|
||||||
|
{
|
||||||
|
if ([NSHelpManager isContextHelpModeActive])
|
||||||
|
{
|
||||||
|
[v helpRequested: theEvent];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[v mouseDown: theEvent];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_lastPoint = [theEvent locationInWindow];
|
_lastPoint = [theEvent locationInWindow];
|
||||||
|
@ -2554,7 +2558,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
* Save the first responder so that the key up goes to it and not a
|
* Save the first responder so that the key up goes to it and not a
|
||||||
* possible new first responder.
|
* possible new first responder.
|
||||||
*/
|
*/
|
||||||
_originalResponder = _firstResponder;
|
ASSIGN(_originalResponder, _firstResponder);
|
||||||
[_firstResponder keyDown: theEvent];
|
[_firstResponder keyDown: theEvent];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2564,6 +2568,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
*/
|
*/
|
||||||
if (_originalResponder)
|
if (_originalResponder)
|
||||||
[_originalResponder keyUp: theEvent];
|
[_originalResponder keyUp: theEvent];
|
||||||
|
DESTROY(_originalResponder);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSFlagsChanged: // Flags changed
|
case NSFlagsChanged: // Flags changed
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue