Update the browser of NSSavePanel and NSOpenPanel when the list of

allowed file extensions is changed.
Also fix bug in NSSavePanel's _shouldShowExtension:isDir: introduced
in previous check in.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@27231 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Wolfgang Lux 2008-12-06 18:38:27 +00:00
parent f255ae36f0
commit 290b38361d
3 changed files with 56 additions and 16 deletions

View file

@ -1,4 +1,12 @@
2008-12-06 Wolfgang Lux <wlux@uni-muenster.de>
2008-12-06 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/NSSavePanel.m (-_reloadBrowser:, -setRequiredFileType:,
-setAllowedFileTypes:, -setTreatsFilePackagesAsDirectories:):
* Source/NSOpenPanel.m (-_setupForTypes:, -setCanChooseFiles:)
-runModal..., -beginSheet...): Update the panels' browser when the
list of visible file extensions is changed programmatically.
2008-12-06 Wolfgang Lux <wolfgang.lux@gmail.com>
* Headers/AppKit/NSSavePanel.h:
* Source/NSSavePanel.m (-requiredFileType, -setRequiredFileType:,

View file

@ -74,9 +74,11 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
@interface NSSavePanel (GSPrivateMethods)
- (void) _resetDefaults;
- (void) _updateDefaultDirectory;
- (void) _reloadBrowser;
- (void) _selectCellName: (NSString *)title;
- (void) _selectTextInColumn: (int)column;
- (void) _setupForDirectory: (NSString *)path file: (NSString *)filename;
- (void) _setupForTypes: (NSArray *)fileTypes; /* I'm cheating here... */
- (BOOL) _shouldShowExtension: (NSString *)extension isDir: (BOOL *)isDir;
- (NSComparisonResult) _compareFilename: (NSString *)n1 with: (NSString *)n2;
@end
@ -236,6 +238,16 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
[super _setupForDirectory: path file: filename];
}
- (void) _setupForTypes: (NSArray *)fileTypes
{
if (_fileTypes != fileTypes)
{
BOOL reload = ![_fileTypes isEqual: fileTypes];
ASSIGN (_fileTypes, fileTypes);
if (reload)
[self _reloadBrowser];
}
}
@end
/**
@ -348,7 +360,11 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
*/
- (void) setCanChooseFiles: (BOOL)flag
{
_canChooseFiles = flag;
if (flag != _canChooseFiles)
{
_canChooseFiles = flag;
[self _reloadBrowser];
}
}
/**<p>Returns YES if the user is allowed to choose files. The
@ -460,8 +476,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
file: (NSString *)name
types: (NSArray *)fileTypes
{
ASSIGN (_fileTypes, fileTypes);
[self _setupForTypes: fileTypes];
return [self runModalForDirectory: path
file: name];
}
@ -471,8 +486,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
types: (NSArray *)fileTypes
relativeToWindow: (NSWindow*)window
{
ASSIGN (_fileTypes, fileTypes);
[self _setupForTypes: fileTypes];
return [self runModalForDirectory: path
file: name
relativeToWindow: window];
@ -486,8 +500,7 @@ static NSOpenPanel *_gs_gui_open_panel = nil;
didEndSelector: (SEL)didEndSelector
contextInfo: (void *)contextInfo
{
ASSIGN (_fileTypes, fileTypes);
[self _setupForTypes: fileTypes];
[self beginSheetForDirectory: path
file: name
modalForWindow: docWindow

View file

@ -110,6 +110,7 @@ setPath(NSBrowser *browser, NSString *path)
- (void) _setDefaultDirectory;
- (void) _updateDefaultDirectory;
- (void) _resetDefaults;
- (void) _reloadBrowser;
// Methods invoked by buttons
- (void) _setHomeDirectory;
- (void) _mountMedia;
@ -418,6 +419,13 @@ setPath(NSBrowser *browser, NSString *path)
[self setAccessoryView: nil];
}
- (void) _reloadBrowser
{
NSString *path = [_browser path];
[_browser loadColumnZero];
setPath(_browser, path);
}
//
// Methods invoked by button press
//
@ -590,7 +598,7 @@ selectCellWithString: (NSString*)title
{
if (_allowedFileTypes != nil
&& [_allowedFileTypes indexOfObject: extension] == NSNotFound
&& [_allowedFileTypes indexOfObject: @""] != NSNotFound)
&& [_allowedFileTypes indexOfObject: @""] == NSNotFound)
return NO;
}
else if ([extension length] == 0)
@ -935,10 +943,13 @@ selectCellWithString: (NSString*)title
*/
- (void) setRequiredFileType: (NSString*)fileType
{
NSArray *fileTypes;
if ([fileType length] == 0)
DESTROY(_allowedFileTypes);
fileTypes = nil;
else
ASSIGN(_allowedFileTypes, [NSArray arrayWithObject: fileType]);
fileTypes = [NSArray arrayWithObject: fileType];
[self setAllowedFileTypes: fileTypes];
}
/**<p>Returns the required file type. The default, indicated by an empty
@ -966,10 +977,14 @@ selectCellWithString: (NSString*)title
*/
- (void) setAllowedFileTypes: (NSArray *)types
{
if ([types count] == 0)
DESTROY(_allowedFileTypes);
else
ASSIGN(_allowedFileTypes, types);
if (types != _allowedFileTypes)
{
if ([types count] == 0)
DESTROY(_allowedFileTypes);
else
ASSIGN(_allowedFileTypes, types);
[self _reloadBrowser];
}
}
/**<p>Returns an array of the allowed file types. The default, indicated by
@ -1006,7 +1021,11 @@ selectCellWithString: (NSString*)title
*/
- (void) setTreatsFilePackagesAsDirectories: (BOOL)flag
{
_treatsFilePackagesAsDirectories = flag;
if (flag != _treatsFilePackagesAsDirectories)
{
_treatsFilePackagesAsDirectories = flag;
[self _reloadBrowser];
}
}
/**<p> Validates and possibly reloads the browser columns that are visible