* 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:
Mirko Viviani 2001-03-22 00:27:37 +00:00
parent 2bbfbf1bb5
commit 60b8f20ce4
17 changed files with 1001 additions and 290 deletions

View file

@ -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)