The search for a background that works on all screens ...
This commit is contained in:
parent
6422084fa0
commit
ff36f6ce87
@ -10,6 +10,7 @@
|
||||
#import "MPAppDelegate_Key.h"
|
||||
#import "MPAppDelegate_Store.h"
|
||||
#import "MPPasswordWindowController.h"
|
||||
#import "PearlProfiler.h"
|
||||
#import <Carbon/Carbon.h>
|
||||
#import <ServiceManagement/ServiceManagement.h>
|
||||
|
||||
@ -70,6 +71,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
|
||||
|
||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"applicationDidFinishLaunching"];
|
||||
// Setup delegates and listeners.
|
||||
[MPConfig get].delegate = self;
|
||||
__weak id weakSelf = self;
|
||||
@ -88,6 +90,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
[weakSelf updateMenuItems];
|
||||
} );
|
||||
} forKeyPath:@"storeManager.cloudAvailable" options:0 context:nil];
|
||||
[profiler finishJob:@"observers"];
|
||||
|
||||
// Status item.
|
||||
self.statusView = [[RHStatusItemView alloc] initWithStatusBarItem:
|
||||
@ -96,6 +99,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
self.statusView.menu = self.statusMenu;
|
||||
self.statusView.target = self;
|
||||
self.statusView.action = @selector( showMenu );
|
||||
[profiler finishJob:@"statusView"];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil
|
||||
queue:[NSOperationQueue mainQueue] usingBlock:
|
||||
@ -125,7 +129,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
}
|
||||
}
|
||||
}];
|
||||
[profiler finishJob:@"notificationCenter"];
|
||||
[self updateUsers];
|
||||
[profiler finishJob:@"updateUsers"];
|
||||
|
||||
// Global hotkey.
|
||||
EventHotKeyRef hotKeyRef;
|
||||
@ -140,14 +146,15 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
|
||||
status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
|
||||
if (status != noErr)
|
||||
err( @"Error registering 'lock' hotkey: %i", (int)status );
|
||||
[profiler finishJob:@"hotKey"];
|
||||
|
||||
// Initial display.
|
||||
[NSApp activateIgnoringOtherApps:YES];
|
||||
if ([[MPMacConfig get].firstRun boolValue]) {
|
||||
self.initialWindow = [[NSWindowController alloc] initWithWindowNibName:@"MPInitialWindow" owner:self];
|
||||
[self.initialWindow.window setLevel:NSFloatingWindowLevel];
|
||||
[self.initialWindow showWindow:self];
|
||||
}
|
||||
[profiler finishJob:@"initial display"];
|
||||
}
|
||||
|
||||
- (void)applicationWillResignActive:(NSNotification *)notification {
|
||||
|
@ -31,6 +31,7 @@
|
||||
@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;
|
||||
|
@ -69,6 +69,10 @@
|
||||
withBlock:^(id from, id to, NSKeyValueChange cause, id _self) {
|
||||
[self updateSelection];
|
||||
}];
|
||||
|
||||
NSSearchFieldCell *siteFieldCell = self.siteField.cell;
|
||||
siteFieldCell.searchButtonCell = nil;
|
||||
siteFieldCell.cancelButtonCell = nil;
|
||||
}
|
||||
|
||||
#pragma mark - NSResponder
|
||||
@ -113,10 +117,10 @@
|
||||
[self.elementsController selectNext:self];
|
||||
return YES;
|
||||
}
|
||||
// if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0) {
|
||||
// _skipTextChange = YES;
|
||||
// return NO;
|
||||
// }
|
||||
if ([NSStringFromSelector( commandSelector ) rangeOfString:@"delete"].location == 0) {
|
||||
_skipTextChange = YES;
|
||||
return NO;
|
||||
}
|
||||
}
|
||||
|
||||
return [self handleCommand:commandSelector];
|
||||
@ -127,26 +131,6 @@
|
||||
[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
|
||||
|
||||
- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
|
||||
@ -173,7 +157,7 @@
|
||||
// "Create" button.
|
||||
[[MPMacAppDelegate get] addElementNamed:[self.siteField stringValue] completion:^(MPElementEntity *element) {
|
||||
if (element)
|
||||
PearlMainQueue( ^{ [self updateElements]; } );
|
||||
[self updateElements];
|
||||
}];
|
||||
break;
|
||||
}
|
||||
@ -188,6 +172,11 @@
|
||||
|
||||
#pragma mark - State
|
||||
|
||||
- (NSString *)query {
|
||||
|
||||
return [self.siteField.stringValue stringByReplacingCharactersInRange:self.siteField.currentEditor.selectedRange withString:@""];
|
||||
}
|
||||
|
||||
- (void)insertObject:(MPElementModel *)model inElementsAtIndex:(NSUInteger)index {
|
||||
|
||||
[self.elements insertObject:model atIndex:index];
|
||||
@ -222,32 +211,29 @@
|
||||
- (void)updateUser {
|
||||
|
||||
[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];
|
||||
if (mainActiveUser) {
|
||||
if ([MPMacAppDelegate get].key) {
|
||||
self.inputLabel.stringValue = strf( @"%@'s password for:", mainActiveUser.name );
|
||||
[self.passwordField setHidden:YES];
|
||||
[self.siteField setHidden:NO];
|
||||
[self.siteTable setHidden:NO];
|
||||
self.siteField.hidden = NO;
|
||||
self.siteTable.hidden = NO;
|
||||
[self.siteField becomeFirstResponder];
|
||||
}
|
||||
else {
|
||||
self.inputLabel.stringValue = strf( @"Enter %@'s master password:", mainActiveUser.name );
|
||||
[self.passwordField setHidden:NO];
|
||||
[self.siteField setHidden:YES];
|
||||
[self.siteTable setHidden:YES];
|
||||
self.passwordField.hidden = NO;
|
||||
[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];
|
||||
}];
|
||||
}
|
||||
@ -259,12 +245,15 @@
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *query = [self.siteField stringValue];
|
||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"updateElements"];
|
||||
NSString *query = [self query];
|
||||
[profiler finishJob:@"query"];
|
||||
[MPMacAppDelegate managedObjectContextPerformBlockAndWait:^(NSManagedObjectContext *context) {
|
||||
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
|
||||
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"lastUsed" ascending:NO]];
|
||||
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(%@ == '' OR name BEGINSWITH[cd] %@) AND user == %@",
|
||||
query, query, [[MPMacAppDelegate get] activeUserInContext:context]];
|
||||
[profiler finishJob:@"setup fetch"];
|
||||
|
||||
NSError *error = nil;
|
||||
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
|
||||
@ -272,12 +261,16 @@
|
||||
err( @"While fetching elements for completion: %@", error );
|
||||
return;
|
||||
}
|
||||
[profiler finishJob:@"do fetch"];
|
||||
|
||||
NSMutableArray *newElements = [NSMutableArray arrayWithCapacity:[siteResults count]];
|
||||
for (MPElementEntity *element in siteResults)
|
||||
[newElements addObject:[[MPElementModel alloc] initWithEntity:element]];
|
||||
[profiler finishJob:@"make models"];
|
||||
self.elements = newElements;
|
||||
[profiler finishJob:@"update elements"];
|
||||
}];
|
||||
[profiler finishJob:@"done"];
|
||||
}
|
||||
|
||||
- (void)updateSelection {
|
||||
@ -287,18 +280,15 @@
|
||||
return;
|
||||
}
|
||||
|
||||
NSString *selectedSiteName = self.selectedElement.siteName;
|
||||
if (!selectedSiteName)
|
||||
NSString *siteName = self.selectedElement.siteName;
|
||||
if (!siteName)
|
||||
return;
|
||||
|
||||
NSString *querySiteText = [self.siteField.stringValue stringByReplacingCharactersInRange:self.siteField.currentEditor.selectedRange
|
||||
withString:@""];
|
||||
NSRange selectedSiteNameQueryRange = [selectedSiteName rangeOfString:querySiteText];
|
||||
self.siteField.stringValue = selectedSiteName;
|
||||
NSRange siteNameQueryRange = [siteName rangeOfString:[self query]];
|
||||
self.siteField.stringValue = siteName;
|
||||
|
||||
if (selectedSiteNameQueryRange.location == 0)
|
||||
self.siteField.currentEditor.selectedRange = NSMakeRange(
|
||||
selectedSiteNameQueryRange.length, selectedSiteName.length - selectedSiteNameQueryRange.length );
|
||||
if (siteNameQueryRange.location == 0)
|
||||
self.siteField.currentEditor.selectedRange = NSMakeRange( siteNameQueryRange.length, siteName.length - siteNameQueryRange.length );
|
||||
}
|
||||
|
||||
- (void)useSite {
|
||||
@ -358,7 +348,7 @@
|
||||
if ([self.window isOnActiveSpace] && self.window.alphaValue)
|
||||
return;
|
||||
|
||||
PearlProfiler *profiler = [PearlProfiler new];
|
||||
PearlProfiler *profiler = [PearlProfiler profilerForTask:@"fadeIn"];
|
||||
CGWindowID windowID = (CGWindowID)[self.window windowNumber];
|
||||
CGImageRef capturedImage = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenBelowWindow, windowID,
|
||||
kCGWindowImageBoundsIgnoreFraming );
|
||||
|
@ -13,6 +13,7 @@
|
||||
<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="progressView" destination="oSh-Ec-8Nf" id="rob-p0-gr7"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<contentFilters>
|
||||
<ciFilter name="CIGaussianBlur">
|
||||
<configuration>
|
||||
<null key="inputImage"/>
|
||||
<real key="inputRadius" value="20"/>
|
||||
<real key="inputRadius" value="40"/>
|
||||
</configuration>
|
||||
</ciFilter>
|
||||
<ciFilter name="CIPhotoEffectProcess">
|
||||
<ciFilter name="CISepiaTone">
|
||||
<configuration>
|
||||
<null key="inputImage"/>
|
||||
<real key="inputIntensity" value="0.29999999999999999"/>
|
||||
</configuration>
|
||||
</ciFilter>
|
||||
</contentFilters>
|
||||
@ -76,7 +78,7 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="512" height="203"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<size key="intercellSpacing" width="3" height="2"/>
|
||||
@ -89,7 +91,7 @@
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.33333298560000002" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</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"/>
|
||||
<color key="textColor" name="controlTextColor" 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"/>
|
||||
<color key="color" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="calibratedRGB"/>
|
||||
</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"/>
|
||||
<color key="textColor" name="highlightColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
@ -191,23 +193,23 @@
|
||||
</connections>
|
||||
</searchField>
|
||||
<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"/>
|
||||
<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-Medium"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
</buttonCell>
|
||||
<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">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<binding destination="mcS-ik-b0n" name="title" keyPath="selection.typeName" id="ezf-Bo-UJN"/>
|
||||
</connections>
|
||||
</button>
|
||||
<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"/>
|
||||
<subviews>
|
||||
<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">
|
||||
<rect key="frame" x="19" y="3" width="11" height="17"/>
|
||||
<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">
|
||||
<font key="font" size="11" name="HelveticaNeue-Medium"/>
|
||||
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
<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>
|
||||
<connections>
|
||||
<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"/>
|
||||
</constraints>
|
||||
<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">
|
||||
<integer key="NSMultipleValuesPlaceholder" value="-1"/>
|
||||
<integer key="NSNoSelectionPlaceholder" value="-1"/>
|
||||
@ -253,24 +259,24 @@
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</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">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</customView>
|
||||
<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"/>
|
||||
<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"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Medium"/>
|
||||
<font key="font" size="11" name="HelveticaNeue-Bold"/>
|
||||
</buttonCell>
|
||||
<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">
|
||||
<string key="NSValueTransformerName">NSIsNil</string>
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
<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="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="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 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="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="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>
|
||||
<backgroundFilters>
|
||||
<ciFilter name="CIGaussianBlur">
|
||||
|
Loading…
Reference in New Issue
Block a user