mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-29 20:27:39 +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
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue