Add missing features to new Mac UI: changing password type, setting custom passwords, deleting sites.
This commit is contained in:
parent
150304941c
commit
5056f9e2e4
@ -30,8 +30,8 @@
|
||||
@property (nonatomic) NSUInteger counter;
|
||||
@property (nonatomic) NSDate *lastUsed;
|
||||
@property (nonatomic) id<MPAlgorithm> algorithm;
|
||||
@property (nonatomic) NSArray *typeNames;
|
||||
@property (nonatomic) NSUInteger typeIndex;
|
||||
@property (nonatomic) BOOL generated;
|
||||
@property (nonatomic) BOOL stored;
|
||||
|
||||
- (id)initWithEntity:(MPElementEntity *)entity;
|
||||
- (MPElementEntity *)entityInContext:(NSManagedObjectContext *)moc;
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
@implementation MPElementModel {
|
||||
NSManagedObjectID *_entityOID;
|
||||
NSMutableDictionary *_typesByName;
|
||||
BOOL _initialized;
|
||||
}
|
||||
|
||||
@ -56,16 +55,7 @@
|
||||
self.counter = [entity isKindOfClass:[MPElementGeneratedEntity class]]? [(MPElementGeneratedEntity *)entity counter]: 0;
|
||||
|
||||
// Find all password types and the index of the current type amongst them.
|
||||
_typesByName = [NSMutableDictionary dictionary];
|
||||
MPElementType type = self.type;
|
||||
do {
|
||||
[_typesByName setObject:@(type) forKey:[self.algorithm shortNameOfType:type]];
|
||||
} while (self.type != (type = [self.algorithm nextType:type]));
|
||||
self.typeNames = [_typesByName keysSortedByValueUsingSelector:@selector( compare: )];
|
||||
self.typeIndex = [[[_typesByName allValues] sortedArrayUsingSelector:@selector( compare: )] indexOfObject:@(self.type)];
|
||||
|
||||
[entity.algorithm resolveContentForElement:entity usingKey:[MPAppDelegate_Shared get].key
|
||||
result:^(NSString *result) {
|
||||
[entity resolveContentUsingKey:[MPAppDelegate_Shared get].key result:^(NSString *result) {
|
||||
PearlMainQueue( ^{ self.content = result; } );
|
||||
}];
|
||||
}
|
||||
@ -107,20 +97,14 @@
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setTypeIndex:(NSUInteger)typeIndex {
|
||||
- (BOOL)generated {
|
||||
|
||||
if (typeIndex == _typeIndex)
|
||||
return;
|
||||
_typeIndex = typeIndex;
|
||||
return self.type & MPElementTypeClassGenerated;
|
||||
}
|
||||
|
||||
if (!_initialized)
|
||||
// This wasn't a change to the entity.
|
||||
return;
|
||||
- (BOOL)stored {
|
||||
|
||||
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
[self setEntity:[[MPAppDelegate_Shared get] changeElement:[self entityInContext:context] saveInContext:context
|
||||
toType:[_typesByName[self.typeNames[typeIndex]] unsignedIntegerValue]]];
|
||||
}];
|
||||
return self.type & MPElementTypeClassStored;
|
||||
}
|
||||
|
||||
@end
|
||||
|
@ -1,12 +1,12 @@
|
||||
/**
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
* Copyright Maarten Billemont (http://www.lhunath.com, lhunath@lyndir.com)
|
||||
*
|
||||
* See the enclosed file LICENSE for license information (LGPLv3). If you did
|
||||
* not receive this file, see http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*
|
||||
* @author Maarten Billemont <lhunath@lyndir.com>
|
||||
* @license http://www.gnu.org/licenses/lgpl-3.0.txt
|
||||
*/
|
||||
|
||||
//
|
||||
// MPPasswordWindowController.h
|
||||
@ -30,10 +30,8 @@
|
||||
@property(nonatomic, weak) IBOutlet NSSecureTextField *passwordField;
|
||||
@property(nonatomic, weak) IBOutlet NSTableView *siteTable;
|
||||
@property(nonatomic, weak) IBOutlet NSProgressIndicator *progressView;
|
||||
@property(nonatomic, weak) IBOutlet NSButton *typeButton;
|
||||
@property(nonatomic, weak) IBOutlet NSButton *loginButton;
|
||||
@property(nonatomic, weak) IBOutlet NSView *counterContainer;
|
||||
@property(nonatomic, weak) IBOutlet NSStepper *counterStepper;
|
||||
@property(nonatomic, weak) IBOutlet NSTextField *counterLabel;
|
||||
|
||||
@property(nonatomic, strong) IBOutlet NSBox *passwordTypesBox;
|
||||
@property(nonatomic, weak) IBOutlet NSMatrix *passwordTypesMatrix;
|
||||
|
||||
@end
|
||||
|
@ -24,8 +24,12 @@
|
||||
#import "MPAppDelegate_Key.h"
|
||||
#import "PearlProfiler.h"
|
||||
|
||||
#define MPAlertIncorrectMP @"MPAlertIncorrectMP"
|
||||
#define MPAlertCreateSite @"MPAlertCreateSite"
|
||||
#define MPAlertIncorrectMP @"MPAlertIncorrectMP"
|
||||
#define MPAlertCreateSite @"MPAlertCreateSite"
|
||||
#define MPAlertChangeType @"MPAlertChangeType"
|
||||
#define MPAlertChangeLogin @"MPAlertChangeLogin"
|
||||
#define MPAlertChangeContent @"MPAlertChangeContent"
|
||||
#define MPAlertDeleteSite @"MPAlertDeleteSite"
|
||||
|
||||
@interface MPPasswordWindowController()
|
||||
|
||||
@ -73,6 +77,12 @@
|
||||
NSSearchFieldCell *siteFieldCell = self.siteField.cell;
|
||||
siteFieldCell.searchButtonCell = nil;
|
||||
siteFieldCell.cancelButtonCell = nil;
|
||||
|
||||
CAGradientLayer *gradient = [CAGradientLayer layer];
|
||||
gradient.colors = @[ (__bridge id)[NSColor whiteColor].CGColor, (__bridge id)[NSColor clearColor].CGColor ];
|
||||
gradient.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
|
||||
gradient.frame = self.siteTable.bounds;
|
||||
self.siteTable.superview.superview.layer.mask = gradient;
|
||||
}
|
||||
|
||||
#pragma mark - NSResponder
|
||||
@ -157,13 +167,75 @@
|
||||
// "Create" button.
|
||||
[[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) {
|
||||
if (element)
|
||||
[self updateElements];
|
||||
PearlMainQueue( ^{ [self updateElements]; } );
|
||||
}];
|
||||
break;
|
||||
}
|
||||
case NSAlertThirdButtonReturn:
|
||||
// "Cancel" button.
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (contextInfo == MPAlertChangeType) {
|
||||
switch (returnCode) {
|
||||
case NSAlertFirstButtonReturn: {
|
||||
// "Save" button.
|
||||
MPElementType type = (MPElementType)[self.passwordTypesMatrix.selectedCell tag];
|
||||
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
MPElementEntity *entity = [[MPMacAppDelegate get] changeElement:[self.selectedElement entityInContext:context]
|
||||
saveInContext:context toType:type];
|
||||
if ([entity isKindOfClass:[MPElementStoredEntity class]] && ![(MPElementStoredEntity *)entity contentObject].length)
|
||||
PearlMainQueue( ^{
|
||||
[self changePassword:nil];
|
||||
} );
|
||||
}];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (contextInfo == MPAlertChangeLogin) {
|
||||
switch (returnCode) {
|
||||
case NSAlertFirstButtonReturn: {
|
||||
// "Save" button.
|
||||
NSString *loginName = [(NSSecureTextField *)alert.accessoryView stringValue];
|
||||
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
MPElementEntity *entity = [self.selectedElement entityInContext:context];
|
||||
entity.loginName = loginName;
|
||||
[context saveToStore];
|
||||
}];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (contextInfo == MPAlertChangeContent) {
|
||||
switch (returnCode) {
|
||||
case NSAlertFirstButtonReturn: {
|
||||
// "Save" button.
|
||||
NSString *password = [(NSSecureTextField *)alert.accessoryView stringValue];
|
||||
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
MPElementEntity *entity = [self.selectedElement entityInContext:context];
|
||||
[entity.algorithm saveContent:password toElement:entity usingKey:[MPMacAppDelegate get].key];
|
||||
[context saveToStore];
|
||||
}];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (contextInfo == MPAlertDeleteSite) {
|
||||
switch (returnCode) {
|
||||
case NSAlertFirstButtonReturn: {
|
||||
// "Delete" button.
|
||||
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
|
||||
[context deleteObject:[self.selectedElement entityInContext:context]];
|
||||
[context saveToStore];
|
||||
}];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -192,6 +264,80 @@
|
||||
return [self.elementsController.selectedObjects firstObject];
|
||||
}
|
||||
|
||||
#pragma mark - Actions
|
||||
|
||||
- (IBAction)deleteElement:(id)sender {
|
||||
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert addButtonWithTitle:@"Delete"];
|
||||
[alert addButtonWithTitle:@"Cancel"];
|
||||
[alert setMessageText:@"Delete Site?"];
|
||||
[alert setInformativeText:strf( @"Do you want to delete the site named:\n\n%@", self.selectedElement.siteName )];
|
||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertDeleteSite];
|
||||
}
|
||||
|
||||
- (IBAction)changeLogin:(id)sender {
|
||||
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert addButtonWithTitle:@"Save"];
|
||||
[alert addButtonWithTitle:@"Cancel"];
|
||||
[alert setMessageText:@"Change Login Name"];
|
||||
[alert setInformativeText:strf( @"Enter the login name for:\n\n%@", self.selectedElement.siteName )];
|
||||
NSTextField *loginField = [[NSTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )];
|
||||
loginField.stringValue = self.selectedElement.loginName?: @"";
|
||||
[loginField selectText:self];
|
||||
[alert setAccessoryView:loginField];
|
||||
[alert layout];
|
||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeLogin];
|
||||
}
|
||||
|
||||
- (IBAction)changePassword:(id)sender {
|
||||
|
||||
if (!self.selectedElement.stored)
|
||||
return;
|
||||
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert addButtonWithTitle:@"Save"];
|
||||
[alert addButtonWithTitle:@"Cancel"];
|
||||
[alert setMessageText:@"Change Password"];
|
||||
[alert setInformativeText:strf( @"Enter the new password for:\n\n%@", self.selectedElement.siteName )];
|
||||
[alert setAccessoryView:[[NSSecureTextField alloc] initWithFrame:NSMakeRect( 0, 0, 200, 22 )]];
|
||||
[alert layout];
|
||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeContent];
|
||||
}
|
||||
|
||||
- (IBAction)changeType:(id)sender {
|
||||
|
||||
MPElementModel *element = self.selectedElement;
|
||||
NSArray *types = [element.algorithm allTypesStartingWith:MPElementTypeGeneratedPIN];
|
||||
[self.passwordTypesMatrix renewRows:(NSInteger)[types count] columns:1];
|
||||
for (NSUInteger t = 0; t < [types count]; ++t) {
|
||||
MPElementType type = [types[t] unsignedIntegerValue];
|
||||
NSString *title = [element.algorithm nameOfType:type];
|
||||
if (type & MPElementTypeClassGenerated)
|
||||
title = [element.algorithm generateContentNamed:element.siteName ofType:type
|
||||
withCounter:element.counter usingKey:[MPMacAppDelegate get].key];
|
||||
|
||||
NSButtonCell *cell = [self.passwordTypesMatrix cellAtRow:(NSInteger)t column:0];
|
||||
cell.tag = type;
|
||||
cell.state = type == element.type? NSOnState: NSOffState;
|
||||
cell.title = title;
|
||||
}
|
||||
|
||||
NSAlert *alert = [NSAlert new];
|
||||
[alert addButtonWithTitle:@"Save"];
|
||||
[alert addButtonWithTitle:@"Cancel"];
|
||||
[alert setMessageText:@"Change Password Type"];
|
||||
[alert setInformativeText:strf( @"Choose a new password type for:\n\n%@", element.siteName )];
|
||||
[alert setAccessoryView:self.passwordTypesBox];
|
||||
[alert layout];
|
||||
[alert beginSheetModalForWindow:self.window modalDelegate:self
|
||||
didEndSelector:@selector( alertDidEnd:returnCode:contextInfo: ) contextInfo:MPAlertChangeType];
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (BOOL)handleCommand:(SEL)commandSelector {
|
||||
@ -289,6 +435,9 @@
|
||||
|
||||
if (siteNameQueryRange.location == 0)
|
||||
self.siteField.currentEditor.selectedRange = NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length );
|
||||
|
||||
NSRect selectedCellFrame = [self.siteTable frameOfCellAtColumn:0 row:((NSInteger)self.elementsController.selectionIndex)];
|
||||
[[(NSClipView *)self.siteTable.superview animator] setBoundsOrigin:selectedCellFrame.origin];
|
||||
}
|
||||
|
||||
- (void)useSite {
|
||||
@ -352,11 +501,16 @@
|
||||
CGWindowID windowID = (CGWindowID)[self.window windowNumber];
|
||||
CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID,
|
||||
kCGWindowImageBoundsIgnoreFraming );
|
||||
if (CGImageGetWidth( capturedImage ) <= 1) {
|
||||
wrn( @"Failed to capture screen image for window: %d", windowID );
|
||||
return;
|
||||
}
|
||||
|
||||
[profiler finishJob:@"captured window: %d, on screen: %@", windowID, self.window.screen];
|
||||
NSImage *screenImage = [[NSImage alloc] initWithCGImage:capturedImage size:NSMakeSize(
|
||||
CGImageGetWidth( capturedImage ) / self.window.backingScaleFactor,
|
||||
CGImageGetHeight( capturedImage ) / self.window.backingScaleFactor )];
|
||||
[profiler finishJob:@"image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length ];
|
||||
[profiler finishJob:@"image size: %@, bytes: %ld", NSStringFromSize( screenImage.size ), screenImage.TIFFRepresentation.length];
|
||||
|
||||
NSImage *smallImage = [[NSImage alloc] initWithSize:NSMakeSize(
|
||||
CGImageGetWidth( capturedImage ) / 20,
|
||||
|
@ -1,23 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6154.17" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13D65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6154.17"/>
|
||||
<deployment defaultVersion="1080" identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="MPPasswordWindowController">
|
||||
<connections>
|
||||
<outlet property="blurView" destination="Bwc-sd-6gm" id="wNV-0x-LJn"/>
|
||||
<outlet property="counterContainer" destination="d3u-Ze-9uf" id="LOe-E4-MBC"/>
|
||||
<outlet property="counterLabel" destination="NvO-kt-eZ2" id="rjP-S0-i3S"/>
|
||||
<outlet property="counterStepper" destination="XgA-Vl-CKh" id="BYt-m6-c9i"/>
|
||||
<outlet property="elementsController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/>
|
||||
<outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/>
|
||||
<outlet property="loginButton" destination="1Qo-iG-CQt" id="cDg-oK-faG"/>
|
||||
<outlet property="passwordField" destination="iGR-wo-ual" id="sJN-aE-j7G"/>
|
||||
<outlet property="passwordTypesBox" destination="bZe-7q-i6q" id="Ai3-pt-i6K"/>
|
||||
<outlet property="passwordTypesMatrix" destination="3fr-Fd-pxx" id="T8g-mS-lxP"/>
|
||||
<outlet property="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/>
|
||||
<outlet property="siteField" destination="CnS-iI-dhr" id="nPo-Kb-YM2"/>
|
||||
<outlet property="siteTable" destination="xvJ-5c-vDp" id="ClP-j8-DyI"/>
|
||||
<outlet property="typeButton" destination="vES-W5-m4x" id="r9n-pD-J8T"/>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="dPy-F3-9rn"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
@ -52,7 +50,7 @@
|
||||
</imageView>
|
||||
<secureTextField hidden="YES" focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="iGR-wo-ual" userLabel="Password Field">
|
||||
<rect key="frame" x="18" y="243" width="612" height="44"/>
|
||||
<shadow key="shadow">
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
@ -69,12 +67,13 @@
|
||||
</connections>
|
||||
</secureTextField>
|
||||
<scrollView focusRingType="none" borderType="none" autohidesScrollers="YES" horizontalLineScroll="31" horizontalPageScroll="10" verticalLineScroll="31" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bme-XK-MMc" userLabel="Sites Table">
|
||||
<rect key="frame" x="68" y="0.0" width="512" height="203"/>
|
||||
<rect key="frame" x="68" y="80" width="512" height="123"/>
|
||||
<clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="e11-59-xSS">
|
||||
<rect key="frame" x="0.0" y="0.0" width="512" height="203"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="512" height="123"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowHeight="29" rowSizeStyle="automatic" viewBased="YES" floatsGroupRows="NO" id="xvJ-5c-vDp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="515" height="123"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
@ -128,216 +127,6 @@
|
||||
<outlet property="textField" destination="ydd-Rv-tra" id="lMV-D4-Ilq"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="hkT-y8-DWp">
|
||||
<rect key="frame" x="1" y="32" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="vYa-zb-cyI">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="yY1-r0-N1g">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="hkT-y8-DWp" name="value" keyPath="objectValue.siteName" id="WQp-cM-h4I">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="LIk-1U-Zde"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="vYa-zb-cyI" firstAttribute="top" secondItem="hkT-y8-DWp" secondAttribute="top" id="TdC-dO-fyC"/>
|
||||
<constraint firstItem="vYa-zb-cyI" firstAttribute="leading" secondItem="hkT-y8-DWp" secondAttribute="leading" id="Wem-9D-r3d"/>
|
||||
<constraint firstAttribute="bottom" secondItem="vYa-zb-cyI" secondAttribute="bottom" id="YOa-YX-enx"/>
|
||||
<constraint firstAttribute="trailing" secondItem="vYa-zb-cyI" secondAttribute="trailing" id="mbT-JH-6Vy"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="vYa-zb-cyI" id="b9c-D1-FbZ"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="Kms-zM-eGe">
|
||||
<rect key="frame" x="1" y="63" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="JFE-HN-Lsi">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="6mS-zG-hgB">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="Kms-zM-eGe" name="value" keyPath="objectValue.siteName" id="sYH-29-PCA">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="byp-zk-h1A"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="JFE-HN-Lsi" firstAttribute="top" secondItem="Kms-zM-eGe" secondAttribute="top" id="5tv-2L-iXp"/>
|
||||
<constraint firstAttribute="bottom" secondItem="JFE-HN-Lsi" secondAttribute="bottom" id="Byo-L3-Mbc"/>
|
||||
<constraint firstItem="JFE-HN-Lsi" firstAttribute="leading" secondItem="Kms-zM-eGe" secondAttribute="leading" id="CE6-jh-ihK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="JFE-HN-Lsi" secondAttribute="trailing" id="eFA-Ky-69t"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="JFE-HN-Lsi" id="qzT-DE-5zx"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="k75-jo-lxr">
|
||||
<rect key="frame" x="1" y="94" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="gSt-wm-ZDM">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="geq-bi-s7L">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="k75-jo-lxr" name="value" keyPath="objectValue.siteName" id="Dmf-GT-8RK">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="e9c-2s-wWe"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="gSt-wm-ZDM" firstAttribute="top" secondItem="k75-jo-lxr" secondAttribute="top" id="4NN-16-v02"/>
|
||||
<constraint firstAttribute="trailing" secondItem="gSt-wm-ZDM" secondAttribute="trailing" id="6TI-mL-sSX"/>
|
||||
<constraint firstItem="gSt-wm-ZDM" firstAttribute="leading" secondItem="k75-jo-lxr" secondAttribute="leading" id="Hbf-qS-8yD"/>
|
||||
<constraint firstAttribute="bottom" secondItem="gSt-wm-ZDM" secondAttribute="bottom" id="Q6g-Ia-djo"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="gSt-wm-ZDM" id="fa1-27-mZH"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="t8U-1Z-h8n">
|
||||
<rect key="frame" x="1" y="125" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="Cob-wz-Wen">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="2Fb-pE-m65">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="t8U-1Z-h8n" name="value" keyPath="objectValue.siteName" id="p6q-u4-RgE">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="axu-vi-h66"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="Cob-wz-Wen" secondAttribute="trailing" id="Ac3-Es-lgx"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Cob-wz-Wen" secondAttribute="bottom" id="Bxt-iZ-pl0"/>
|
||||
<constraint firstItem="Cob-wz-Wen" firstAttribute="leading" secondItem="t8U-1Z-h8n" secondAttribute="leading" id="c2O-67-HlE"/>
|
||||
<constraint firstItem="Cob-wz-Wen" firstAttribute="top" secondItem="t8U-1Z-h8n" secondAttribute="top" id="dlx-Qm-91r"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="Cob-wz-Wen" id="VbE-Br-LJL"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="eXo-Xn-hMI">
|
||||
<rect key="frame" x="1" y="156" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="C8V-1i-OYe">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="utk-lr-g1f">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="eXo-Xn-hMI" name="value" keyPath="objectValue.siteName" id="LmO-EJ-Xia">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="4Xr-vN-sit"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="C8V-1i-OYe" secondAttribute="trailing" id="6xM-Mp-hXd"/>
|
||||
<constraint firstItem="C8V-1i-OYe" firstAttribute="top" secondItem="eXo-Xn-hMI" secondAttribute="top" id="IzF-BP-IO2"/>
|
||||
<constraint firstItem="C8V-1i-OYe" firstAttribute="leading" secondItem="eXo-Xn-hMI" secondAttribute="leading" id="ocn-mx-SJJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="C8V-1i-OYe" secondAttribute="bottom" id="ru2-Y1-llM"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="C8V-1i-OYe" id="4gp-Wt-g17"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
<tableCellView id="QUf-ad-zO1">
|
||||
<rect key="frame" x="1" y="187" width="512" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="igh-9a-0bT">
|
||||
<rect key="frame" x="-2" y="0.0" width="516" height="29"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="0.80000000000000004" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" alignment="center" title="apple.com" id="MAb-9S-rCJ">
|
||||
<font key="font" size="24" name="HelveticaNeue-Thin"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
<connections>
|
||||
<binding destination="QUf-ad-zO1" name="value" keyPath="objectValue.siteName" id="hX4-29-ubu">
|
||||
<dictionary key="options">
|
||||
<bool key="NSContinuouslyUpdatesValue" value="YES"/>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<outlet property="delegate" destination="-2" id="nfV-K0-dYN"/>
|
||||
</connections>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="igh-9a-0bT" firstAttribute="top" secondItem="QUf-ad-zO1" secondAttribute="top" id="2BF-EK-A5v"/>
|
||||
<constraint firstAttribute="trailing" secondItem="igh-9a-0bT" secondAttribute="trailing" id="STV-or-HzL"/>
|
||||
<constraint firstAttribute="bottom" secondItem="igh-9a-0bT" secondAttribute="bottom" id="bcr-hu-uLW"/>
|
||||
<constraint firstItem="igh-9a-0bT" firstAttribute="leading" secondItem="QUf-ad-zO1" secondAttribute="leading" id="sXz-wW-A1C"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<outlet property="textField" destination="igh-9a-0bT" id="PE9-9y-aXJ"/>
|
||||
</connections>
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
</tableColumns>
|
||||
@ -356,7 +145,7 @@
|
||||
</constraints>
|
||||
<animations/>
|
||||
<scroller key="horizontalScroller" verticalHuggingPriority="750" horizontal="YES" id="8wr-pu-1lc">
|
||||
<rect key="frame" x="0.0" y="187" width="512" height="16"/>
|
||||
<rect key="frame" x="0.0" y="107" width="512" height="16"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</scroller>
|
||||
<scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="mcf-ST-XXI">
|
||||
@ -394,39 +183,42 @@
|
||||
<outlet property="delegate" destination="-2" id="2WA-uI-asx"/>
|
||||
</connections>
|
||||
</searchField>
|
||||
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
|
||||
<rect key="frame" x="277" y="19" width="94" height="20"/>
|
||||
<buttonCell key="cell" type="inline" title="Long Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
<string key="keyEquivalent">p</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="changeType:" target="-2" id="6Jj-7p-da9"/>
|
||||
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="Hat-GU-hcQ">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.typeName" id="ezf-Bo-UJN"/>
|
||||
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.typeName" id="Omj-MJ-oKy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
|
||||
<rect key="frame" x="379" y="18" width="28" height="23"/>
|
||||
<customView translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
|
||||
<rect key="frame" x="310" y="47" width="28" height="22"/>
|
||||
<subviews>
|
||||
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper">
|
||||
<rect key="frame" x="-3" y="-2" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" alignment="left" maxValue="100" id="ikF-n4-xiI"/>
|
||||
<rect key="frame" x="-3" y="-3" width="19" height="27"/>
|
||||
<stepperCell key="cell" continuous="YES" alignment="left" minValue="1" maxValue="1000" doubleValue="1" id="ikF-n4-xiI"/>
|
||||
<connections>
|
||||
<binding destination="mcS-ik-b0n" name="value" keyPath="selection.counter" id="qmm-6z-boy"/>
|
||||
</connections>
|
||||
</stepper>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field">
|
||||
<rect key="frame" x="19" y="3" width="11" height="17"/>
|
||||
<rect key="frame" x="19" y="2" width="11" height="19"/>
|
||||
<shadow key="shadow" blurRadius="1">
|
||||
<size key="offset" width="0.0" height="1"/>
|
||||
<color key="color" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</shadow>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="1" id="dhQ-bJ-rn3">
|
||||
<font key="font" size="11" name="HelveticaNeue-Medium"/>
|
||||
<font key="font" size="12" name="HelveticaNeue-Medium"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
</textFieldCell>
|
||||
@ -442,9 +234,7 @@
|
||||
<constraint firstItem="NvO-kt-eZ2" firstAttribute="leading" secondItem="XgA-Vl-CKh" secondAttribute="trailing" constant="8" symbolic="YES" id="V9l-un-zYj"/>
|
||||
<constraint firstAttribute="centerY" secondItem="XgA-Vl-CKh" secondAttribute="centerY" id="Ye6-AA-god"/>
|
||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="XgA-Vl-CKh" secondAttribute="bottom" id="f3p-gK-Pzg"/>
|
||||
<constraint firstItem="NvO-kt-eZ2" firstAttribute="top" relation="greaterThanOrEqual" secondItem="d3u-Ze-9uf" secondAttribute="top" id="pdR-fg-9FI"/>
|
||||
<constraint firstItem="XgA-Vl-CKh" firstAttribute="top" relation="greaterThanOrEqual" secondItem="d3u-Ze-9uf" secondAttribute="top" id="sLs-IG-OES"/>
|
||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="NvO-kt-eZ2" secondAttribute="bottom" id="upD-lF-5lW"/>
|
||||
<constraint firstItem="XgA-Vl-CKh" firstAttribute="leading" secondItem="d3u-Ze-9uf" secondAttribute="leading" id="vKj-dp-A0D"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
@ -453,7 +243,7 @@
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.counter" previousBinding="1HU-QK-FXC" id="gbL-I5-7g8">
|
||||
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.generated" previousBinding="1HU-QK-FXC" id="AyD-tq-Gqc">
|
||||
<dictionary key="options">
|
||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||
<integer key="NSNoSelectionPlaceholder" value="-1"/>
|
||||
@ -464,13 +254,16 @@
|
||||
</binding>
|
||||
</connections>
|
||||
</customView>
|
||||
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
|
||||
<rect key="frame" x="155" y="19" width="114" height="20"/>
|
||||
<buttonCell key="cell" type="inline" title="lhunath@lyndir.com" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
<string key="keyEquivalent">l</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="changeLogin:" target="-2" id="vj4-nM-j0d"/>
|
||||
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="8yw-hl-jLO">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
@ -486,30 +279,77 @@
|
||||
<progressIndicator hidden="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" displayedWhenStopped="NO" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="oSh-Ec-8Nf">
|
||||
<rect key="frame" x="316" y="494" width="16" height="16"/>
|
||||
</progressIndicator>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XuF-Sp-6JD" userLabel="Delete Button">
|
||||
<rect key="frame" x="379" y="19" width="70" height="20"/>
|
||||
<buttonCell key="cell" type="inline" title="Delete Site" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="26m-of-YMQ">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
<string key="keyEquivalent">d</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="deleteElement:" target="-2" id="mVT-O6-KfN"/>
|
||||
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="eqU-d2-XhQ">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="brI-fg-Kav" userLabel="Password Button">
|
||||
<rect key="frame" x="270" y="46" width="108" height="20"/>
|
||||
<buttonCell key="cell" type="inline" title="Change Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="FQu-fM-NWY">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
<string key="keyEquivalent">d</string>
|
||||
<modifierMask key="keyEquivalentModifierMask" command="YES"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="changePassword:" target="-2" id="oVC-Od-Ij2"/>
|
||||
<binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="gxV-co-WNZ">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.stored" previousBinding="gxV-co-WNZ" id="CgR-BD-v6H">
|
||||
<dictionary key="options">
|
||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||
<integer key="NSNoSelectionPlaceholder" value="-1"/>
|
||||
<integer key="NSNotApplicablePlaceholder" value="-1"/>
|
||||
<integer key="NSNullPlaceholder" value="-1"/>
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" id="1kJ-cV-fhc"/>
|
||||
<constraint firstItem="brI-fg-Kav" firstAttribute="centerX" secondItem="vES-W5-m4x" secondAttribute="centerX" id="1tN-p4-2m4"/>
|
||||
<constraint firstItem="Bme-XK-MMc" firstAttribute="top" secondItem="CnS-iI-dhr" secondAttribute="bottom" constant="40" id="1ta-BC-BdQ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Bwc-sd-6gm" secondAttribute="bottom" id="3fF-7g-c6C"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="92S-HP-Vk7"/>
|
||||
<constraint firstItem="CnS-iI-dhr" firstAttribute="top" secondItem="OnR-s6-d4P" secondAttribute="bottom" constant="8" symbolic="YES" id="CGj-SL-Qhp"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="centerY" secondItem="XuF-Sp-6JD" secondAttribute="centerY" id="DPa-1n-QWJ"/>
|
||||
<constraint firstAttribute="centerY" secondItem="iGR-wo-ual" secondAttribute="centerY" id="GZE-mX-kjj"/>
|
||||
<constraint firstAttribute="centerY" secondItem="CnS-iI-dhr" secondAttribute="centerY" id="HjG-vb-3Qg"/>
|
||||
<constraint firstItem="d3u-Ze-9uf" firstAttribute="leading" secondItem="vES-W5-m4x" secondAttribute="trailing" constant="8" symbolic="YES" id="Juf-Q3-pkt"/>
|
||||
<constraint firstItem="iGR-wo-ual" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" symbolic="YES" id="KNz-B2-qfi"/>
|
||||
<constraint firstItem="Bwc-sd-6gm" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" id="Kqb-ig-5cP"/>
|
||||
<constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Bme-XK-MMc" secondAttribute="bottom" constant="80" id="MbE-Oa-J9k"/>
|
||||
<constraint firstAttribute="centerX" secondItem="OnR-s6-d4P" secondAttribute="centerX" id="Pun-kD-jgl"/>
|
||||
<constraint firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="Qqi-bu-q65"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="centerX" secondItem="d3u-Ze-9uf" secondAttribute="centerX" id="YnC-cX-p8p"/>
|
||||
<constraint firstItem="1Qo-iG-CQt" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="ZeK-3S-ZWW"/>
|
||||
<constraint firstAttribute="centerX" secondItem="oSh-Ec-8Nf" secondAttribute="centerX" id="c28-5a-C45"/>
|
||||
<constraint firstItem="oSh-Ec-8Nf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="cUB-xF-1Wr"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="d3u-Ze-9uf" secondAttribute="bottom" constant="8" symbolic="YES" id="d3h-VT-ilM"/>
|
||||
<constraint firstItem="XuF-Sp-6JD" firstAttribute="leading" secondItem="vES-W5-m4x" secondAttribute="trailing" constant="8" symbolic="YES" id="d43-2g-dap"/>
|
||||
<constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Bwc-sd-6gm" secondAttribute="trailing" id="gKu-JH-NDR"/>
|
||||
<constraint firstItem="Bme-XK-MMc" firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="i7B-jz-xgm"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="leading" secondItem="1Qo-iG-CQt" secondAttribute="trailing" constant="8" symbolic="YES" id="kTZ-lP-vnR"/>
|
||||
<constraint firstAttribute="centerX" secondItem="iGR-wo-ual" secondAttribute="centerX" id="kXB-yZ-sur"/>
|
||||
<constraint firstItem="d3u-Ze-9uf" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="oyK-p1-dQM"/>
|
||||
<constraint firstItem="vES-W5-m4x" firstAttribute="top" secondItem="brI-fg-Kav" secondAttribute="bottom" constant="8" symbolic="YES" id="rCP-oh-rWr"/>
|
||||
<constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/>
|
||||
</constraints>
|
||||
<backgroundFilters>
|
||||
@ -541,6 +381,71 @@ AAAAAAEGA
|
||||
<binding destination="-2" name="contentArray" keyPath="elements" id="c96-Dv-HK1"/>
|
||||
</connections>
|
||||
</arrayController>
|
||||
<box autoresizesSubviews="NO" title="Password Types" borderType="line" titlePosition="noTitle" id="bZe-7q-i6q">
|
||||
<rect key="frame" x="0.0" y="0.0" width="386" height="186"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<view key="contentView">
|
||||
<rect key="frame" x="1" y="1" width="384" height="184"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" translatesAutoresizingMaskIntoConstraints="NO" id="3fr-Fd-pxx">
|
||||
<rect key="frame" x="18" y="14" width="348" height="158"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<size key="cellSize" width="348" height="18"/>
|
||||
<size key="intercellSpacing" width="4" height="2"/>
|
||||
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="RW9-c9-I7v">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<cells>
|
||||
<column>
|
||||
<buttonCell type="radio" title="7486" imagePosition="left" alignment="left" tag="1" inset="2" id="QMg-MG-Ytg">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Qux6" imagePosition="left" alignment="left" inset="2" id="KD6-NE-8e3">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="FIN60WCH" imagePosition="left" alignment="left" inset="2" id="e5D-HK-fHj">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Qux6%Geg" imagePosition="left" alignment="left" inset="2" id="d0t-34-7Fx">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="QuxmDapiJiln3," imagePosition="left" alignment="left" inset="2" id="WD9-cz-7XK">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="F4*DVMC^zs1fEXfCwRyV" imagePosition="left" alignment="left" inset="2" id="mn3-kQ-wzW">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Personal Password" imagePosition="left" alignment="left" inset="2" id="7qL-si-K4n">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<buttonCell type="radio" title="Device Private Password" imagePosition="left" alignment="left" inset="2" id="mwA-qD-0jD">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</column>
|
||||
</cells>
|
||||
</matrix>
|
||||
</subviews>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="3fr-Fd-pxx" secondAttribute="trailing" constant="16" id="Nnp-8v-Zcf"/>
|
||||
<constraint firstItem="3fr-Fd-pxx" firstAttribute="top" secondItem="bZe-7q-i6q" secondAttribute="top" constant="11" id="VDj-5W-sPg"/>
|
||||
<constraint firstItem="3fr-Fd-pxx" firstAttribute="leading" secondItem="bZe-7q-i6q" secondAttribute="leading" constant="16" id="phM-M0-PZT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="3fr-Fd-pxx" secondAttribute="bottom" constant="11" id="z2T-aP-O0g"/>
|
||||
</constraints>
|
||||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</box>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="small-screen" width="25" height="15.5"/>
|
||||
|
Loading…
Reference in New Issue
Block a user