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