diff --git a/MacPass/MPEntryAttributeViewController.m b/MacPass/MPEntryAttributeViewController.m index fc76ee21..64464d9d 100644 --- a/MacPass/MPEntryAttributeViewController.m +++ b/MacPass/MPEntryAttributeViewController.m @@ -56,10 +56,6 @@ NSString *nameForDefaultKey(NSString *key) { [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didEnterMouse:) name:MPInspectorEditorViewMouseEnteredNotification object:self.view]; [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(_didExitMouse:) name:MPInspectorEditorViewMouseExitedNotification object:self.view]; - NSString *placeHolder = NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected"); - self.keyTextField.placeholderString = placeHolder; - self.valueTextField.placeholderString = placeHolder; - self.toggleProtectedButton.action = @selector(toggleDisplay:); self.toggleProtectedButton.target = self.valueTextField; @@ -84,6 +80,9 @@ NSString *nameForDefaultKey(NSString *key) { } - (void)setRepresentedObject:(id)representedObject { + [self.valueTextField unbind:NSValueBinding]; + [self.keyTextField unbind:NSValueBinding]; + if(self.representedAttribute) { [NSNotificationCenter.defaultCenter removeObserver:self name:KPKDidChangeAttributeNotification object:self.representedObject]; } @@ -93,9 +92,28 @@ NSString *nameForDefaultKey(NSString *key) { selector:(@selector(_didChangeAttribute:)) name:KPKDidChangeAttributeNotification object:self.representedAttribute]; - + } _isDefaultAttribute = self.representedAttribute.isDefault; + + NSDictionary *bindingOptions = @{ NSNullPlaceholderBindingOption : NSLocalizedString(@"NONE", "Placeholder text for input fields if no entry or group is selected") }; + NSString *valueKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(value))]; + [self.valueTextField bind:NSValueBinding toObject:self withKeyPath:valueKeyPath options:bindingOptions]; + + if(!_isDefaultAttribute) { + NSString *keyKeyPath = [NSString stringWithFormat:@"%@.%@", NSStringFromSelector(@selector(representedObject)), NSStringFromSelector(@selector(key))]; + [self.keyTextField bind:NSValueBinding toObject:self withKeyPath:keyKeyPath options:bindingOptions]; + } + else { + NSString *localizedKey = nameForDefaultKey(self.representedAttribute.key); + if(localizedKey) { + self.keyTextField.stringValue = localizedKey; + } + else { + self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @""; + } + } + [self updateValuesAndEditing]; } @@ -152,16 +170,6 @@ NSString *nameForDefaultKey(NSString *key) { /* values */ self.view.hidden = self.isEditor ? NO : self.representedAttribute.value.length == 0; - NSString *localizedKey = nameForDefaultKey(self.representedAttribute.key); - if(localizedKey) { - self.keyTextField.stringValue = localizedKey; - } - else { - self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @""; - } - self.keyTextField.stringValue = self.representedAttribute.key ? self.representedAttribute.key : @""; - - self.valueTextField.stringValue = self.representedAttribute.value ? self.representedAttribute.value : @""; self.valueTextField.showPassword = !self.representedAttribute.protect; /* editor */ @@ -172,7 +180,7 @@ NSString *nameForDefaultKey(NSString *key) { self.toggleProtectedButton.hidden = _isDefaultAttribute; self.removeButton.hidden = !self.isEditor ? YES : _isDefaultAttribute; - + // set draws background first, since bezeld might have side effects self.valueTextField.drawsBackground = self.isEditor; self.valueTextField.bordered = self.isEditor; @@ -187,15 +195,16 @@ NSString *nameForDefaultKey(NSString *key) { self.actionButton.hidden = YES; } --(void)commitChanges { - if(!self.isEditor) { - // do not commit changes if we are no editor! - } - // FIXME: better handling of key uniqueness - if(!_isDefaultAttribute) { - self.representedAttribute.key = self.keyTextField.stringValue; - } - self.representedAttribute.value = self.valueTextField.stringValue; +- (void)commitChanges { + // to nothing +} + +- (void)objectDidBeginEditing:(id)editor { + [self.view.window.windowController.document objectDidBeginEditing:editor]; +} + +- (void)objectDidEndEditing:(id)editor { + [self.view.window.windowController.document objectDidEndEditing:editor]; } @end diff --git a/MacPass/MPEntryInspectorViewController.m b/MacPass/MPEntryInspectorViewController.m index 656ef64e..8399d1c0 100644 --- a/MacPass/MPEntryInspectorViewController.m +++ b/MacPass/MPEntryInspectorViewController.m @@ -607,22 +607,27 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { - (void)_setupAttributeEditors { self.iconViewController = [[MPNodeIconViewController alloc] init]; + [self addChildViewController:self.iconViewController]; self.iconViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.iconViewController.view]; self.titleEditorViewController = [[MPEntryAttributeViewController alloc] init]; + [self addChildViewController:self.titleEditorViewController]; self.titleEditorViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.titleEditorViewController.view]; self.usernameEditorViewController = [[MPEntryAttributeViewController alloc] init]; + [self addChildViewController:self.usernameEditorViewController]; self.usernameEditorViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.usernameEditorViewController.view]; self.passwordEditorViewController = [[MPEntryPasswordAttributeViewController alloc] init]; + [self addChildViewController:self.passwordEditorViewController]; self.passwordEditorViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.passwordEditorViewController.view]; self.urlEditorViewController = [[MPEntryAttributeViewController alloc] init]; + [self addChildViewController:self.urlEditorViewController]; self.urlEditorViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.urlEditorViewController.view]; @@ -632,6 +637,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { [self.fieldsStackView addArrangedSubview:self.totpViewController.view]; self.expiresEditorViewController = [[MPNodeExpirationViewController alloc] init]; + [self addChildViewController:self.expiresEditorViewController]; self.expiresEditorViewController.isEditor = NO; [self.fieldsStackView addArrangedSubview:self.expiresEditorViewController.view]; } @@ -782,5 +788,4 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { - (void)_didRemoveAttribute:(NSNotification *)notification { } - @end