Merget with dropbox-sync

This commit is contained in:
Gennadiy Potapov 2011-11-24 23:13:48 +08:00
commit 232f1cf1ef
11 changed files with 886 additions and 218 deletions

View file

@ -13,6 +13,7 @@
#import "SRKeyCodeTransformer.h"
#import "JumpcutStore.h"
#import "SGHotKey.h"
#import "DBSyncPromptDelegate.h"
@class SGHotKey;
@ -51,8 +52,13 @@
NSDictionary *standardPreferences;
int jcDisplayNum;
BOOL issuedRememberResizeWarning;
BOOL dropboxSync;
IBOutlet NSButtonCell * dropboxCheckbox;
}
//@property(retain, nonatomic) IBOutlet NSButtonCell * dropboxCheckbox;
// Basic functionality
-(void) pollPB:(NSTimer *)timer;
-(BOOL) addClipToPasteboardFromCount:(int)indexInt;
@ -86,6 +92,9 @@
-(IBAction) processMenuClippingSelection:(id)sender;
-(IBAction) activateAndOrderFrontStandardAboutPanel:(id)sender;
-(BOOL) dropboxSync;
-(void)setDropboxSync:(BOOL)enable;
// Preference related
-(IBAction) showPreferencePanel:(id)sender;
-(IBAction) setRememberNumPref:(id)sender;
@ -98,6 +107,4 @@
-(IBAction) toggleMainHotKey:(id)sender;
-(void) setHotKeyPreferenceForRecorder:(SRRecorderControl *)aRecorder;
- (IBAction)enableDropboxButtonClicked:(NSButton*)sender;
@end

View file

@ -14,6 +14,7 @@
#import "SRRecorderCell.h"
#import "UKLoginItemRegistry.h"
#import "NSWindow+TrueCenter.h"
#import "NSWindow+ULIZoomEffect.h"
#import "DBUserDefaults.h"
#define _DISPLENGTH 40
@ -49,7 +50,14 @@
[NSNumber numberWithFloat:320.0],
@"bezelHeight",
[NSDictionary dictionary],
@"store", nil]];
@"store",
[NSNumber numberWithBool:YES],
@"skipPasswordFields",
[NSNumber numberWithBool:NO],
@"removeDuplicates",
[NSNumber numberWithBool:YES],
@"popUpAnimation",
nil]];
return [super init];
}
@ -121,6 +129,13 @@
// Stack position starts @ 0 by default
stackPosition = 0;
[[NSNotificationCenter defaultCenter] addObserverForName:@"DBSyncPromptUserDidCancelNotification"
object:nil queue:nil usingBlock:^(NSNotification *notification) {
[self setDropboxSync:NO];
//[[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:NO];
}];
[NSApp activateIgnoringOtherApps: YES];
}
@ -283,8 +298,8 @@
pbCount = [[NSNumber numberWithInt:[jcPasteboard changeCount]] retain];
if ( type != nil ) {
NSString *contents = [jcPasteboard stringForType:type];
if ( contents == nil ) {
// NSLog(@"Contents: Empty");
if ( contents == nil || ([jcPasteboard stringForType:@"PasswordPboardType"] && [[DBUserDefaults standardUserDefaults] boolForKey:@"skipPasswordFields"]) ) {
NSLog(@"Contents: Empty");
} else {
if (( [clippingStore jcListCount] == 0 || ! [contents isEqualToString:[clippingStore clippingContentsAtPosition:0]])
&& ! [pbCount isEqualTo:pbBlockCount] ) {
@ -294,37 +309,26 @@
// if ( [clippingStore jcListCount] > 1 ) stackPosition++;
stackPosition = 0;
[self updateMenu];
if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"savePreference"] >= 2 ) {
if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"savePreference"] >= 2 )
[self saveEngine];
}
}
}
} else {
// NSLog(@"Contents: Non-string");
}
}
}
}
- (void)processBezelKeyDown:(NSEvent *)theEvent
{
- (void)processBezelKeyDown:(NSEvent *)theEvent {
int newStackPosition;
// AppControl should only be getting these directly from bezel via delegation
if ( [theEvent type] == NSKeyDown )
{
if ( [theEvent keyCode] == [mainRecorder keyCombo].code )
{
if ( [theEvent modifierFlags] & NSShiftKeyMask )
{
[self stackUp];
} else {
[self stackDown];
}
if ([theEvent type] == NSKeyDown) {
if ([theEvent keyCode] == [mainRecorder keyCombo].code ) {
if ([theEvent modifierFlags] & NSShiftKeyMask) [self stackUp];
else [self stackDown];
return;
}
unichar pressed = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
NSUInteger modifiers = [theEvent modifierFlags];
switch ( pressed ) {
switch (pressed) {
case 0x1B:
[self hideApp];
break;
@ -407,26 +411,30 @@
- (void) updateBezel
{
if (stackPosition >= [clippingStore jcListCount] && stackPosition != 0) { // deleted last item
stackPosition = [clippingStore jcListCount] - 1;
}
if (stackPosition == 0 && [clippingStore jcListCount] == 0) { // empty
[bezel setText:@""];
[bezel setCharString:@"Empty"];
}
else { // normal
[bezel setText:[clippingStore clippingContentsAtPosition:stackPosition]];
[bezel setCharString:[NSString stringWithFormat:@"%d of %d", stackPosition + 1, [clippingStore jcListCount]]];
}
if (stackPosition >= [clippingStore jcListCount] && stackPosition != 0) { // deleted last item
stackPosition = [clippingStore jcListCount] - 1;
}
if (stackPosition == 0 && [clippingStore jcListCount] == 0) { // empty
[bezel setText:@""];
[bezel setCharString:@"Empty"];
}
else { // normal
[bezel setText:[clippingStore clippingContentsAtPosition:stackPosition]];
[bezel setCharString:[NSString stringWithFormat:@"%d of %d", stackPosition + 1, [clippingStore jcListCount]]];
}
}
- (void) showBezel
{
[self updateBezel];
if ([bezel respondsToSelector:@selector(setCollectionBehavior:)]) {
if ( [clippingStore jcListCount] > 0 && [clippingStore jcListCount] > stackPosition ) {
[bezel setCharString:[NSString stringWithFormat:@"%d of %d", stackPosition + 1, [clippingStore jcListCount]]];
[bezel setText:[clippingStore clippingContentsAtPosition:stackPosition]];
}
if ([bezel respondsToSelector:@selector(setCollectionBehavior:)])
[bezel setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces];
[bezel makeKeyAndOrderFront:nil];
}
if ([[DBUserDefaults standardUserDefaults] boolForKey:@"popUpAnimation"])
[bezel makeKeyAndOrderFrontWithPopEffect];
else [bezel makeKeyAndOrderFront:self];
isBezelDisplayed = YES;
}
@ -439,14 +447,14 @@
-(void)hideApp
{
[self hideBezel];
[self hideBezel];
isBezelPinned = NO;
[NSApp hide:self];
}
- (void) applicationWillResignActive:(NSApplication *)app; {
// This should be hidden anyway, but just in case it's not.
[self hideBezel];
[self hideBezel];
}
@ -644,8 +652,7 @@
}
}
-(void) saveEngine
{
-(void) saveEngine {
NSMutableDictionary *saveDict;
NSMutableArray *jcListArray = [NSMutableArray array];
saveDict = [NSMutableDictionary dictionaryWithCapacity:3];
@ -686,13 +693,15 @@
NSLog(@"code: %d, flags: %u", newKeyCombo.code, newKeyCombo.flags);
}
- (IBAction)enableDropboxButtonClicked:(NSButton*)sender
{
- (IBAction)toggleDropboxSync:(NSButtonCell*)sender {
DBUserDefaults * defaults = [DBUserDefaults standardUserDefaults];
// First, let's check to make sure Dropbox is available on this machine
if([DBUserDefaults isDropboxAvailable])
[defaults promptDropboxUnavailable];
else [[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:YES];
if (sender.state == 1) {
if([DBUserDefaults isDropboxAvailable])
[defaults promptDropboxUnavailable];
else [[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:YES];
} else [[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:NO];
}
@ -700,6 +709,9 @@
if ( [[DBUserDefaults standardUserDefaults] integerForKey:@"savePreference"] >= 1 ) {
NSLog(@"Saving on exit");
[self saveEngine];
} else {
// Remove clips from store
[[DBUserDefaults standardUserDefaults] setValue:[NSDictionary dictionary] forKey:@"store"];
}
//Unregister our hot key (not required)
[[SGHotKeyCenter sharedCenter] unregisterHotKey: mainHotKey];
@ -716,10 +728,25 @@
object:nil];
}
-(BOOL) dropboxSync {
return [DBUserDefaults isDropboxSyncEnabled];
}
-(void)setDropboxSync:(BOOL)enable {
DBUserDefaults * defaults = [DBUserDefaults standardUserDefaults];
if (enable) {
if([DBUserDefaults isDropboxAvailable])
[defaults promptDropboxUnavailable];
else [[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:YES];
} else {
[[DBUserDefaults standardUserDefaults] setDropboxSyncEnabled:NO];
[dropboxCheckbox setState:NSOffState];
}
}
- (void) dealloc {
[bezel release];
[srTransformer release];
[super dealloc];
}
@end
@end

View file

@ -141,7 +141,7 @@
<object class="NSWindowTemplate" id="231905410">
<int key="NSWindowStyleMask">3</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{542, 303}, {549, 471}}</string>
<string key="NSWindowRect">{{542, 303}, {507, 471}}</string>
<int key="NSWTFlags">1886912512</int>
<string key="NSWindowTitle">Preferences</string>
<object class="NSMutableString" key="NSWindowClass">
@ -159,16 +159,16 @@
<object class="NSTabView" id="38633814">
<reference key="NSNextResponder" ref="342852628"/>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{549, 471}</string>
<string key="NSFrameSize">{507, 471}</string>
<reference key="NSSuperview" ref="342852628"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="584038330"/>
<reference key="NSNextKeyView" ref="485005275"/>
<object class="NSMutableArray" key="NSTabViewItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTabViewItem" id="839086363">
<string key="NSIdentifier">net.sf.jumpcut.preferences.general.tiff</string>
<object class="NSView" key="NSView" id="584038330">
<reference key="NSNextResponder" ref="38633814"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -185,9 +185,8 @@
<object class="NSButton" id="38658042">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 198}, {97, 18}}</string>
<string key="NSFrame">{{14, 275}, {97, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="369594545"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="686053849">
@ -218,9 +217,8 @@
<object class="NSPopUpButton" id="620054236">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{134, 98}, {152, 26}}</string>
<string key="NSFrame">{{79, 133}, {189, 26}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="57469449"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="718571678">
@ -295,10 +293,9 @@
<object class="NSButton" id="110220131">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 137}, {204, 18}}</string>
<string key="NSFrame">{{14, 214}, {204, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="15249688"/>
<reference key="NSNextKeyView" ref="41950895"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="807105429">
<int key="NSCellFlags">67239424</int>
@ -316,18 +313,86 @@
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="41950895">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 194}, {247, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSNextKeyView" ref="15249688"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="412900126">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Dropbox Sync (settings &amp; clippings)</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="41950895"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="639241089"/>
<reference key="NSAlternateImage" ref="469882834"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="11788839">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 77}, {247, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSNextKeyView" ref="477361745"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="708882769">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Don't copy from password fields</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="11788839"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="639241089"/>
<reference key="NSAlternateImage" ref="469882834"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="477361745">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 57}, {247, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSNextKeyView" ref="38633814"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="963672620">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Remove duplicates</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="477361745"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSNormalImage" ref="639241089"/>
<reference key="NSAlternateImage" ref="469882834"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSTextField" id="15249688">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{13, 105}, {64, 17}}</string>
<string key="NSFrame">{{13, 161}, {76, 23}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1001912577"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="624639011">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
<string type="base64-UTF8" key="NSContents">Q2xpcHBpbmdzCg</string>
<string type="base64-UTF8" key="NSContents">Q2xpcHBpbmdzOgo</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="15249688"/>
<object class="NSColor" key="NSBackgroundColor" id="973475973">
@ -353,9 +418,8 @@
<object class="NSTextField" id="1001912577">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{99, 104}, {33, 14}}</string>
<string key="NSFrame">{{13, 139}, {33, 14}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="620054236"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="186516943">
@ -375,9 +439,8 @@
<object class="NSTextField" id="57469449">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{70, 76}, {62, 14}}</string>
<string key="NSFrame">{{13, 113}, {62, 14}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="224411678"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="572447969">
@ -393,9 +456,8 @@
<object class="NSTextField" id="583370041">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{191, 76}, {95, 14}}</string>
<string key="NSFrame">{{134, 113}, {95, 14}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1003413245"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="228849917">
@ -411,9 +473,8 @@
<object class="NSTextField" id="224411678">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{136, 71}, {25, 22}}</string>
<string key="NSFrame">{{79, 108}, {25, 22}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="953619213"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="174124432">
@ -502,9 +563,8 @@
<object class="NSTextField" id="1003413245">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{281, 71}, {24, 22}}</string>
<string key="NSFrame">{{224, 108}, {24, 22}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="133997452"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="698023941">
@ -570,9 +630,8 @@
<object class="NSStepper" id="953619213">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{161, 69}, {19, 27}}</string>
<string key="NSFrame">{{104, 106}, {19, 27}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="583370041"/>
<bool key="NSEnabled">YES</bool>
<object class="NSStepperCell" key="NSCell" id="1027772156">
@ -590,10 +649,9 @@
<object class="NSStepper" id="133997452">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{306, 69}, {19, 27}}</string>
<string key="NSFrame">{{249, 106}, {19, 27}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="321554008"/>
<reference key="NSNextKeyView" ref="11788839"/>
<bool key="NSEnabled">YES</bool>
<object class="NSStepperCell" key="NSCell" id="603252108">
<int key="NSCellFlags">917024</int>
@ -610,9 +668,8 @@
<object class="NSButton" id="369594545">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 178}, {162, 18}}</string>
<string key="NSFrame">{{14, 255}, {162, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="992252027"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="596370672">
@ -633,9 +690,8 @@
<object class="NSButton" id="992252027">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 158}, {162, 18}}</string>
<string key="NSFrame">{{14, 235}, {162, 18}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="110220131"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="482547557">
@ -653,38 +709,14 @@
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="321554008">
<reference key="NSNextResponder" ref="779479303"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{9, 35}, {174, 32}}</string>
<reference key="NSSuperview" ref="779479303"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="404031066">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Enable Dropbox Sync</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="321554008"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
</object>
<string key="NSFrameSize">{555, 228}</string>
<string key="NSFrameSize">{555, 305}</string>
<reference key="NSSuperview" ref="220648752"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="38658042"/>
</object>
</object>
<string key="NSFrame">{{-3, 257}, {555, 228}}</string>
<string key="NSFrame">{{-3, 180}, {555, 305}}</string>
<reference key="NSSuperview" ref="584038330"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="779479303"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -705,9 +737,7 @@
<bool key="NSTransparent">NO</bool>
</object>
</object>
<string key="NSFrameSize">{549, 471}</string>
<reference key="NSSuperview" ref="38633814"/>
<reference key="NSWindow"/>
<string key="NSFrameSize">{507, 471}</string>
<reference key="NSNextKeyView" ref="220648752"/>
</object>
<string key="NSLabel">General</string>
@ -755,9 +785,9 @@
<object class="NSTextField" id="244297920">
<reference key="NSNextResponder" ref="697987507"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{247, 48}, {281, 61}}</string>
<string key="NSFrame">{{247, 48}, {255, 61}}</string>
<reference key="NSSuperview" ref="697987507"/>
<reference key="NSNextKeyView"/>
<reference key="NSNextKeyView" ref="38633814"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="818811687">
<int key="NSCellFlags">67239424</int>
@ -805,7 +835,7 @@
<bool key="NSTransparent">NO</bool>
</object>
</object>
<string key="NSFrameSize">{549, 471}</string>
<string key="NSFrameSize">{507, 471}</string>
<reference key="NSNextKeyView" ref="590242297"/>
</object>
<string key="NSLabel">Hotkeys</string>
@ -815,7 +845,7 @@
<object class="NSTabViewItem" id="53695889">
<string key="NSIdentifier">net.sf.jumpcut.preferences.appearance.tiff</string>
<object class="NSView" key="NSView" id="485005275">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder" ref="38633814"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -832,8 +862,9 @@
<object class="NSSlider" id="595224406">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{119, 221}, {306, 25}}</string>
<string key="NSFrame">{{119, 279}, {306, 25}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="75293235"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="583770512">
@ -861,8 +892,9 @@
<object class="NSTextField" id="75293235">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{121, 204}, {80, 13}}</string>
<string key="NSFrame">{{121, 262}, {80, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="428320254"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="141290932">
@ -878,8 +910,9 @@
<object class="NSTextField" id="428320254">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{381, 204}, {42, 13}}</string>
<string key="NSFrame">{{381, 262}, {42, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="404036688"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="547795051">
@ -895,8 +928,9 @@
<object class="NSSlider" id="125393017">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{119, 158}, {306, 25}}</string>
<string key="NSFrame">{{119, 216}, {306, 25}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="272902376"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="642861770">
@ -920,8 +954,9 @@
<object class="NSTextField" id="272902376">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{121, 141}, {80, 13}}</string>
<string key="NSFrame">{{121, 199}, {80, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="456293199"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="961206256">
@ -937,8 +972,9 @@
<object class="NSTextField" id="456293199">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{381, 141}, {42, 13}}</string>
<string key="NSFrame">{{381, 199}, {42, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="158344719"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="342209294">
@ -954,9 +990,10 @@
<object class="NSPopUpButton" id="610473094">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{118, 42}, {130, 26}}</string>
<string key="NSFrame">{{118, 100}, {130, 26}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSNextKeyView"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="598333073"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="923097388">
<int key="NSCellFlags">-2076049856</int>
@ -1025,8 +1062,9 @@
<object class="NSTextField" id="911421446">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{16, 48}, {80, 13}}</string>
<string key="NSFrame">{{16, 106}, {80, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="610473094"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="462396111">
@ -1042,8 +1080,9 @@
<object class="NSTextField" id="404036688">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{16, 164}, {80, 17}}</string>
<string key="NSFrame">{{16, 222}, {80, 17}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="125393017"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="987696908">
@ -1059,8 +1098,9 @@
<object class="NSSlider" id="77183958">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{119, 101}, {306, 25}}</string>
<string key="NSFrame">{{119, 159}, {306, 25}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="74969379"/>
<bool key="NSEnabled">YES</bool>
<object class="NSSliderCell" key="NSCell" id="1058196608">
@ -1084,8 +1124,9 @@
<object class="NSTextField" id="74969379">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{121, 84}, {80, 13}}</string>
<string key="NSFrame">{{121, 142}, {80, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="442813245"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="18614113">
@ -1101,8 +1142,9 @@
<object class="NSTextField" id="442813245">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{381, 84}, {42, 13}}</string>
<string key="NSFrame">{{381, 142}, {42, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="911421446"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="322040205">
@ -1118,8 +1160,9 @@
<object class="NSTextField" id="158344719">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{16, 107}, {80, 17}}</string>
<string key="NSFrame">{{16, 165}, {80, 17}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="77183958"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="789329295">
@ -1135,8 +1178,9 @@
<object class="NSTextField" id="410899113">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{16, 229}, {97, 13}}</string>
<string key="NSFrame">{{16, 287}, {97, 13}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="595224406"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="612660735">
@ -1149,14 +1193,39 @@
<reference key="NSTextColor" ref="312625294"/>
</object>
</object>
<object class="NSButton" id="598333073">
<reference key="NSNextResponder" ref="1032181243"/>
<int key="NSvFlags">256</int>
<string key="NSFrame">{{14, 68}, {189, 18}}</string>
<reference key="NSSuperview" ref="1032181243"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="853169645">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Animate bezel appearance</string>
<reference key="NSSupport" ref="274724818"/>
<reference key="NSControlView" ref="598333073"/>
<int key="NSButtonFlags">1211912703</int>
<int key="NSButtonFlags2">2</int>
<reference key="NSAlternateImage" ref="469882834"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
</object>
<string key="NSFrameSize">{555, 258}</string>
<string key="NSFrameSize">{555, 316}</string>
<reference key="NSSuperview" ref="509795968"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="410899113"/>
</object>
</object>
<string key="NSFrame">{{-3, 231}, {555, 258}}</string>
<string key="NSFrame">{{-3, 173}, {555, 316}}</string>
<reference key="NSSuperview" ref="485005275"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="1032181243"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
@ -1177,7 +1246,9 @@
<bool key="NSTransparent">NO</bool>
</object>
</object>
<string key="NSFrameSize">{549, 471}</string>
<string key="NSFrameSize">{507, 471}</string>
<reference key="NSSuperview" ref="38633814"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="509795968"/>
</object>
<string key="NSLabel">Appearance</string>
@ -1214,7 +1285,7 @@
<object class="NSTextView" id="1060798950">
<reference key="NSNextResponder" ref="765116797"/>
<int key="NSvFlags">2322</int>
<string key="NSFrameSize">{517, 308}</string>
<string key="NSFrameSize">{398, 406}</string>
<reference key="NSSuperview" ref="765116797"/>
<reference key="NSNextKeyView" ref="121052580"/>
<object class="NSTextContainer" key="NSTextContainer" id="564979213">
@ -1294,7 +1365,7 @@ Y291cmFnZW1lbnQuA</bytes>
<nil key="NSDelegate"/>
</object>
<reference key="NSTextView" ref="1060798950"/>
<double key="NSWidth">517</double>
<double key="NSWidth">398</double>
<int key="NSTCFlags">1</int>
</object>
<object class="NSTextViewSharedData" key="NSSharedData">
@ -1345,12 +1416,12 @@ Y291cmFnZW1lbnQuA</bytes>
<nil key="NSDefaultParagraphStyle"/>
</object>
<int key="NSTVFlags">6</int>
<string key="NSMaxSize">{517, 1e+07}</string>
<string key="NSMinize">{517, 198}</string>
<string key="NSMaxSize">{551, 1e+07}</string>
<string key="NSMinize">{398, 198}</string>
<nil key="NSDelegate"/>
</object>
</object>
<string key="NSFrame">{{1, 1}, {517, 344}}</string>
<string key="NSFrame">{{1, 1}, {474, 344}}</string>
<reference key="NSSuperview" ref="991469956"/>
<reference key="NSNextKeyView" ref="1060798950"/>
<reference key="NSDocView" ref="1060798950"/>
@ -1389,6 +1460,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<string key="NSFrame">{{-100, -100}, {15, 170}}</string>
<reference key="NSSuperview" ref="991469956"/>
<reference key="NSNextKeyView" ref="87711434"/>
<bool key="NSEnabled">YES</bool>
<reference key="NSTarget" ref="991469956"/>
<string key="NSAction">_doScroller:</string>
<double key="NSCurValue">0.4805194805194804</double>
@ -1407,10 +1479,10 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<double key="NSPercent">0.94565218687057495</double>
</object>
</object>
<string key="NSFrame">{{16, 16}, {519, 346}}</string>
<string key="NSFrame">{{16, 16}, {476, 346}}</string>
<reference key="NSSuperview" ref="635309791"/>
<reference key="NSNextKeyView" ref="765116797"/>
<int key="NSsFlags">2</int>
<int key="NSsFlags">66</int>
<reference key="NSVScroller" ref="121052580"/>
<reference key="NSHScroller" ref="87711434"/>
<reference key="NSContentView" ref="765116797"/>
@ -1444,7 +1516,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="NSTransparent">NO</bool>
</object>
</object>
<string key="NSFrameSize">{549, 471}</string>
<string key="NSFrameSize">{507, 471}</string>
<reference key="NSNextKeyView" ref="343046602"/>
</object>
<string key="NSLabel">Acknowledgements</string>
@ -1452,18 +1524,18 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference key="NSTabView" ref="38633814"/>
</object>
</object>
<reference key="NSSelectedTabViewItem" ref="839086363"/>
<reference key="NSSelectedTabViewItem" ref="53695889"/>
<reference key="NSFont" ref="274724818"/>
<int key="NSTvFlags">6</int>
<bool key="NSAllowTruncatedLabels">YES</bool>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="584038330"/>
<reference ref="485005275"/>
</object>
</object>
</object>
<string key="NSFrame">{{7, 11}, {549, 471}}</string>
<string key="NSFrame">{{7, 11}, {507, 471}}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="38633814"/>
@ -1860,12 +1932,76 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<int key="connectionID">853</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">enableDropboxButtonClicked:</string>
<reference key="source" ref="522032367"/>
<reference key="destination" ref="321554008"/>
<object class="IBBindingConnection" key="connection">
<string key="label">value: self.dropboxSync</string>
<reference key="source" ref="41950895"/>
<reference key="destination" ref="522032367"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="41950895"/>
<reference key="NSDestination" ref="522032367"/>
<string key="NSLabel">value: self.dropboxSync</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">self.dropboxSync</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">856</int>
<int key="connectionID">895</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dropboxCheckbox</string>
<reference key="source" ref="522032367"/>
<reference key="destination" ref="412900126"/>
</object>
<int key="connectionID">896</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: values.skipPasswordFields</string>
<reference key="source" ref="11788839"/>
<reference key="destination" ref="58044156"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="11788839"/>
<reference key="NSDestination" ref="58044156"/>
<string key="NSLabel">value: values.skipPasswordFields</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">values.skipPasswordFields</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">902</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: values.removeDuplicates</string>
<reference key="source" ref="477361745"/>
<reference key="destination" ref="58044156"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="477361745"/>
<reference key="NSDestination" ref="58044156"/>
<string key="NSLabel">value: values.removeDuplicates</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">values.removeDuplicates</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">906</int>
</object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: values.popUpAnimation</string>
<reference key="source" ref="598333073"/>
<reference key="destination" ref="58044156"/>
<object class="NSNibBindingConnector" key="connector">
<reference key="NSSource" ref="598333073"/>
<reference key="NSDestination" ref="58044156"/>
<string key="NSLabel">value: values.popUpAnimation</string>
<string key="NSBinding">value</string>
<string key="NSKeyPath">values.popUpAnimation</string>
<int key="NSNibBindingConnectorVersion">2</int>
</object>
</object>
<int key="connectionID">913</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
@ -1910,36 +2046,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference key="parent" ref="0"/>
<string key="objectName">Menu Extra Menu</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">207</int>
<reference key="object" ref="978969992"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">208</int>
<reference key="object" ref="528519223"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">209</int>
<reference key="object" ref="44911830"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">210</int>
<reference key="object" ref="65248494"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">211</int>
<reference key="object" ref="784393110"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">212</int>
<reference key="object" ref="469177021"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">213</int>
<reference key="object" ref="522032367"/>
@ -2057,9 +2163,12 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="38658042"/>
<reference ref="620054236"/>
<reference ref="110220131"/>
<reference ref="369594545"/>
<reference ref="992252027"/>
<reference ref="41950895"/>
<reference ref="15249688"/>
<reference ref="620054236"/>
<reference ref="1001912577"/>
<reference ref="57469449"/>
<reference ref="583370041"/>
@ -2067,9 +2176,8 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference ref="1003413245"/>
<reference ref="953619213"/>
<reference ref="133997452"/>
<reference ref="369594545"/>
<reference ref="992252027"/>
<reference ref="321554008"/>
<reference ref="11788839"/>
<reference ref="477361745"/>
</object>
<reference key="parent" ref="584038330"/>
</object>
@ -2110,8 +2218,10 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference ref="158344719"/>
<reference ref="610473094"/>
<reference ref="911421446"/>
<reference ref="598333073"/>
</object>
<reference key="parent" ref="485005275"/>
<string key="objectName">Box - Box</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">264</int>
@ -2256,20 +2366,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference key="object" ref="807105429"/>
<reference key="parent" ref="110220131"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">416</int>
<reference key="object" ref="15249688"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="624639011"/>
</object>
<reference key="parent" ref="220648752"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">754</int>
<reference key="object" ref="624639011"/>
<reference key="parent" ref="15249688"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">418</int>
<reference key="object" ref="1001912577"/>
@ -2646,18 +2742,104 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">854</int>
<reference key="object" ref="321554008"/>
<int key="objectID">857</int>
<reference key="object" ref="41950895"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="404031066"/>
<reference ref="412900126"/>
</object>
<reference key="parent" ref="220648752"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">855</int>
<reference key="object" ref="404031066"/>
<reference key="parent" ref="321554008"/>
<int key="objectID">858</int>
<reference key="object" ref="412900126"/>
<reference key="parent" ref="41950895"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">416</int>
<reference key="object" ref="15249688"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="624639011"/>
</object>
<reference key="parent" ref="220648752"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">754</int>
<reference key="object" ref="624639011"/>
<reference key="parent" ref="15249688"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">212</int>
<reference key="object" ref="469177021"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">211</int>
<reference key="object" ref="784393110"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">210</int>
<reference key="object" ref="65248494"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">208</int>
<reference key="object" ref="528519223"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">207</int>
<reference key="object" ref="978969992"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">209</int>
<reference key="object" ref="44911830"/>
<reference key="parent" ref="887962621"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">897</int>
<reference key="object" ref="11788839"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="708882769"/>
</object>
<reference key="parent" ref="220648752"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">898</int>
<reference key="object" ref="708882769"/>
<reference key="parent" ref="11788839"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">903</int>
<reference key="object" ref="477361745"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="963672620"/>
</object>
<reference key="parent" ref="220648752"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">904</int>
<reference key="object" ref="963672620"/>
<reference key="parent" ref="477361745"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">910</int>
<reference key="object" ref="598333073"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="853169645"/>
</object>
<reference key="parent" ref="509795968"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">911</int>
<reference key="object" ref="853169645"/>
<reference key="parent" ref="598333073"/>
</object>
</object>
</object>
@ -2776,8 +2958,15 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<string>791.IBPluginDependency</string>
<string>808.CustomClassName</string>
<string>808.IBPluginDependency</string>
<string>854.IBPluginDependency</string>
<string>855.IBPluginDependency</string>
<string>857.IBPluginDependency</string>
<string>858.IBPluginDependency</string>
<string>897.IBPluginDependency</string>
<string>898.IBPluginDependency</string>
<string>903.IBPluginDependency</string>
<string>904.IBPluginDependency</string>
<string>910.IBAttributePlaceholdersKey</string>
<string>910.IBPluginDependency</string>
<string>911.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
@ -2929,6 +3118,17 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSMutableDictionary">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<reference key="dict.values" ref="0"/>
</object>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
@ -2943,7 +3143,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">856</int>
<int key="maxID">913</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -2957,7 +3157,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>activateAndOrderFrontStandardAboutPanel:</string>
<string>clearClippingList:</string>
<string>enableDropboxButtonClicked:</string>
<string>processMenuClippingSelection:</string>
<string>setBezelAlpha:</string>
<string>setBezelHeight:</string>
@ -2973,7 +3172,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>NSButton</string>
<string>id</string>
<string>id</string>
<string>id</string>
@ -2992,7 +3190,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<string>activateAndOrderFrontStandardAboutPanel:</string>
<string>clearClippingList:</string>
<string>enableDropboxButtonClicked:</string>
<string>processMenuClippingSelection:</string>
<string>setBezelAlpha:</string>
<string>setBezelHeight:</string>
@ -3014,10 +3211,6 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<string key="name">clearClippingList:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
<string key="name">enableDropboxButtonClicked:</string>
<string key="candidateClassName">NSButton</string>
</object>
<object class="IBActionInfo">
<string key="name">processMenuClippingSelection:</string>
<string key="candidateClassName">id</string>
@ -3064,6 +3257,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>dropboxCheckbox</string>
<string>heightSlider</string>
<string>jcMenu</string>
<string>mainRecorder</string>
@ -3072,6 +3266,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSButtonCell</string>
<string>NSSlider</string>
<string>NSMenu</string>
<string>SRRecorderControl</string>
@ -3083,6 +3278,7 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>dropboxCheckbox</string>
<string>heightSlider</string>
<string>jcMenu</string>
<string>mainRecorder</string>
@ -3091,6 +3287,10 @@ AAEAAQAAAT0AAwAAAAEAAgAAAVIAAwAAAAEAAQAAAVMAAwAAAAIAAQABAAAAAA</bytes>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBToOneOutletInfo">
<string key="name">dropboxCheckbox</string>
<string key="candidateClassName">NSButtonCell</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">heightSlider</string>
<string key="candidateClassName">NSSlider</string>

Binary file not shown.

View file

@ -67,6 +67,8 @@
DB46BEF114346B2F0025EA0E /* DBUserDefaults.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB46BEEA143466ED0025EA0E /* DBUserDefaults.framework */; };
DB46BEF314346C660025EA0E /* DBSyncPromptDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DB46BEF214346C660025EA0E /* DBSyncPromptDelegate.h */; };
DB46BEF514346C6D0025EA0E /* DBUserDefaults.h in Headers */ = {isa = PBXBuildFile; fileRef = DB46BEF414346C6D0025EA0E /* DBUserDefaults.h */; };
DBEB0C9C1442F2AE0080D24E /* NSWindow+ULIZoomEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = DBEB0C9A1442F2AE0080D24E /* NSWindow+ULIZoomEffect.h */; };
DBEB0C9D1442F2AE0080D24E /* NSWindow+ULIZoomEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = DBEB0C9B1442F2AE0080D24E /* NSWindow+ULIZoomEffect.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@ -168,6 +170,8 @@
DB46BEEE14346A7C0025EA0E /* DBUserDefaultsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DBUserDefaultsController.m; sourceTree = "<group>"; };
DB46BEF214346C660025EA0E /* DBSyncPromptDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DBSyncPromptDelegate.h; path = ../DBUserDefaults.framework/Headers/DBSyncPromptDelegate.h; sourceTree = "<group>"; };
DB46BEF414346C6D0025EA0E /* DBUserDefaults.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DBUserDefaults.h; path = ../DBUserDefaults.framework/Headers/DBUserDefaults.h; sourceTree = "<group>"; };
DBEB0C9A1442F2AE0080D24E /* NSWindow+ULIZoomEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSWindow+ULIZoomEffect.h"; sourceTree = "<group>"; };
DBEB0C9B1442F2AE0080D24E /* NSWindow+ULIZoomEffect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSWindow+ULIZoomEffect.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -314,6 +318,8 @@
7761C88F139BDEAF000FB3AB /* RoundRecTextField.m */,
773ABFAF13E9AA1A00AE3969 /* NSWindow+TrueCenter.h */,
773ABFB013E9AA1A00AE3969 /* NSWindow+TrueCenter.m */,
DBEB0C9A1442F2AE0080D24E /* NSWindow+ULIZoomEffect.h */,
DBEB0C9B1442F2AE0080D24E /* NSWindow+ULIZoomEffect.m */,
);
path = UI;
sourceTree = "<group>";
@ -398,6 +404,7 @@
7761C8B2139BDF12000FB3AB /* SRValidator.h in Headers */,
773ABFB113E9AA1A00AE3969 /* NSWindow+TrueCenter.h in Headers */,
DB46BEEF14346A7C0025EA0E /* DBUserDefaultsController.h in Headers */,
DBEB0C9C1442F2AE0080D24E /* NSWindow+ULIZoomEffect.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -503,6 +510,7 @@
7761C8B3139BDF12000FB3AB /* SRValidator.m in Sources */,
773ABFB213E9AA1A00AE3969 /* NSWindow+TrueCenter.m in Sources */,
DB46BEF014346A7C0025EA0E /* DBUserDefaultsController.m in Sources */,
DBEB0C9D1442F2AE0080D24E /* NSWindow+ULIZoomEffect.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View file

@ -121,18 +121,19 @@
-(void) resetDisplayString
{
NSString *newDisplayString, *firstLineOfClipping;
NSString *newDisplayString, *firstLineOfClipping, *trimmedString;
NSUInteger start, lineEnd, contentsEnd;
NSRange startRange = NSMakeRange(0,0);
NSRange contentsRange;
// We're resetting the display string, so release the old one.
[clipDisplayString release];
// We want to restrict the display string to the clipping contents through the first line break.
[clipContents getLineStart:&start end:&lineEnd contentsEnd:&contentsEnd forRange:startRange];
trimmedString = [clipContents stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[trimmedString getLineStart:&start end:&lineEnd contentsEnd:&contentsEnd forRange:startRange];
contentsRange = NSMakeRange(0, contentsEnd);
firstLineOfClipping = [clipContents substringWithRange:contentsRange];
firstLineOfClipping = [trimmedString substringWithRange:contentsRange];
if ( [firstLineOfClipping length] > clipDisplayLength ) {
newDisplayString = [[NSString stringWithString:[firstLineOfClipping substringToIndex:clipDisplayLength]] stringByAppendingString:@"..."];
newDisplayString = [[NSString stringWithString:[firstLineOfClipping substringToIndex:clipDisplayLength]] stringByAppendingString:@""];
} else {
newDisplayString = [NSString stringWithString:firstLineOfClipping];
}
@ -180,6 +181,20 @@
return clipHasName;
}
- (BOOL)isEqual:(id)other {
if (other == self)
return YES;
if (!other || ![other isKindOfClass:[self class]])
return NO;
JumpcutClipping * otherClip = (JumpcutClipping *)other;
return ([self.type isEqualToString:otherClip.type] &&
[self.displayString isEqualToString:otherClip.displayString] &&
(self.displayLength == otherClip.displayLength) &&
[self.contents isEqualToString:otherClip.contents]);
}
-(void) dealloc
{
[clipContents release];

View file

@ -26,6 +26,7 @@
#import "JumpcutStore.h"
#import "JumpcutClipping.h"
#import "DBUserDefaults.h"
@implementation JumpcutStore
@ -56,7 +57,11 @@
newClipping = [[JumpcutClipping alloc] initWithContents:clipping
withType:type
withDisplayLength:[self displayLen]];
// Push it onto our recent clippings stack
if ([jcList containsObject:newClipping] && [[[DBUserDefaults standardUserDefaults] valueForKey:@"removeDuplicates"] boolValue]) {
[jcList removeObject:newClipping];
}
// Push it onto our recent clippings stack
[jcList insertObject:newClipping atIndex:0];
// Delete clippings older than jcRememberNum
while ( [jcList count] > jcRememberNum ) {

View file

@ -0,0 +1,50 @@
//
// NSWindow+ULIZoomEffect.h
// Stacksmith
//
// Created by Uli Kusterer on 05.03.11.
// Copyright 2011 Uli Kusterer. All rights reserved.
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software. If you use this software
// in a product, an acknowledgment in the product documentation would be
// appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
// distribution.
//
/*
This category implements a transition effect where a small thumbnail of the
window flies from the given rectangle to where the window is then shown,
like when opening a folder window in Finder, plus a reverse variant for
ordering out a window.
It also implements another effect where the window just "pops", i.e. seems to
grow larger for a moment, like the highlight when you use the "Find" command.
*/
#import <AppKit/AppKit.h>
@interface NSWindow (ULIZoomEffect)
-(void) makeKeyAndOrderFrontWithPopEffect; // Grab user's attention.
-(void) makeKeyAndOrderFrontWithZoomEffectFromRect: (NSRect)globalStartPoint; // Open window related to that rectangle.
-(void) orderFrontWithZoomEffectFromRect: (NSRect)globalStartPoint;
-(void) orderOutWithZoomEffectToRect: (NSRect)globalEndPoint; // Reverse of -orderFrontWithZoomEffectFromRect:
@end

356
UI/NSWindow+ULIZoomEffect.m Normal file
View file

@ -0,0 +1,356 @@
//
// NSWindow+ULIZoomEffect.m
// Stacksmith
//
// Created by Uli Kusterer on 05.03.11.
// Copyright 2011 Uli Kusterer. All rights reserved.
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software. If you use this software
// in a product, an acknowledgment in the product documentation would be
// appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
// distribution.
//
// -----------------------------------------------------------------------------
// Headers:
// -----------------------------------------------------------------------------
#import "NSWindow+ULIZoomEffect.h"
// On 10.6 and lower, these 10.7 methods/symbols aren't declared, so we declare
// them here and call them conditionally when available:
// Otherwise 10.7's built-in animations get in the way of ours, which are cooler
// because they can come from a certain rectangle and thus convey information.
#ifndef MAC_OS_X_VERSION_10_7
#define MAC_OS_X_VERSION_10_7 1070
#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
enum {
NSWindowAnimationBehaviorDefault = 0,
NSWindowAnimationBehaviorNone = 2,
NSWindowAnimationBehaviorDocumentWindow = 3,
NSWindowAnimationBehaviorUtilityWindow = 4,
NSWindowAnimationBehaviorAlertPanel = 5
};
typedef NSInteger NSWindowAnimationBehavior;
@interface NSWindow (ULITenSevenAnimationBehaviour)
-(void) setAnimationBehavior: (NSWindowAnimationBehavior)animBehaviour;
-(NSWindowAnimationBehavior) animationBehavior;
@end
#endif // MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_6
// -----------------------------------------------------------------------------
// ULIQuicklyAnimatingWindow:
// -----------------------------------------------------------------------------
// Window we use for our animations on which we can adjust the animation duration easily:
@interface ULIQuicklyAnimatingWindow : NSWindow
{
CGFloat mAnimationResizeTime;
}
@property (assign) CGFloat animationResizeTime;
- (NSTimeInterval)animationResizeTime:(NSRect)newFrame;
@end
@implementation ULIQuicklyAnimatingWindow
@synthesize animationResizeTime = mAnimationResizeTime;
-(id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag screen:(NSScreen *)screen
{
if(( self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag screen: screen] ))
{
mAnimationResizeTime = 0.2;
}
return self;
}
-(id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag
{
if(( self = [super initWithContentRect:contentRect styleMask:aStyle backing:bufferingType defer:flag] ))
{
mAnimationResizeTime = 0.2;
}
return self;
}
- (NSTimeInterval)animationResizeTime:(NSRect)newFrame
{
#if 0 && DEBUG
// Only turn this on temporarily for debugging. Otherwise it'll trigger for
// menu items that include the shift key, which is *not* what you want.
return ([[NSApp currentEvent] modifierFlags] & NSShiftKeyMask) ? (mAnimationResizeTime * 10.0) : mAnimationResizeTime;
#else
return mAnimationResizeTime;
#endif
}
@end
// -----------------------------------------------------------------------------
// NSWindow (ULIZoomEffect)
// -----------------------------------------------------------------------------
@implementation NSWindow (ULIZoomEffect)
// Calculate a sensible default start rect for the animation, depending on what
// screen it is. We don't want the zoom to come from another screen by accident.
-(NSRect) uli_startRectForScreen: (NSScreen*)theScreen
{
NSRect screenBox = NSZeroRect;
NSScreen * menuBarScreen = [[NSScreen screens] objectAtIndex: 0];
if( theScreen == nil || menuBarScreen == theScreen )
{
// Use menu bar screen:
screenBox = [menuBarScreen frame];
// Take a rect in the upper left, which should be the menu bar:
// (Like Finder in ye olde days)
screenBox.origin.y += screenBox.size.height -16;
screenBox.size.height = 16;
screenBox.size.width = 16;
}
else
{
// On all other screens, pick a box in the center:
screenBox = [theScreen frame];
screenBox.origin.y += truncf(screenBox.size.height /2) -8;
screenBox.origin.x += truncf(screenBox.size.width /2) -8;
screenBox.size.height = 16;
screenBox.size.width = 16;
}
return screenBox;
}
// Create a "screen shot" of the given window which we use for our fake window
// that we can animate.
-(NSImage*) uli_imageWithSnapshotForceActive: (BOOL)doForceActive
{
NSDisableScreenUpdates();
BOOL wasVisible = [self isVisible];
if( doForceActive )
[self makeKeyAndOrderFront: nil];
else
[self orderFront: nil];
// snag the image
CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, [self windowNumber], kCGWindowImageBoundsIgnoreFraming);
if( !wasVisible )
[self orderOut: nil];
NSEnableScreenUpdates();
// little bit of error checking
if(CGImageGetWidth(windowImage) <= 1)
{
CGImageRelease(windowImage);
return nil;
}
// Create a bitmap rep from the window and convert to NSImage...
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage: windowImage];
NSImage *image = [[NSImage alloc] initWithSize: NSMakeSize(CGImageGetWidth(windowImage),CGImageGetHeight(windowImage))];
[image addRepresentation: bitmapRep];
[bitmapRep release];
CGImageRelease(windowImage);
return [image autorelease];
}
// Create a borderless window that shows and contains the given image:
-(NSWindow*) uli_animationWindowForZoomEffectWithImage: (NSImage*)snapshotImage
{
NSRect myFrame = [self frame];
myFrame.size = [snapshotImage size];
NSWindow * animationWindow = [[ULIQuicklyAnimatingWindow alloc] initWithContentRect: myFrame styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: NO];
[animationWindow setOpaque: NO];
if( [animationWindow respondsToSelector: @selector(setAnimationBehavior:)] )
[animationWindow setAnimationBehavior: NSWindowAnimationBehaviorNone];
NSImageView * imageView = [[NSImageView alloc] initWithFrame: NSMakeRect(0,0,myFrame.size.width,myFrame.size.height)];
[imageView setImageScaling: NSImageScaleAxesIndependently];
[imageView setImageFrameStyle: NSImageFrameNone];
[imageView setImageAlignment: NSImageAlignCenter];
[imageView setImage: snapshotImage];
[imageView setAutoresizingMask: NSViewMinXMargin | NSViewMaxXMargin | NSViewMinYMargin | NSViewMaxYMargin | NSViewWidthSizable | NSViewHeightSizable];
[[animationWindow contentView] addSubview: imageView];
[imageView release];
[animationWindow setHasShadow: YES];
[animationWindow display];
return animationWindow;
}
// Effect like the "Find" highlight does, to grab user's attention (e.g when
// bringing a window to front that was already visible but might have been
// covered by other windows.
-(void) makeKeyAndOrderFrontWithPopEffect
{
BOOL haveAnimBehaviour = [NSWindow instancesRespondToSelector: @selector(animationBehavior)];
NSWindowAnimationBehavior oldAnimationBehaviour = haveAnimBehaviour ? [self animationBehavior] : 0;
if( haveAnimBehaviour )
[self setAnimationBehavior: NSWindowAnimationBehaviorNone]; // Prevent system animations from interfering.
NSImage * snapshotImage = [self uli_imageWithSnapshotForceActive: YES];
NSRect myFrame = [self frame];
NSRect poppedFrame = NSInsetRect(myFrame, -20, -20);
myFrame.size = snapshotImage.size;
NSWindow * animationWindow = [self uli_animationWindowForZoomEffectWithImage: snapshotImage];
[animationWindow setAnimationResizeTime: 0.025];
[animationWindow setFrame: myFrame display: YES];
[animationWindow orderFront: nil];
[animationWindow setFrame: poppedFrame display: YES animate: YES];
[animationWindow setFrame: myFrame display: YES animate: YES];
NSDisableScreenUpdates();
[animationWindow close];
[self makeKeyAndOrderFront: nil];
NSEnableScreenUpdates();
if( haveAnimBehaviour )
[self setAnimationBehavior: oldAnimationBehaviour];
}
// Zoom the window out from a given rect, to indicate what it belongs to:
// If the rect is tiny, we'll use a default starting rectangle.
-(void) makeKeyAndOrderFrontWithZoomEffectFromRect: (NSRect)globalStartPoint
{
if( globalStartPoint.size.width < 1 || globalStartPoint.size.height < 1 )
globalStartPoint = [self uli_startRectForScreen: [self screen]];
BOOL haveAnimBehaviour = [NSWindow instancesRespondToSelector: @selector(animationBehavior)];
NSWindowAnimationBehavior oldAnimationBehaviour = haveAnimBehaviour ? [self animationBehavior] : 0;
if( haveAnimBehaviour )
[self setAnimationBehavior: NSWindowAnimationBehaviorNone]; // Prevent system animations from interfering.
NSImage * snapshotImage = [self uli_imageWithSnapshotForceActive: YES];
NSRect myFrame = [self frame];
myFrame.size = snapshotImage.size;
NSWindow * animationWindow = [self uli_animationWindowForZoomEffectWithImage: snapshotImage];
[animationWindow setFrame: globalStartPoint display: YES];
[animationWindow orderFront: nil];
[animationWindow setFrame: myFrame display: YES animate: YES];
NSDisableScreenUpdates();
[animationWindow close];
[self makeKeyAndOrderFront: nil];
NSEnableScreenUpdates();
if( haveAnimBehaviour )
[self setAnimationBehavior: oldAnimationBehaviour];
}
// Same as -makeKeyAndOrderFrontWithZoomEffectFromRect: But doesn't make the window key:
-(void) orderFrontWithZoomEffectFromRect: (NSRect)globalStartPoint
{
if( globalStartPoint.size.width < 1 || globalStartPoint.size.height < 1 )
globalStartPoint = [self uli_startRectForScreen: [self screen]];
BOOL haveAnimBehaviour = [NSWindow instancesRespondToSelector: @selector(animationBehavior)];
NSWindowAnimationBehavior oldAnimationBehaviour = haveAnimBehaviour ? [self animationBehavior] : 0;
if( haveAnimBehaviour )
[self setAnimationBehavior: NSWindowAnimationBehaviorNone]; // Prevent system animations from interfering.
NSImage * snapshotImage = [self uli_imageWithSnapshotForceActive: NO];
NSRect myFrame = [self frame];
myFrame.size = snapshotImage.size;
NSWindow * animationWindow = [self uli_animationWindowForZoomEffectWithImage: snapshotImage];
[animationWindow setFrame: globalStartPoint display: YES];
[animationWindow orderFront: nil];
[animationWindow setFrame: myFrame display: YES animate: YES];
NSDisableScreenUpdates();
[animationWindow close];
[self orderFront: nil];
NSEnableScreenUpdates();
if( haveAnimBehaviour )
[self setAnimationBehavior: oldAnimationBehaviour];
}
// The reverse of -makeKeyAndOrderFrontWithZoomEffectFromRect:
-(void) orderOutWithZoomEffectToRect: (NSRect)globalEndPoint
{
if( globalEndPoint.size.width < 1 || globalEndPoint.size.height < 1 )
globalEndPoint = [self uli_startRectForScreen: [self screen]];
BOOL haveAnimBehaviour = [NSWindow instancesRespondToSelector: @selector(animationBehavior)];
NSWindowAnimationBehavior oldAnimationBehaviour = haveAnimBehaviour ? [self animationBehavior] : 0;
if( haveAnimBehaviour )
[self setAnimationBehavior: NSWindowAnimationBehaviorNone]; // Prevent system animations from interfering.
NSImage * snapshotImage = [self uli_imageWithSnapshotForceActive: NO];
NSRect myFrame = [self frame];
myFrame.size = snapshotImage.size;
NSWindow * animationWindow = [self uli_animationWindowForZoomEffectWithImage: snapshotImage];
[animationWindow setFrame: myFrame display: YES];
NSDisableScreenUpdates();
[animationWindow orderFront: nil];
[self orderOut: nil];
NSEnableScreenUpdates();
[animationWindow setFrame: globalEndPoint display: YES animate: YES];
[animationWindow close];
if( haveAnimBehaviour )
[self setAnimationBehavior: oldAnimationBehaviour];
}
@end