mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-30 05:00:38 +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
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue