mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 03:21:04 +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
2bbfbf1bb5
commit
60b8f20ce4
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>
|
||||
|
||||
* 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,
|
||||
int count);
|
||||
void NSDrawWhiteBezel(const NSRect aRect, const NSRect clipRect);
|
||||
void NSDottedFrameRect(const NSRect aRect);
|
||||
void NSFrameRect(const NSRect aRect);
|
||||
void NSFrameRectWithWidth(const NSRect aRect, float frameWidth);
|
||||
|
||||
|
|
|
@ -82,6 +82,8 @@ typedef enum _NSMatrixMode {
|
|||
BOOL _autosizesCells;
|
||||
BOOL _autoscroll;
|
||||
id _keyCell;
|
||||
int _dottedRow;
|
||||
int _dottedColumn;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include <AppKit/NSTextFieldCell.h>
|
||||
#include <AppKit/PSOperators.h>
|
||||
#include <AppKit/NSEvent.h>
|
||||
#include <AppKit/NSWindow.h>
|
||||
|
||||
/* Cache */
|
||||
static float scrollerWidth; // == [NSScroller scrollerWidth]
|
||||
|
@ -767,7 +768,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
|
||||
// Create a scrollview
|
||||
sc = [[NSScrollView alloc]
|
||||
initWithFrame: rect];
|
||||
initWithFrame: rect];
|
||||
[sc setHasHorizontalScroller: NO];
|
||||
[sc setHasVerticalScroller: YES];
|
||||
[bc setColumnScrollView: sc];
|
||||
|
@ -780,6 +781,28 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
[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.
|
||||
//
|
||||
|
@ -2092,7 +2115,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
|
||||
if ([sender class] != _browserMatrixClass)
|
||||
return;
|
||||
|
||||
|
||||
column = [self columnOfMatrix: sender];
|
||||
// If the matrix isn't ours then just return
|
||||
if (column == -1)
|
||||
|
@ -2312,7 +2335,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
[NSStringFromRect(rect) cString]);
|
||||
#endif
|
||||
|
||||
[super initWithFrame: rect];
|
||||
self = [super initWithFrame: rect];
|
||||
|
||||
// Class setting
|
||||
_browserCellClass = [NSBrowser cellClass];
|
||||
|
@ -2518,7 +2541,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
|
||||
- (void)moveUp:(id)sender
|
||||
{
|
||||
if(_acceptsArrowKeys == YES)
|
||||
if (_acceptsArrowKeys == YES)
|
||||
{
|
||||
NSArray *cells;
|
||||
NSMatrix *matrix;
|
||||
|
@ -2527,29 +2550,30 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
||||
|
||||
selectedColumn = [self selectedColumn];
|
||||
if(selectedColumn == -1)
|
||||
if (selectedColumn == -1)
|
||||
{
|
||||
matrix = [self matrixInColumn:0];
|
||||
matrix = [self matrixInColumn: 0];
|
||||
cells = [matrix cells];
|
||||
numberOfRows = [cells count];
|
||||
oldSelectedRow = selectedRow = numberOfRows - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
matrix = [self matrixInColumn:selectedColumn];
|
||||
matrix = [self matrixInColumn: selectedColumn];
|
||||
cells = [matrix cells];
|
||||
numberOfRows = [cells count];
|
||||
oldSelectedRow = selectedRow = [matrix selectedRow];
|
||||
}
|
||||
|
||||
while(1)
|
||||
while (1)
|
||||
{
|
||||
if(selectedColumn == -1)
|
||||
if (selectedColumn == -1)
|
||||
{
|
||||
if(numberOfRows)
|
||||
if (numberOfRows)
|
||||
{
|
||||
[matrix selectCellAtRow:selectedRow column:0];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: selectedRow column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
selectedColumn = 0;
|
||||
}
|
||||
else
|
||||
|
@ -2557,7 +2581,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
}
|
||||
else
|
||||
{
|
||||
if(!selectedRow)
|
||||
if (!selectedRow)
|
||||
{
|
||||
numberOfRows = [cells count];
|
||||
if(numberOfRows <= 1)
|
||||
|
@ -2570,25 +2594,26 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
selectedRow--;
|
||||
|
||||
[matrix deselectAllCells];
|
||||
[matrix selectCellAtRow:selectedRow column:0];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: selectedRow column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
}
|
||||
|
||||
selectedCell = [matrix selectedCell];
|
||||
|
||||
if(selectedCell ||
|
||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||
if (selectedCell ||
|
||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||
break;
|
||||
}
|
||||
|
||||
if(_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction:_action to:_target];
|
||||
if (_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction: _action to: _target];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)moveDown:(id)sender
|
||||
{
|
||||
if(_acceptsArrowKeys)
|
||||
if (_acceptsArrowKeys)
|
||||
{
|
||||
NSArray *cells;
|
||||
NSMatrix *matrix;
|
||||
|
@ -2597,28 +2622,29 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
int selectedRow, oldSelectedRow, selectedColumn, numberOfRows;
|
||||
|
||||
selectedColumn = [self selectedColumn];
|
||||
if(selectedColumn == -1)
|
||||
if (selectedColumn == -1)
|
||||
{
|
||||
matrix = [self matrixInColumn:0];
|
||||
matrix = [self matrixInColumn: 0];
|
||||
oldSelectedRow = selectedRow = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
matrix = [self matrixInColumn:selectedColumn];
|
||||
matrix = [self matrixInColumn: selectedColumn];
|
||||
oldSelectedRow = selectedRow = [matrix selectedRow];
|
||||
}
|
||||
|
||||
cells = [matrix cells];
|
||||
numberOfRows = [cells count];
|
||||
|
||||
while(1)
|
||||
while (1)
|
||||
{
|
||||
if(selectedColumn == -1)
|
||||
if (selectedColumn == -1)
|
||||
{
|
||||
if(numberOfRows)
|
||||
if (numberOfRows)
|
||||
{
|
||||
[matrix selectCellAtRow:0 column:0];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: 0 column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
selectedColumn = 0;
|
||||
}
|
||||
else
|
||||
|
@ -2628,9 +2654,9 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
{
|
||||
selectedRow++;
|
||||
|
||||
if(selectedRow >= numberOfRows)
|
||||
if (selectedRow >= numberOfRows)
|
||||
{
|
||||
if(numberOfRows <= 1)
|
||||
if (numberOfRows <= 1)
|
||||
return;
|
||||
|
||||
selectedRow = 0;
|
||||
|
@ -2638,86 +2664,92 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
}
|
||||
|
||||
[matrix deselectAllCells];
|
||||
[matrix selectCellAtRow:selectedRow column:0];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: selectedRow column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
}
|
||||
|
||||
selectedCell = [matrix selectedCell];
|
||||
|
||||
if(selectedCell ||
|
||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||
if (selectedCell ||
|
||||
(firstPass == NO && selectedRow == oldSelectedRow))
|
||||
break;
|
||||
}
|
||||
|
||||
if(_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction:_action to:_target];
|
||||
if (_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction: _action to: _target];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)moveLeft:(id)sender
|
||||
{
|
||||
if(_acceptsArrowKeys)
|
||||
if (_acceptsArrowKeys)
|
||||
{
|
||||
NSMatrix *matrix;
|
||||
NSCell *selectedCell;
|
||||
int selectedRow, selectedColumn;
|
||||
|
||||
selectedColumn = [self selectedColumn];
|
||||
if(selectedColumn >= 0)
|
||||
if (selectedColumn >= 0)
|
||||
{
|
||||
matrix = [self matrixInColumn:selectedColumn];
|
||||
matrix = [self matrixInColumn: selectedColumn];
|
||||
selectedCell = [matrix selectedCell];
|
||||
selectedRow = [matrix selectedRow];
|
||||
|
||||
[matrix deselectAllCells];
|
||||
|
||||
if(selectedColumn+1 <= [self lastColumn])
|
||||
[self setLastColumn:selectedColumn];
|
||||
[self setLastColumn: selectedColumn];
|
||||
|
||||
if(_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction:_action to:_target];
|
||||
matrix = [self matrixInColumn: [self selectedColumn]];
|
||||
[_window makeFirstResponder: matrix];
|
||||
|
||||
if (_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction: _action to: _target];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)moveRight:(id)sender
|
||||
{
|
||||
if(_acceptsArrowKeys)
|
||||
if (_acceptsArrowKeys)
|
||||
{
|
||||
NSMatrix *matrix;
|
||||
BOOL selectFirstRow = NO;
|
||||
int 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];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: 0 column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
selectedColumn = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
matrix = [self matrixInColumn:selectedColumn];
|
||||
matrix = [self matrixInColumn: selectedColumn];
|
||||
selectFirstRow = YES;
|
||||
}
|
||||
|
||||
if(selectFirstRow == YES)
|
||||
{
|
||||
matrix = [self matrixInColumn:[self lastColumn]];
|
||||
if([[matrix cells] count])
|
||||
matrix = [self matrixInColumn: [self lastColumn]];
|
||||
if ([[matrix cells] count])
|
||||
{
|
||||
[matrix selectCellAtRow:0 column:0];
|
||||
[self doClick:matrix];
|
||||
[matrix selectCellAtRow: 0 column: 0];
|
||||
[_window makeFirstResponder: matrix];
|
||||
[self doClick: matrix];
|
||||
}
|
||||
}
|
||||
|
||||
if(_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction:_action to:_target];
|
||||
if (_sendsActionOnArrowKeys == YES)
|
||||
[super sendAction: _action to: _target];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2731,7 +2763,7 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
character = [characters characterAtIndex: 0];
|
||||
}
|
||||
|
||||
if(_acceptsArrowKeys)
|
||||
if (_acceptsArrowKeys)
|
||||
{
|
||||
switch (character)
|
||||
{
|
||||
|
@ -2747,6 +2779,14 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
case NSRightArrowFunctionKey:
|
||||
[self moveRight:self];
|
||||
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;
|
||||
int i, count;
|
||||
id firstResponder = nil;
|
||||
BOOL setFirstResponder = NO;
|
||||
|
||||
#if defined NSBTRACE__remapColumnSubviews || defined NSBTRACE_all
|
||||
fprintf(stderr, "NSBrowser - (void)_remapColumnSubviews: %d\n", fromFirst);
|
||||
#endif
|
||||
|
||||
// Removes all column subviews.
|
||||
count = [_browserColumns count];
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
bc = [_browserColumns objectAtIndex: i];
|
||||
sc = [bc columnScrollView];
|
||||
[sc removeFromSuperviewWithoutNeedingDisplay];
|
||||
|
||||
if (!firstResponder && [bc columnMatrix] == [_window firstResponder])
|
||||
firstResponder = [bc columnMatrix];
|
||||
if (sc)
|
||||
[sc removeFromSuperviewWithoutNeedingDisplay];
|
||||
}
|
||||
|
||||
|
||||
if (_firstVisibleColumn > _lastVisibleColumn)
|
||||
return;
|
||||
|
||||
|
@ -2939,7 +2984,18 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
bc = [_browserColumns objectAtIndex: i];
|
||||
sc = [bc columnScrollView];
|
||||
[self addSubview: sc];
|
||||
|
||||
if ([bc columnMatrix] == firstResponder)
|
||||
{
|
||||
[_window makeFirstResponder: firstResponder];
|
||||
setFirstResponder = YES;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstResponder && setFirstResponder == NO)
|
||||
[_window makeFirstResponder:
|
||||
[[_browserColumns objectAtIndex: _firstVisibleColumn]
|
||||
columnMatrix]];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2948,7 +3004,18 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
bc = [_browserColumns objectAtIndex: i];
|
||||
sc = [bc columnScrollView];
|
||||
[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);
|
||||
#endif
|
||||
|
||||
if (!(bc = [_browserColumns objectAtIndex: column]))
|
||||
return;
|
||||
bc = [_browserColumns objectAtIndex: column];
|
||||
|
||||
if (!(sc = [bc columnScrollView]))
|
||||
return;
|
||||
|
@ -3072,19 +3138,22 @@ static float scrollerWidth; // == [NSScroller scrollerWidth]
|
|||
count = [_browserColumns count];
|
||||
for (i = column; i < count; ++i)
|
||||
{
|
||||
if (!(bc = [_browserColumns objectAtIndex: i]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
bc = [_browserColumns objectAtIndex: i];
|
||||
sc = [bc columnScrollView];
|
||||
|
||||
if ([bc isLoaded])
|
||||
{
|
||||
if (!(sc = [bc columnScrollView]))
|
||||
continue;
|
||||
// Make the column appear empty by removing the matrix
|
||||
[sc setDocumentView: nil];
|
||||
[sc setNeedsDisplay: YES];
|
||||
if (sc)
|
||||
{
|
||||
[sc setDocumentView: nil];
|
||||
[sc setNeedsDisplay: YES];
|
||||
}
|
||||
[bc setIsLoaded: NO];
|
||||
}
|
||||
|
||||
if (!_reusesColumns && i >= _maxVisibleColumns)
|
||||
[_browserColumns removeObject:bc];
|
||||
}
|
||||
|
||||
if (column == 0)
|
||||
|
|
|
@ -220,6 +220,7 @@ static NSFont *_leafFont;
|
|||
NSImage *image = nil;
|
||||
NSColor *backColor;
|
||||
NSWindow *cvWin = [controlView window];
|
||||
BOOL showsFirstResponder;
|
||||
|
||||
if (!cvWin)
|
||||
return;
|
||||
|
@ -244,6 +245,8 @@ static NSFont *_leafFont;
|
|||
// Clear the background
|
||||
NSRectFill(cellFrame);
|
||||
|
||||
showsFirstResponder = _cell.shows_first_responder;
|
||||
|
||||
// Draw the branch image if there is one
|
||||
if (image)
|
||||
{
|
||||
|
@ -290,9 +293,16 @@ static NSFont *_leafFont;
|
|||
else
|
||||
{
|
||||
// Draw image, or text
|
||||
_cell.shows_first_responder = NO;
|
||||
|
||||
[super drawInteriorWithFrame: title_rect inView: controlView];
|
||||
}
|
||||
|
||||
if (showsFirstResponder == YES)
|
||||
NSDottedFrameRect(cellFrame);
|
||||
|
||||
_cell.shows_first_responder = showsFirstResponder;
|
||||
|
||||
[controlView unlockFocus];
|
||||
}
|
||||
|
||||
|
|
|
@ -323,6 +323,34 @@ id _nsbuttonCellClass = nil;
|
|||
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
|
||||
{
|
||||
if ([self isEnabled])
|
||||
|
|
|
@ -127,6 +127,79 @@
|
|||
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
|
||||
{
|
||||
// TODO Should change the size of the key equivalent font
|
||||
|
@ -739,6 +812,16 @@
|
|||
{
|
||||
[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];
|
||||
}
|
||||
|
||||
|
|
|
@ -395,7 +395,76 @@ static NSColor *shadowCol;
|
|||
|
||||
- (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 setRichText: _cell.is_rich_text];
|
||||
[textObject setImportsGraphics: _cell.imports_graphics];
|
||||
[textObject setSelectedRange: NSMakeRange(0, 0)];
|
||||
|
||||
return textObject;
|
||||
}
|
||||
|
@ -1438,11 +1508,6 @@ static NSColor *shadowCol;
|
|||
|
||||
[controlView lockFocus];
|
||||
|
||||
/* TODO: Enable this when NSDottedFrameRect is implemented.
|
||||
if (_cell.show_first_responder && [controlView isFirstResponder])
|
||||
NSDottedFrameRect(cellFrame);
|
||||
*/
|
||||
|
||||
switch (_cell.type)
|
||||
{
|
||||
case NSTextCellType:
|
||||
|
@ -1480,6 +1545,11 @@ static NSColor *shadowCol;
|
|||
case NSNullCellType:
|
||||
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
|
||||
// to reuse this code while doing their own custom highlighting and
|
||||
// prettyfying
|
||||
|
@ -1576,12 +1646,13 @@ static NSColor *shadowCol;
|
|||
|
||||
[textObject setDelegate: anObject];
|
||||
[[controlView window] makeFirstResponder: textObject];
|
||||
[textObject display];
|
||||
|
||||
if ([theEvent type] == NSLeftMouseDown)
|
||||
{
|
||||
[textObject mouseDown: theEvent];
|
||||
}
|
||||
|
||||
[textObject display];
|
||||
}
|
||||
|
||||
- (void) endEditing: (NSText*)textObject
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
Date: November 1999
|
||||
Implementation of Editing: Nicola Pero <n.pero@mi.flashnet.it>
|
||||
Date: November 1999
|
||||
Modified: Mirko Viviani <mirko.viviani@rccr.cremona.it>
|
||||
Date: March 2001
|
||||
|
||||
This file is part of the GNUstep GUI Library.
|
||||
|
||||
|
@ -210,6 +212,7 @@ static SEL getSel;
|
|||
[self setCellBackgroundColor: [NSColor controlBackgroundColor]];
|
||||
[self setSelectionByRect: YES];
|
||||
[self setAutosizesCells: YES];
|
||||
_dottedRow = _dottedColumn = -1;
|
||||
if (_mode == NSRadioModeMatrix && _numRows > 0 && _numCols > 0)
|
||||
{
|
||||
[self selectCellAtRow: 0 column: 0];
|
||||
|
@ -437,6 +440,9 @@ static SEL getSel;
|
|||
_selectedCells[row] = olds;
|
||||
if (_selectedCell && (_selectedRow >= row))
|
||||
_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];
|
||||
}
|
||||
|
||||
|
@ -546,7 +553,14 @@ static SEL getSel;
|
|||
if (col == _selectedColumn)
|
||||
{
|
||||
_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
|
||||
|
@ -585,7 +599,14 @@ static SEL getSel;
|
|||
if (row == _selectedRow)
|
||||
{
|
||||
_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
|
||||
|
@ -782,10 +803,22 @@ static SEL getSel;
|
|||
{
|
||||
if (value)
|
||||
{
|
||||
if (_selectedRow > -1 && _selectedColumn > -1)
|
||||
{
|
||||
_selectedCells[_selectedRow][_selectedColumn] = NO;
|
||||
}
|
||||
|
||||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
[_selectedCell setState: 1];
|
||||
|
||||
if ([_cells[_dottedRow][_dottedColumn] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
|
||||
[_selectedCell setState: value];
|
||||
_selectedCells[row][column] = YES;
|
||||
}
|
||||
else if (_allowsEmptySelection)
|
||||
|
@ -861,46 +894,37 @@ static SEL getSel;
|
|||
{
|
||||
unsigned i, j;
|
||||
|
||||
_selectedCell = nil;
|
||||
_selectedRow = -1;
|
||||
_selectedColumn = -1;
|
||||
|
||||
for (i = 0; i < _numRows; i++)
|
||||
{
|
||||
for (j = 0; j < _numCols; j++)
|
||||
{
|
||||
[_cells[i][j] setState: 1];
|
||||
_selectedCells[i][j] = YES;
|
||||
}
|
||||
}
|
||||
if ([_cells[i][j] isEnabled] == YES
|
||||
&& [_cells[i][j] isEditable] == NO)
|
||||
{
|
||||
_selectedCell = _cells[i][j];
|
||||
[_selectedCell setState: 1];
|
||||
_selectedCells[i][j] = YES;
|
||||
|
||||
/*
|
||||
* Make the selected cell the last cell
|
||||
*/
|
||||
if ((_numRows >0) && (_numCols > 0))
|
||||
{
|
||||
_selectedCell = [self cellAtRow: _numRows - 1 column: _numCols - 1];
|
||||
_selectedRow = _numRows - 1;
|
||||
_selectedColumn = _numCols - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
_selectedCell = nil;
|
||||
_selectedRow = -1;
|
||||
_selectedColumn = -1;
|
||||
_selectedRow = i;
|
||||
_selectedColumn = j;
|
||||
}
|
||||
else
|
||||
{
|
||||
_selectedCells[i][j] = NO;
|
||||
[_cells[i][j] setShowsFirstResponder: NO];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[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
|
||||
* is the same. (in NSRadioModeMatrix)
|
||||
|
@ -916,10 +940,25 @@ static SEL getSel;
|
|||
|
||||
if (aCell != nil)
|
||||
{
|
||||
if (_selectedCell && _selectedCell != aCell)
|
||||
{
|
||||
[_selectedCell setShowsFirstResponder: NO];
|
||||
[self setNeedsDisplayInRect: [self cellFrameAtRow: _selectedRow
|
||||
column: _selectedColumn]];
|
||||
}
|
||||
|
||||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
_selectedCells[row][column] = YES;
|
||||
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
[_selectedCell setShowsFirstResponder: YES];
|
||||
}
|
||||
|
||||
[_selectedCell setState: 1];
|
||||
|
||||
// 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
|
||||
{
|
||||
id aCell;
|
||||
|
@ -946,7 +1009,7 @@ static SEL getSel;
|
|||
aCell = _cells[i][j];
|
||||
if ([aCell tag] == anInt)
|
||||
{
|
||||
[self selectCellAtRow: i column: j];
|
||||
[self _selectCell: aCell atRow: i column: j];
|
||||
return YES;
|
||||
}
|
||||
}
|
||||
|
@ -1268,9 +1331,24 @@ static SEL getSel;
|
|||
if ([t resignFirstResponder] == NO)
|
||||
return nil;
|
||||
|
||||
if (_selectedCell && _selectedCell != _cells[row][column])
|
||||
{
|
||||
[_selectedCell setShowsFirstResponder: NO];
|
||||
[self setNeedsDisplayInRect: [self cellFrameAtRow: _selectedRow
|
||||
column: _selectedColumn]];
|
||||
}
|
||||
|
||||
_selectedCell = _cells[row][column];
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
[_selectedCell setShowsFirstResponder: YES];
|
||||
}
|
||||
|
||||
/* See comment in NSTextField */
|
||||
length = [[_selectedCell stringValue] length];
|
||||
_textObject = [_selectedCell setUpFieldEditorAttributes: t];
|
||||
|
@ -1412,7 +1490,11 @@ static SEL getSel;
|
|||
switch ([(NSNumber *)textMovement intValue])
|
||||
{
|
||||
case NSReturnTextMovement:
|
||||
[self sendAction];
|
||||
if ([self sendAction] == NO)
|
||||
{
|
||||
if ([self performKeyEquivalent: [_window currentEvent]] == NO)
|
||||
[self selectText: self];
|
||||
}
|
||||
break;
|
||||
case NSTabTextMovement:
|
||||
if (_tabKeyTraversesCells)
|
||||
|
@ -1422,6 +1504,17 @@ static SEL getSel;
|
|||
break;
|
||||
}
|
||||
[_window selectKeyViewFollowingView: self];
|
||||
|
||||
if ([_window firstResponder] == _window)
|
||||
{
|
||||
if (_tabKeyTraversesCells)
|
||||
{
|
||||
if([self _selectNextSelectableCellAfterRow: -1
|
||||
column: -1])
|
||||
break;
|
||||
}
|
||||
[self selectText: self];
|
||||
}
|
||||
break;
|
||||
case NSBacktabTextMovement:
|
||||
if (_tabKeyTraversesCells)
|
||||
|
@ -1431,6 +1524,17 @@ static SEL getSel;
|
|||
break;
|
||||
}
|
||||
[_window selectKeyViewPrecedingView: self];
|
||||
|
||||
if ([_window firstResponder] == _window)
|
||||
{
|
||||
if (_tabKeyTraversesCells)
|
||||
{
|
||||
if([self _selectPreviousSelectableCellBeforeRow: _numRows
|
||||
column: _numCols])
|
||||
break;
|
||||
}
|
||||
[self selectText: self];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1595,12 +1699,23 @@ static SEL getSel;
|
|||
if (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. */
|
||||
for (i = row1; i <= row2 && i < _numRows; i++)
|
||||
for (j = col1; j <= col2 && j < _numCols; j++)
|
||||
{
|
||||
[self drawCellAtRow: i column: j];
|
||||
}
|
||||
|
||||
if (_dottedRow != -1 && _dottedColumn != -1)
|
||||
[_cells[_dottedRow][_dottedColumn] setShowsFirstResponder: NO];
|
||||
}
|
||||
|
||||
- (BOOL) isOpaque
|
||||
|
@ -1931,40 +2046,48 @@ static SEL getSel;
|
|||
column: &column
|
||||
forPoint: lastLocation])
|
||||
{
|
||||
if ((_mode == NSRadioModeMatrix) && _selectedCell != nil)
|
||||
if ([_cells[row][column] isEnabled])
|
||||
{
|
||||
[_selectedCell setState: NSOffState];
|
||||
[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 ((_mode == NSRadioModeMatrix) && _selectedCell != nil)
|
||||
{
|
||||
if ([t resignFirstResponder] == NO)
|
||||
{
|
||||
if ([_window makeFirstResponder: _window] == NO)
|
||||
return;
|
||||
}
|
||||
[_selectedCell setState: NSOffState];
|
||||
[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)
|
||||
{
|
||||
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];
|
||||
rect = [self cellFrameAtRow: row column: column];
|
||||
if (aCell != previousCell)
|
||||
if (aCell != previousCell && [aCell isEnabled] == YES)
|
||||
{
|
||||
switch (_mode)
|
||||
{
|
||||
|
@ -2019,6 +2142,11 @@ static SEL getSel;
|
|||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
if ([aCell trackMouse: lastEvent
|
||||
inRect: rect
|
||||
ofView: self
|
||||
|
@ -2034,6 +2162,11 @@ static SEL getSel;
|
|||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
[aCell highlight: YES withFrame: rect inView: self];
|
||||
[_window flushWindow];
|
||||
|
||||
|
@ -2069,6 +2202,11 @@ static SEL getSel;
|
|||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
[aCell setState: 1];
|
||||
[aCell highlight: YES withFrame: rect inView: self];
|
||||
_selectedCells[row][column] = YES;
|
||||
|
@ -2102,6 +2240,12 @@ static SEL getSel;
|
|||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
|
||||
[_selectedCell setState: 1];
|
||||
[_selectedCell highlight: YES
|
||||
withFrame: rect
|
||||
|
@ -2121,6 +2265,11 @@ static SEL getSel;
|
|||
_selectedCell = aCell;
|
||||
_selectedRow = row;
|
||||
_selectedColumn = column;
|
||||
if ([_cells[row][column] acceptsFirstResponder])
|
||||
{
|
||||
_dottedRow = row;
|
||||
_dottedColumn = column;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2735,6 +2884,39 @@ static SEL getSel;
|
|||
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
|
||||
{
|
||||
if (_textObject)
|
||||
|
@ -2984,7 +3166,7 @@ static SEL getSel;
|
|||
// First look for cells in the same row
|
||||
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
|
||||
column: j];
|
||||
|
@ -2999,7 +3181,7 @@ static SEL getSel;
|
|||
{
|
||||
for (j = 0; j < _numCols; j++)
|
||||
{
|
||||
if ([_cells[i][j] isSelectable])
|
||||
if ([_cells[i][j] isEnabled] && [_cells[i][j] isSelectable])
|
||||
{
|
||||
_selectedCell = [self selectTextAtRow: i
|
||||
column: j];
|
||||
|
@ -3011,16 +3193,17 @@ static SEL getSel;
|
|||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
-(BOOL) _selectPreviousSelectableCellBeforeRow: (int)row
|
||||
column: (int)column
|
||||
{
|
||||
int i,j;
|
||||
if (row < _numCols)
|
||||
if (row < _numRows)
|
||||
{
|
||||
// First look for cells in the same row
|
||||
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
|
||||
column: j];
|
||||
|
@ -3035,7 +3218,7 @@ static SEL getSel;
|
|||
{
|
||||
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
|
||||
column: j];
|
||||
|
|
|
@ -62,7 +62,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
|||
|
||||
@interface NSOpenPanel (_PrivateMethods)
|
||||
- (void) _resetDefaults;
|
||||
- (BOOL) _shouldShowExtension: (NSString *)extension;
|
||||
- (BOOL) _shouldShowExtension: (NSString *)extension isDir: (BOOL *)isDir;
|
||||
@end
|
||||
|
||||
@implementation NSOpenPanel (_PrivateMethods)
|
||||
|
@ -75,16 +75,27 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
|||
[self setAllowsMultipleSelection: NO];
|
||||
[_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
|
||||
|
@ -110,7 +121,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
|||
else
|
||||
{
|
||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||
[_form selectTextAtIndex:0];
|
||||
// [_form selectTextAtIndex:0];
|
||||
[_okButton setEnabled:YES];
|
||||
}
|
||||
}
|
||||
|
@ -118,7 +129,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
|||
{
|
||||
[_form abortEditing];
|
||||
[[_form cellAtIndex: 0] setStringValue:nil];
|
||||
[_form selectTextAtIndex:0];
|
||||
// [_form selectTextAtIndex:0];
|
||||
[_form setNeedsDisplay:YES];
|
||||
[_okButton setEnabled:YES];
|
||||
}
|
||||
|
@ -132,7 +143,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
|
|||
if([[[_form cellAtIndex: 0] stringValue] length] > 0)
|
||||
{
|
||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||
[_form selectTextAtIndex:0];
|
||||
// [_form selectTextAtIndex:0];
|
||||
[_form setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
|
|
|
@ -296,7 +296,20 @@ Class _nspopupbuttonCellClass = 0;
|
|||
{
|
||||
[[popb_menu menuRepresentation] sizeToFit];
|
||||
[super sizeToFit];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL) resignFirstResponder
|
||||
{
|
||||
[_cell dismissPopUp];
|
||||
|
||||
return [super resignFirstResponder];
|
||||
}
|
||||
|
||||
- (void) resignKeyWindow
|
||||
{
|
||||
[_cell dismissPopUp];
|
||||
[super resignKeyWindow];
|
||||
}
|
||||
|
||||
- (void) mouseDown: (NSEvent*)theEvent
|
||||
{
|
||||
|
@ -342,6 +355,102 @@ Class _nspopupbuttonCellClass = 0;
|
|||
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
|
||||
*/
|
||||
|
|
|
@ -525,8 +525,8 @@ static NSImage *_pbc_image[2];
|
|||
* that is used to draw cells in the menu.
|
||||
* This looks like a mess to do in this framework.
|
||||
*/
|
||||
- (void) drawWithFrame: (NSRect)cellFrame
|
||||
inView: (NSView*)view
|
||||
- (void) drawInteriorWithFrame: (NSRect)cellFrame
|
||||
inView: (NSView*)view
|
||||
{
|
||||
NSSize size;
|
||||
NSPoint position;
|
||||
|
@ -538,11 +538,19 @@ static NSImage *_pbc_image[2];
|
|||
|
||||
[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
|
||||
cellFrame.origin.x += 5;
|
||||
cellFrame.size.width -= 5;
|
||||
// cellFrame.origin.x += 5;
|
||||
// cellFrame.size.width -= 5;
|
||||
|
||||
[self _drawText: [self titleOfSelectedItem] inFrame: cellFrame];
|
||||
|
||||
|
@ -562,6 +570,16 @@ static NSImage *_pbc_image[2];
|
|||
position.y += size.height;
|
||||
[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];
|
||||
}
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
// Subclasses (read NSOpenPanel) may implement this
|
||||
// to filter some extensions out of displayed files.
|
||||
@interface NSObject (_SavePanelPrivate)
|
||||
-(BOOL) _shouldShowExtension: (NSString*)extension;
|
||||
-(BOOL) _shouldShowExtension: (NSString*)extension isDir: (BOOL *)isDir;
|
||||
@end
|
||||
//
|
||||
|
||||
|
@ -92,6 +92,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
NSButton *button;
|
||||
NSImage *image;
|
||||
NSRect r;
|
||||
id lastKeyView;
|
||||
|
||||
//
|
||||
// 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);
|
||||
_browser = [[NSBrowser alloc] initWithFrame: r];
|
||||
lastKeyView = _browser;
|
||||
[_browser setDelegate: self];
|
||||
[_browser setMaxVisibleColumns: 2];
|
||||
[_browser setHasHorizontalScroller: YES];
|
||||
|
@ -146,6 +148,8 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[_form setAutoresizingMask: NSViewWidthSizable];
|
||||
[_form setDelegate: self];
|
||||
[_bottomView addSubview: _form];
|
||||
[lastKeyView setNextKeyView: _form];
|
||||
lastKeyView = _form;
|
||||
[_form release];
|
||||
|
||||
r = NSMakeRect (43, 6, 27, 27);
|
||||
|
@ -161,6 +165,8 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[button setAutoresizingMask: NSViewMinXMargin];
|
||||
[button setTag: NSFileHandlingPanelHomeButton];
|
||||
[_bottomView addSubview: button];
|
||||
[lastKeyView setNextKeyView: button];
|
||||
lastKeyView = button;
|
||||
[button release];
|
||||
|
||||
r = NSMakeRect (78, 6, 27, 27);
|
||||
|
@ -175,6 +181,8 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[button setAutoresizingMask: NSViewMinXMargin];
|
||||
[button setTag: NSFileHandlingPanelDiskButton];
|
||||
[_bottomView addSubview: button];
|
||||
[lastKeyView setNextKeyView: button];
|
||||
lastKeyView = button;
|
||||
[button release];
|
||||
|
||||
r = NSMakeRect (112, 6, 27, 27);
|
||||
|
@ -189,6 +197,8 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[button setAutoresizingMask: NSViewMinXMargin];
|
||||
[button setTag: NSFileHandlingPanelDiskEjectButton];
|
||||
[_bottomView addSubview: button];
|
||||
[lastKeyView setNextKeyView: button];
|
||||
lastKeyView = button;
|
||||
[button release];
|
||||
|
||||
r = NSMakeRect (148, 6, 71, 27);
|
||||
|
@ -202,6 +212,8 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[button setAutoresizingMask: NSViewMinXMargin];
|
||||
[button setTag: NSFileHandlingPanelCancelButton];
|
||||
[_bottomView addSubview: button];
|
||||
[lastKeyView setNextKeyView: button];
|
||||
lastKeyView = button;
|
||||
[button release];
|
||||
|
||||
r = NSMakeRect (228, 6, 71, 27);
|
||||
|
@ -215,11 +227,12 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[_okButton setTarget: self];
|
||||
[_okButton setAction: @selector(ok:)];
|
||||
[_okButton setEnabled: NO];
|
||||
// [_okButton setNextKeyView: _form];
|
||||
[_okButton setAutoresizingMask: NSViewMinXMargin];
|
||||
[_okButton setTag: NSFileHandlingPanelOKButton];
|
||||
[_bottomView addSubview: _okButton];
|
||||
[self setDefaultButtonCell:[_okButton cell]];
|
||||
[lastKeyView setNextKeyView: _okButton];
|
||||
[_okButton setNextKeyView: _browser];
|
||||
[self setDefaultButtonCell: [_okButton cell]];
|
||||
[_okButton release];
|
||||
|
||||
[_browser setDoubleAction: @selector(performClick:)];
|
||||
|
@ -259,6 +272,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
[bar release];
|
||||
|
||||
[self setContentSize: NSMakeSize (384, 426)];
|
||||
[self setInitialFirstResponder: _form];
|
||||
[super setTitle: @""];
|
||||
|
||||
return self;
|
||||
|
@ -317,7 +331,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
if (isLeaf)
|
||||
{
|
||||
[[_form cellAtIndex: 0] setStringValue: [selectedCell stringValue]];
|
||||
[_form selectTextAtIndex:0];
|
||||
// [_form selectTextAtIndex:0];
|
||||
[_form setNeedsDisplay:YES];
|
||||
[_okButton setEnabled:YES];
|
||||
}
|
||||
|
@ -327,7 +341,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
{
|
||||
[_okButton setEnabled:YES];
|
||||
[self _selectCellName:[[_form cellAtIndex: 0] stringValue]];
|
||||
[_form selectTextAtIndex:0];
|
||||
// [_form selectTextAtIndex:0];
|
||||
[_form setNeedsDisplay:YES];
|
||||
}
|
||||
else
|
||||
|
@ -448,7 +462,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
_delegateHasShowFilenameFilter = NO;
|
||||
_delegateHasValidNameFilter = NO;
|
||||
|
||||
if ([self respondsToSelector: @selector(_shouldShowExtension:)])
|
||||
if ([self respondsToSelector: @selector(_shouldShowExtension:isDir:)])
|
||||
_selfHasShowExtensionFilter = YES;
|
||||
else
|
||||
_selfHasShowExtensionFilter = NO;
|
||||
|
@ -767,6 +781,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
|
||||
switch (character)
|
||||
{
|
||||
#if 0
|
||||
case NSTabCharacter:
|
||||
if ([theEvent modifierFlags] & NSShiftKeyMask)
|
||||
{
|
||||
|
@ -794,7 +809,7 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
isARepeat:NO
|
||||
keyCode:0]];
|
||||
break;
|
||||
|
||||
#endif
|
||||
case NSUpArrowFunctionKey:
|
||||
case NSDownArrowFunctionKey:
|
||||
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
|
||||
{
|
||||
if ([aDelegate respondsToSelector:
|
||||
|
@ -889,6 +858,91 @@ static BOOL _gs_display_reading_progress = NO;
|
|||
}
|
||||
@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
|
||||
//
|
||||
|
@ -990,7 +1044,7 @@ createRowsForColumn: (int)column
|
|||
context: nil];
|
||||
}
|
||||
else
|
||||
files = [files sortedArrayUsingSelector: @selector(compare:)];
|
||||
files = [files sortedArrayUsingSelector: @selector(_gsSavePanelCompare:)];
|
||||
|
||||
addedRows = 0;
|
||||
for (i = 0; i < count; i++)
|
||||
|
@ -1020,17 +1074,14 @@ createRowsForColumn: (int)column
|
|||
if (_treatsFilePackagesAsDirectories == NO && isDir == YES && exists)
|
||||
{
|
||||
// Ones with more chance first
|
||||
if ([extension isEqualToString: @"app"]
|
||||
|| [extension isEqualToString: @"bundle"]
|
||||
|| [extension isEqualToString: @"palette"]
|
||||
|| [extension isEqualToString: @"debug"]
|
||||
|| [extension isEqualToString: @"profile"])
|
||||
isDir = NO;
|
||||
if ([self isMemberOfClass: [NSSavePanel class]] == YES)
|
||||
if ([extension isEqualToString: _requiredFileType] == YES)
|
||||
isDir = NO;
|
||||
}
|
||||
|
||||
if (_selfHasShowExtensionFilter && exists && (isDir == NO))
|
||||
if (_selfHasShowExtensionFilter && exists)
|
||||
{
|
||||
exists = [self _shouldShowExtension: extension];
|
||||
exists = [self _shouldShowExtension: extension isDir: &isDir];
|
||||
}
|
||||
|
||||
if (exists)
|
||||
|
@ -1149,33 +1200,10 @@ selectCellWithString: (NSString*)title
|
|||
// NSForm delegate methods
|
||||
//
|
||||
@interface NSSavePanel (FormDelegate)
|
||||
- (void) controlTextDidEndEditing: (NSNotification*)aNotification;
|
||||
- (void) controlTextDidChange: (NSNotification *)aNotification;
|
||||
@end
|
||||
@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;
|
||||
{
|
||||
NSString *s, *selectedString;
|
||||
|
|
|
@ -458,13 +458,23 @@ static NSNotificationCenter *nc;
|
|||
switch ([(NSNumber *)textMovement intValue])
|
||||
{
|
||||
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;
|
||||
case NSTabTextMovement:
|
||||
[_window selectKeyViewFollowingView: self];
|
||||
|
||||
if ([_window firstResponder] == _window)
|
||||
[self selectText: self];
|
||||
break;
|
||||
case NSBacktabTextMovement:
|
||||
[_window selectKeyViewPrecedingView: self];
|
||||
|
||||
if ([_window firstResponder] == _window)
|
||||
[self selectText: self];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2264,10 +2264,7 @@ afterString in order over charRange. */
|
|||
unsigned newLocation;
|
||||
|
||||
if (_tf.is_field_editor)
|
||||
{
|
||||
[self _illegalMovement: NSUpTextMovement];
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
/* Do nothing if we are at beginning of text */
|
||||
if (_selected_range.location == 0)
|
||||
|
@ -2303,10 +2300,7 @@ afterString in order over charRange. */
|
|||
unsigned newLocation;
|
||||
|
||||
if (_tf.is_field_editor)
|
||||
{
|
||||
[self _illegalMovement: NSDownTextMovement];
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
/* Do nothing if we are at end of text */
|
||||
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 */
|
||||
if (_selected_range.location == 0 && _selected_range.length == 0)
|
||||
{
|
||||
if (_tf.is_field_editor)
|
||||
{
|
||||
[self _illegalMovement: NSLeftTextMovement];
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
if (_selected_range.location == 0)
|
||||
{
|
||||
|
@ -2368,13 +2356,7 @@ afterString in order over charRange. */
|
|||
|
||||
/* Do nothing if we are at end of text */
|
||||
if (_selected_range.location == length)
|
||||
{
|
||||
if (_tf.is_field_editor)
|
||||
{
|
||||
[self _illegalMovement: NSRightTextMovement];
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
newLocation = MIN (NSMaxRange (_selected_range) + 1, length);
|
||||
|
||||
|
|
|
@ -425,6 +425,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
|||
}
|
||||
aSubview->_super_view = nil;
|
||||
[aSubview viewWillMoveToWindow: nil];
|
||||
[aSubview setNextResponder: nil];
|
||||
[_sub_views removeObjectIdenticalTo: aSubview];
|
||||
if ([_sub_views count] == 0)
|
||||
{
|
||||
|
|
|
@ -555,6 +555,7 @@ static NSMapTable* windowmaps = NULL;
|
|||
TEST_RELEASE(_windowTitle);
|
||||
TEST_RELEASE(_rectsBeingDrawn);
|
||||
TEST_RELEASE(_initialFirstResponder);
|
||||
TEST_RELEASE(_originalResponder);
|
||||
TEST_RELEASE(_defaultButtonCell);
|
||||
|
||||
/*
|
||||
|
@ -2440,24 +2441,27 @@ resetCursorRectsForView(NSView *theView)
|
|||
{
|
||||
[NSApp activateIgnoringOtherApps: YES];
|
||||
}
|
||||
if (_f.is_key == NO)
|
||||
if (_f.has_closed == NO)
|
||||
{
|
||||
[self makeKeyAndOrderFront: self];
|
||||
}
|
||||
v = [_contentView hitTest: [theEvent locationInWindow]];
|
||||
if (_firstResponder != v)
|
||||
{
|
||||
[self makeFirstResponder: v];
|
||||
}
|
||||
if (wasKey == YES || [v acceptsFirstMouse: theEvent] == YES)
|
||||
{
|
||||
if ([NSHelpManager isContextHelpModeActive])
|
||||
if (_f.is_key == NO)
|
||||
{
|
||||
[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];
|
||||
|
@ -2554,7 +2558,7 @@ resetCursorRectsForView(NSView *theView)
|
|||
* Save the first responder so that the key up goes to it and not a
|
||||
* possible new first responder.
|
||||
*/
|
||||
_originalResponder = _firstResponder;
|
||||
ASSIGN(_originalResponder, _firstResponder);
|
||||
[_firstResponder keyDown: theEvent];
|
||||
break;
|
||||
|
||||
|
@ -2564,6 +2568,7 @@ resetCursorRectsForView(NSView *theView)
|
|||
*/
|
||||
if (_originalResponder)
|
||||
[_originalResponder keyUp: theEvent];
|
||||
DESTROY(_originalResponder);
|
||||
break;
|
||||
|
||||
case NSFlagsChanged: // Flags changed
|
||||
|
|
Loading…
Reference in a new issue