diff --git a/MacPass/MPDocumentController.h b/MacPass/MPDocumentController.h index 03a8ad59..d22d1984 100644 --- a/MacPass/MPDocumentController.h +++ b/MacPass/MPDocumentController.h @@ -10,6 +10,7 @@ @interface MPDocumentController : NSDocumentController -- (IBAction)toggleAllowAllFilesButton:(id)sender; +- (IBAction)toggleAllowAllFiles:(id)sender; +- (IBAction)toggleShowHiddenFiles:(id)sender; @end diff --git a/MacPass/MPDocumentController.m b/MacPass/MPDocumentController.m index cf9ddb6b..acf311c3 100644 --- a/MacPass/MPDocumentController.m +++ b/MacPass/MPDocumentController.m @@ -18,22 +18,15 @@ @interface MPDocumentController () @property (strong) IBOutlet NSView *accessoryView; +@property (weak) IBOutlet NSButton *allowAllCheckBox; +@property (weak) IBOutlet NSButton *showHiddenCheckBox; + @property (weak) NSOpenPanel *openPanel; -@property (strong) id openPanelTableHack; -@property (assign) BOOL allowAllFiles; @end @implementation MPDocumentController -- (instancetype)init { - self = [super init]; - if(self) { - _allowAllFiles = NO; - } - return self; -} - - (void)beginOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)inTypes completionHandler:(void (^)(NSInteger))completionHandler { self.openPanel = openPanel; if(!self.accessoryView) { @@ -41,15 +34,24 @@ NSArray *topLevelObjects; [myBundle loadNibNamed:@"OpenPanelAccessoryView" owner:self topLevelObjects:&topLevelObjects]; } + self.openPanel.allowedFileTypes = @[MPLegacyDocumentUTI, MPXMLDocumentUTI]; + self.allowAllCheckBox.state = NSOffState; + self.showHiddenCheckBox.state = NSOffState; self.openPanel.accessoryView = self.accessoryView; [super beginOpenPanel:openPanel forTypes:inTypes completionHandler:completionHandler]; } -- (IBAction)toggleAllowAllFilesButton:(id)sender { +- (void)toggleAllowAllFiles:(id)sender { NSButton *button = (NSButton *)sender; - self.allowAllFiles = HNHBoolForState(button.state); - self.openPanel.allowedFileTypes = self.allowAllFiles ? nil : @[MPLegacyDocumentUTI, MPXMLDocumentUTI]; - //[self _refreshOpenPanel]; + BOOL allowAllFiles = HNHBoolForState(button.state); + /* Toggle hidden to force a refresh */ + self.openPanel.showsHiddenFiles = !self.openPanel.showsHiddenFiles; + self.openPanel.allowedFileTypes = allowAllFiles ? nil : @[MPLegacyDocumentUTI, MPXMLDocumentUTI]; + self.openPanel.showsHiddenFiles = !self.openPanel.showsHiddenFiles; +} + +- (void)toggleShowHiddenFiles:(id)sender { + self.openPanel.showsHiddenFiles = !self.openPanel.showsHiddenFiles; } - (NSString *)typeForContentsOfURL:(NSURL *)url error:(NSError *__autoreleasing *)outError { @@ -60,35 +62,4 @@ return [super typeForContentsOfURL:url error:outError]; } -/* - Hack is from http://stackoverflow.com/users/1564216/eidola at - http://stackoverflow.com/questions/18192986/nsopenpanel-doesnt-validatevisiblecolumns - */ -#pragma mark NSOpenPanel Refresh Hack -- (id)_openPanelFindTable:(NSArray*)subviews; { - id table; - for(id view in subviews) { - if([[view className] isEqualToString: @"FI_TListView"]) { - table = view; - break; - } - else { - table = [self _openPanelFindTable:[view subviews]]; - if (table != nil) { - break; - } - } - } - return table; -} - - -- (void)_refreshOpenPanel { - if(self.openPanelTableHack == nil) { - self.openPanelTableHack = [self _openPanelFindTable:[[self.openPanel contentView] subviews]]; - } - [_openPanelTableHack reloadData]; - [_openPanel validateVisibleColumns]; -} - @end diff --git a/MacPass/OpenPanelAccessoryView.xib b/MacPass/OpenPanelAccessoryView.xib index 2396730a..b06c05a5 100644 --- a/MacPass/OpenPanelAccessoryView.xib +++ b/MacPass/OpenPanelAccessoryView.xib @@ -1,5 +1,5 @@ - + @@ -8,33 +8,48 @@ + + + - + + - - - - - + + + + + + + - +