2
0

The search for a background that works on all screens ...

This commit is contained in:
Maarten Billemont 2014-06-24 22:00:33 -04:00
parent 6422084fa0
commit ff36f6ce87
4 changed files with 78 additions and 74 deletions

View File

@ -10,6 +10,7 @@
#import "MPAppDelegate_Key.h" #import "MPAppDelegate_Key.h"
#import "MPAppDelegate_Store.h" #import "MPAppDelegate_Store.h"
#import "MPPasswordWindowController.h" #import "MPPasswordWindowController.h"
#import "PearlProfiler.h"
#import <Carbon/Carbon.h> #import <Carbon/Carbon.h>
#import <ServiceManagement/ServiceManagement.h> #import <ServiceManagement/ServiceManagement.h>
@ -70,6 +71,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"applicationDidFinishLaunching"];
// Setup delegates and listeners. // Setup delegates and listeners.
[MPConfig get].delegate = self; [MPConfig get].delegate = self;
__weak id weakSelf = self; __weak id weakSelf = self;
@ -88,6 +90,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[weakSelf updateMenuItems]; [weakSelf updateMenuItems];
} ); } );
} forKeyPath:@"storeManager.cloudAvailable" options:0 context:nil]; } forKeyPath:@"storeManager.cloudAvailable" options:0 context:nil];
[profiler finishJob:@"observers"];
// Status item. // Status item.
self.statusView = [[RHStatusItemView alloc] initWithStatusBarItem: self.statusView = [[RHStatusItemView alloc] initWithStatusBarItem:
@ -96,6 +99,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
self.statusView.menu = self.statusMenu; self.statusView.menu = self.statusMenu;
self.statusView.target = self; self.statusView.target = self;
self.statusView.action = @selector( showMenu ); self.statusView.action = @selector( showMenu );
[profiler finishJob:@"statusView"];
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil [[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil
queue:[NSOperationQueue mainQueue] usingBlock: queue:[NSOperationQueue mainQueue] usingBlock:
@ -125,7 +129,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
} }
} }
}]; }];
[profiler finishJob:@"notificationCenter"];
[self updateUsers]; [self updateUsers];
[profiler finishJob:@"updateUsers"];
// Global hotkey. // Global hotkey.
EventHotKeyRef hotKeyRef; EventHotKeyRef hotKeyRef;
@ -140,14 +146,15 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef ); status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr) if (status != noErr)
err( @"Error registering 'lock' hotkey: %i", (int)status ); err( @"Error registering 'lock' hotkey: %i", (int)status );
[profiler finishJob:@"hotKey"];
// Initial display. // Initial display.
[NSApp activateIgnoringOtherApps:YES];
if ([[MPMacConfig get].firstRun boolValue]) { if ([[MPMacConfig get].firstRun boolValue]) {
self.initialWindow = [[NSWindowController alloc] initWithWindowNibName:@"MPInitialWindow" owner:self]; self.initialWindow = [[NSWindowController alloc] initWithWindowNibName:@"MPInitialWindow" owner:self];
[self.initialWindow.window setLevel:NSFloatingWindowLevel]; [self.initialWindow.window setLevel:NSFloatingWindowLevel];
[self.initialWindow showWindow:self]; [self.initialWindow showWindow:self];
} }
[profiler finishJob:@"initial display"];
} }
- (void)applicationWillResignActive:(NSNotification *)notification { - (void)applicationWillResignActive:(NSNotification *)notification {

View File

@ -31,6 +31,7 @@
@property(nonatomic, weak) IBOutlet NSTableView *siteTable; @property(nonatomic, weak) IBOutlet NSTableView *siteTable;
@property(nonatomic, weak) IBOutlet NSProgressIndicator *progressView; @property(nonatomic, weak) IBOutlet NSProgressIndicator *progressView;
@property(nonatomic, weak) IBOutlet NSButton *typeButton; @property(nonatomic, weak) IBOutlet NSButton *typeButton;
@property(nonatomic, weak) IBOutlet NSButton *loginButton;
@property(nonatomic, weak) IBOutlet NSView *counterContainer; @property(nonatomic, weak) IBOutlet NSView *counterContainer;
@property(nonatomic, weak) IBOutlet NSStepper *counterStepper; @property(nonatomic, weak) IBOutlet NSStepper *counterStepper;
@property(nonatomic, weak) IBOutlet NSTextField *counterLabel; @property(nonatomic, weak) IBOutlet NSTextField *counterLabel;

View File

@ -69,6 +69,10 @@
withBlock:^(id from, id to, NSKeyValueChange cause, id _self) { withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
[self updateSelection]; [self updateSelection];
}]; }];
NSSearchFieldCell *siteFieldCell = self.siteField.cell;
siteFieldCell.searchButtonCell = nil;
siteFieldCell.cancelButtonCell = nil;
} }
#pragma mark - NSResponder #pragma mark - NSResponder
@ -113,10 +117,10 @@
[self.elementsController selectNext:self]; [self.elementsController selectNext:self];
return YES; return YES;
} }
// if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0) { if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0) {
// _skipTextChange = YES; _skipTextChange = YES;
// return NO; return NO;
// } }
} }
return [self handleCommand:commandSelector]; return [self handleCommand:commandSelector];
@ -127,26 +131,6 @@
[self updateElements]; [self updateElements];
} }
- (void)controlTextDidChange:(NSNotification *)note {
// if (note.object == self.siteField) {
// [self updateElements];
// Update the site content as the site name changes.
// if ([[NSApp currentEvent] type] == NSKeyDown &&
// [[[NSApp currentEvent] charactersIgnoringModifiers] isEqualToString:@"\r"]) { // Return while completing.
// [self useSite];
// return;
// }
// if ([[NSApp currentEvent] type] == NSKeyDown &&
// [[[NSApp currentEvent] charactersIgnoringModifiers] characterAtIndex:0] == 0x1b) { // Escape while completing.
// [self trySiteWithAction:NO];
// return;
// }
// }
}
#pragma mark - NSTextViewDelegate #pragma mark - NSTextViewDelegate
- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector { - (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
@ -173,7 +157,7 @@
// "Create" button. // "Create" button.
[[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) { [[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) {
if (element) if (element)
PearlMainQueue( ^{ [self updateElements]; } ); [self updateElements];
}]; }];
break; break;
} }
@ -188,6 +172,11 @@
#pragma mark - State #pragma mark - State
- (NSString *)query {
return [self.siteField.stringValue stringByReplacingCharactersInRange:self.siteField.currentEditor.selectedRange withString:@""];
}
- (void)insertObject:(MPElementModel *)model inElementsAtIndex:(NSUInteger)index { - (void)insertObject:(MPElementModel *)model inElementsAtIndex:(NSUInteger)index {
[self.elements insertObject:model atIndex:index]; [self.elements insertObject:model atIndex:index];
@ -222,32 +211,29 @@
- (void)updateUser { - (void)updateUser {
[MPMacAppDelegate managedObjectContextForMainThreadPerformBlock:^(NSManagedObjectContext *mainContext) { [MPMacAppDelegate managedObjectContextForMainThreadPerformBlock:^(NSManagedObjectContext *mainContext) {
self.passwordField.hidden = YES;
self.siteField.hidden = YES;
self.siteTable.hidden = YES;
self.inputLabel.stringValue = @"";
self.passwordField.stringValue = @"";
self.siteField.stringValue = @"";
MPUserEntity *mainActiveUser = [[MPMacAppDelegate get] activeUserInContext:mainContext]; MPUserEntity *mainActiveUser = [[MPMacAppDelegate get] activeUserInContext:mainContext];
if (mainActiveUser) { if (mainActiveUser) {
if ([MPMacAppDelegate get].key) { if ([MPMacAppDelegate get].key) {
self.inputLabel.stringValue = strf( @"%@'s password for:", mainActiveUser.name ); self.inputLabel.stringValue = strf( @"%@'s password for:", mainActiveUser.name );
[self.passwordField setHidden:YES]; self.siteField.hidden = NO;
[self.siteField setHidden:NO]; self.siteTable.hidden = NO;
[self.siteTable setHidden:NO];
[self.siteField becomeFirstResponder]; [self.siteField becomeFirstResponder];
} }
else { else {
self.inputLabel.stringValue = strf( @"Enter %@'s master password:", mainActiveUser.name ); self.inputLabel.stringValue = strf( @"Enter %@'s master password:", mainActiveUser.name );
[self.passwordField setHidden:NO]; self.passwordField.hidden = NO;
[self.siteField setHidden:YES];
[self.siteTable setHidden:YES];
[self.passwordField becomeFirstResponder]; [self.passwordField becomeFirstResponder];
} }
} }
else {
self.inputLabel.stringValue = @"";
[self.passwordField setHidden:YES];
[self.siteField setHidden:YES];
[self.siteTable setHidden:YES];
}
self.passwordField.stringValue = @"";
self.siteField.stringValue = @"";
[self updateElements]; [self updateElements];
}]; }];
} }
@ -259,12 +245,15 @@
return; return;
} }
NSString *query = [self.siteField stringValue]; PearlProfiler *profiler = [PearlProfiler profilerForTask:@"updateElements"];
NSString *query = [self query];
[profiler finishJob:@"query"];
[MPMacAppDelegate managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) { [MPMacAppDelegate managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )]; NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"lastUsed" ascending:NO]]; fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"lastUsed" ascending:NO]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(%@ == '' OR name BEGINSWITH[cd] %@) AND user == %@", fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(%@ == '' OR name BEGINSWITH[cd] %@) AND user == %@",
query, query, [[MPMacAppDelegate get] activeUserInContext:context]]; query, query, [[MPMacAppDelegate get] activeUserInContext:context]];
[profiler finishJob:@"setup fetch"];
NSError *error = nil; NSError *error = nil;
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error]; NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
@ -272,12 +261,16 @@
err( @"While fetching elements for completion: %@", error ); err( @"While fetching elements for completion: %@", error );
return; return;
} }
[profiler finishJob:@"do fetch"];
NSMutableArray *newElements = [NSMutableArray arrayWithCapacity:[siteResults count]]; NSMutableArray *newElements = [NSMutableArray arrayWithCapacity:[siteResults count]];
for (MPElementEntity *element in siteResults) for (MPElementEntity *element in siteResults)
[newElements addObject:[[MPElementModel alloc] initWithEntity:element]]; [newElements addObject:[[MPElementModel alloc] initWithEntity:element]];
[profiler finishJob:@"make models"];
self.elements = newElements; self.elements = newElements;
[profiler finishJob:@"update elements"];
}]; }];
[profiler finishJob:@"done"];
} }
- (void)updateSelection { - (void)updateSelection {
@ -287,18 +280,15 @@
return; return;
} }
NSString *selectedSiteName = self.selectedElement.siteName; NSString *siteName = self.selectedElement.siteName;
if (!selectedSiteName) if (!siteName)
return; return;
NSString *querySiteText = [self.siteField.stringValue stringByReplacingCharactersInRange:self.siteField.currentEditor.selectedRange NSRange siteNameQueryRange = [siteName rangeOfString:[self query]];
withString:@""]; self.siteField.stringValue = siteName;
NSRange selectedSiteNameQueryRange = [selectedSiteName rangeOfString:querySiteText];
self.siteField.stringValue = selectedSiteName;
if (selectedSiteNameQueryRange.location == 0) if (siteNameQueryRange.location == 0)
self.siteField.currentEditor.selectedRange = NSMakeRange( self.siteField.currentEditor.selectedRange = NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length );
selectedSiteNameQueryRange.length, selectedSiteName.length - selectedSiteNameQueryRange.length );
} }
- (void)useSite { - (void)useSite {
@ -358,7 +348,7 @@
if ([self.window isOnActiveSpace] && self.window.alphaValue) if ([self.window isOnActiveSpace] && self.window.alphaValue)
return; return;
PearlProfiler *profiler = [PearlProfiler new]; PearlProfiler *profiler = [PearlProfiler profilerForTask:@"fadeIn"];
CGWindowID windowID = (CGWindowID)[self.window windowNumber]; CGWindowID windowID = (CGWindowID)[self.window windowNumber];
CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID, CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID,
kCGWindowImageBoundsIgnoreFraming ); kCGWindowImageBoundsIgnoreFraming );

View File

@ -13,6 +13,7 @@
<outlet property="counterStepper" destination="XgA-Vl-CKh" id="BYt-m6-c9i"/> <outlet property="counterStepper" destination="XgA-Vl-CKh" id="BYt-m6-c9i"/>
<outlet property="elementsController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/> <outlet property="elementsController" destination="mcS-ik-b0n" id="cdF-BL-lfg"/>
<outlet property="inputLabel" destination="OnR-s6-d4P" id="p6G-Ut-cdu"/> <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="passwordField" destination="iGR-wo-ual" id="sJN-aE-j7G"/>
<outlet property="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/> <outlet property="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/>
<outlet property="siteField" destination="CnS-iI-dhr" id="nPo-Kb-YM2"/> <outlet property="siteField" destination="CnS-iI-dhr" id="nPo-Kb-YM2"/>
@ -32,19 +33,20 @@
<rect key="frame" x="0.0" y="0.0" width="648" height="530"/> <rect key="frame" x="0.0" y="0.0" width="648" height="530"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Bwc-sd-6gm" userLabel="Screen Capture"> <imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Bwc-sd-6gm" userLabel="Screen Capture">
<rect key="frame" x="0.0" y="0.0" width="648" height="530"/> <rect key="frame" x="0.0" y="0.0" width="648" height="530"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<contentFilters> <contentFilters>
<ciFilter name="CIGaussianBlur"> <ciFilter name="CIGaussianBlur">
<configuration> <configuration>
<null key="inputImage"/> <null key="inputImage"/>
<real key="inputRadius" value="20"/> <real key="inputRadius" value="40"/>
</configuration> </configuration>
</ciFilter> </ciFilter>
<ciFilter name="CIPhotoEffectProcess"> <ciFilter name="CISepiaTone">
<configuration> <configuration>
<null key="inputImage"/> <null key="inputImage"/>
<real key="inputIntensity" value="0.29999999999999999"/>
</configuration> </configuration>
</ciFilter> </ciFilter>
</contentFilters> </contentFilters>
@ -76,7 +78,7 @@
<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="203"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" selectionHighlightStyle="sourceList" columnReordering="NO" columnResizing="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" rowHeight="29" rowSizeStyle="automatic" viewBased="YES" id="xvJ-5c-vDp"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="none" 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="203"/> <rect key="frame" x="0.0" y="0.0" width="515" height="203"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<size key="intercellSpacing" width="3" height="2"/> <size key="intercellSpacing" width="3" height="2"/>
@ -89,7 +91,7 @@
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/> <color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="dRO-6J-4JL"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" refusesFirstResponder="YES" alignment="left" title="Text Cell" id="dRO-6J-4JL">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -180,7 +182,7 @@
<size key="offset" width="0.0" height="1"/> <size key="offset" width="0.0" height="1"/>
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/> <color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
</shadow> </shadow>
<searchFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" focusRingType="none" alignment="center" placeholderString="Site Name" id="ppl-2c-1E9"> <searchFieldCell key="cell" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" focusRingType="none" alignment="center" placeholderString="Site Name" sendsSearchStringImmediately="YES" id="ppl-2c-1E9">
<font key="font" size="36" name="HelveticaNeue-Thin"/> <font key="font" size="36" name="HelveticaNeue-Thin"/>
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/> <color key="backgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
@ -191,23 +193,23 @@
</connections> </connections>
</searchField> </searchField>
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button"> <button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="vES-W5-m4x" userLabel="Type Button">
<rect key="frame" x="278" y="19" width="92" height="20"/> <rect key="frame" x="277" y="19" width="94" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="inline" title="Long Password" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Fom-sN-EtZ"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Medium"/> <font key="font" size="11" name="HelveticaNeue-Bold"/>
</buttonCell> </buttonCell>
<connections> <connections>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="selection" id="zBN-72-q5B"> <binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="Hat-GU-hcQ">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </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="ezf-Bo-UJN"/>
</connections> </connections>
</button> </button>
<customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container"> <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="d3u-Ze-9uf" userLabel="Counter Container">
<rect key="frame" x="378" y="18" width="28" height="23"/> <rect key="frame" x="379" y="18" width="28" height="23"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews> <subviews>
<stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper"> <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="XgA-Vl-CKh" userLabel="Counter Stepper">
@ -221,10 +223,14 @@
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="NvO-kt-eZ2" userLabel="Counter Field"> <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="3" width="11" height="17"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<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"> <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="11" name="HelveticaNeue-Medium"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
</textFieldCell> </textFieldCell>
<connections> <connections>
<binding destination="mcS-ik-b0n" name="value" keyPath="selection.counter" id="aA9-yw-cYE"/> <binding destination="mcS-ik-b0n" name="value" keyPath="selection.counter" id="aA9-yw-cYE"/>
@ -244,7 +250,7 @@
<constraint firstItem="XgA-Vl-CKh" firstAttribute="leading" secondItem="d3u-Ze-9uf" secondAttribute="leading" id="vKj-dp-A0D"/> <constraint firstItem="XgA-Vl-CKh" firstAttribute="leading" secondItem="d3u-Ze-9uf" secondAttribute="leading" id="vKj-dp-A0D"/>
</constraints> </constraints>
<connections> <connections>
<binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.counter" previousBinding="YUg-F9-YTd" id="Jqu-U3-oiv"> <binding destination="mcS-ik-b0n" name="hidden2" keyPath="selection.counter" previousBinding="1HU-QK-FXC" id="gbL-I5-7g8">
<dictionary key="options"> <dictionary key="options">
<integer key="NSMultipleValuesPlaceholder" value="-1"/> <integer key="NSMultipleValuesPlaceholder" value="-1"/>
<integer key="NSNoSelectionPlaceholder" value="-1"/> <integer key="NSNoSelectionPlaceholder" value="-1"/>
@ -253,24 +259,24 @@
<string key="NSValueTransformerName">NSNegateBoolean</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="selection" id="YUg-F9-YTd"> <binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="1HU-QK-FXC">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
</connections> </connections>
</customView> </customView>
<button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button"> <button hidden="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="1Qo-iG-CQt" userLabel="Login Button">
<rect key="frame" x="269" y="48" width="111" height="20"/> <rect key="frame" x="155" y="19" width="114" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="inline" title="lhunath@lyndir.com" alternateTitle="Login Name" bezelStyle="inline" alignment="center" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="QFo-9y-aVe"> <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"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" size="11" name="HelveticaNeue-Medium"/> <font key="font" size="11" name="HelveticaNeue-Bold"/>
</buttonCell> </buttonCell>
<connections> <connections>
<binding destination="mcS-ik-b0n" name="hidden" keyPath="selection" id="KRb-FF-ruz"> <binding destination="mcS-ik-b0n" name="hidden" keyPath="canRemove" id="8yw-hl-jLO">
<dictionary key="options"> <dictionary key="options">
<string key="NSValueTransformerName">NSIsNil</string> <string key="NSValueTransformerName">NSNegateBoolean</string>
</dictionary> </dictionary>
</binding> </binding>
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.loginName" id="g1z-0F-hE9"> <binding destination="mcS-ik-b0n" name="title" keyPath="selection.loginName" id="g1z-0F-hE9">
@ -299,16 +305,16 @@
<constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/> <constraint firstAttribute="trailing" secondItem="iGR-wo-ual" secondAttribute="trailing" constant="20" symbolic="YES" id="LW8-vu-scs"/>
<constraint firstAttribute="centerX" secondItem="OnR-s6-d4P" secondAttribute="centerX" id="Pun-kD-jgl"/> <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 firstAttribute="centerX" secondItem="CnS-iI-dhr" secondAttribute="centerX" id="Qqi-bu-q65"/>
<constraint firstItem="1Qo-iG-CQt" firstAttribute="centerX" secondItem="vES-W5-m4x" secondAttribute="centerX" id="YEW-63-DI1"/> <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 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="oSh-Ec-8Nf" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" symbolic="YES" id="cUB-xF-1Wr"/>
<constraint firstAttribute="bottom" secondItem="vES-W5-m4x" secondAttribute="bottom" constant="20" symbolic="YES" id="eHI-Tn-bYD"/> <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 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="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 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="d3u-Ze-9uf" firstAttribute="centerY" secondItem="vES-W5-m4x" secondAttribute="centerY" id="oyK-p1-dQM"/>
<constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/> <constraint firstItem="Bwc-sd-6gm" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" id="tea-fv-b1S"/>
<constraint firstItem="d3u-Ze-9uf" firstAttribute="top" secondItem="1Qo-iG-CQt" secondAttribute="bottom" constant="8" symbolic="YES" id="vYh-fH-UME"/>
</constraints> </constraints>
<backgroundFilters> <backgroundFilters>
<ciFilter name="CIGaussianBlur"> <ciFilter name="CIGaussianBlur">