From 348da78e23dbf47e2160ca3d2d43113fcd7804e4 Mon Sep 17 00:00:00 2001 From: michael starke Date: Thu, 7 Sep 2017 21:26:12 +0200 Subject: [PATCH] custom icons can now be selected. --- MacPass/Base.lproj/IconSelection.xib | 62 +++++++++++++++++++------ MacPass/MPIconHelper.h | 5 +- MacPass/MPIconHelper.m | 5 +- MacPass/MPIconSelectViewController.m | 69 +++++++++++++++++++++++----- 4 files changed, 115 insertions(+), 26 deletions(-) diff --git a/MacPass/Base.lproj/IconSelection.xib b/MacPass/Base.lproj/IconSelection.xib index 4c9743e8..44d3c647 100644 --- a/MacPass/Base.lproj/IconSelection.xib +++ b/MacPass/Base.lproj/IconSelection.xib @@ -8,6 +8,7 @@ + @@ -18,13 +19,13 @@ - + - + - + @@ -38,12 +39,12 @@ - - + - - + + + + + + - + @@ -96,8 +121,19 @@ - - + + + + _selectIcon: + + + + + + + _selectIcon: + + diff --git a/MacPass/MPIconHelper.h b/MacPass/MPIconHelper.h index f0bb02fc..2eb75f58 100644 --- a/MacPass/MPIconHelper.h +++ b/MacPass/MPIconHelper.h @@ -20,7 +20,10 @@ // along with this program. If not, see . // +@class KPKIcon; + #import + /** * Available IconTypes * Every Icon after MPCustomIconTypeBegin @@ -132,7 +135,7 @@ typedef NS_ENUM(NSUInteger, MPIconType) { * List of all available DatabaseIcons as an array of Images. Sorted by IconIndex. * @return Array of Icons as NSImage objects */ -+ (NSArray *)databaseIcons; ++ (NSArray *)databaseIcons; /** * List of all available DatabaseIcons as an array of MPIconType. Sorted by IconIndex. diff --git a/MacPass/MPIconHelper.m b/MacPass/MPIconHelper.m index e1dd338f..fbd0df3d 100644 --- a/MacPass/MPIconHelper.m +++ b/MacPass/MPIconHelper.m @@ -21,6 +21,7 @@ // #import "MPIconHelper.h" +#import "KeePassKit/KeePassKit.h" @implementation MPIconHelper @@ -53,7 +54,9 @@ continue; // Skip all non-db Keys } MPIconType iconType = (MPIconType)iconNumber.integerValue; - [mutableIcons addObject:[MPIconHelper icon:iconType]]; + KPKIcon *icon = [[KPKIcon alloc] init]; + icon.image = [MPIconHelper icon:iconType]; + [mutableIcons addObject:icon]; } icons = [mutableIcons copy]; }); diff --git a/MacPass/MPIconSelectViewController.m b/MacPass/MPIconSelectViewController.m index 3b5434f0..6dfd91fc 100644 --- a/MacPass/MPIconSelectViewController.m +++ b/MacPass/MPIconSelectViewController.m @@ -24,11 +24,18 @@ #import "MPIconHelper.h" #import "MPDocument.h" +typedef NS_ENUM(NSUInteger, MPIconeSelectionType) { + MPIconSelectionDefault, + MPIconSelectionCustom +}; + @interface MPIconSelectViewController () /* UI properties */ @property (weak) IBOutlet NSCollectionView *iconCollectionView; @property (weak) IBOutlet NSButton *imageButton; +@property (weak) IBOutlet NSSegmentedControl *typeSelectionButton; +@property MPIconeSelectionType selectionType; @end @@ -39,10 +46,35 @@ } - (void)viewDidLoad { + KPKNode *node = self.representedObject; + if(!node.iconUUID) { + self.selectionType = MPIconSelectionDefault; + } + else { + self.selectionType = MPIconSelectionCustom; + } + self.typeSelectionButton.selectedSegment = self.selectionType; + self.iconCollectionView.backgroundColors = @[NSColor.clearColor]; self.iconCollectionView.selectable = YES; self.iconCollectionView.allowsMultipleSelection = NO; - self.iconCollectionView.content = [MPIconHelper databaseIcons]; + [self _updateContent]; +} + +- (void)_updateContent { + MPDocument *document = [NSDocumentController sharedDocumentController].currentDocument; + switch(self.selectionType) { + case MPIconSelectionCustom: + self.iconCollectionView.content = document.tree.metaData.customIcons; + break; + case MPIconSelectionDefault: + default: + self.iconCollectionView.content = [MPIconHelper databaseIcons]; + } +} +- (IBAction)toggleIcons:(id)sender { + self.selectionType = self.typeSelectionButton.selectedSegment; + [self _updateContent]; } - (IBAction)useDefault:(id)sender { @@ -53,21 +85,36 @@ [self.view.window performClose:sender]; } -- (IBAction)cancel:(id)sender { - [self.view.window performClose:sender]; -} - -- (IBAction)_selectImage:(id)sender { - NSButton *button = sender; - NSImage *image = button.image; - NSUInteger buttonIndex = [self.iconCollectionView.content indexOfObject:image]; - NSInteger newIconId = ((NSNumber *)[MPIconHelper databaseIconTypes][buttonIndex]).integerValue; +- (IBAction)downloadIcon:(id)sender { KPKNode *node = self.representedObject; [self.observer willChangeModelProperty]; - node.iconId = newIconId; [self.observer didChangeModelProperty]; [self.view.window performClose:sender]; } +- (IBAction)cancel:(id)sender { + [self.view.window performClose:sender]; +} + +- (void)_selectIcon:(KPKIcon *)icon { + KPKNode *node = self.representedObject; + [self.observer willChangeModelProperty]; + switch(self.selectionType) { + case MPIconSelectionCustom: + node.iconUUID = icon.uuid; + break; + default: + case MPIconSelectionDefault: { + NSUInteger iconIndex = [self.iconCollectionView.content indexOfObject:icon]; + NSInteger newIconId = ((NSNumber *)[MPIconHelper databaseIconTypes][iconIndex]).integerValue; + node.iconId = newIconId; + node.iconUUID = nil; + break; + } + } + [self.observer didChangeModelProperty]; + [self.view.window performClose:nil]; +} + @end