From 73880ca419744653df7d4f494632fca96813d150 Mon Sep 17 00:00:00 2001 From: michael starke Date: Wed, 20 Feb 2013 03:36:51 +0100 Subject: [PATCH] Added first rudimentary search capability --- MacPass.xcodeproj/project.pbxproj | 6 +++ MacPass/EntryView.xib | 67 +++++++++++-------------- MacPass/KdbGroup+MPAdditions.h | 5 +- MacPass/KdbGroup+MPAdditions.m | 22 +++++--- MacPass/KdbTree+MPAdditions.h | 17 +++++++ MacPass/KdbTree+MPAdditions.m | 22 ++++++++ MacPass/MPAppDelegate.h | 1 + MacPass/MPAppDelegate.m | 5 ++ MacPass/MPEntryViewController.h | 1 + MacPass/MPEntryViewController.m | 44 ++++++++++++++++ MacPass/MPMainWindowController.h | 2 + MacPass/MPMainWindowController.m | 15 +++++- MacPass/MPMainWindowSplitViewDelegate.m | 21 ++++---- MacPass/MPToolbarDelegate.h | 4 ++ MacPass/MPToolbarDelegate.m | 54 ++++++++++++-------- MacPass/MacPass-Info.plist | 2 +- MacPass/en.lproj/MainMenu.xib | 62 +++++++++++++++++++---- 17 files changed, 256 insertions(+), 94 deletions(-) create mode 100644 MacPass/KdbTree+MPAdditions.h create mode 100644 MacPass/KdbTree+MPAdditions.m diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index db235f7e..917eff0a 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -80,6 +80,7 @@ 4CAD748E15B88AC100104512 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CAD748D15B88AC100104512 /* libz.dylib */; }; 4CB9339916D3A0DD00A13B5D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4CB9339716D3A0DD00A13B5D /* Credits.rtf */; }; 4CBA981815BA0DB600721965 /* MPDatabaseDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBA981715BA0DB600721965 /* MPDatabaseDocument.m */; }; + 4CC1AEBE16D4467C006D2AAB /* KdbTree+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC1AEBD16D4467C006D2AAB /* KdbTree+MPAdditions.m */; }; 4CC6259115BA1C99002F5B11 /* MPOutlineViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6259015BA1C99002F5B11 /* MPOutlineViewDelegate.m */; }; 4CD78ABC16D155FF00768A1D /* 07_NotepadTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB716D155FF00768A1D /* 07_NotepadTemplate.pdf */; }; 4CD78ABD16D155FF00768A1D /* 08_SocketTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 4CD78AB816D155FF00768A1D /* 08_SocketTemplate.pdf */; }; @@ -230,6 +231,8 @@ 4CB9339816D3A0DD00A13B5D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 4CBA981615BA0DB600721965 /* MPDatabaseDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPDatabaseDocument.h; sourceTree = ""; }; 4CBA981715BA0DB600721965 /* MPDatabaseDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPDatabaseDocument.m; sourceTree = ""; }; + 4CC1AEBC16D4467C006D2AAB /* KdbTree+MPAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "KdbTree+MPAdditions.h"; sourceTree = ""; }; + 4CC1AEBD16D4467C006D2AAB /* KdbTree+MPAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "KdbTree+MPAdditions.m"; sourceTree = ""; }; 4CC6258F15BA1C99002F5B11 /* MPOutlineViewDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPOutlineViewDelegate.h; sourceTree = ""; }; 4CC6259015BA1C99002F5B11 /* MPOutlineViewDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPOutlineViewDelegate.m; sourceTree = ""; }; 4CD78AB716D155FF00768A1D /* 07_NotepadTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = 07_NotepadTemplate.pdf; sourceTree = ""; }; @@ -276,6 +279,8 @@ children = ( 4C2C4C2A16D3BE3700D49295 /* KdbGroup+MPAdditions.h */, 4C2C4C2B16D3BE3700D49295 /* KdbGroup+MPAdditions.m */, + 4CC1AEBC16D4467C006D2AAB /* KdbTree+MPAdditions.h */, + 4CC1AEBD16D4467C006D2AAB /* KdbTree+MPAdditions.m */, ); name = KeePassLibAdditions; sourceTree = ""; @@ -746,6 +751,7 @@ 4CAC6F7816D2B54800D79D5E /* MPMainWindowSplitViewDelegate.m in Sources */, 4C61EA0316D2FD0800AC519E /* MPOutlineViewController.m in Sources */, 4C2C4C2C16D3BE3700D49295 /* KdbGroup+MPAdditions.m in Sources */, + 4CC1AEBE16D4467C006D2AAB /* KdbTree+MPAdditions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/MacPass/EntryView.xib b/MacPass/EntryView.xib index 1872f5b3..ff6051d6 100644 --- a/MacPass/EntryView.xib +++ b/MacPass/EntryView.xib @@ -18,7 +18,6 @@ NSTableHeaderView NSTableView NSTextFieldCell - NSUserDefaultsController com.apple.InterfaceBuilder.CocoaPlugin @@ -243,6 +242,7 @@ {{1, 119}, {223, 15}} + _NS:60 NO 1 @@ -281,9 +281,6 @@ 4 1 - - YES - @@ -341,6 +338,21 @@ + + 58 + + + + + 57 + + + + + 56 + + + 55 @@ -352,37 +364,17 @@ - 56 - - - - - 57 - - - - - 58 - - - - - 115 - - - - - 117 - + 121 + - + - 118 - - + 122 + + 119 @@ -398,17 +390,17 @@ - 121 - + 117 + - + - 122 - - + 118 + + @@ -416,7 +408,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -434,7 +425,7 @@ - 122 + 231 diff --git a/MacPass/KdbGroup+MPAdditions.h b/MacPass/KdbGroup+MPAdditions.h index 3f53ce45..338ce2b6 100644 --- a/MacPass/KdbGroup+MPAdditions.h +++ b/MacPass/KdbGroup+MPAdditions.h @@ -10,9 +10,8 @@ @interface KdbGroup (MPAdditions) -+ (KdbGroup *)group; -+ (KdbGroup *)groupWithName:(NSString *)name; +- (NSArray *)childGroups; -+ (void)refreshModificationTime; +- (NSArray *)childEntries; @end diff --git a/MacPass/KdbGroup+MPAdditions.m b/MacPass/KdbGroup+MPAdditions.m index fde67cb5..98d2e4b8 100644 --- a/MacPass/KdbGroup+MPAdditions.m +++ b/MacPass/KdbGroup+MPAdditions.m @@ -10,15 +10,21 @@ @implementation KdbGroup (MPAdditions) -+ (KdbGroup *)group { - KdbGroup *group = [[KdbGroup alloc] init]; - [group setName:@"Default"]; - return [group autorelease]; +- (NSArray *)childGroups { + NSMutableArray *childGroups = [NSMutableArray arrayWithCapacity:[self.groups count]]; + for(KdbGroup *childGroup in self.groups) { + [childGroups addObjectsFromArray:[childGroup childGroups]]; + } + return childGroups; } -+ (KdbGroup *)groupWithName:(NSString *)name { - KdbGroup *group = [KdbGroup group]; - [group setName:name]; - return group; +- (NSArray *)childEntries { + NSMutableArray *childEntries = [NSMutableArray arrayWithCapacity:[self.groups count] + [self.entries count]]; + [childEntries addObjectsFromArray:self.entries]; + for( KdbGroup *childGroup in self.groups) { + [childEntries addObjectsFromArray:[childGroup childEntries]]; + } + return childEntries; } + @end diff --git a/MacPass/KdbTree+MPAdditions.h b/MacPass/KdbTree+MPAdditions.h new file mode 100644 index 00000000..b5046c1d --- /dev/null +++ b/MacPass/KdbTree+MPAdditions.h @@ -0,0 +1,17 @@ +// +// KdbTree+MPAdditions.h +// MacPass +// +// Created by michael starke on 20.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "Kdb.h" + +@interface KdbTree (MPAdditions) + +- (NSArray *)allEntries; + +- (NSArray *)allGroups; + +@end diff --git a/MacPass/KdbTree+MPAdditions.m b/MacPass/KdbTree+MPAdditions.m new file mode 100644 index 00000000..efa0e35a --- /dev/null +++ b/MacPass/KdbTree+MPAdditions.m @@ -0,0 +1,22 @@ +// +// KdbTree+MPAdditions.m +// MacPass +// +// Created by michael starke on 20.02.13. +// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved. +// + +#import "KdbTree+MPAdditions.h" +#import "KdbGroup+MPAdditions.h" + +@implementation KdbTree (MPAdditions) + +- (NSArray *)allGroups { + return [self.root childGroups]; +} + +- (NSArray *)allEntries { + return [self.root childEntries]; +} + +@end diff --git a/MacPass/MPAppDelegate.h b/MacPass/MPAppDelegate.h index 389f5408..d1d143a2 100644 --- a/MacPass/MPAppDelegate.h +++ b/MacPass/MPAppDelegate.h @@ -12,5 +12,6 @@ @interface MPAppDelegate : NSObject +- (IBAction) showMainWindow:(id)sender; @end \ No newline at end of file diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index b03f6284..61c55e12 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -29,6 +29,11 @@ } #pragma mark Menu Actions + +- (void)showMainWindow:(id)sender { + [self.mainWindowController showMainWindow:sender]; +} + - (void)showPreferences:(id)sender { if(self.settingsController == nil) { self.settingsController = [[[MPSettingsController alloc] init] autorelease]; diff --git a/MacPass/MPEntryViewController.h b/MacPass/MPEntryViewController.h index 5fcff30d..f1f82eee 100644 --- a/MacPass/MPEntryViewController.h +++ b/MacPass/MPEntryViewController.h @@ -16,5 +16,6 @@ @property (nonatomic, assign) id outlineViewDelegate; @property (assign) KdbGroup *activeGroup; @property (readonly, retain) NSArrayController *entryArrayController; +@property (nonatomic, retain) NSString *filter; @end diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 89e917b6..a6de3f43 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -8,6 +8,9 @@ #import "MPEntryViewController.h" #import "MPOutlineViewDelegate.h" +#import "MPDatabaseController.h" +#import "MPDatabaseDocument.h" +#import "KdbGroup+MPAdditions.h" NSString *const _MPUserNameColumnIdentifier = @"MPUserNameColumnIdentifier"; NSString *const _MPTitleColumnIdentifier = @"MPTitleColumnIdentifier"; @@ -16,8 +19,12 @@ NSString *const _MPPasswordColumnIdentifier = @"MPPasswordColumnIdentifier"; @interface MPEntryViewController () @property (retain) NSArrayController *entryArrayController; +@property (retain) NSArray *filteredEntries; @property (assign) IBOutlet NSTableView *entryTable; + +- (BOOL)hasActiveFilter; +- (void)updateFilter; - (void)didChangeGroupSelectionInOutlineView:(NSNotification *)notification; @end @@ -59,6 +66,12 @@ NSString *const _MPPasswordColumnIdentifier = @"MPPasswordColumnIdentifier"; } - (void)didChangeGroupSelectionInOutlineView:(NSNotification *)notification { + /* + If we have an active search, do not mess with the content + */ + if([self hasActiveFilter]) { + return; + } MPOutlineViewDelegate *delegate = [notification object]; KdbGroup *group = delegate.selectedGroup; if(group) { @@ -69,4 +82,35 @@ NSString *const _MPPasswordColumnIdentifier = @"MPPasswordColumnIdentifier"; } } +- (BOOL)hasActiveFilter { + return ([self.filter length] > 0); +} + +- (void)setFilter:(NSString *)filter { + if(_filter != filter) { + [_filter release]; + _filter = [filter retain]; + [self updateFilter]; + } +} + +- (void)updateFilter { + MPDatabaseDocument *openDatabase = [MPDatabaseController defaultController].database; + if(openDatabase) { + if([self.filter isEqualToString:@"*"]) { + self.filteredEntries = [openDatabase.root childEntries]; + } + else { + NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"SELF.title CONTAINS[cd] %@", self.filter]; + self.filteredEntries = [[openDatabase.root childEntries] filteredArrayUsingPredicate:filterPredicate]; + } + [self.entryArrayController setContent:self.filteredEntries]; + } + else { + [self.entryArrayController setContent:nil]; + self.filteredEntries = nil; + } +} + + @end diff --git a/MacPass/MPMainWindowController.h b/MacPass/MPMainWindowController.h index 5f64b18d..871c6f05 100644 --- a/MacPass/MPMainWindowController.h +++ b/MacPass/MPMainWindowController.h @@ -13,6 +13,8 @@ @interface MPMainWindowController : NSWindowController - (void)showEntries; +- (void)showMainWindow:(id)sender; +- (void)performFindPanelAction:(id)sender; /* Sets the content View controller @param viewController - use nil to reset to welcome screen diff --git a/MacPass/MPMainWindowController.m b/MacPass/MPMainWindowController.m index 9ad43427..929b1b13 100644 --- a/MacPass/MPMainWindowController.m +++ b/MacPass/MPMainWindowController.m @@ -38,7 +38,7 @@ -(id)init { self = [super initWithWindowNibName:@"MainWindow" owner:self]; if( self ) { - _toolbarDelegate = [[MPToolbarDelegate alloc] init]; + _toolbarDelegate = [[MPToolbarDelegate alloc] init]; _outlineViewController = [[MPOutlineViewController alloc] init]; _splitViewDelegate = [[MPMainWindowSplitViewDelegate alloc] init]; @@ -115,6 +115,14 @@ #pragma mark Actions +- (void)performFindPanelAction:(id)sender { + [self.window makeFirstResponder:[self.toolbarDelegate.searchItem view]]; +} + +- (void)showMainWindow:(id)sender { + [self showWindow:self.window]; +} + - (void)openDocument:(id)sender { if(!self.passwordInputController) { @@ -135,6 +143,11 @@ }]; } +- (void)updateFilter:(id)sender { + NSSearchField *searchField = sender; + self.entryViewController.filter = [searchField stringValue]; +} + #pragma mark Notifications - (void)didOpenDocument:(NSNotification *)notification { diff --git a/MacPass/MPMainWindowSplitViewDelegate.m b/MacPass/MPMainWindowSplitViewDelegate.m index cc18c2c5..1148b587 100644 --- a/MacPass/MPMainWindowSplitViewDelegate.m +++ b/MacPass/MPMainWindowSplitViewDelegate.m @@ -9,7 +9,6 @@ #import "MPMainWindowSplitViewDelegate.h" const CGFloat MPMainWindowSplitViewDelegateMinimumOutlineWidth = 150.0; -const CGFloat MPMainWindowSplitViewDelegateMaximumOutlineWidth = 400.0; const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0; @interface MPMainWindowSplitViewDelegate () @@ -29,6 +28,10 @@ const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0; return [splitView subviews][1]; } +- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview { + return (subview == [self leftView:splitView]); +} + - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex { return (proposedMinimumPosition < MPMainWindowSplitViewDelegateMinimumOutlineWidth) ? MPMainWindowSplitViewDelegateMinimumOutlineWidth : proposedMinimumPosition; } @@ -45,18 +48,12 @@ const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0; NSView *leftView = [self leftView:splitView]; NSView *rightView = [self rightView:splitView]; - CGFloat leftRelativeWidth = [leftView frame].size.width / oldSize.width; - CGFloat newLeftWidth = floor(newSize.width * leftRelativeWidth); - - if( newLeftWidth < MPMainWindowSplitViewDelegateMinimumOutlineWidth && newSize.width > MPMainWindowSplitViewDelegateMinimumOutlineWidth ) { - newLeftWidth = MPMainWindowSplitViewDelegateMinimumOutlineWidth; + CGFloat leftWidth = [leftView isHidden] ? 0.0 : [leftView frame].size.width; + NSRect newRightFrame = NSMakeRect(leftWidth + dividierThickness, 0, newSize.width - leftWidth - dividierThickness, newSize.height); + NSRect newLeftFrame = NSMakeRect(0, 0, leftWidth, newSize.height); + if(NO == [leftView isHidden]) { + [leftView setFrame:newLeftFrame]; } - if( newLeftWidth > MPMainWindowSplitViewDelegateMaximumOutlineWidth ) { - newLeftWidth = MPMainWindowSplitViewDelegateMaximumOutlineWidth; - } - NSRect newLeftFrame = NSMakeRect(0, 0, newLeftWidth, newSize.height); - NSRect newRightFrame = NSMakeRect(newLeftWidth + dividierThickness, 0, newSize.width - newLeftWidth - dividierThickness, newSize.height); - [leftView setFrame:newLeftFrame]; [rightView setFrame:newRightFrame]; }; diff --git a/MacPass/MPToolbarDelegate.h b/MacPass/MPToolbarDelegate.h index 3714c6a8..560a6fc9 100644 --- a/MacPass/MPToolbarDelegate.h +++ b/MacPass/MPToolbarDelegate.h @@ -8,6 +8,10 @@ #import +@class MPMainWindowController; + @interface MPToolbarDelegate : NSObject +@property (assign) NSToolbarItem *searchItem; + @end diff --git a/MacPass/MPToolbarDelegate.m b/MacPass/MPToolbarDelegate.m index c0a4c8dc..30593a50 100644 --- a/MacPass/MPToolbarDelegate.m +++ b/MacPass/MPToolbarDelegate.m @@ -8,12 +8,14 @@ #import "MPToolbarDelegate.h" #import "MPIconHelper.h" +#import "MPMainWindowController.h" NSString *const MPToolbarItemAddGroup = @"AddGroup"; NSString *const MPToolbarItemAddEntry = @"AddEntry"; NSString *const MPToolbarItemEdit = @"Edit"; NSString *const MPToolbarItemDelete =@"Delete"; NSString *const MPToolbarItemAction = @"Action"; +NSString *const MPToolbarItemSearch = @"Search"; @interface MPToolbarDelegate() @@ -30,7 +32,7 @@ NSString *const MPToolbarItemAction = @"Action"; { self = [super init]; if (self) { - self.toolbarIdentifiers = @[ MPToolbarItemAddEntry, MPToolbarItemDelete, MPToolbarItemEdit, MPToolbarItemAddGroup, MPToolbarItemAction ]; + self.toolbarIdentifiers = @[ MPToolbarItemAddEntry, MPToolbarItemDelete, MPToolbarItemEdit, MPToolbarItemAddGroup, MPToolbarItemAction, NSToolbarFlexibleSpaceItemIdentifier, MPToolbarItemSearch ]; self.toolbarItems = [NSMutableDictionary dictionaryWithCapacity:[self.toolbarItems count]]; self.toolbarImages = [self createToolbarImages]; } @@ -40,9 +42,23 @@ NSString *const MPToolbarItemAction = @"Action"; - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag { NSToolbarItem *item = self.toolbarItems[ itemIdentifier ]; if( !item ) { + item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier]; - NSButton *button; - if([itemIdentifier isEqualToString:MPToolbarItemAction]) { + [item setAction:@selector(toolbarItemPressed:)]; + self.toolbarItems[itemIdentifier] = item; + NSString *label = NSLocalizedString(itemIdentifier, @""); + [item setLabel:label]; + [item release]; + + if([itemIdentifier isEqualToString:MPToolbarItemSearch]) { + NSSearchField *searchfield = [[NSSearchField alloc] initWithFrame:NSMakeRect(0, 0, 70, 32)]; + [item setView:searchfield]; + [searchfield setAction:@selector(updateFilter:)]; + [[searchfield cell] setSendsSearchStringImmediately:YES]; + [searchfield release]; + self.searchItem = item; + } + else if([itemIdentifier isEqualToString:MPToolbarItemAction]) { NSPopUpButton *popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, 50, 32) pullsDown:YES]; [[popupButton cell] setBezelStyle:NSTexturedRoundedBezelStyle]; [[popupButton cell] setImageScaling:NSImageScaleProportionallyDown]; @@ -51,9 +67,9 @@ NSString *const MPToolbarItemAction = @"Action"; Built menu */ NSMenu *menu = [NSMenu allocWithZone:[NSMenu menuZone]]; - NSMenuItem *item = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"" action:NULL keyEquivalent:@""]; - [item setImage:self.toolbarImages[itemIdentifier]]; - [menu addItem:item]; + NSMenuItem *menuItem = [[NSMenuItem allocWithZone:[NSMenu menuZone]] initWithTitle:@"" action:NULL keyEquivalent:@""]; + [menuItem setImage:self.toolbarImages[itemIdentifier]]; + [menu addItem:menuItem]; [menu addItemWithTitle:@"Foo" action:NULL keyEquivalent:@""]; [menu addItemWithTitle:@"Bar" action:NULL keyEquivalent:@""]; [popupButton setMenu:menu]; @@ -61,12 +77,15 @@ NSString *const MPToolbarItemAction = @"Action"; /* Cleanup */ - [item release]; + [menuItem release]; [menu release]; - button = popupButton; + [popupButton sizeToFit]; + + [item setView:popupButton]; + [popupButton release]; } else { - button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)]; + NSButton *button = [[NSButton alloc] initWithFrame:NSMakeRect(0, 0, 32, 32)]; [[button cell] setBezelStyle:NSTexturedRoundedBezelStyle]; [[button cell] setImageScaling:NSImageScaleProportionallyDown]; [button setTitle:@""]; @@ -74,20 +93,11 @@ NSString *const MPToolbarItemAction = @"Action"; NSImage *image = self.toolbarImages[itemIdentifier]; [button setImage:image]; [button setImagePosition:NSImageOnly]; + [button sizeToFit]; + + [item setView:button]; + [button release]; } - [button sizeToFit]; - - NSString *label = NSLocalizedString(itemIdentifier, @""); - [item setLabel:label]; - - [item setView:button]; - - [item setAction:@selector(toolbarItemPressed:)]; - - self.toolbarItems[itemIdentifier] = item; - [item release]; - [button release]; - return item; } diff --git a/MacPass/MacPass-Info.plist b/MacPass/MacPass-Info.plist index 51a4a249..90f19bba 100644 --- a/MacPass/MacPass-Info.plist +++ b/MacPass/MacPass-Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - B9 + F7 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright diff --git a/MacPass/en.lproj/MainMenu.xib b/MacPass/en.lproj/MainMenu.xib index 92141be0..7f877f74 100644 --- a/MacPass/en.lproj/MainMenu.xib +++ b/MacPass/en.lproj/MainMenu.xib @@ -759,6 +759,25 @@ + + + YES + YES + + + 2147483647 + + + + + + Show Main Window + 0 + 1048576 + 2147483647 + + + YES @@ -1227,6 +1246,14 @@ 1175 + + + showMainWindow: + + + + 1178 + @@ -1620,6 +1647,8 @@ + + @@ -1843,6 +1872,16 @@ + + 1176 + + + + + 1177 + + + @@ -1850,6 +1889,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1944,24 +1985,27 @@ - 1175 + 1178 MPAppDelegate NSObject - - showPreferences: - id - - - showPreferences: - + + id + id + + + + showMainWindow: + id + + showPreferences: id - + IBProjectSource ./Classes/MPAppDelegate.h