diff --git a/ChangeLog b/ChangeLog index d08df8215..e9d8bc27a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,12 @@ -2008-12-06 Wolfgang Lux +2008-12-06 Wolfgang Lux + + * 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 * Headers/AppKit/NSSavePanel.h: * Source/NSSavePanel.m (-requiredFileType, -setRequiredFileType:, diff --git a/Source/NSOpenPanel.m b/Source/NSOpenPanel.m index 40927f07c..8d378f8e2 100644 --- a/Source/NSOpenPanel.m +++ b/Source/NSOpenPanel.m @@ -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]; + } } /**

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 diff --git a/Source/NSSavePanel.m b/Source/NSSavePanel.m index 9091cc9dd..fd1f7cccb 100644 --- a/Source/NSSavePanel.m +++ b/Source/NSSavePanel.m @@ -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]; } /**

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]; + } } /**

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]; + } } /**

Validates and possibly reloads the browser columns that are visible