Added simple hud overlay on double-click actions

This commit is contained in:
michael starke
2013-03-03 04:46:25 +01:00
parent 72bf306a3c
commit 7d6712536b
9 changed files with 773 additions and 15 deletions

View File

@@ -13,6 +13,7 @@
#import "MPIconHelper.h"
#import "MPMainWindowController.h"
#import "MPPasteBoardController.h"
#import "MPOverlayWindowController.h"
#import "KdbGroup+MPAdditions.h"
#import <QuartzCore/QuartzCore.h>
@@ -83,6 +84,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
- (void)_hideStatusBarAnimated:(BOOL)animate;
- (void)_copyEntryData:(id)sender;
- (void)_quickCopyEntryData:(id)sender;
@end
@@ -125,6 +127,8 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
[self _hideStatusBarAnimated:NO];
[self.entryTable setDelegate:self];
[self.entryTable setDoubleAction:@selector(_quickCopyEntryData:)];
[self.entryTable setTarget:self];
[self _setupEntryMenu];
NSTableColumn *parentColumn = [self.entryTable tableColumns][0];
@@ -378,9 +382,34 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
#pragma mark Actions
- (void)_quickCopyEntryData:(id)sender {
NSInteger clickedRow = [self.entryTable clickedRow];
if(clickedRow < 0 || clickedRow > [[self.entryArrayController arrangedObjects] count]) {
return;
}
KdbEntry *selectedEntry = [self.entryArrayController arrangedObjects][clickedRow];
NSTableColumn *column = [self.entryTable tableColumns][[self.entryTable clickedColumn]];
NSString *identifier = [column identifier];
NSImage *image = nil;
NSString *lable = nil;
if([identifier isEqualToString:MPEntryTablePasswordColumnIdentifier]) {
[[MPPasteBoardController defaultController] copyObjects:@[ selectedEntry.password ]];
image = [[NSBundle mainBundle] imageForResource:@"00_PasswordTemplate"];
lable = @"Password copied!";
}
else if([identifier isEqualToString:MPEntryTableUserNameColumnIdentifier]) {
[[MPPasteBoardController defaultController] copyObjects:@[ selectedEntry.username ]];
image = [[NSBundle mainBundle] imageForResource:@"09_IdentityTemplate"];
lable = @"Username copied!";
}
if(image || lable) {
[[MPOverlayWindowController sharedController] displayOverlayImage:image label:lable atView:self.view];
}
}
- (void)_copyEntryData:(id)sender {
NSInteger clickedRow = [self.entryTable clickedRow];
if(clickedRow > [[self.entryArrayController arrangedObjects] count]) {
if(clickedRow < 0 || clickedRow > [[self.entryArrayController arrangedObjects] count]) {
return;
}
KdbEntry *selectedEntry = [self.entryArrayController arrangedObjects][clickedRow];

13
MacPass/MPOverlayView.h Normal file
View File

@@ -0,0 +1,13 @@
//
// MPOverlayView.h
// MacPass
//
// Created by Michael Starke on 03.03.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface MPOverlayView : NSView
@end

29
MacPass/MPOverlayView.m Normal file
View File

@@ -0,0 +1,29 @@
//
// MPOverlayView.m
// MacPass
//
// Created by Michael Starke on 03.03.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPOverlayView.h"
@implementation MPOverlayView
- (void)drawRect:(NSRect)dirtyRect {
[[NSGraphicsContext currentContext] saveGraphicsState];
[[NSColor clearColor] set];
NSRectFill([self bounds]);
NSColor *backgroundColor = [NSColor colorWithCalibratedWhite:0 alpha:0.7];
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:10 yRadius:10];
[backgroundColor set];
[path fill];
[[NSGraphicsContext currentContext] restoreGraphicsState];
}
- (BOOL)isOpaque {
return NO;
}
@end

View File

@@ -0,0 +1,20 @@
//
// MPOverlayWindowController.h
// MacPass
//
// Created by Michael Starke on 03.03.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface MPOverlayWindowController : NSWindowController
+ (MPOverlayWindowController *)sharedController;
/*
Displays an overlay centered at the given view. The Windows is added as a childwindow to the view window
*/
- (void)displayOverlayImage:(NSImage *)imageOrNil label:(NSString *)labelOrNil atView:(NSView *)view;
@end

View File

@@ -0,0 +1,87 @@
//
// MPOverlayWindowController.m
// MacPass
//
// Created by Michael Starke on 03.03.13.
// Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
//
#import "MPOverlayWindowController.h"
#import "MPOverlayView.h"
@interface MPOverlayWindowController ()
@property (assign) BOOL isAnimating;
@property (assign) IBOutlet NSImageView *imageView;
@property (assign) IBOutlet NSTextField *textField;
@end
@implementation MPOverlayWindowController
+ (MPOverlayWindowController *)sharedController {
static MPOverlayWindowController *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[MPOverlayWindowController alloc] initWithWindowNibName:@"OverlayWindow"];
});
return sharedInstance;
}
- (id)initWithWindow:(NSWindow *)window {
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
- (void)windowDidLoad {
[super windowDidLoad];
[self.window setStyleMask:NSBorderlessWindowMask];
[self.window setAlphaValue:0];
[self.window setOpaque:NO];
[self.window setHasShadow:NO];
[[self.textField cell] setBackgroundStyle:NSBackgroundStyleLowered];
[[self.imageView cell] setBackgroundStyle:NSBackgroundStyleLowered];
[[self.imageView cell] setImageAlignment:NSImageAlignCenter];
}
- (void)displayOverlayImage:(NSImage *)imageOrNil label:(NSString *)labelOrNil atView:(NSView *)view {
/* make window transparent */
[self.window setAlphaValue:0];
[self.window setIsVisible:YES];
/* setup any provided images and labels*/
[self.imageView setImage:imageOrNil];
if(labelOrNil) {
[self.textField setStringValue:labelOrNil];
}
else {
[self.textField setStringValue:@""];
}
[self.textField sizeToFit];
/*
Center in view
*/
if(view) {
NSWindow *parentWindow = [view window];
NSRect parentFrame = [parentWindow frame];
NSRect myFrame = [self.window frame];
NSPoint newOrigin = parentFrame.origin;
newOrigin.x += 0.5 * (parentFrame.size.width - myFrame.size.width);
newOrigin.y += 0.5 * (parentFrame.size.height - myFrame.size.height);
[self.window setFrameOrigin:newOrigin];
[parentWindow addChildWindow:self.window ordered:NSWindowAbove];
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
context.duration = 0.2;
[[self.window animator]setAlphaValue:1];
} completionHandler:^{
[self.window performSelector:@selector(close) withObject:nil afterDelay:0.5];
}];
}
}
@end

View File

@@ -74,7 +74,7 @@
[[NSPasteboard generalPasteboard] clearContents];
[[NSPasteboard generalPasteboard] writeObjects:objects];
self.isEmpty = NO;
[self performSelector:@selector(clearContents) withObject:nil afterDelay:self.clearTimeout];
[self performSelector:@selector(_clearPasteboardContents) withObject:nil afterDelay:self.clearTimeout];
}
- (void)_clearPasteboardContents {

View File

@@ -21,7 +21,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>37F</string>
<string>3B6</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>

540
MacPass/OverlayWindow.xib Normal file
View File

@@ -0,0 +1,540 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12C3103</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.34</string>
<string key="IBDocument.HIToolboxVersion">625.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
</object>
<array key="IBDocument.IntegratedClassDependencies">
<string>IBNSLayoutConstraint</string>
<string>NSCustomObject</string>
<string>NSImageCell</string>
<string>NSImageView</string>
<string>NSTextField</string>
<string>NSTextFieldCell</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
</array>
<array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPOverlayWindowController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1004">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSWindowTemplate" id="121640213">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 207}, {151, 131}}</string>
<int key="NSWTFlags">1685586944</int>
<string key="NSWindowTitle">Window</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
<object class="NSView" key="NSWindowView" id="151608046">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="668073146">
<reference key="NSNextResponder" ref="151608046"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{53, 20}, {45, 19}}</string>
<reference key="NSSuperview" ref="151608046"/>
<reference key="NSWindow"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="653083877">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">306189312</int>
<string key="NSContents">Label</string>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">14</double>
<int key="NSfFlags">16</int>
</object>
<string key="NSCellIdentifier">_NS:1535</string>
<reference key="NSControlView" ref="668073146"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">windowFrameTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
<object class="NSImageView" id="129824625">
<reference key="NSNextResponder" ref="151608046"/>
<int key="NSvFlags">268</int>
<set class="NSMutableSet" key="NSDragTypes">
<string>Apple PDF pasteboard type</string>
<string>Apple PICT pasteboard type</string>
<string>Apple PNG pasteboard type</string>
<string>NSFilenamesPboardType</string>
<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
<string>NeXT TIFF v4.0 pasteboard type</string>
</set>
<string key="NSFrame">{{43, 47}, {64, 64}}</string>
<reference key="NSSuperview" ref="151608046"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="668073146"/>
<string key="NSReuseIdentifierKey">_NS:9</string>
<bool key="NSEnabled">YES</bool>
<object class="NSImageCell" key="NSCell" id="893226415">
<int key="NSCellFlags">134217728</int>
<int key="NSCellFlags2">33554432</int>
<object class="NSCustomResource" key="NSContents">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSActionTemplate</string>
</object>
<string key="NSCellIdentifier">_NS:9</string>
<int key="NSAlign">0</int>
<int key="NSScale">3</int>
<int key="NSStyle">0</int>
<bool key="NSAnimates">NO</bool>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
<bool key="NSEditable">YES</bool>
</object>
</array>
<string key="NSFrameSize">{151, 131}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="129824625"/>
<string key="NSReuseIdentifierKey">_NS:20</string>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
</array>
<object class="IBObjectContainer" key="IBDocument.Objects">
<array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">textField</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="668073146"/>
</object>
<int key="connectionID">60</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="121640213"/>
</object>
<int key="connectionID">61</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">imageView</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="129824625"/>
</object>
<int key="connectionID">89</int>
</object>
</array>
<object class="IBMutableOrderedSet" key="objectRecords">
<array key="orderedObjects">
<object class="IBObjectRecord">
<int key="objectID">0</int>
<array key="object" id="0"/>
<reference key="children" ref="1000"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1001"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1003"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1004"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">27</int>
<reference key="object" ref="121640213"/>
<array class="NSMutableArray" key="children">
<reference ref="151608046"/>
</array>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">28</int>
<reference key="object" ref="151608046"/>
<array class="NSMutableArray" key="children">
<object class="IBNSLayoutConstraint" id="291614112">
<reference key="firstItem" ref="151608046"/>
<int key="firstAttribute">4</int>
<int key="relation">0</int>
<reference key="secondItem" ref="668073146"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="655705961">
<reference key="firstItem" ref="668073146"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="129824625"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">8</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="533839699">
<reference key="firstItem" ref="151608046"/>
<int key="firstAttribute">6</int>
<int key="relation">1</int>
<reference key="secondItem" ref="668073146"/>
<int key="secondAttribute">6</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="953110230">
<reference key="firstItem" ref="668073146"/>
<int key="firstAttribute">5</int>
<int key="relation">1</int>
<reference key="secondItem" ref="151608046"/>
<int key="secondAttribute">5</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="160411876">
<reference key="firstItem" ref="151608046"/>
<int key="firstAttribute">4</int>
<int key="relation">1</int>
<reference key="secondItem" ref="668073146"/>
<int key="secondAttribute">4</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="311454723">
<reference key="firstItem" ref="129824625"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="668073146"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">6</int>
<float key="scoringTypeFloat">24</float>
<int key="contentType">2</int>
</object>
<object class="IBNSLayoutConstraint" id="118064690">
<reference key="firstItem" ref="129824625"/>
<int key="firstAttribute">3</int>
<int key="relation">0</int>
<reference key="secondItem" ref="151608046"/>
<int key="secondAttribute">3</int>
<float key="multiplier">1</float>
<object class="IBNSLayoutSymbolicConstant" key="constant">
<double key="value">20</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">8</int>
<float key="scoringTypeFloat">29</float>
<int key="contentType">3</int>
</object>
<object class="IBNSLayoutConstraint" id="463557880">
<reference key="firstItem" ref="129824625"/>
<int key="firstAttribute">9</int>
<int key="relation">0</int>
<reference key="secondItem" ref="151608046"/>
<int key="secondAttribute">9</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">0.0</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="151608046"/>
<int key="scoringType">5</int>
<float key="scoringTypeFloat">22</float>
<int key="contentType">2</int>
</object>
<reference ref="129824625"/>
<reference ref="668073146"/>
</array>
<reference key="parent" ref="121640213"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">35</int>
<reference key="object" ref="668073146"/>
<array class="NSMutableArray" key="children">
<reference ref="653083877"/>
<object class="IBNSLayoutConstraint" id="483246759">
<reference key="firstItem" ref="668073146"/>
<int key="firstAttribute">7</int>
<int key="relation">1</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">39</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="668073146"/>
<int key="scoringType">9</int>
<float key="scoringTypeFloat">40</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">36</int>
<reference key="object" ref="653083877"/>
<reference key="parent" ref="668073146"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">56</int>
<reference key="object" ref="160411876"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">57</int>
<reference key="object" ref="953110230"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">58</int>
<reference key="object" ref="533839699"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">68</int>
<reference key="object" ref="129824625"/>
<array class="NSMutableArray" key="children">
<reference ref="893226415"/>
<object class="IBNSLayoutConstraint" id="527545548">
<reference key="firstItem" ref="129824625"/>
<int key="firstAttribute">7</int>
<int key="relation">0</int>
<nil key="secondItem"/>
<int key="secondAttribute">0</int>
<float key="multiplier">1</float>
<object class="IBLayoutConstant" key="constant">
<double key="value">64</double>
</object>
<float key="priority">1000</float>
<reference key="containingView" ref="129824625"/>
<int key="scoringType">3</int>
<float key="scoringTypeFloat">9</float>
<int key="contentType">1</int>
</object>
</array>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">69</int>
<reference key="object" ref="893226415"/>
<reference key="parent" ref="129824625"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">78</int>
<reference key="object" ref="527545548"/>
<reference key="parent" ref="129824625"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">83</int>
<reference key="object" ref="463557880"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">84</int>
<reference key="object" ref="118064690"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">85</int>
<reference key="object" ref="311454723"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">86</int>
<reference key="object" ref="655705961"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">87</int>
<reference key="object" ref="291614112"/>
<reference key="parent" ref="151608046"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">88</int>
<reference key="object" ref="483246759"/>
<reference key="parent" ref="668073146"/>
</object>
</array>
</object>
<dictionary class="NSMutableDictionary" key="flattenedProperties">
<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="NO" key="27.NSWindowTemplate.visibleAtLaunch"/>
<string key="28.CustomClassName">MPOverlayView</string>
<array key="28.IBNSViewMetadataConstraints">
<reference ref="463557880"/>
<reference ref="118064690"/>
<reference ref="311454723"/>
<reference ref="160411876"/>
<reference ref="953110230"/>
<reference ref="533839699"/>
<reference ref="655705961"/>
<reference ref="291614112"/>
</array>
<string key="28.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="35.IBNSViewMetadataConstraints">
<reference ref="483246759"/>
</array>
<boolean value="NO" key="35.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<array class="NSMutableArray" key="68.IBNSViewMetadataConstraints">
<reference ref="527545548"/>
</array>
<boolean value="NO" key="68.IBNSViewMetadataTranslatesAutoresizingMaskIntoConstraints"/>
<string key="68.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="69.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="78.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="84.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="85.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="86.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="87.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="88.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
<dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
<int key="maxID">90</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPOverlayView</string>
<string key="superclassName">NSView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPOverlayView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPOverlayWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="imageView">NSImageView</string>
<string key="textField">NSTextField</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="imageView">
<string key="name">imageView</string>
<string key="candidateClassName">NSImageView</string>
</object>
<object class="IBToOneOutletInfo" key="textField">
<string key="name">textField</string>
<string key="candidateClassName">NSTextField</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPOverlayWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/NSLayoutConstraint.h</string>
</object>
</object>
</array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
<string key="NS.key.0">NSActionTemplate</string>
<string key="NS.object.0">{15, 15}</string>
</object>
<bool key="IBDocument.UseAutolayout">YES</bool>
</data>
</archive>