diff options
author | Benjamin Pierce <bcpierce@cis.upenn.edu> | 2016-03-17 11:54:07 -0400 |
---|---|---|
committer | Benjamin Pierce <bcpierce@cis.upenn.edu> | 2016-03-17 11:54:07 -0400 |
commit | c6d16e773c7dab609a39386d06ca8178aae1631f (patch) | |
tree | c7d59e1f35ad8e79a50d6231d3b5489307b3b735 /src | |
parent | 95d939b3da9651ce3b5eb2ee443d3ea92be45360 (diff) | |
download | unison-c6d16e773c7dab609a39386d06ca8178aae1631f.zip unison-c6d16e773c7dab609a39386d06ca8178aae1631f.tar.gz unison-c6d16e773c7dab609a39386d06ca8178aae1631f.tar.bz2 |
Tidy away obsolete uimacnew GUI code
Diffstat (limited to 'src')
85 files changed, 0 insertions, 6731 deletions
diff --git a/src/Makefile.OCaml b/src/Makefile.OCaml index 3927c6c..9892471 100644 --- a/src/Makefile.OCaml +++ b/src/Makefile.OCaml @@ -174,10 +174,6 @@ ifeq ($(UISTYLE),mac) buildexecutable:: macexecutable UIMACDIR=uimac else -ifeq ($(UISTYLE),macnew) - buildexecutable:: macexecutable - UIMACDIR=uimacnew -else ifeq ($(UISTYLE),mac14) buildexecutable:: macexecutable UIMACDIR=uimac14 @@ -185,7 +181,6 @@ else buildexecutable:: $(NAME)$(EXEC_EXT) endif endif -endif MINOSXVERSION=10.5 # XCODEFLAGS=-sdk macosx$(MINOSXVERSION) diff --git a/src/uimacnew/Bridge.h b/src/uimacnew/Bridge.h deleted file mode 100644 index 4c15602..0000000 --- a/src/uimacnew/Bridge.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// Bridge.h -// uimac -// -// Created by Craig Federighi on 4/25/07. -// Copyright 2007 __MyCompanyName__. All rights reserved. -// -#import <Cocoa/Cocoa.h> - -/* - Bridge supports safe calling from C back to OCaml by using daemon threads - spawned from OCaml to make the actual calls and converting all argument / return values - in the OCaml thread (when in possession of the OCaml lock) -*/ -@interface Bridge : NSObject { -} -+ (void)startup:(const char **)argv; -@end - -/* - ocamlCall(sig, funcName, [args...]); - - Call ocaml function (via safe thread handoff mechanism). - Args/return values are converted to/from C/OCaml according to the - supplied type signture string. Type codes are: - x - void (for return type) - i - long - s - char * - S - NSString * - N - NSNumber * - @ - OCamlValue (see below) - - Examples: - long count = (long)ocamlCall("iS", "lengthOfString", @"Some String"); - - (void)ocamlCall("x", "someVoidOCamlFunction"); - - OCamlValue *v = (id)ocamlCall("@Si", "makeArray", @"Some String", 10); - NSString s = [v getField:0 withType:'S']; -*/ -extern void *ocamlCall(const char *argTypes, ...); - -// Wrapper/proxy for unconverted OCaml values -@interface OCamlValue : NSObject { - long _v; -} -- initWithValue:(long)v; - -- (void *)getField:(long)i withType:(char)t; - // get value by position. See ocamlCall for list of type conversion codes - -- (long)count; - // count of items in array - -- (long)value; - // returns Ocaml value directly -- not safe to use except in direct callback from OCaml - // (i.e. in the OCaml thread) -@end diff --git a/src/uimacnew/Bridge.m b/src/uimacnew/Bridge.m deleted file mode 100644 index 3b8deb4..0000000 --- a/src/uimacnew/Bridge.m +++ /dev/null @@ -1,418 +0,0 @@ -// -// Bridge.m -// uimac -// -// Created by Craig Federighi on 4/25/07. -// Copyright 1999-2008 (see COPYING for details) -// - -#import "Bridge.h" - -/* The following two define are a workaround for an incompatibility between - Ocaml 3.11.2 (and older) and the Mac OS X header files */ -#define uint64 uint64_caml -#define int64 int64_caml - -#define CAML_NAME_SPACE -#include <caml/callback.h> -#include <caml/alloc.h> -#include <caml/mlvalues.h> -#include <caml/memory.h> -#include <caml/signals.h> -#import <ExceptionHandling/NSExceptionHandler.h> - -#include <pthread.h> -#include <stdarg.h> - -/* - CMF, April 2007: Alternate strategy for solving UI crashes based on - http://alan.petitepomme.net/cwn/2005.03.08.html#9: - 1) Run OCaml in a separate thread from the Cocoa main run loop. - 2) Handle all calls to OCaml as callbacks -- have an OCaml thread - hang in C-land and use mutexes and conditions to pass control from the - C calling thread to the OCaml callback thread. - - Value Conversion Done in Bridge Thread: - Value creation/conversion (like calls to caml_named_value or caml_copy_string) - or access calls (like Field) need to occur in the OCaml thread. We do this by - passing C args for conversion to the bridgeThreadWait() thread. - - Example of vulnerability: - Field(caml_reconItems,j) could dereference caml_reconItems - when the GC (running independently in an OCaml thread) could be moving it. -*/ - -pthread_mutex_t init_lock = PTHREAD_MUTEX_INITIALIZER; -pthread_cond_t init_cond = PTHREAD_COND_INITIALIZER; -static BOOL doneInit = NO; - -pthread_mutex_t global_call_lock = PTHREAD_MUTEX_INITIALIZER; -pthread_cond_t global_call_cond = PTHREAD_COND_INITIALIZER; -pthread_mutex_t global_res_lock = PTHREAD_MUTEX_INITIALIZER; -pthread_cond_t global_res_cond = PTHREAD_COND_INITIALIZER; - -@implementation Bridge -static Bridge *_instance = NULL; - -const char **the_argv; - -- (void)_ocamlStartup:(id)ignore -{ - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - pthread_mutex_lock(&init_lock); - - /* Initialize ocaml gc, etc. */ - caml_startup((char **)the_argv); // cast to avoid warning, caml_startup assumes non-const, - // NSApplicationMain assumes const - - // Register these with the collector - // NSLog(@"*** _ocamlStartup - back from startup; signalling! (%d)", pthread_self()); - doneInit = TRUE; - pthread_cond_signal(&init_cond); - pthread_mutex_unlock(&init_lock); - - // now start the callback thread - // NSLog(@"*** _ocamlStartup - calling callbackThreadCreate (%d)", pthread_self()); - value *f = caml_named_value("callbackThreadCreate"); - (void)caml_callback_exn(*f,Val_unit); - [pool release]; -} - -+ (void)startup:(const char **)argv -{ - if (_instance) return; - - _instance = [[Bridge alloc] init]; - - [[NSExceptionHandler defaultExceptionHandler] setDelegate:_instance]; - [[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask: - (NSLogUncaughtExceptionMask | NSLogTopLevelExceptionMask)]; - - // Init OCaml in another thread and wait for it to be ready - pthread_mutex_lock(&init_lock); - the_argv = argv; - [NSThread detachNewThreadSelector:@selector(_ocamlStartup:) - toTarget:_instance withObject:nil]; - - // NSLog(@"*** waiting for completion of caml_init"); - while (!doneInit) pthread_cond_wait(&init_cond, &init_lock); - pthread_mutex_unlock(&init_lock); - // NSLog(@"*** caml_init complete!"); -} - -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -typedef unsigned int NSUInteger; -#endif -- (BOOL)exceptionHandler:(NSExceptionHandler *)sender shouldLogException:(NSException *)exception mask:(NSUInteger)aMask -{ - // if (![[exception name] isEqual:@"OCamlException"]) return YES; - - NSString *msg = [NSString stringWithFormat:@"Uncaught exception: %@", [exception reason]]; - msg = [[msg componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "]; - NSLog(@"%@", msg); - NSRunAlertPanel(@"Fatal error", msg, @"Exit", nil, nil); - exit(1); - return FALSE; -} - -@end - - -// CallState struct is allocated on the C thread stack and then handed -// to the OCaml callback thread to perform value conversion and issue the call -typedef struct { - enum { SafeCall, OldCall, FieldAccess } opCode; - - // New style calls - const char *argTypes; - va_list args; - - // Field access - value *valueP; - long fieldIndex; - char fieldType; - - // Return values - char *exception; - void *retV; - BOOL _autorelease; - - // for old style (unsafe) calls - value call, a1, a2, a3, ret; - int argCount; -} CallState; - -static CallState *_CallState = NULL; -static CallState *_RetState = NULL; - -// Our OCaml callback server thread -- waits for call then makes them -// Called from thread spawned from OCaml -CAMLprim value bridgeThreadWait(value ignore) -{ - CAMLparam0(); - CAMLlocal1 (args); - args = caml_alloc_tuple(3); - - // NSLog(@"*** bridgeThreadWait init! (%d) Taking lock...", pthread_self()); - while (TRUE) { - // unblock ocaml while we wait for work - caml_enter_blocking_section(); - - pthread_mutex_lock(&global_call_lock); - while (!_CallState) pthread_cond_wait(&global_call_cond, &global_call_lock); - - // pick up our work and free up the call lock for other threads - CallState *cs = _CallState; - _CallState = NULL; - pthread_mutex_unlock(&global_call_lock); - - // NSLog(@"*** bridgeThreadWait: have call -- leaving caml_blocking_section"); - - // we have a call to do -- get the ocaml lock - caml_leave_blocking_section(); - - // NSLog(@"*** bridgeThreadWait: doing call"); - - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - char retType = 'v'; - value e = Val_unit; - if (cs->opCode == SafeCall) { - int i; - char *fname = va_arg(cs->args, char *); - value *f = caml_named_value(fname); - // varargs with C-based args -- convert them to OCaml values based on type code string - const char *p = cs->argTypes; - retType = *p++; - int argCount = 0; - for(; *p != '\0'; p++) { - const char *str; - switch (*p) { - case 's': - str = va_arg(cs->args, const char *); - Store_field (args, argCount, caml_copy_string(str)); - break; - case 'S': - str = [va_arg(cs->args, NSString *) UTF8String]; - Store_field (args, argCount, caml_copy_string(str)); - break; - case 'i': - Store_field (args, argCount, Val_long(va_arg(cs->args, long))); - break; - case '@': - Store_field (args, argCount, [va_arg(cs->args, OCamlValue *) value]); - break; - default: - NSCAssert1(0, @"Unknown input type '%c'", *p); - break; - } - argCount++; - NSCAssert(argCount <= 3, @"More than 3 arguments"); - } - // Call OCaml -- TODO: add support for > 3 args - if (argCount == 3) e = caml_callback3_exn(*f,Field(args,0),Field(args,1),Field(args,2)); - else if (argCount == 2) e = caml_callback2_exn(*f,Field(args,0),Field(args,1)); - else if (argCount == 1) e = caml_callback_exn(*f,Field(args,0)); - else e = caml_callback_exn(*f,Val_unit); - for (i = 0; i < argCount; i++) Store_field (args, i, Val_unit); - } else if (cs->opCode == OldCall) { - // old style (unsafe) version where OCaml values were passed directly from C thread - if (cs->argCount == 3) e = caml_callback3_exn(cs->call,cs->a1,cs->a2,cs->a3); - else if (cs->argCount == 2) e = caml_callback2_exn(cs->call,cs->a1,cs->a2); - else e = caml_callback_exn(cs->call,cs->a1); - retType = 'v'; - } else if (cs->opCode == FieldAccess) { - long index = cs->fieldIndex; - e = (index == -1) ? Val_long(Wosize_val(*cs->valueP)) : Field(*cs->valueP, index); - retType = cs->fieldType; - } - - // Process return value - cs->_autorelease = FALSE; - cs->ret = e; // OCaml return type -- unsafe... - if (!Is_exception_result(e)) { - switch (retType) { - case 'S': - *((NSString **)&cs->retV) = (e == Val_unit) ? NULL : [[NSString alloc] initWithUTF8String:String_val(e)]; - cs->_autorelease = TRUE; - break; - case 'N': - if (Is_long (e)) { - *((NSNumber **)&cs->retV) = [[NSNumber alloc] initWithLong:Long_val(e)]; - } else { - *((NSNumber **)&cs->retV) = [[NSNumber alloc] initWithDouble:Double_val(e)]; - } - cs->_autorelease = TRUE; - break; - case '@': - *((NSObject **)&cs->retV) = (e == Val_unit) ? NULL : [[OCamlValue alloc] initWithValue:e]; - cs->_autorelease = TRUE; - break; - case 'i': - *((long *)&cs->retV) = Long_val(e); - break; - case 'x': - break; - default: - NSCAssert1(0, @"Unknown return type '%c'", retType); - break; - } - } - - if (Is_exception_result(e)) { - // get exception string -- it will get thrown back in the calling thread - value *f = caml_named_value("unisonExnInfo"); - // We leak memory here... - cs->exception = strdup(String_val(caml_callback(*f,Extract_exception(e)))); - } - - [pool release]; - - // NSLog(@"*** bridgeThreadWait: returning"); - - // we're done, signal back - pthread_mutex_lock(&global_res_lock); - _RetState = cs; - pthread_cond_signal(&global_res_cond); - pthread_mutex_unlock(&global_res_lock); - } - // Never get here... - CAMLreturn (Val_unit); -} - -void *_passCall(CallState *cs) -{ - pthread_mutex_lock(&global_call_lock); - _CallState = cs; - - // signal so call can happen on other thread - pthread_mutex_lock(&global_res_lock); - pthread_cond_signal(&global_call_cond); - pthread_mutex_unlock(&global_call_lock); - - // NSLog(@"*** _passCall (%d) -- performing signal and waiting", pthread_self()); - - // wait until done -- make sure the result is for our call - while (_RetState != cs) pthread_cond_wait(&global_res_cond, &global_res_lock); - _RetState = NULL; - pthread_mutex_unlock(&global_res_lock); - - // NSLog(@"*** doCallback -- back with result"); - if (cs->exception) { - @throw [NSException exceptionWithName:@"OCamlException" - reason:[NSString stringWithUTF8String:cs->exception] - userInfo:nil]; - } - if (cs->_autorelease) [((id)cs->retV) autorelease]; - return cs->retV; -} - -void *ocamlCall(const char *argTypes, ...) -{ - CallState cs; - cs.opCode = SafeCall; - cs.exception = NULL; - cs.argTypes = argTypes; - va_start(cs.args, argTypes); - void * res = _passCall(&cs); - - va_end(cs.args); - return res; -} - -void *getField(value *vP, long index, char type) -{ - CallState cs; - cs.opCode = FieldAccess; - cs.valueP = vP; - cs.fieldIndex = index; - cs.fieldType = type; - cs.exception = NULL; - return _passCall(&cs); -} - -@implementation OCamlValue - -- initWithValue:(long)v -{ - [super init]; - _v = v; - caml_register_global_root((value *)&_v); - return self; -} - -- (long)count -{ - return (long)getField((value *) &_v, -1, 'i'); -} - -- (void *)getField:(long)i withType:(char)t -{ - return getField((value *)&_v, i, t); -} - -- (long)value -{ - // Unsafe to use! - return _v; -} - -- (void)dealloc -{ - _v = Val_unit; - caml_remove_global_root((value *)&_v); - [super dealloc]; -} -@end - - -// Legacy OCaml call API -- no longer needed -#if 0 - -extern value doCallback (value c, int argcount, value v1, value v2, value v3, BOOL exitOnException); -extern value Callback_checkexn(value c,value v); -extern value Callback2_checkexn(value c,value v1,value v2); -extern value Callback3_checkexn(value c,value v1,value v2,value v3); - -void reportExn(const char *msg) { - NSString *s = [NSString stringWithFormat:@"Uncaught exception: %s", msg]; - s = [[s componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "]; - NSLog(@"%@",s); - NSRunAlertPanel(@"Fatal error",s,@"Exit",nil,nil); -} - -// FIXME! Claim is that value conversion must also happen in the OCaml thread... -value doCallback (value c, int argcount, value v1, value v2, value v3, BOOL exitOnException) { - // NSLog(@"*** doCallback: (%d) -- trying to acquire global lock", pthread_self()); - CallState cs; - cs.opCode = OldCall; - cs.exception = NULL; - cs.call = c; - cs.a1 = v1; - cs.a2 = v2; - cs.a3 = v3; - cs.argCount = argcount; - @try { - return _passCall(&cs); - } @catch (NSException *ex) { - if (exitOnException) { - reportExn(cs.exception); - exit(1); - } - @throw ex; - } -} - -value Callback_checkexn(value c,value v) { - return doCallback(c, 1, v, 0, 0, TRUE); -} - -value Callback2_checkexn(value c,value v1,value v2) { - return doCallback(c, 2, v1, v2, 0, TRUE); -} - -value Callback3_checkexn(value c,value v1,value v2,value v3) { - return doCallback(c, 3, v1, v2, v3, TRUE); -} -#endif diff --git a/src/uimacnew/English.lproj/InfoPlist.strings b/src/uimacnew/English.lproj/InfoPlist.strings Binary files differdeleted file mode 100644 index f1eb09d..0000000 --- a/src/uimacnew/English.lproj/InfoPlist.strings +++ /dev/null diff --git a/src/uimacnew/English.lproj/MainMenu.nib/classes.nib b/src/uimacnew/English.lproj/MainMenu.nib/classes.nib deleted file mode 100644 index 1eb9865..0000000 --- a/src/uimacnew/English.lproj/MainMenu.nib/classes.nib +++ /dev/null @@ -1,267 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IBClasses</key> - <array> - <dict> - <key>CLASS</key> - <string>NSSegmentedControl</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSControl</string> - </dict> - <dict> - <key>CLASS</key> - <string>NSOutlineView</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSTableView</string> - </dict> - <dict> - <key>CLASS</key> - <string>ProfileTableView</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>OUTLETS</key> - <dict> - <key>myController</key> - <string>MyController</string> - </dict> - <key>SUPERCLASS</key> - <string>NSTableView</string> - </dict> - <dict> - <key>CLASS</key> - <string>ProfileController</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>OUTLETS</key> - <dict> - <key>tableView</key> - <string>NSTableView</string> - </dict> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>CLASS</key> - <string>NotificationController</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>ACTIONS</key> - <dict> - <key>anyEnter</key> - <string>id</string> - <key>localClick</key> - <string>id</string> - <key>remoteClick</key> - <string>id</string> - </dict> - <key>CLASS</key> - <string>PreferencesController</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>OUTLETS</key> - <dict> - <key>firstRootText</key> - <string>NSTextField</string> - <key>localButtonCell</key> - <string>NSButtonCell</string> - <key>profileNameText</key> - <string>NSTextField</string> - <key>remoteButtonCell</key> - <string>NSButtonCell</string> - <key>secondRootHost</key> - <string>NSTextField</string> - <key>secondRootText</key> - <string>NSTextField</string> - <key>secondRootUser</key> - <string>NSTextField</string> - </dict> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>ACTIONS</key> - <dict> - <key>copyLR</key> - <string>id</string> - <key>copyRL</key> - <string>id</string> - <key>forceNewer</key> - <string>id</string> - <key>forceOlder</key> - <string>id</string> - <key>ignoreExt</key> - <string>id</string> - <key>ignoreName</key> - <string>id</string> - <key>ignorePath</key> - <string>id</string> - <key>leaveAlone</key> - <string>id</string> - <key>merge</key> - <string>id</string> - <key>revert</key> - <string>id</string> - <key>selectConflicts</key> - <string>id</string> - <key>showDiff</key> - <string>id</string> - </dict> - <key>CLASS</key> - <string>FirstResponder</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>CLASS</key> - <string>MessageProgressIndicator</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSProgressIndicator</string> - </dict> - <dict> - <key>ACTIONS</key> - <dict> - <key>cancelProfileButton</key> - <string>id</string> - <key>cltoolNoButton</key> - <string>id</string> - <key>cltoolYesButton</key> - <string>id</string> - <key>createButton</key> - <string>id</string> - <key>endPasswordWindow</key> - <string>id</string> - <key>installCommandLineTool</key> - <string>id</string> - <key>onlineHelp</key> - <string>id</string> - <key>openButton</key> - <string>id</string> - <key>raiseAboutWindow</key> - <string>id</string> - <key>raiseCltoolWindow</key> - <string>id</string> - <key>raiseWindow</key> - <string>NSWindow</string> - <key>rescan</key> - <string>id</string> - <key>restartButton</key> - <string>id</string> - <key>saveProfileButton</key> - <string>id</string> - <key>syncButton</key> - <string>id</string> - <key>tableModeChanged</key> - <string>id</string> - </dict> - <key>CLASS</key> - <string>MyController</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>OUTLETS</key> - <dict> - <key>ConnectingView</key> - <string>NSView</string> - <key>aboutWindow</key> - <string>NSWindow</string> - <key>chooseProfileView</key> - <string>NSView</string> - <key>cltoolPref</key> - <string>NSButton</string> - <key>cltoolWindow</key> - <string>NSWindow</string> - <key>detailsTextView</key> - <string>NSTextView</string> - <key>diffView</key> - <string>NSTextView</string> - <key>diffWindow</key> - <string>NSWindow</string> - <key>mainWindow</key> - <string>NSWindow</string> - <key>notificationController</key> - <string>NotificationController</string> - <key>passwordCancelButton</key> - <string>NSButton</string> - <key>passwordPrompt</key> - <string>NSTextField</string> - <key>passwordText</key> - <string>NSTextField</string> - <key>passwordWindow</key> - <string>NSWindow</string> - <key>preferencesController</key> - <string>PreferencesController</string> - <key>preferencesView</key> - <string>NSView</string> - <key>profileController</key> - <string>ProfileController</string> - <key>progressBar</key> - <string>NSProgressIndicator</string> - <key>statusText</key> - <string>NSTextField</string> - <key>tableModeSelector</key> - <string>NSSegmentedControl</string> - <key>tableView</key> - <string>ReconTableView</string> - <key>updatesText</key> - <string>NSTextField</string> - <key>updatesView</key> - <string>NSView</string> - <key>versionText</key> - <string>NSTextField</string> - </dict> - <key>SUPERCLASS</key> - <string>NSObject</string> - </dict> - <dict> - <key>ACTIONS</key> - <dict> - <key>copyLR</key> - <string>id</string> - <key>copyRL</key> - <string>id</string> - <key>forceNewer</key> - <string>id</string> - <key>forceOlder</key> - <string>id</string> - <key>ignoreExt</key> - <string>id</string> - <key>ignoreName</key> - <string>id</string> - <key>ignorePath</key> - <string>id</string> - <key>leaveAlone</key> - <string>id</string> - <key>merge</key> - <string>id</string> - <key>revert</key> - <string>id</string> - <key>selectConflicts</key> - <string>id</string> - <key>showDiff</key> - <string>id</string> - </dict> - <key>CLASS</key> - <string>ReconTableView</string> - <key>LANGUAGE</key> - <string>ObjC</string> - <key>SUPERCLASS</key> - <string>NSOutlineView</string> - </dict> - </array> - <key>IBVersion</key> - <string>1</string> -</dict> -</plist> diff --git a/src/uimacnew/English.lproj/MainMenu.nib/info.nib b/src/uimacnew/English.lproj/MainMenu.nib/info.nib deleted file mode 100644 index fa90620..0000000 --- a/src/uimacnew/English.lproj/MainMenu.nib/info.nib +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IBFramework Version</key> - <string>677</string> - <key>IBLastKnownRelativeProjectPath</key> - <string>../uimacnew.xcodeproj</string> - <key>IBOldestOS</key> - <integer>5</integer> - <key>IBOpenObjects</key> - <array> - <integer>198</integer> - <integer>29</integer> - <integer>197</integer> - <integer>423</integer> - <integer>2</integer> - <integer>307</integer> - <integer>402</integer> - </array> - <key>IBSystem Version</key> - <string>9L30</string> - <key>targetFramework</key> - <string>IBCocoaFramework</string> -</dict> -</plist> diff --git a/src/uimacnew/English.lproj/MainMenu.nib/keyedobjects.nib b/src/uimacnew/English.lproj/MainMenu.nib/keyedobjects.nib Binary files differdeleted file mode 100644 index b32fce4..0000000 --- a/src/uimacnew/English.lproj/MainMenu.nib/keyedobjects.nib +++ /dev/null diff --git a/src/uimacnew/English.lproj/MainMenu.nib/objects.nib b/src/uimacnew/English.lproj/MainMenu.nib/objects.nib Binary files differdeleted file mode 100644 index a321a2a..0000000 --- a/src/uimacnew/English.lproj/MainMenu.nib/objects.nib +++ /dev/null diff --git a/src/uimacnew/Growl.framework/Growl b/src/uimacnew/Growl.framework/Growl deleted file mode 120000 index 85956e2..0000000 --- a/src/uimacnew/Growl.framework/Growl +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Growl
\ No newline at end of file diff --git a/src/uimacnew/Growl.framework/Headers b/src/uimacnew/Growl.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/src/uimacnew/Growl.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers
\ No newline at end of file diff --git a/src/uimacnew/Growl.framework/Resources b/src/uimacnew/Growl.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/src/uimacnew/Growl.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources
\ No newline at end of file diff --git a/src/uimacnew/Growl.framework/Versions/A/Growl b/src/uimacnew/Growl.framework/Versions/A/Growl Binary files differdeleted file mode 100755 index 62cb342..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Growl +++ /dev/null diff --git a/src/uimacnew/Growl.framework/Versions/A/Headers/Growl.h b/src/uimacnew/Growl.framework/Versions/A/Headers/Growl.h deleted file mode 100644 index e2a4425..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Headers/Growl.h +++ /dev/null @@ -1,6 +0,0 @@ -#include "GrowlDefines.h" - -#ifdef __OBJC__ -# include "GrowlApplicationBridge.h" -#endif -#include "GrowlApplicationBridge-Carbon.h" diff --git a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h b/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h deleted file mode 100644 index 22ccf5e..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge-Carbon.h +++ /dev/null @@ -1,758 +0,0 @@ -// -// GrowlApplicationBridge-Carbon.h -// Growl -// -// Created by Mac-arena the Bored Zo on Wed Jun 18 2004. -// Based on GrowlApplicationBridge.h by Evan Schoenberg. -// This source code is in the public domain. You may freely link it into any -// program. -// - -#ifndef _GROWLAPPLICATIONBRIDGE_CARBON_H_ -#define _GROWLAPPLICATIONBRIDGE_CARBON_H_ - -#include <sys/cdefs.h> -#include <Carbon/Carbon.h> - -/*! @header GrowlApplicationBridge-Carbon.h - * @abstract Declares an API that Carbon applications can use to interact with Growl. - * @discussion GrowlApplicationBridge uses a delegate to provide information //XXX - * to Growl (such as your application's name and what notifications it may - * post) and to provide information to your application (such as that Growl - * is listening for notifications or that a notification has been clicked). - * - * You can set the Growldelegate with Growl_SetDelegate and find out the - * current delegate with Growl_GetDelegate. See struct Growl_Delegate for more - * information about the delegate. - */ - -__BEGIN_DECLS - -/*! @struct Growl_Delegate - * @abstract Delegate to supply GrowlApplicationBridge with information and respond to events. - * @discussion The Growl delegate provides your interface to - * GrowlApplicationBridge. When GrowlApplicationBridge needs information about - * your application, it looks for it in the delegate; when Growl or the user - * does something that you might be interested in, GrowlApplicationBridge - * looks for a callback in the delegate and calls it if present - * (meaning, if it is not <code>NULL</code>). - * XXX on all of that - * @field size The size of the delegate structure. - * @field applicationName The name of your application. - * @field registrationDictionary A dictionary describing your application and the notifications it can send out. - * @field applicationIconData Your application's icon. - * @field growlInstallationWindowTitle The title of the installation window. - * @field growlInstallationInformation Text to display in the installation window. - * @field growlUpdateWindowTitle The title of the update window. - * @field growlUpdateInformation Text to display in the update window. - * @field referenceCount A count of owners of the delegate. - * @field retain Called when GrowlApplicationBridge receives this delegate. - * @field release Called when GrowlApplicationBridge no longer needs this delegate. - * @field growlIsReady Called when GrowlHelperApp is listening for notifications. - * @field growlNotificationWasClicked Called when a Growl notification is clicked. - * @field growlNotificationTimedOut Called when a Growl notification timed out. - */ -struct Growl_Delegate { - /* @discussion This should be sizeof(struct Growl_Delegate). - */ - size_t size; - - /*All of these attributes are optional. - *Optional attributes can be NULL; required attributes that - * are NULL cause setting the Growl delegate to fail. - *XXX - move optional/required status into the discussion for each field - */ - - /* This name is used both internally and in the Growl preferences. - * - * This should remain stable between different versions and incarnations of - * your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - * - * This can be <code>NULL</code> if it is provided elsewhere, namely in an - * auto-discoverable plist file in your app bundle - * (XXX refer to more information on that) or in registrationDictionary. - */ - CFStringRef applicationName; - - /* - * Must contain at least these keys: - * GROWL_NOTIFICATIONS_ALL (CFArray): - * Contains the names of all notifications your application may post. - * - * Can also contain these keys: - * GROWL_NOTIFICATIONS_DEFAULT (CFArray): - * Names of notifications that should be enabled by default. - * If omitted, GROWL_NOTIFICATIONS_ALL will be used. - * GROWL_APP_NAME (CFString): - * Same as the applicationName member of this structure. - * If both are present, the applicationName member shall prevail. - * If this key is present, you may omit applicationName (set it to <code>NULL</code>). - * GROWL_APP_ICON (CFData): - * Same as the iconData member of this structure. - * If both are present, the iconData member shall prevail. - * If this key is present, you may omit iconData (set it to <code>NULL</code>). - * - * If you change the contents of this dictionary after setting the delegate, - * be sure to call Growl_Reregister. - * - * This can be <code>NULL</code> if you have an auto-discoverable plist file in your app - * bundle. (XXX refer to more information on that) - */ - CFDictionaryRef registrationDictionary; - - /* The data can be in any format supported by NSImage. As of - * Mac OS X 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and - * PICT formats. - * - * If this is not supplied, Growl will look up your application's icon by - * its application name. - */ - CFDataRef applicationIconData; - - /* Installer display attributes - * - * These four attributes are used by the Growl installer, if this framework - * supports it. - * For any of these being <code>NULL</code>, a localised default will be - * supplied. - */ - - /* If this is <code>NULL</code>, Growl will use a default, - * localized title. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlInstallationWindowTitle; - /* This information may be as long or short as desired (the - * window will be sized to fit it). If Growl is not installed, it will - * be displayed to the user as an explanation of what Growl is and what - * it can do in your application. - * It should probably note that no download is required to install. - * - * If this is <code>NULL</code>, Growl will use a default, localized - * explanation. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlInstallationInformation; - /* If this is <code>NULL</code>, Growl will use a default, - * localized title. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlUpdateWindowTitle; - /* This information may be as long or short as desired (the - * window will be sized to fit it). If an older version of Growl is - * installed, it will be displayed to the user as an explanation that an - * updated version of Growl is included in your application and - * no download is required. - * - * If this is <code>NULL</code>, Growl will use a default, localized - * explanation. - * - * Only used if you're using Growl-WithInstaller.framework. Otherwise, - * this member is ignored. - */ - CFStringRef growlUpdateInformation; - - /* This member is provided for use by your retain and release - * callbacks (see below). - * - * GrowlApplicationBridge never directly uses this member. Instead, it - * calls your retain callback (if non-<code>NULL</code>) and your release - * callback (if non-<code>NULL</code>). - */ - unsigned referenceCount; - - //Functions. Currently all of these are optional (any of them can be NULL). - - /* When you call Growl_SetDelegate(newDelegate), it will call - * oldDelegate->release(oldDelegate), and then it will call - * newDelegate->retain(newDelegate), and the return value from retain - * is what will be set as the delegate. - * (This means that this member works like CFRetain and -[NSObject retain].) - * This member is optional (it can be <code>NULL</code>). - * For a delegate allocated with malloc, this member would be - * <code>NULL</code>. - * @result A delegate to which GrowlApplicationBridge holds a reference. - */ - void *(*retain)(void *); - /* When you call Growl_SetDelegate(newDelegate), it will call - * oldDelegate->release(oldDelegate), and then it will call - * newDelegate->retain(newDelegate), and the return value from retain - * is what will be set as the delegate. - * (This means that this member works like CFRelease and - * -[NSObject release].) - * This member is optional (it can be NULL). - * For a delegate allocated with malloc, this member might be - * <code>free</code>(3). - */ - void (*release)(void *); - - /* Informs the delegate that Growl (specifically, the GrowlHelperApp) was - * launched successfully (or was already running). The application can - * take actions with the knowledge that Growl is installed and functional. - */ - void (*growlIsReady)(void); - - /* Informs the delegate that a Growl notification was clicked. It is only - * sent for notifications sent with a non-<code>NULL</code> clickContext, - * so if you want to receive a message when a notification is clicked, - * clickContext must not be <code>NULL</code> when calling - * Growl_PostNotification or - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext. - */ - void (*growlNotificationWasClicked)(CFPropertyListRef clickContext); - - /* Informs the delegate that a Growl notification timed out. It is only - * sent for notifications sent with a non-<code>NULL</code> clickContext, - * so if you want to receive a message when a notification is clicked, - * clickContext must not be <code>NULL</code> when calling - * Growl_PostNotification or - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext. - */ - void (*growlNotificationTimedOut)(CFPropertyListRef clickContext); -}; - -/*! @struct Growl_Notification - * @abstract Structure describing a Growl notification. - * @discussion XXX - * @field size The size of the notification structure. - * @field name Identifies the notification. - * @field title Short synopsis of the notification. - * @field description Additional text. - * @field iconData An icon for the notification. - * @field priority An indicator of the notification's importance. - * @field reserved Bits reserved for future usage. - * @field isSticky Requests that a notification stay on-screen until dismissed explicitly. - * @field clickContext An identifier to be passed to your click callback when a notification is clicked. - * @field clickCallback A callback to call when the notification is clicked. - */ -struct Growl_Notification { - /* This should be sizeof(struct Growl_Notification). - */ - size_t size; - - /* The notification name distinguishes one type of - * notification from another. The name should be human-readable, as it - * will be displayed in the Growl preference pane. - * - * The name is used in the GROWL_NOTIFICATIONS_ALL and - * GROWL_NOTIFICATIONS_DEFAULT arrays in the registration dictionary, and - * in this member of the Growl_Notification structure. - */ - CFStringRef name; - - /* A notification's title describes the notification briefly. - * It should be easy to read quickly by the user. - */ - CFStringRef title; - - /* The description supplements the title with more - * information. It is usually longer and sometimes involves a list of - * subjects. For example, for a 'Download complete' notification, the - * description might have one filename per line. GrowlMail in Growl 0.6 - * uses a description of '%d new mail(s)' (formatted with the number of - * messages). - */ - CFStringRef description; - - /* The notification icon usually indicates either what - * happened (it may have the same icon as e.g. a toolbar item that - * started the process that led to the notification), or what it happened - * to (e.g. a document icon). - * - * The icon data is optional, so it can be <code>NULL</code>. In that - * case, the application icon is used alone. Not all displays support - * icons. - * - * The data can be in any format supported by NSImage. As of Mac OS X - * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT form - * ats. - */ - CFDataRef iconData; - - /* Priority is new in Growl 0.6, and is represented as a - * signed integer from -2 to +2. 0 is Normal priority, -2 is Very Low - * priority, and +2 is Very High priority. - * - * Not all displays support priority. If you do not wish to assign a - * priority to your notification, assign 0. - */ - signed int priority; - - /* These bits are not used in Growl 0.6. Set them to 0. - */ - unsigned reserved: 31; - - /* When the sticky bit is clear, in most displays, - * notifications disappear after a certain amount of time. Sticky - * notifications, however, remain on-screen until the user dismisses them - * explicitly, usually by clicking them. - * - * Sticky notifications were introduced in Growl 0.6. Most notifications - * should not be sticky. Not all displays support sticky notifications, - * and the user may choose in Growl's preference pane to force the - * notification to be sticky or non-sticky, in which case the sticky bit - * in the notification will be ignored. - */ - unsigned isSticky: 1; - - /* If this is not <code>NULL</code>, and your click callback - * is not <code>NULL</code> either, this will be passed to the callback - * when your notification is clicked by the user. - * - * Click feedback was introduced in Growl 0.6, and it is optional. Not - * all displays support click feedback. - */ - CFPropertyListRef clickContext; - - /* If this is not <code>NULL</code>, it will be called instead - * of the Growl delegate's click callback when clickContext is - * non-<code>NULL</code> and the notification is clicked on by the user. - * - * Click feedback was introduced in Growl 0.6, and it is optional. Not - * all displays support click feedback. - * - * The per-notification click callback is not yet supported as of Growl - * 0.7. - */ - void (*clickCallback)(CFPropertyListRef clickContext); -}; - -#pragma mark - -#pragma mark Easy initialisers - -/*! @defined InitGrowlDelegate - * @abstract Callable macro. Initializes a Growl delegate structure to defaults. - * @discussion Call with a pointer to a struct Growl_Delegate. All of the - * members of the structure will be set to 0 or <code>NULL</code>, except for - * size (which will be set to <code>sizeof(struct Growl_Delegate)</code>) and - * referenceCount (which will be set to 1). - */ -#define InitGrowlDelegate(delegate) \ - do { \ - if (delegate) { \ - (delegate)->size = sizeof(struct Growl_Delegate); \ - (delegate)->applicationName = NULL; \ - (delegate)->registrationDictionary = NULL; \ - (delegate)->applicationIconData = NULL; \ - (delegate)->growlInstallationWindowTitle = NULL; \ - (delegate)->growlInstallationInformation = NULL; \ - (delegate)->growlUpdateWindowTitle = NULL; \ - (delegate)->growlUpdateInformation = NULL; \ - (delegate)->referenceCount = 1U; \ - (delegate)->retain = NULL; \ - (delegate)->release = NULL; \ - (delegate)->growlIsReady = NULL; \ - (delegate)->growlNotificationWasClicked = NULL; \ - (delegate)->growlNotificationTimedOut = NULL; \ - } \ - } while(0) - -/*! @defined InitGrowlNotification - * @abstract Callable macro. Initializes a Growl notification structure to defaults. - * @discussion Call with a pointer to a struct Growl_Notification. All of - * the members of the structure will be set to 0 or <code>NULL</code>, except - * for size (which will be set to - * <code>sizeof(struct Growl_Notification)</code>). - */ -#define InitGrowlNotification(notification) \ - do { \ - if (notification) { \ - (notification)->size = sizeof(struct Growl_Notification); \ - (notification)->name = NULL; \ - (notification)->title = NULL; \ - (notification)->description = NULL; \ - (notification)->iconData = NULL; \ - (notification)->priority = 0; \ - (notification)->reserved = 0U; \ - (notification)->isSticky = false; \ - (notification)->clickContext = NULL; \ - } \ - } while(0) - -#pragma mark - -#pragma mark Public API - -// @functiongroup Managing the Growl delegate - -/*! @function Growl_SetDelegate - * @abstract Replaces the current Growl delegate with a new one, or removes - * the Growl delegate. - * @param newDelegate - * @result Returns false and does nothing else if a pointer that was passed in - * is unsatisfactory (because it is non-<code>NULL</code>, but at least one - * required member of it is <code>NULL</code>). Otherwise, sets or unsets the - * delegate and returns true. - * @discussion When <code>newDelegate</code> is non-<code>NULL</code>, sets - * the delegate to <code>newDelegate</code>. When it is <code>NULL</code>, - * the current delegate will be unset, and no delegate will be in place. - * - * It is legal for <code>newDelegate</code> to be the current delegate; - * nothing will happen, and Growl_SetDelegate will return true. It is also - * legal for it to be <code>NULL</code>, as described above; again, it will - * return true. - * - * If there was a delegate in place before the call, Growl_SetDelegate will - * call the old delegate's release member if it was non-<code>NULL</code>. If - * <code>newDelegate</code> is non-<code>NULL</code>, Growl_SetDelegate will - * call <code>newDelegate->retain</code>, and set the delegate to its return - * value. - * - * If you are using Growl-WithInstaller.framework, and an older version of - * Growl is installed on the user's system, the user will automatically be - * prompted to update. - * - * GrowlApplicationBridge currently does not copy this structure, nor does it - * retain any of the CF objects in the structure (it regards the structure as - * a container that retains the objects when they are added and releases them - * when they are removed or the structure is destroyed). Also, - * GrowlApplicationBridge currently does not modify any member of the - * structure, except possibly the referenceCount by calling the retain and - * release members. - */ -Boolean Growl_SetDelegate(struct Growl_Delegate *newDelegate); - -/*! @function Growl_GetDelegate - * @abstract Returns the current Growl delegate, if any. - * @result The current Growl delegate. - * @discussion Returns the last pointer passed into Growl_SetDelegate, or - * <code>NULL</code> if no such call has been made. - * - * This function follows standard Core Foundation reference-counting rules. - * Because it is a Get function, not a Copy function, it will not retain the - * delegate on your behalf. You are responsible for retaining and releasing - * the delegate as needed. - */ -struct Growl_Delegate *Growl_GetDelegate(void); - -#pragma mark - - -// @functiongroup Posting Growl notifications - -/*! @function Growl_PostNotification - * @abstract Posts a Growl notification. - * @param notification The notification to post. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * <code>NULL</code> (or 0 or false as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. - * If the user cancels, this function will have no effect until the next - * application session, at which time when it is called the user will be - * prompted again. The user is also given the option to not be prompted again. - * If the user does choose to install Growl, the requested notification will - * be displayed once Growl is installed and running. - */ -void Growl_PostNotification(const struct Growl_Notification *notification); - -/*! @function Growl_PostNotificationWithDictionary -* @abstract Notifies using a userInfo dictionary suitable for passing to -* CFDistributedNotificationCenter. -* @param userInfo The dictionary to notify with. -* @discussion Before Growl 0.6, your application would have posted -* notifications using CFDistributedNotificationCenter by creating a userInfo -* dictionary with the notification data. This had the advantage of allowing -* you to add other data to the dictionary for programs besides Growl that -* might be listening. -* -* This function allows you to use such dictionaries without being restricted -* to using CFDistributedNotificationCenter. The keys for this dictionary - * can be found in GrowlDefines.h. -*/ -void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo); - -/*! @function Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext - * @abstract Posts a Growl notification using parameter values. - * @param title The title of the notification. - * @param description The description of the notification. - * @param notificationName The name of the notification as listed in the - * registration dictionary. - * @param iconData Data representing a notification icon. Can be <code>NULL</code>. - * @param priority The priority of the notification (-2 to +2, with -2 - * being Very Low and +2 being Very High). - * @param isSticky If true, requests that this notification wait for a - * response from the user. - * @param clickContext An object to pass to the clickCallback, if any. Can - * be <code>NULL</code>, in which case the clickCallback is not called. - * @discussion Creates a temporary Growl_Notification, fills it out with the - * supplied information, and calls Growl_PostNotification on it. - * See struct Growl_Notification and Growl_PostNotification for more - * information. - * - * The icon data can be in any format supported by NSImage. As of Mac OS X - * 10.3, this includes the .icns, TIFF, JPEG, GIF, PNG, PDF, and PICT formats. - */ -void Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext( - /*inhale*/ - CFStringRef title, - CFStringRef description, - CFStringRef notificationName, - CFDataRef iconData, - signed int priority, - Boolean isSticky, - CFPropertyListRef clickContext); - -#pragma mark - - -// @functiongroup Registering - -/*! @function Growl_RegisterWithDictionary - * @abstract Register your application with Growl without setting a delegate. - * @discussion When you call this function with a dictionary, - * GrowlApplicationBridge registers your application using that dictionary. - * If you pass <code>NULL</code>, GrowlApplicationBridge will ask the delegate - * (if there is one) for a dictionary, and if that doesn't work, it will look - * in your application's bundle for an auto-discoverable plist. - * (XXX refer to more information on that) - * - * If you pass a dictionary to this function, it must include the - * <code>GROWL_APP_NAME</code> key, unless a delegate is set. - * - * This function is mainly an alternative to the delegate system introduced - * with Growl 0.6. Without a delegate, you cannot receive callbacks such as - * <code>growlIsReady</code> (since they are sent to the delegate). You can, - * however, set a delegate after registering without one. - * - * This function was introduced in Growl.framework 0.7. - * @result <code>false</code> if registration failed (e.g. if Growl isn't installed). - */ -Boolean Growl_RegisterWithDictionary(CFDictionaryRef regDict); - -/*! @function Growl_Reregister - * @abstract Updates your registration with Growl. - * @discussion If your application changes the contents of the - * GROWL_NOTIFICATIONS_ALL key in the registrationDictionary member of the - * Growl delegate, or if it changes the value of that member, or if it - * changes the contents of its auto-discoverable plist, call this function - * to have Growl update its registration information for your application. - * - * Otherwise, this function does not normally need to be called. If you're - * using a delegate, your application will be registered when you set the - * delegate if both the delegate and its registrationDictionary member are - * non-<code>NULL</code>. - * - * This function is now implemented using - * <code>Growl_RegisterWithDictionary</code>. - */ -void Growl_Reregister(void); - -#pragma mark - - -/*! @function Growl_SetWillRegisterWhenGrowlIsReady - * @abstract Tells GrowlApplicationBridge to register with Growl when Growl - * launches (or not). - * @discussion When Growl has started listening for notifications, it posts a - * <code>GROWL_IS_READY</code> notification on the Distributed Notification - * Center. GrowlApplicationBridge listens for this notification, using it to - * perform various tasks (such as calling your delegate's - * <code>growlIsReady</code> callback, if it has one). If this function is - * called with <code>true</code>, one of those tasks will be to reregister - * with Growl (in the manner of <code>Growl_Reregister</code>). - * - * This attribute is automatically set back to <code>false</code> - * (the default) after every <code>GROWL_IS_READY</code> notification. - * @param flag <code>true</code> if you want GrowlApplicationBridge to register with - * Growl when next it is ready; <code>false</code> if not. - */ -void Growl_SetWillRegisterWhenGrowlIsReady(Boolean flag); -/*! @function Growl_WillRegisterWhenGrowlIsReady - * @abstract Reports whether GrowlApplicationBridge will register with Growl - * when Growl next launches. - * @result <code>true</code> if GrowlApplicationBridge will register with - * Growl when next it posts GROWL_IS_READY; <code>false</code> if not. - */ -Boolean Growl_WillRegisterWhenGrowlIsReady(void); - -#pragma mark - - -// @functiongroup Obtaining registration dictionaries - -/*! @function Growl_CopyRegistrationDictionaryFromDelegate - * @abstract Asks the delegate for a registration dictionary. - * @discussion If no delegate is set, or if the delegate's - * <code>registrationDictionary</code> member is <code>NULL</code>, this - * function returns <code>NULL</code>. - * - * This function does not attempt to clean up the dictionary in any way - for - * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result - * will be missing it too. Use - * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or - * <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code> - * to try to fill in missing keys. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -CFDictionaryRef Growl_CopyRegistrationDictionaryFromDelegate(void); - -/*! @function Growl_CopyRegistrationDictionaryFromBundle - * @abstract Looks in a bundle for a registration dictionary. - * @discussion This function looks in a bundle for an auto-discoverable - * registration dictionary file using <code>CFBundleCopyResourceURL</code>. - * If it finds one, it loads the file using <code>CFPropertyList</code> and - * returns the result. - * - * If you pass <code>NULL</code> as the bundle, the main bundle is examined. - * - * This function does not attempt to clean up the dictionary in any way - for - * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result - * will be missing it too. Use - * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary:</code> or - * <code>Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys</code> - * to try to fill in missing keys. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -CFDictionaryRef Growl_CopyRegistrationDictionaryFromBundle(CFBundleRef bundle); - -/*! @function Growl_CreateBestRegistrationDictionary - * @abstract Obtains a registration dictionary, filled out to the best of - * GrowlApplicationBridge's knowledge. - * @discussion This function creates a registration dictionary as best - * GrowlApplicationBridge knows how. - * - * First, GrowlApplicationBridge examines the Growl delegate (if there is - * one) and gets the registration dictionary from that. If no such dictionary - * was obtained, GrowlApplicationBridge looks in your application's main - * bundle for an auto-discoverable registration dictionary file. If that - * doesn't exist either, this function returns <code>NULL</code>. - * - * Second, GrowlApplicationBridge calls - * <code>Growl_CreateRegistrationDictionaryByFillingInDictionary</code> with - * whatever dictionary was obtained. The result of that function is the - * result of this function. - * - * GrowlApplicationBridge uses this function when you call - * <code>Growl_SetDelegate</code>, or when you call - * <code>Growl_RegisterWithDictionary</code> with <code>NULL</code>. - * - * This function was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -CFDictionaryRef Growl_CreateBestRegistrationDictionary(void); - -#pragma mark - - -// @functiongroup Filling in registration dictionaries - -/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionary - * @abstract Tries to fill in missing keys in a registration dictionary. - * @param regDict The dictionary to fill in. - * @result The dictionary with the keys filled in. - * @discussion This function examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code> - * <code>GROWL_APP_ICON</code> The icon of the application. - * <code>GROWL_APP_LOCATION</code> The location of the application. - * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code> - * - * Keys are only filled in if missing; if a key is present in the dictionary, - * its value will not be changed. - * - * This function was introduced in Growl.framework 0.7. - */ -CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionary(CFDictionaryRef regDict); -/*! @function Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys - * @abstract Tries to fill in missing keys in a registration dictionary. - * @param regDict The dictionary to fill in. - * @param keys The keys to fill in. If <code>NULL</code>, any missing keys are filled in. - * @result The dictionary with the keys filled in. - * @discussion This function examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code> - * <code>GROWL_APP_ICON</code> The icon of the application. - * <code>GROWL_APP_LOCATION</code> The location of the application. - * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code> - * - * Only those keys that are listed in <code>keys</code> will be filled in. - * Other missing keys are ignored. Also, keys are only filled in if missing; - * if a key is present in the dictionary, its value will not be changed. - * - * This function was introduced in Growl.framework 0.7. - */ -CFDictionaryRef Growl_CreateRegistrationDictionaryByFillingInDictionaryRestrictedToKeys(CFDictionaryRef regDict, CFSetRef keys); - -#pragma mark - - -// @functiongroup Querying Growl's status - -/*! @function Growl_IsInstalled - * @abstract Determines whether the Growl prefpane and its helper app are - * installed. - * @result Returns true if Growl is installed, false otherwise. - */ -Boolean Growl_IsInstalled(void); - -/*! @function Growl_IsRunning - * @abstract Cycles through the process list to find whether GrowlHelperApp - * is running. - * @result Returns true if Growl is running, false otherwise. - */ -Boolean Growl_IsRunning(void); - -#pragma mark - - -// @functiongroup Launching Growl - -/*! @typedef GrowlLaunchCallback - * @abstract Callback to notify you that Growl is running. - * @param context The context pointer passed to Growl_LaunchIfInstalled. - * @discussion Growl_LaunchIfInstalled calls this callback function if Growl - * was already running or if it launched Growl successfully. - */ -typedef void (*GrowlLaunchCallback)(void *context); - -/*! @function Growl_LaunchIfInstalled - * @abstract Launches GrowlHelperApp if it is not already running. - * @param callback A callback function which will be called if Growl was successfully - * launched or was already running. Can be <code>NULL</code>. - * @param context The context pointer to pass to the callback. Can be <code>NULL</code>. - * @result Returns true if Growl was successfully launched or was already - * running; returns false and does not call the callback otherwise. - * @discussion Returns true and calls the callback (if the callback is not - * <code>NULL</code>) if the Growl helper app began launching or was already - * running. Returns false and performs no other action if Growl could not be - * launched (e.g. because the Growl preference pane is not properly installed). - * - * If <code>Growl_CreateBestRegistrationDictionary</code> returns - * non-<code>NULL</code>, this function will register with Growl atomically. - * - * The callback should take a single argument; this is to allow applications - * to have context-relevant information passed back. It is perfectly - * acceptable for context to be <code>NULL</code>. The callback itself can be - * <code>NULL</code> if you don't want one. - */ -Boolean Growl_LaunchIfInstalled(GrowlLaunchCallback callback, void *context); - -#pragma mark - -#pragma mark Constants - -/*! @defined GROWL_PREFPANE_BUNDLE_IDENTIFIER - * @abstract The CFBundleIdentifier of the Growl preference pane bundle. - * @discussion GrowlApplicationBridge uses this to determine whether Growl is - * currently installed, by searching for the Growl preference pane. Your - * application probably does not need to use this macro itself. - */ -#ifndef GROWL_PREFPANE_BUNDLE_IDENTIFIER -#define GROWL_PREFPANE_BUNDLE_IDENTIFIER CFSTR("com.growl.prefpanel") -#endif - -__END_DECLS - -#endif /* _GROWLAPPLICATIONBRIDGE_CARBON_H_ */ diff --git a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h deleted file mode 100644 index bb78756..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +++ /dev/null @@ -1,556 +0,0 @@ -// -// GrowlApplicationBridge.h -// Growl -// -// Created by Evan Schoenberg on Wed Jun 16 2004. -// Copyright 2004-2005 The Growl Project. All rights reserved. -// - -/*! - * @header GrowlApplicationBridge.h - * @abstract Defines the GrowlApplicationBridge class. - * @discussion This header defines the GrowlApplicationBridge class as well as - * the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant. - */ - -#ifndef __GrowlApplicationBridge_h__ -#define __GrowlApplicationBridge_h__ - -#import <Foundation/Foundation.h> -#import "GrowlDefines.h" - -//Forward declarations -@protocol GrowlApplicationBridgeDelegate; - -/*! - * @defined GROWL_PREFPANE_BUNDLE_IDENTIFIER - * @discussion The bundle identifier for the Growl prefpane. - */ -#define GROWL_PREFPANE_BUNDLE_IDENTIFIER @"com.growl.prefpanel" - -/*! - * @defined GROWL_PREFPANE_NAME - * @discussion The file name of the Growl prefpane. - */ -#define GROWL_PREFPANE_NAME @"Growl.prefPane" - -//Internal notification when the user chooses not to install (to avoid continuing to cache notifications awaiting installation) -#define GROWL_USER_CHOSE_NOT_TO_INSTALL_NOTIFICATION @"User chose not to install" - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @class GrowlApplicationBridge - * @abstract A class used to interface with Growl. - * @discussion This class provides a means to interface with Growl. - * - * Currently it provides a way to detect if Growl is installed and launch the - * GrowlHelperApp if it's not already running. - */ -@interface GrowlApplicationBridge : NSObject { - -} - -/*! - * @method isGrowlInstalled - * @abstract Detects whether Growl is installed. - * @discussion Determines if the Growl prefpane and its helper app are installed. - * @result Returns YES if Growl is installed, NO otherwise. - */ -+ (BOOL) isGrowlInstalled; - -/*! - * @method isGrowlRunning - * @abstract Detects whether GrowlHelperApp is currently running. - * @discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings. - * @result Returns YES if GrowlHelperApp is running, NO otherwise. - */ -+ (BOOL) isGrowlRunning; - -#pragma mark - - -/*! - * @method setGrowlDelegate: - * @abstract Set the object which will be responsible for providing and receiving Growl information. - * @discussion This must be called before using GrowlApplicationBridge. - * - * The methods in the GrowlApplicationBridgeDelegate protocol are required - * and return the basic information needed to register with Growl. - * - * The methods in the GrowlApplicationBridgeDelegate_InformalProtocol - * informal protocol are individually optional. They provide a greater - * degree of interaction between the application and growl such as informing - * the application when one of its Growl notifications is clicked by the user. - * - * The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol - * informal protocol are individually optional and are only applicable when - * using the Growl-WithInstaller.framework which allows for automated Growl - * installation. - * - * When this method is called, data will be collected from inDelegate, Growl - * will be launched if it is not already running, and the application will be - * registered with Growl. - * - * If using the Growl-WithInstaller framework, if Growl is already installed - * but this copy of the framework has an updated version of Growl, the user - * will be prompted to update automatically. - * - * @param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol. - */ -+ (void) setGrowlDelegate:(NSObject<GrowlApplicationBridgeDelegate> *)inDelegate; - -/*! - * @method growlDelegate - * @abstract Return the object responsible for providing and receiving Growl information. - * @discussion See setGrowlDelegate: for details. - * @result The Growl delegate. - */ -+ (NSObject<GrowlApplicationBridgeDelegate> *) growlDelegate; - -#pragma mark - - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * <code>nil</code> (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types). - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext; - -/*! - * @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier: - * @abstract Send a Growl notification. - * @discussion This is the preferred means for sending a Growl notification. - * The notification name and at least one of the title and description are - * required (all three are preferred). All other parameters may be - * <code>nil</code> (or 0 or NO as appropriate) to accept default values. - * - * If using the Growl-WithInstaller framework, if Growl is not installed the - * user will be prompted to install Growl. If the user cancels, this method - * will have no effect until the next application session, at which time when - * it is called the user will be prompted again. The user is also given the - * option to not be prompted again. If the user does choose to install Growl, - * the requested notification will be displayed once Growl is installed and - * running. - * - * @param title The title of the notification displayed to the user. - * @param description The full description of the notification displayed to the user. - * @param notifName The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane. - * @param iconData <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead. - * @param priority The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority. - * @param isSticky If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications. - * @param clickContext A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types). - * @param identifier An identifier for this notification. Notifications with equal identifiers are coalesced. - */ -+ (void) notifyWithTitle:(NSString *)title - description:(NSString *)description - notificationName:(NSString *)notifName - iconData:(NSData *)iconData - priority:(signed int)priority - isSticky:(BOOL)isSticky - clickContext:(id)clickContext - identifier:(NSString *)identifier; - -/*! @method notifyWithDictionary: - * @abstract Notifies using a userInfo dictionary suitable for passing to - * <code>NSDistributedNotificationCenter</code>. - * @param userInfo The dictionary to notify with. - * @discussion Before Growl 0.6, your application would have posted - * notifications using <code>NSDistributedNotificationCenter</code> by - * creating a userInfo dictionary with the notification data. This had the - * advantage of allowing you to add other data to the dictionary for programs - * besides Growl that might be listening. - * - * This method allows you to use such dictionaries without being restricted - * to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary - * can be found in GrowlDefines.h. - */ -+ (void) notifyWithDictionary:(NSDictionary *)userInfo; - -#pragma mark - - -/*! @method registerWithDictionary: - * @abstract Register your application with Growl without setting a delegate. - * @discussion When you call this method with a dictionary, - * GrowlApplicationBridge registers your application using that dictionary. - * If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate - * (if there is one) for a dictionary, and if that doesn't work, it will look - * in your application's bundle for an auto-discoverable plist. - * (XXX refer to more information on that) - * - * If you pass a dictionary to this method, it must include the - * <code>GROWL_APP_NAME</code> key, unless a delegate is set. - * - * This method is mainly an alternative to the delegate system introduced - * with Growl 0.6. Without a delegate, you cannot receive callbacks such as - * <code>-growlIsReady</code> (since they are sent to the delegate). You can, - * however, set a delegate after registering without one. - * - * This method was introduced in Growl.framework 0.7. - */ -+ (BOOL) registerWithDictionary:(NSDictionary *)regDict; - -/*! @method reregisterGrowlNotifications - * @abstract Reregister the notifications for this application. - * @discussion This method does not normally need to be called. If your - * application changes what notifications it is registering with Growl, call - * this method to have the Growl delegate's - * <code>-registrationDictionaryForGrowl</code> method called again and the - * Growl registration information updated. - * - * This method is now implemented using <code>-registerWithDictionary:</code>. - */ -+ (void) reregisterGrowlNotifications; - -#pragma mark - - -/*! @method setWillRegisterWhenGrowlIsReady: - * @abstract Tells GrowlApplicationBridge to register with Growl when Growl - * launches (or not). - * @discussion When Growl has started listening for notifications, it posts a - * <code>GROWL_IS_READY</code> notification on the Distributed Notification - * Center. GrowlApplicationBridge listens for this notification, using it to - * perform various tasks (such as calling your delegate's - * <code>-growlIsReady</code> method, if it has one). If this method is - * called with <code>YES</code>, one of those tasks will be to reregister - * with Growl (in the manner of <code>-reregisterGrowlNotifications</code>). - * - * This attribute is automatically set back to <code>NO</code> (the default) - * after every <code>GROWL_IS_READY</code> notification. - * @param flag <code>YES</code> if you want GrowlApplicationBridge to register with - * Growl when next it is ready; <code>NO</code> if not. - */ -+ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag; -/*! @method willRegisterWhenGrowlIsReady - * @abstract Reports whether GrowlApplicationBridge will register with Growl - * when Growl next launches. - * @result <code>YES</code> if GrowlApplicationBridge will register with Growl - * when next it posts GROWL_IS_READY; <code>NO</code> if not. - */ -+ (BOOL) willRegisterWhenGrowlIsReady; - -#pragma mark - - -/*! @method registrationDictionaryFromDelegate - * @abstract Asks the delegate for a registration dictionary. - * @discussion If no delegate is set, or if the delegate's - * <code>-registrationDictionaryForGrowl</code> method returns - * <code>nil</code>, this method returns <code>nil</code>. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result - * will be missing it too. Use <code>+[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:]</code> or - * <code>+[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromDelegate; - -/*! @method registrationDictionaryFromBundle: - * @abstract Looks in a bundle for a registration dictionary. - * @discussion This method looks in a bundle for an auto-discoverable - * registration dictionary file using <code>-[NSBundle - * pathForResource:ofType:]</code>. If it finds one, it loads the file using - * <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the - * result. - * - * If you pass <code>nil</code> as the bundle, the main bundle is examined. - * - * This method does not attempt to clean up the dictionary in any way - for - * example, if it is missing the <code>GROWL_APP_NAME</code> key, the result - * will be missing it too. Use <code>+[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:]</code> or - * <code>+[GrowlApplicationBridge - * registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try - * to fill in missing keys. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle; - -/*! @method bestRegistrationDictionary - * @abstract Obtains a registration dictionary, filled out to the best of - * GrowlApplicationBridge's knowledge. - * @discussion This method creates a registration dictionary as best - * GrowlApplicationBridge knows how. - * - * First, GrowlApplicationBridge contacts the Growl delegate (if there is - * one) and gets the registration dictionary from that. If no such dictionary - * was obtained, GrowlApplicationBridge looks in your application's main - * bundle for an auto-discoverable registration dictionary file. If that - * doesn't exist either, this method returns <code>nil</code>. - * - * Second, GrowlApplicationBridge calls - * <code>+registrationDictionaryByFillingInDictionary:</code> with whatever - * dictionary was obtained. The result of that method is the result of this - * method. - * - * GrowlApplicationBridge uses this method when you call - * <code>+setGrowlDelegate:</code>, or when you call - * <code>+registerWithDictionary:</code> with <code>nil</code>. - * - * This method was introduced in Growl.framework 0.7. - * @result A registration dictionary. - */ -+ (NSDictionary *) bestRegistrationDictionary; - -#pragma mark - - -/*! @method registrationDictionaryByFillingInDictionary: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code> - * <code>GROWL_APP_ICON</code> The icon of the application. - * <code>GROWL_APP_LOCATION</code> The location of the application. - * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code> - * - * Keys are only filled in if missing; if a key is present in the dictionary, - * its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of <code>regDict</code>. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict; -/*! @method registrationDictionaryByFillingInDictionary:restrictToKeys: - * @abstract Tries to fill in missing keys in a registration dictionary. - * @discussion This method examines the passed-in dictionary for missing keys, - * and tries to work out correct values for them. As of 0.7, it uses: - * - * Key Value - * --- ----- - * <code>GROWL_APP_NAME</code> <code>CFBundleExecutableName</code> - * <code>GROWL_APP_ICON</code> The icon of the application. - * <code>GROWL_APP_LOCATION</code> The location of the application. - * <code>GROWL_NOTIFICATIONS_DEFAULT</code> <code>GROWL_NOTIFICATIONS_ALL</code> - * - * Only those keys that are listed in <code>keys</code> will be filled in. - * Other missing keys are ignored. Also, keys are only filled in if missing; - * if a key is present in the dictionary, its value will not be changed. - * - * This method was introduced in Growl.framework 0.7. - * @param regDict The dictionary to fill in. - * @param keys The keys to fill in. If <code>nil</code>, any missing keys are filled in. - * @result The dictionary with the keys filled in. This is an autoreleased - * copy of <code>regDict</code>. - */ -+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys; - -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @protocol GrowlApplicationBridgeDelegate - * @abstract Required protocol for the Growl delegate. - * @discussion The methods in this protocol are required and are called - * automatically as needed by GrowlApplicationBridge. See - * <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>. - * See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>. - */ - -@protocol GrowlApplicationBridgeDelegate - -// -registrationDictionaryForGrowl has moved to the informal protocol as of 0.7. - -@end - -//------------------------------------------------------------------------------ -#pragma mark - - -/*! - * @category NSObject(GrowlApplicationBridgeDelegate_InformalProtocol) - * @abstract Methods which may be optionally implemented by the GrowlDelegate. - * @discussion The methods in this informal protocol will only be called if implemented by the delegate. - */ -@interface NSObject (GrowlApplicationBridgeDelegate_InformalProtocol) - -/*! - * @method registrationDictionaryForGrowl - * @abstract Return the dictionary used to register this application with Growl. - * @discussion The returned dictionary gives Growl the complete list of - * notifications this application will ever send, and it also specifies which - * notifications should be enabled by default. Each is specified by an array - * of <code>NSString</code> objects. - * - * For most applications, these two arrays can be the same (if all sent - * notifications should be displayed by default). - * - * The <code>NSString</code> objects of these arrays will correspond to the - * <code>notificationName:</code> parameter passed in - * <code>+[GrowlApplicationBridge - * notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls. - * - * The dictionary should have 2 key object pairs: - * key: GROWL_NOTIFICATIONS_ALL object: <code>NSArray</code> of <code>NSString</code> objects - * key: GROWL_NOTIFICATIONS_DEFAULT object: <code>NSArray</code> of <code>NSString</code> objects - * - * You do not need to implement this method if you have an auto-discoverable - * plist file in your app bundle. (XXX refer to more information on that) - * - * @result The <code>NSDictionary</code> to use for registration. - */ -- (NSDictionary *) registrationDictionaryForGrowl; - -/*! - * @method applicationNameForGrowl - * @abstract Return the name of this application which will be used for Growl bookkeeping. - * @discussion This name is used both internally and in the Growl preferences. - * - * This should remain stable between different versions and incarnations of - * your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - * - * You do not need to implement this method if you are providing the - * application name elsewhere, meaning in an auto-discoverable plist file in - * your app bundle (XXX refer to more information on that) or in the result - * of -registrationDictionaryForGrowl. - * - * @result The name of the application using Growl. - */ -- (NSString *) applicationNameForGrowl; - -/*! - * @method applicationIconDataForGrowl - * @abstract Return the <code>NSData</code> to treat as the application icon. - * @discussion The delegate may optionally return an <code>NSData</code> - * object to use as the application icon; if this is not implemented, the - * application's own icon is used. This is not generally needed. - * @result The <code>NSData</code> to treat as the application icon. - */ -- (NSData *) applicationIconDataForGrowl; - -/*! - * @method growlIsReady - * @abstract Informs the delegate that Growl has launched. - * @discussion Informs the delegate that Growl (specifically, the - * GrowlHelperApp) was launched successfully or was already running. The - * application can take actions with the knowledge that Growl is installed and - * functional. - */ -- (void) growlIsReady; - -/*! - * @method growlNotificationWasClicked: - * @abstract Informs the delegate that a Growl notification was clicked. - * @discussion Informs the delegate that a Growl notification was clicked. It - * is only sent for notifications sent with a non-<code>nil</code> - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be <code>nil</code> when calling - * <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationWasClicked:(id)clickContext; - -/*! - * @method growlNotificationTimedOut: - * @abstract Informs the delegate that a Growl notification timed out. - * @discussion Informs the delegate that a Growl notification timed out. It - * is only sent for notifications sent with a non-<code>nil</code> - * clickContext, so if you want to receive a message when a notification is - * clicked, clickContext must not be <code>nil</code> when calling - * <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>. - * @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]. - */ -- (void) growlNotificationTimedOut:(id)clickContext; - -@end - -#pragma mark - -/*! - * @category NSObject(GrowlApplicationBridgeDelegate_Installation_InformalProtocol) - * @abstract Methods which may be optionally implemented by the Growl delegate when used with Growl-WithInstaller.framework. - * @discussion The methods in this informal protocol will only be called if - * implemented by the delegate. They allow greater control of the information - * presented to the user when installing or upgrading Growl from within your - * application when using Growl-WithInstaller.framework. - */ -@interface NSObject (GrowlApplicationBridgeDelegate_Installation_InformalProtocol) - -/*! - * @method growlInstallationWindowTitle - * @abstract Return the title of the installation window. - * @discussion If not implemented, Growl will use a default, localized title. - * @result An NSString object to use as the title. - */ -- (NSString *)growlInstallationWindowTitle; - -/*! - * @method growlUpdateWindowTitle - * @abstract Return the title of the upgrade window. - * @discussion If not implemented, Growl will use a default, localized title. - * @result An NSString object to use as the title. - */ -- (NSString *)growlUpdateWindowTitle; - -/*! - * @method growlInstallationInformation - * @abstract Return the information to display when installing. - * @discussion This information may be as long or short as desired (the window - * will be sized to fit it). It will be displayed to the user as an - * explanation of what Growl is and what it can do in your application. It - * should probably note that no download is required to install. - * - * If this is not implemented, Growl will use a default, localized explanation. - * @result An NSAttributedString object to display. - */ -- (NSAttributedString *)growlInstallationInformation; - -/*! - * @method growlUpdateInformation - * @abstract Return the information to display when upgrading. - * @discussion This information may be as long or short as desired (the window - * will be sized to fit it). It will be displayed to the user as an - * explanation that an updated version of Growl is included in your - * application and no download is required. - * - * If this is not implemented, Growl will use a default, localized explanation. - * @result An NSAttributedString object to display. - */ -- (NSAttributedString *)growlUpdateInformation; - -@end - -//private -@interface GrowlApplicationBridge (GrowlInstallationPrompt_private) -+ (void) _userChoseNotToInstallGrowl; -@end - -#endif /* __GrowlApplicationBridge_h__ */ diff --git a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlDefines.h b/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlDefines.h deleted file mode 100644 index 6ff6ee3..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Headers/GrowlDefines.h +++ /dev/null @@ -1,307 +0,0 @@ -// -// GrowlDefines.h -// - -#ifndef _GROWLDEFINES_H -#define _GROWLDEFINES_H - -#ifdef __OBJC__ -#define XSTR(x) (@x) -#define STRING NSString * -#else -#define XSTR CFSTR -#define STRING CFStringRef -#endif - -/*! @header GrowlDefines.h - * @abstract Defines all the notification keys. - * @discussion Defines all the keys used for registration with Growl and for - * Growl notifications. - * - * Most applications should use the functions or methods of Growl.framework - * instead of posting notifications such as those described here. - * @updated 2004-01-25 - */ - -// UserInfo Keys for Registration -#pragma mark UserInfo Keys for Registration - -/*! @group Registration userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification. - * @discussion The values of these keys describe the application and the - * notifications it may post. - * - * Your application must register with Growl before it can post Growl - * notifications (and have them not be ignored). However, as of Growl 0.6, - * posting GROWL_APP_REGISTRATION notifications directly is no longer the - * preferred way to register your application. Your application should instead - * use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ - -/*! @defined GROWL_APP_NAME - * @abstract The name of your application. - * @discussion The name of your application. This should remain stable between - * different versions and incarnations of your application. - * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and - * "SurfWriter Lite" are not. - */ -#define GROWL_APP_NAME XSTR("ApplicationName") -/*! @defined GROWL_APP_ICON - * @abstract The image data for your application's icon. - * @discussion Image data representing your application's icon. This may be - * superimposed on a notification icon as a badge, used as the notification - * icon when a notification-specific icon is not supplied, or ignored - * altogether, depending on the display. Must be in a format supported by - * NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_APP_ICON XSTR("ApplicationIcon") -/*! @defined GROWL_NOTIFICATIONS_DEFAULT - * @abstract The array of notifications to turn on by default. - * @discussion These are the names of the notifications that should be enabled - * by default when your application registers for the first time. If your - * application reregisters, Growl will look here for any new notification - * names found in GROWL_NOTIFICATIONS_ALL, but ignore any others. - */ -#define GROWL_NOTIFICATIONS_DEFAULT XSTR("DefaultNotifications") -/*! @defined GROWL_NOTIFICATIONS_ALL - * @abstract The array of all notifications your application can send. - * @discussion These are the names of all of the notifications that your - * application may post. See GROWL_NOTIFICATION_NAME for a discussion of good - * notification names. - */ -#define GROWL_NOTIFICATIONS_ALL XSTR("AllNotifications") -/*! @defined GROWL_TICKET_VERSION - * @abstract The version of your registration ticket. - * @discussion Include this key in a ticket plist file that you put in your - * application bundle for auto-discovery. The current ticket version is 1. - */ -#define GROWL_TICKET_VERSION XSTR("TicketVersion") -// UserInfo Keys for Notifications -#pragma mark UserInfo Keys for Notifications - -/*! @group Notification userInfo keys */ -/* @abstract Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification. - * @discussion The values of these keys describe the content of a Growl - * notification. - * - * Not all of these keys are supported by all displays. Only the name, title, - * and description of a notification are universal. Most of the built-in - * displays do support all of these keys, and most other visual displays - * probably will also. But, as of 0.6, the Log, MailMe, and Speech displays - * support only textual data. - */ - -/*! @defined GROWL_NOTIFICATION_NAME - * @abstract The name of the notification. - * @discussion The name of the notification. This should be human-readable, as - * it's shown in the prefpane, in the list of notifications your application - * supports. */ -#define GROWL_NOTIFICATION_NAME XSTR("NotificationName") -/*! @defined GROWL_NOTIFICATION_TITLE - * @abstract The title to display in the notification. - * @discussion The title of the notification. Should be very brief. - * The title usually says what happened, e.g. "Download complete". - */ -#define GROWL_NOTIFICATION_TITLE XSTR("NotificationTitle") -/*! @defined GROWL_NOTIFICATION_DESCRIPTION - * @abstract The description to display in the notification. - * @discussion The description should be longer and more verbose than the title. - * The description usually tells the subject of the action, - * e.g. "Growl-0.6.dmg downloaded in 5.02 minutes". - */ -#define GROWL_NOTIFICATION_DESCRIPTION XSTR("NotificationDescription") -/*! @defined GROWL_NOTIFICATION_ICON - * @discussion Image data for the notification icon. Must be in a format - * supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_ICON XSTR("NotificationIcon") -/*! @defined GROWL_NOTIFICATION_APP_ICON - * @discussion Image data for the application icon, in case GROWL_APP_ICON does - * not apply for some reason. Must be in a format supported by NSImage, such - * as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_APP_ICON XSTR("NotificationAppIcon") -/*! @defined GROWL_NOTIFICATION_PRIORITY - * @discussion The priority of the notification as an integer number from - * -2 to +2 (+2 being highest). - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_PRIORITY XSTR("NotificationPriority") -/*! @defined GROWL_NOTIFICATION_STICKY - * @discussion A Boolean number controlling whether the notification is sticky. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_STICKY XSTR("NotificationSticky") -/*! @defined GROWL_NOTIFICATION_CLICK_CONTEXT - * @abstract Identifies which notification was clicked. - * @discussion An identifier for the notification for clicking purposes. - * - * This will be passed back to the application when the notification is - * clicked. It must be plist-encodable (a data, dictionary, array, number, or - * string object), and it should be unique for each notification you post. - * A good click context would be a UUID string returned by NSProcessInfo or - * CFUUID. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_CLICK_CONTEXT XSTR("NotificationClickContext") - -/*! @defined GROWL_DISPLAY_PLUGIN - * @discussion The name of a display plugin which should be used for this notification. - * Optional. If this key is not set or the specified display plugin does not - * exist, the display plugin stored in the application ticket is used. This key - * allows applications to use different default display plugins for their - * notifications. The user can still override those settings in the preference - * pane. - */ -#define GROWL_DISPLAY_PLUGIN XSTR("NotificationDisplayPlugin") - -/*! @defined GROWL_NOTIFICATION_IDENTIFIER - * @abstract An identifier for the notification for coalescing purposes. - * Notifications with the same identifier fall into the same class; only - * the last notification of a class is displayed on the screen. If a - * notification of the same class is currently being displayed, it is - * replaced by this notification. - * - * Optional. Not supported by all display plugins. - */ -#define GROWL_NOTIFICATION_IDENTIFIER XSTR("GrowlNotificationIdentifier") - -/*! @defined GROWL_APP_PID - * @abstract The process identifier of the process which sends this - * notification. If this field is set, the application will only receive - * clicked and timed out notifications which originate from this process. - * - * Optional. - */ -#define GROWL_APP_PID XSTR("ApplicationPID") - -// Notifications -#pragma mark Notifications - -/*! @group Notification names */ -/* @abstract Names of distributed notifications used by Growl. - * @discussion These are notifications used by applications (directly or - * indirectly) to interact with Growl, and by Growl for interaction between - * its components. - * - * Most of these should no longer be used in Growl 0.6 and later, in favor of - * Growl.framework's GrowlApplicationBridge APIs. - */ - -/*! @defined GROWL_APP_REGISTRATION - * @abstract The distributed notification for registering your application. - * @discussion This is the name of the distributed notification that can be - * used to register applications with Growl. - * - * The userInfo dictionary for this notification can contain these keys: - * <ul> - * <li>GROWL_APP_NAME</li> - * <li>GROWL_APP_ICON</li> - * <li>GROWL_NOTIFICATIONS_ALL</li> - * <li>GROWL_NOTIFICATIONS_DEFAULT</li> - * </ul> - * - * No longer recommended as of Growl 0.6. An alternate method of registering - * is to use Growl.framework's delegate system. - * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for - * more information. - */ -#define GROWL_APP_REGISTRATION XSTR("GrowlApplicationRegistrationNotification") -/*! @defined GROWL_APP_REGISTRATION_CONF - * @abstract The distributed notification for confirming registration. - * @discussion The name of the distributed notification sent to confirm the - * registration. Used by the Growl preference pane. Your application probably - * does not need to use this notification. - */ -#define GROWL_APP_REGISTRATION_CONF XSTR("GrowlApplicationRegistrationConfirmationNotification") -/*! @defined GROWL_NOTIFICATION - * @abstract The distributed notification for Growl notifications. - * @discussion This is what it all comes down to. This is the name of the - * distributed notification that your application posts to actually send a - * Growl notification. - * - * The userInfo dictionary for this notification can contain these keys: - * <ul> - * <li>GROWL_NOTIFICATION_NAME (required)</li> - * <li>GROWL_NOTIFICATION_TITLE (required)</li> - * <li>GROWL_NOTIFICATION_DESCRIPTION (required)</li> - * <li>GROWL_NOTIFICATION_ICON</li> - * <li>GROWL_NOTIFICATION_APP_ICON</li> - * <li>GROWL_NOTIFICATION_PRIORITY</li> - * <li>GROWL_NOTIFICATION_STICKY</li> - * <li>GROWL_NOTIFICATION_CLICK_CONTEXT</li> - * <li>GROWL_APP_NAME (required)</li> - * </ul> - * - * No longer recommended as of Growl 0.6. Three alternate methods of posting - * notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:], - * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and - * Growl_PostNotification. - */ -#define GROWL_NOTIFICATION XSTR("GrowlNotification") -/*! @defined GROWL_SHUTDOWN -* @abstract The distributed notification name that tells Growl to shutdown. -* @discussion The Growl preference pane posts this notification when the -* "Stop Growl" button is clicked. -*/ -#define GROWL_SHUTDOWN XSTR("GrowlShutdown") -/*! @defined GROWL_PING - * @abstract A distributed notification to check whether Growl is running. - * @discussion This is used by the Growl preference pane. If it receives a - * GROWL_PONG, the preference pane takes this to mean that Growl is running. - */ -#define GROWL_PING XSTR("Honey, Mind Taking Out The Trash") -/*! @defined GROWL_PONG - * @abstract The distributed notification sent in reply to GROWL_PING. - * @discussion GrowlHelperApp posts this in reply to GROWL_PING. - */ -#define GROWL_PONG XSTR("What Do You Want From Me, Woman") -/*! @defined GROWL_IS_READY - * @abstract The distributed notification sent when Growl starts up. - * @discussion GrowlHelperApp posts this when it has begin listening on all of - * its sources for new notifications. GrowlApplicationBridge (in - * Growl.framework), upon receiving this notification, reregisters using the - * registration dictionary supplied by its delegate. - */ -#define GROWL_IS_READY XSTR("Lend Me Some Sugar; I Am Your Neighbor!") -/*! @defined GROWL_NOTIFICATION_CLICKED - * @abstract The distributed notification sent when a supported notification is clicked. - * @discussion When a Growl notification with a click context is clicked on by - * the user, Growl posts this distributed notification. - * The GrowlApplicationBridge responds to this notification by calling a - * callback in its delegate. - */ -#define GROWL_NOTIFICATION_CLICKED XSTR("GrowlClicked!") -#define GROWL_NOTIFICATION_TIMED_OUT XSTR("GrowlTimedOut!") - -/*! @group Other symbols */ -/* Symbols which don't fit into any of the other categories. */ - -/*! @defined GROWL_KEY_CLICKED_CONTEXT - * @abstract Used internally as the key for the clickedContext passed over DNC. - * @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the - * click context that was supplied in the original notification. - */ -#define GROWL_KEY_CLICKED_CONTEXT XSTR("ClickedContext") -/*! @defined GROWL_REG_DICT_EXTENSION - * @abstract The filename extension for registration dictionaries. - * @discussion The GrowlApplicationBridge in Growl.framework registers with - * Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION) - * and opening it in the GrowlHelperApp. This happens whether or not Growl is - * running; if it was stopped, it quits immediately without listening for - * notifications. - */ -#define GROWL_REG_DICT_EXTENSION XSTR("growlRegDict") - -#endif //ndef _GROWLDEFINES_H diff --git a/src/uimacnew/Growl.framework/Versions/A/Resources/Info.plist b/src/uimacnew/Growl.framework/Versions/A/Resources/Info.plist deleted file mode 100644 index 2442bea..0000000 --- a/src/uimacnew/Growl.framework/Versions/A/Resources/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleExecutable</key> - <string>Growl</string> - <key>CFBundleIdentifier</key> - <string>com.growl.growlframework</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>0.7.3</string> - <key>CFBundleSignature</key> - <string>GRRR</string> - <key>CFBundleVersion</key> - <string>0.7.3</string> - <key>NSPrincipalClass</key> - <string>GrowlApplicationBridge</string> -</dict> -</plist> diff --git a/src/uimacnew/Growl.framework/Versions/Current b/src/uimacnew/Growl.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/src/uimacnew/Growl.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A
\ No newline at end of file diff --git a/src/uimacnew/ImageAndTextCell.h b/src/uimacnew/ImageAndTextCell.h deleted file mode 100644 index 767e6e5..0000000 --- a/src/uimacnew/ImageAndTextCell.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// ImageAndTextCell.h -// -// Copyright (c) 2001-2002, Apple. All rights reserved. -// - -#import <Cocoa/Cocoa.h> - -@interface ImageAndTextCell : NSTextFieldCell { -@private - NSImage *image; -} - -- (void)setImage:(NSImage *)anImage; -- (NSImage *)image; - -- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView; -- (NSSize)cellSize; - -@end diff --git a/src/uimacnew/ImageAndTextCell.m b/src/uimacnew/ImageAndTextCell.m deleted file mode 100644 index 0b88b00..0000000 --- a/src/uimacnew/ImageAndTextCell.m +++ /dev/null @@ -1,130 +0,0 @@ -/* - ImageAndTextCell.m - Copyright (c) 2001-2004, Apple Computer, Inc., all rights reserved. - Author: Chuck Pisula - - Milestones: - Initially created 3/1/01 - - Subclass of NSTextFieldCell which can display text and an image simultaneously. -*/ - -/* - IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in - consideration of your agreement to the following terms, and your use, installation, - modification or redistribution of this Apple software constitutes acceptance of these - terms. If you do not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and subject to these - terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in - this original Apple software (the "Apple Software"), to use, reproduce, modify and - redistribute the Apple Software, with or without modifications, in source and/or binary - forms; provided that if you redistribute the Apple Software in its entirety and without - modifications, you must retain this notice and the following text and disclaimers in all - such redistributions of the Apple Software. Neither the name, trademarks, service marks - or logos of Apple Computer, Inc. may be used to endorse or promote products derived from - the Apple Software without specific prior written permission from Apple. Except as expressly - stated in this notice, no other rights or licenses, express or implied, are granted by Apple - herein, including but not limited to any patent rights that may be infringed by your - derivative works or by other works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, - EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS - USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, - REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND - WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR - OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#import "ImageAndTextCell.h" - -@implementation ImageAndTextCell - -- (void)dealloc { - [image release]; - image = nil; - [super dealloc]; -} - -- copyWithZone:(NSZone *)zone { - ImageAndTextCell *cell = (ImageAndTextCell *)[super copyWithZone:zone]; - cell->image = [image retain]; - return cell; -} - -- (void)setImage:(NSImage *)anImage { - if (anImage != image) { - [image release]; - image = [anImage retain]; - } -} - -- (NSImage *)image { - return image; -} - -- (NSRect)imageFrameForCellFrame:(NSRect)cellFrame { - if (image != nil) { - NSRect imageFrame; - imageFrame.size = [image size]; - imageFrame.origin = cellFrame.origin; - imageFrame.origin.x += 3; - imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2); - return imageFrame; - } - else - return NSZeroRect; -} - -- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent { - NSRect textFrame, imageFrame; - NSDivideRect (aRect, &imageFrame, &textFrame, 3 + [image size].width, NSMinXEdge); - [super editWithFrame: textFrame inView: controlView editor:textObj delegate:anObject event: theEvent]; -} - -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 -typedef int NSInteger; -#endif -- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(NSInteger)selStart length:(NSInteger)selLength { - NSRect textFrame, imageFrame; - NSDivideRect (aRect, &imageFrame, &textFrame, 3 + [image size].width, NSMinXEdge); - [super selectWithFrame: textFrame inView: controlView editor:textObj delegate:anObject start:selStart length:selLength]; -} - -- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { - if (image != nil) { - NSSize imageSize; - NSRect imageFrame; - - imageSize = [image size]; - NSDivideRect(cellFrame, &imageFrame, &cellFrame, 3 + imageSize.width, NSMinXEdge); - if ([self drawsBackground]) { - [[self backgroundColor] set]; - NSRectFill(imageFrame); - } - imageFrame.origin.x += 3; - imageFrame.size = imageSize; - - if ([controlView isFlipped]) - imageFrame.origin.y += ceil((cellFrame.size.height + imageFrame.size.height) / 2); - else - imageFrame.origin.y += ceil((cellFrame.size.height - imageFrame.size.height) / 2); - - [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver]; - } - [super drawWithFrame:cellFrame inView:controlView]; -} - -- (NSSize)cellSize { - NSSize cellSize = [super cellSize]; - cellSize.width += (image ? [image size].width : 0) + 3; - return cellSize; -} - -@end diff --git a/src/uimacnew/Info.plist b/src/uimacnew/Info.plist deleted file mode 100644 index 0876dd0..0000000 --- a/src/uimacnew/Info.plist +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleName</key> - <string>Unison</string> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleExecutable</key> - <string>Unison</string> - <key>CFBundleIconFile</key> - <string>Unison.icns</string> - <key>CFBundleIdentifier</key> - <string>edu.upenn.cis.Unison</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleShortVersionString</key> - <string>$(MARKETING_VERSION)</string> - <key>CFBundleGetInfoString</key> - <string>${MARKETING_VERSION}, ©1999-2007, licensed under GNU GPL.</string> - <key>NSHumanReadableCopyright</key> - <string>©1999-2010, licensed under GNU GPL v3.</string> - <key>NSMainNibFile</key> - <string>MainMenu</string> - <key>NSPrincipalClass</key> - <string>NSApplication</string> -</dict> -</plist> diff --git a/src/uimacnew/Info.plist.template b/src/uimacnew/Info.plist.template deleted file mode 100644 index 2de3eff..0000000 --- a/src/uimacnew/Info.plist.template +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleName</key> - <string>Unison</string> - <key>CFBundleDevelopmentRegion</key> - <string>English</string> - <key>CFBundleExecutable</key> - <string>Unison</string> - <key>CFBundleIconFile</key> - <string>Unison.icns</string> - <key>CFBundleIdentifier</key> - <string>edu.upenn.cis.Unison</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundlePackageType</key> - <string>APPL</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>@@VERSION@@</string> - <key>CFBundleShortVersionString</key> - <string>@@VERSION@@</string> - <key>CFBundleGetInfoString</key> - <string>@@VERSION@@. ©1999-2014, licensed under GNU GPL.</string> - <key>NSHumanReadableCopyright</key> - <string>©1999-2014, licensed under GNU GPL.</string> - <key>NSMainNibFile</key> - <string>MainMenu</string> - <key>NSPrincipalClass</key> - <string>NSApplication</string> -</dict> -</plist> diff --git a/src/uimacnew/MyController.h b/src/uimacnew/MyController.h deleted file mode 100644 index 0e21fe8..0000000 --- a/src/uimacnew/MyController.h +++ /dev/null @@ -1,111 +0,0 @@ -/* MyController */ -/* Copyright (c) 2003, see file COPYING for details. */ - -#import <Cocoa/Cocoa.h> - -@class ProfileController, PreferencesController, NotificationController, - ReconItem, ParentReconItem, ReconTableView, UnisonToolbar, OCamlValue; - -@interface MyController : NSObject -{ - IBOutlet NSWindow *mainWindow; - UnisonToolbar *toolbar; - - IBOutlet NSWindow *cltoolWindow; - IBOutlet NSButton *cltoolPref; - - IBOutlet ProfileController *profileController; - IBOutlet NSView *chooseProfileView; - NSString *myProfile; - - IBOutlet PreferencesController *preferencesController; - IBOutlet NSView *preferencesView; - - IBOutlet NSView *updatesView; - IBOutlet NSView *ConnectingView; - - NSView *blankView; - - IBOutlet ReconTableView *tableView; - IBOutlet NSTextField *updatesText; - IBOutlet NSTextView *detailsTextView; - IBOutlet NSTextField *statusText; - - IBOutlet NSWindow *passwordWindow; - IBOutlet NSTextField *passwordPrompt; - IBOutlet NSTextField *passwordText; - IBOutlet NSButton *passwordCancelButton; - BOOL waitingForPassword; - - IBOutlet NSWindow *aboutWindow; - IBOutlet NSTextField *versionText; - - IBOutlet NSProgressIndicator *progressBar; - - IBOutlet NotificationController *notificationController; - - BOOL syncable; - BOOL duringSync; - BOOL afterSync; - - NSMutableArray *reconItems; - ParentReconItem *rootItem; - OCamlValue *preconn; - - BOOL doneFirstDiff; - IBOutlet NSWindow *diffWindow; - IBOutlet NSTextView *diffView; - IBOutlet NSSegmentedControl *tableModeSelector; -} - -- (id)init; -- (void)awakeFromNib; - -- (void)chooseProfiles; -- (IBAction)createButton:(id)sender; -- (IBAction)saveProfileButton:(id)sender; -- (IBAction)cancelProfileButton:(id)sender; -- (NSString *)profile; -- (void)profileSelected:(NSString *)aProfile; - -- (IBAction)restartButton:(id)sender; -- (IBAction)rescan:(id)sender; - -- (IBAction)openButton:(id)sender; -- (void)connect:(NSString *)profileName; -- (void)raisePasswordWindow:(NSString *)prompt; -- (void)controlTextDidEndEditing:(NSNotification *)notification; -- (IBAction)endPasswordWindow:(id)sender; -- (void)afterOpen; - -- (IBAction)syncButton:(id)sender; -- (IBAction)tableModeChanged:(id)sender; -- (void)initTableMode; - -- (NSMutableArray *)reconItems; -- (void)updateForChangedItems; -- (void)updateReconItems:(OCamlValue *)items; -- (id)updateForIgnore:(id)i; - -- (void)statusTextSet:(NSString *)s; -- (void)diffViewTextSet:(NSString *)title bodyText:(NSString *)body; -- (void)displayDetails:(ReconItem *)item; -- (void)clearDetails; - -- (IBAction)raiseCltoolWindow:(id)sender; -- (IBAction)cltoolYesButton:(id)sender; -- (IBAction)cltoolNoButton:(id)sender; - -- (IBAction)raiseAboutWindow:(id)sender; -- (IBAction)raiseWindow:(NSWindow *)theWindow; -- (IBAction)onlineHelp:(id)sender; -- (IBAction)installCommandLineTool:(id)sender; - -- (BOOL)validateItem:(IBAction *) action; -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem; -- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem; - -- (void)resizeWindowToSize:(NSSize)newSize; -- (float)toolbarHeightForWindow:(NSWindow *)window; - -@end diff --git a/src/uimacnew/MyController.m b/src/uimacnew/MyController.m deleted file mode 100644 index a966c93..0000000 --- a/src/uimacnew/MyController.m +++ /dev/null @@ -1,1045 +0,0 @@ -/* Copyright (c) 2003, see file COPYING for details. */ - -#import "MyController.h" -#import "ProfileController.h" -#import "PreferencesController.h" -#import "NotificationController.h" -#import "ReconItem.h" -#import "ReconTableView.h" -#import "UnisonToolbar.h" -#import "ImageAndTextCell.h" -#import "ProgressCell.h" -#import "Bridge.h" - -/* The following two define are a workaround for an incompatibility between - Ocaml 3.11.2 (and older) and the Mac OS X header files */ -#define uint64 uint64_caml -#define int64 int64_caml - -#define CAML_NAME_SPACE -#include <caml/callback.h> -#include <caml/alloc.h> -#include <caml/mlvalues.h> -#include <caml/memory.h> - -@interface NSString (_UnisonUtil) -- (NSString *)trim; -@end - -@implementation MyController - -static MyController *me; // needed by reloadTable and displayStatus, below - -static int unset = 0; -static int dontAsk = 1; -static int doAsk = 2; - -// BCP (11/09): Added per Onne Gorter: -// if user closes main window, terminate app, instead of keeping an empty app around with no window -- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { - return YES; -} - -- (id)init -{ - if (([super init])) { - - /* Initialize locals */ - me = self; - doneFirstDiff = NO; - - /* By default, invite user to install cltool */ - int pref = [[NSUserDefaults standardUserDefaults] - integerForKey:@"CheckCltool"]; - if (pref==unset) - [[NSUserDefaults standardUserDefaults] - setInteger:doAsk forKey:@"CheckCltool"]; - } - - return self; -} - -- (void)awakeFromNib -{ - // Window positioning - NSRect screenFrame = [[mainWindow screen] visibleFrame]; - [mainWindow cascadeTopLeftFromPoint: - NSMakePoint(screenFrame.origin.x, - screenFrame.origin.y+screenFrame.size.height)]; - - blankView = [[NSView alloc] init]; - - /* Double clicking in the profile list will open the profile */ - [[profileController tableView] setTarget:self]; - [[profileController tableView] setDoubleAction:@selector(openButton:)]; - - [tableView setAutoresizesOutlineColumn:NO]; - - // use combo-cell for path - [[tableView tableColumnWithIdentifier:@"path"] setDataCell:[[[ImageAndTextCell alloc] init] autorelease]]; - - // Custom progress cell - ProgressCell *progressCell = [[[ProgressCell alloc] init] autorelease]; - [[tableView tableColumnWithIdentifier:@"percentTransferred"] setDataCell:progressCell]; - - /* Set up the version string in the about box. We use a custom - about box just because PRCS doesn't seem capable of getting the - version into the InfoPlist.strings file; otherwise we'd use the - standard about box. */ - [versionText setStringValue:ocamlCall("S", "unisonGetVersion")]; - - /* Command-line processing */ - OCamlValue *clprofile = (id)ocamlCall("@", "unisonInit0"); - - /* Add toolbar */ - toolbar = [[[UnisonToolbar alloc] - initWithIdentifier: @"unisonToolbar" :self :tableView] autorelease]; - [mainWindow setToolbar: toolbar]; - [toolbar takeTableModeView:tableModeSelector]; - [self initTableMode]; - - - /* Set up the first window the user will see */ - if (clprofile) { - /* A profile name was given on the command line */ - NSString *profileName = [clprofile getField:0 withType:'S']; - [self profileSelected:profileName]; - - /* If invoked from terminal we need to bring the app to the front */ - [NSApp activateIgnoringOtherApps:YES]; - - /* Start the connection */ - [self connect:profileName]; - } - else { - /* If invoked from terminal we need to bring the app to the front */ - [NSApp activateIgnoringOtherApps:YES]; - /* Bring up the dialog to choose a profile */ - [self chooseProfiles]; - } - - [mainWindow display]; - [mainWindow makeKeyAndOrderFront:nil]; - - /* unless user has clicked Don't ask me again, ask about cltool */ - if ( ([[NSUserDefaults standardUserDefaults] - integerForKey:@"CheckCltool"]==doAsk) && - (![[NSFileManager defaultManager] - fileExistsAtPath:@"/usr/bin/unison"]) ) - [self raiseCltoolWindow:nil]; -} - -- (void)chooseProfiles -{ - [mainWindow setContentView:blankView]; - [self resizeWindowToSize:[chooseProfileView frame].size]; - [mainWindow setContentMinSize: - NSMakeSize(NSWidth([[mainWindow contentView] frame]),150)]; - [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; - [mainWindow setContentView:chooseProfileView]; - [toolbar setView:@"chooseProfileView"]; - [mainWindow setTitle:@"Unison"]; - - // profiles get keyboard input - [mainWindow makeFirstResponder:[profileController tableView]]; - [chooseProfileView display]; -} - -- (IBAction)createButton:(id)sender -{ - [preferencesController reset]; - [mainWindow setContentView:blankView]; - [self resizeWindowToSize:[preferencesView frame].size]; - [mainWindow setContentMinSize: - NSMakeSize(400,NSHeight([[mainWindow contentView] frame]))]; - [mainWindow setContentMaxSize: - NSMakeSize(FLT_MAX,NSHeight([[mainWindow contentView] frame]))]; - [mainWindow setContentView:preferencesView]; - [toolbar setView:@"preferencesView"]; -} - -- (IBAction)saveProfileButton:(id)sender -{ - if ([preferencesController validatePrefs]) { - // so the list contains the new profile - [profileController initProfiles]; - [self chooseProfiles]; - } -} - -- (IBAction)cancelProfileButton:(id)sender -{ - [self chooseProfiles]; -} - -/* Only valid once a profile has been selected */ -- (NSString *)profile { - return myProfile; -} - -- (void)profileSelected:(NSString *)aProfile -{ - [aProfile retain]; - [myProfile release]; - myProfile = aProfile; - [mainWindow setTitle: [NSString stringWithFormat:@"Unison: %@", myProfile]]; -} - -- (IBAction)restartButton:(id)sender -{ - [tableView setEditable:NO]; - [self chooseProfiles]; -} - -- (IBAction)rescan:(id)sender -{ - /* There is a delay between turning off the button and it - actually being disabled. Make sure we don't respond. */ - if ([self validateItem:@selector(rescan:)]) { - waitingForPassword = NO; - [self afterOpen]; - } -} - -- (IBAction)openButton:(id)sender -{ - NSString *profile = [profileController selected]; - [self profileSelected:profile]; - [self connect:profile]; - return; -} - -- (void)updateToolbar -{ - [toolbar validateVisibleItems]; - [tableModeSelector setEnabled:((syncable && !duringSync) || afterSync)]; - - // Why? - [updatesView setNeedsDisplay:YES]; -} - -- (void)updateTableViewWithReset:(BOOL)shouldResetSelection -{ - [tableView reloadData]; - if (shouldResetSelection) { - [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO]; - shouldResetSelection = NO; - } - [updatesView setNeedsDisplay:YES]; -} - -- (void)updateProgressBar:(NSNumber *)newProgress -{ - // NSLog(@"Updating progress bar: %i - %i", (int)[newProgress doubleValue], (int)[progressBar doubleValue]); - [progressBar incrementBy:([newProgress doubleValue] - [progressBar doubleValue])]; -} - -- (void)updateTableViewSelection -{ - int n = [tableView numberOfSelectedRows]; - if (n == 1) [self displayDetails:[tableView itemAtRow:[tableView selectedRow]]]; - else [self clearDetails]; -} - -- (void)outlineViewSelectionDidChange:(NSNotification *)note -{ - [self updateTableViewSelection]; -} - -- (void)connect:(NSString *)profileName -{ - // contact server, propagate prefs - NSLog(@"Connecting to %@...", profileName); - - // Switch to ConnectingView - [mainWindow setContentView:blankView]; - [self resizeWindowToSize:[updatesView frame].size]; - [mainWindow setContentMinSize:NSMakeSize(150,150)]; - [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; - [mainWindow setContentView:ConnectingView]; - [toolbar setView:@"connectingView"]; - - // Update (almost) immediately - [ConnectingView display]; - - syncable = NO; - afterSync = NO; - - [self updateToolbar]; - - // will spawn thread on OCaml side and callback when complete - (void)ocamlCall("xS", "unisonInit1", profileName); -} - -CAMLprim value unisonInit1Complete(value v) -{ - id pool = [[NSAutoreleasePool alloc] init]; - if (v == Val_unit) { - NSLog(@"Connected."); - [me->preconn release]; - me->preconn = NULL; - [me performSelectorOnMainThread:@selector(afterOpen:) withObject:nil waitUntilDone:FALSE]; - } else { - // prompting required - me->preconn = [[OCamlValue alloc] initWithValue:Field(v,0)]; // value of Some - [me performSelectorOnMainThread:@selector(unisonInit1Complete:) withObject:nil waitUntilDone:FALSE]; - } - [pool release]; - return Val_unit; -} - -- (void)unisonInit1Complete:(id)ignore -{ - @try { - OCamlValue *prompt = ocamlCall("@@", "openConnectionPrompt", preconn); - if (!prompt) { - // turns out, no prompt needed, but must finish opening connection - ocamlCall("x@", "openConnectionEnd", preconn); - NSLog(@"Connected."); - waitingForPassword = NO; - [self afterOpen]; - return; - } - waitingForPassword = YES; - - [self raisePasswordWindow:[prompt getField:0 withType:'S']]; - } @catch (NSException *ex) { - NSRunAlertPanel(@"Connection Error", [ex description], @"OK", nil, nil); - [self chooseProfiles]; - return; - } - - NSLog(@"Connected."); -} - -- (void)raisePasswordWindow:(NSString *)prompt -{ - // FIX: some prompts don't ask for password, need to look at it - NSLog(@"Got the prompt: '%@'",prompt); - if ((long)ocamlCall("iS", "unisonPasswordMsg", prompt)) { - [passwordPrompt setStringValue:@"Please enter your password"]; - [NSApp beginSheet:passwordWindow - modalForWindow:mainWindow - modalDelegate:nil - didEndSelector:nil - contextInfo:nil]; - return; - } - if ((long)ocamlCall("iS", "unisonPassphraseMsg", prompt)) { - [passwordPrompt setStringValue:@"Please enter your passphrase"]; - [NSApp beginSheet:passwordWindow - modalForWindow:mainWindow - modalDelegate:nil - didEndSelector:nil - contextInfo:nil]; - return; - } - if ((long)ocamlCall("iS", "unisonAuthenticityMsg", prompt)) { - int i = NSRunAlertPanel(@"New host",prompt,@"Yes",@"No",nil); - if (i == NSAlertDefaultReturn) { - ocamlCall("x@s", "openConnectionReply", preconn, "yes"); - prompt = ocamlCall("S@", "openConnectionPrompt", preconn); - if (!prompt) { - // all done with prompts, finish opening connection - ocamlCall("x@", "openConnectionEnd", preconn); - waitingForPassword = NO; - [self afterOpen]; - return; - } - else { - [self raisePasswordWindow:[NSString - stringWithUTF8String:String_val(Field(prompt,0))]]; - return; - } - } - if (i == NSAlertAlternateReturn) { - ocamlCall("x@", "openConnectionCancel", preconn); - return; - } - else { - NSLog(@"Unrecognized response '%d' from NSRunAlertPanel",i); - ocamlCall("x@", "openConnectionCancel", preconn); - return; - } - } - NSLog(@"Unrecognized message from ssh: %@",prompt); - ocamlCall("x@", "openConnectionCancel", preconn); -} - -// The password window will invoke this when Enter occurs, b/c we -// are the delegate. -- (void)controlTextDidEndEditing:(NSNotification *)notification -{ - NSNumber *reason = [[notification userInfo] objectForKey:@"NSTextMovement"]; - int code = [reason intValue]; - if (code == NSReturnTextMovement) - [self endPasswordWindow:self]; -} -// Or, the Continue button will invoke this when clicked -- (IBAction)endPasswordWindow:(id)sender -{ - [passwordWindow orderOut:self]; - [NSApp endSheet:passwordWindow]; - if ([sender isEqualTo:passwordCancelButton]) { - ocamlCall("x@", "openConnectionCancel", preconn); - [self chooseProfiles]; - return; - } - NSString *password = [passwordText stringValue]; - ocamlCall("x@S", "openConnectionReply", preconn, password); - - OCamlValue *prompt = ocamlCall("@@", "openConnectionPrompt", preconn); - if (!prompt) { - // all done with prompts, finish opening connection - ocamlCall("x@", "openConnectionEnd", preconn); - waitingForPassword = NO; - [self afterOpen]; - } - else { - [self raisePasswordWindow:[prompt getField:0 withType:'S']]; - } -} - -- (void)afterOpen:(id)ignore -{ - [self afterOpen]; -} - -- (void)afterOpen -{ - if (waitingForPassword) return; - // move to updates window after clearing it - [self updateReconItems:nil]; - [progressBar setDoubleValue:0.0]; - [progressBar stopAnimation:self]; - // [self clearDetails]; - [mainWindow setContentView:blankView]; - [self resizeWindowToSize:[updatesView frame].size]; - [mainWindow setContentMinSize: - NSMakeSize(NSWidth([[mainWindow contentView] frame]),200)]; - [mainWindow setContentMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; - [mainWindow setContentView:updatesView]; - [toolbar setView:@"updatesView"]; - - syncable = NO; - afterSync = NO; - - [tableView deselectAll:self]; - [self updateToolbar]; - [self updateProgressBar:[NSNumber numberWithDouble:0.0]]; - - // this should depend on the number of reconitems, and is now done - // in updateReconItems: - // reconItems table gets keyboard input - //[mainWindow makeFirstResponder:tableView]; - [tableView scrollRowToVisible:0]; - - [preconn release]; - preconn = nil; // so old preconn can be garbage collected - // This will run in another thread spawned in OCaml and will return immediately - // We'll get a call back to unisonInit2Complete() when it is complete - ocamlCall("x", "unisonInit2"); -} - - -- (void)afterUpdate:(id)retainedReconItems -{ - // NSLog(@"In afterUpdate:..."); - [self updateReconItems:retainedReconItems]; - [retainedReconItems release]; - - [notificationController updateFinishedFor:[self profile]]; - - // label the left and right columns with the roots - NSString *leftHost = [(NSString *)ocamlCall("S", "unisonFirstRootString") trim]; - NSString *rightHost = [(NSString *)ocamlCall("S", "unisonSecondRootString") trim]; - /* - [[[tableView tableColumnWithIdentifier:@"left"] headerCell] setObjectValue:lefthost]; - [[[tableView tableColumnWithIdentifier:@"right"] headerCell] setObjectValue:rightHost]; - */ - [mainWindow setTitle: [NSString stringWithFormat:@"Unison: %@ (%@ <-> %@)", - [self profile], leftHost, rightHost]]; - - // initial sort - [tableView setSortDescriptors:[NSArray arrayWithObjects: - [[tableView tableColumnWithIdentifier:@"fileSizeString"] sortDescriptorPrototype], - [[tableView tableColumnWithIdentifier:@"path"] sortDescriptorPrototype], - nil]]; - - [self updateTableViewWithReset:([reconItems count] > 0)]; - [self updateToolbar]; -} - -CAMLprim value unisonInit2Complete(value v) -{ - id pool = [[NSAutoreleasePool alloc] init]; - [me performSelectorOnMainThread:@selector(afterUpdate:) withObject:[[OCamlValue alloc] initWithValue:v] waitUntilDone:FALSE]; - [pool release]; - return Val_unit; -} - -- (IBAction)syncButton:(id)sender -{ - [tableView setEditable:NO]; - syncable = NO; - duringSync = YES; - - [self updateToolbar]; - - // This will run in another thread spawned in OCaml and will return immediately - // We'll get a call back to syncComplete() when it is complete - ocamlCall("x", "unisonSynchronize"); -} - -- (void)afterSync:(id)ignore -{ - [notificationController syncFinishedFor:[self profile]]; - duringSync = NO; - afterSync = YES; - [self updateToolbar]; - - int i; - for (i = 0; i < [reconItems count]; i++) { - [[reconItems objectAtIndex:i] resetProgress]; - } - - [self updateTableViewSelection]; - - [self updateTableViewWithReset:FALSE]; -} - -CAMLprim value syncComplete() -{ - id pool = [[NSAutoreleasePool alloc] init]; - [me performSelectorOnMainThread:@selector(afterSync:) withObject:nil waitUntilDone:FALSE]; - [pool release]; - return Val_unit; -} - -// A function called from ocaml -- (void)reloadTable:(NSNumber *)i -{ - // NSLog(@"*** ReloadTable: %i", [i intValue]); - - [[reconItems objectAtIndex:[i intValue]] resetProgress]; - [self updateTableViewWithReset:FALSE]; -} - -CAMLprim value reloadTable(value row) -{ - id pool = [[NSAutoreleasePool alloc] init]; - // NSLog(@"OCaml says... ReloadTable: %i", Int_val(row)); - NSNumber *num = [[NSNumber alloc] initWithInt:Int_val(row)]; - [me performSelectorOnMainThread:@selector(reloadTable:) withObject:num waitUntilDone:FALSE]; - [num release]; - [pool release]; - return Val_unit; -} - -- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item { - if (item == nil) item = rootItem; - return [[item children] count]; -} - -- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item { - return [item isKindOfClass:[ParentReconItem class]]; -} - -- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item { - if (item == nil) item = rootItem; - return [[item children] objectAtIndex:index]; -} - -- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { - NSString *identifier = [tableColumn identifier]; - if (item == nil) item = rootItem; - - if ([identifier isEqualToString:@"percentTransferred"] && (!duringSync && !afterSync)) return nil; - - return [item valueForKey:identifier]; -} - -static NSDictionary *_SmallGreyAttributes = nil; - -- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { - NSString *identifier = [tableColumn identifier]; - if ([identifier isEqualToString:@"path"]) { - // The file icon - [(ImageAndTextCell*)cell setImage:[item fileIcon]]; - - // For parents, format the file count into the text - long fileCount = [item fileCount]; - if (fileCount > 1) { - NSString *countString = [NSString stringWithFormat:@" (%ld files)", fileCount]; - NSString *fullString = [(NSString *)[cell objectValue] stringByAppendingString:countString]; - NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:fullString]; - - if (!_SmallGreyAttributes) { - NSColor *txtColor = [NSColor grayColor]; - NSFont *txtFont = [NSFont systemFontOfSize:9.0]; - _SmallGreyAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:txtFont, - NSFontAttributeName, txtColor, NSForegroundColorAttributeName, nil] retain]; - } - [as setAttributes:_SmallGreyAttributes range:NSMakeRange([fullString length] - [countString length], [countString length])]; - [cell setAttributedStringValue:as]; - [as release]; - } - } else if ([identifier isEqualToString:@"percentTransferred"]) { - [(ProgressCell*)cell setIcon:[item direction]]; - [(ProgressCell*)cell setStatusString:[item progressString]]; - [(ProgressCell*)cell setIsActive:[item isKindOfClass:[LeafReconItem class]]]; - } -} - -- (void)outlineView:(NSOutlineView *)outlineView - sortDescriptorsDidChange:(NSArray *)oldDescriptors { - NSArray *originalSelection = [outlineView selectedObjects]; - - // do we want to catch case of object changes to allow resort in same direction for progress / direction? - // Could check if our objects change and if the first item at the head of new and old were the same - [rootItem sortUsingDescriptors:[outlineView sortDescriptors]]; - [outlineView reloadData]; - [outlineView setSelectedObjects:originalSelection]; -} - -// Delegate methods - -- (BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item { - return NO; -} - -- (NSMutableArray *)reconItems // used in ReconTableView only -{ - return reconItems; -} - -- (int)tableMode -{ - return [tableModeSelector selectedSegment]; -} - -- (IBAction)tableModeChanged:(id)sender -{ - [[NSUserDefaults standardUserDefaults] setInteger:[self tableMode]+1 forKey:@"TableLayout"]; - [self updateForChangedItems]; -} - -- (void)initTableMode -{ - int mode = [[NSUserDefaults standardUserDefaults] integerForKey:@"TableLayout"] - 1; - if (mode == -1) mode = 1; - [tableModeSelector setSelectedSegment:mode]; -} - -- (void)updateReconItems:(OCamlValue *)caml_reconItems -{ - [reconItems release]; - reconItems = [[NSMutableArray alloc] init]; - long i, n =[caml_reconItems count]; - for (i=0; i<n; i++) { - LeafReconItem *item = [[LeafReconItem alloc] initWithRiAndIndex:(id)[caml_reconItems getField:i withType:'@'] index:i]; - [reconItems addObject:item]; - [item release]; - } - [self updateForChangedItems]; -} - -- (void)expandConflictedParent:(ParentReconItem *)parent -{ - if ([parent hasConflictedChildren]) { - // NSLog(@"Expanding conflictedParent: %@", [parent fullPath]); - [tableView expandItem:parent expandChildren:NO]; - NSArray *children = [parent children]; - int i = 0, count = [children count]; - for (;i < count; i++) { - id child = [children objectAtIndex:i]; - if ([child isKindOfClass:[ParentReconItem class]]) [self expandConflictedParent:child]; - } - } -} - -- (void)updateForChangedItems -{ - int tableMode = [self tableMode]; - - [rootItem release]; - ParentReconItem *root = rootItem = [[ParentReconItem alloc] init]; - - if (tableMode != 0 && [reconItems count]) { - // Special roll-up root item for outline displays - root = [[ParentReconItem alloc] init]; - [rootItem addChild:root nested:NO]; - [root setPath:@"All Changes..."]; - [root setFullPath:@""]; - [root release]; - } - - int j = 0, n =[reconItems count]; - for (; j<n; j++) { - [root addChild:[reconItems objectAtIndex:j] nested:(tableMode != 0)]; - } - - if (tableMode == 1) [root collapseParentsWithSingleChildren:YES]; - - [tableView reloadData]; - - if (NO) { - // Pre-expand entire tree - int i = [[rootItem children] count]; - while (i--) { - [tableView expandItem:[[rootItem children] objectAtIndex:i] expandChildren:YES]; - } - } else if (tableMode != 0) { - // Always open root node - [tableView expandItem:rootItem expandChildren:NO]; - - // then smart expand to reveal conflicts / changes in direction - [self expandConflictedParent:root]; - - // then open more levels if we can do so without causing scrolling - [tableView expandChildrenIfSpace]; - } - - // Make sure details get updated (or cleared) - [self updateTableViewSelection]; - - // Only enable sync if there are reconitems - if ([reconItems count]>0) { - [tableView setEditable:YES]; - - // reconItems table gets keyboard input - [mainWindow makeFirstResponder:tableView]; - - syncable = YES; - } - else { - [tableView setEditable:NO]; - afterSync = YES; // rescan should be enabled - - // reconItems table no longer gets keyboard input - [mainWindow makeFirstResponder:nil]; - } - [self updateToolbar]; -} - -- (id)updateForIgnore:(id)item -{ - long j = (long)ocamlCall("ii", "unisonUpdateForIgnore", [reconItems indexOfObjectIdenticalTo:item]); - NSLog(@"Updating for ignore..."); - [self updateReconItems:(OCamlValue *)ocamlCall("@", "unisonState")]; - return [reconItems objectAtIndex:j]; -} - -// A function called from ocaml -CAMLprim value displayStatus(value s) -{ - id pool = [[NSAutoreleasePool alloc] init]; - NSString *str = [[NSString alloc] initWithUTF8String:String_val(s)]; - // NSLog(@"displayStatus: %@", str); - [me performSelectorOnMainThread:@selector(statusTextSet:) withObject:str waitUntilDone:FALSE]; - [str release]; - [pool release]; - return Val_unit; -} - -- (void)statusTextSet:(NSString *)s { - /* filter out strings with # reconitems, and empty strings */ - if (!NSEqualRanges([s rangeOfString:@"reconitems"], - NSMakeRange(NSNotFound,0))) return; - [statusText setStringValue:s]; -} - -// Called from ocaml to dislpay progress bar -CAMLprim value displayGlobalProgress(value p) -{ - id pool = [[NSAutoreleasePool alloc] init]; - NSNumber *num = [[NSNumber alloc] initWithDouble:Double_val(p)]; - [me performSelectorOnMainThread:@selector(updateProgressBar:) - withObject:num waitUntilDone:FALSE]; - [num release]; - [pool release]; - return Val_unit; -} - -// Called from ocaml to display diff -CAMLprim value displayDiff(value s, value s2) -{ - id pool = [[NSAutoreleasePool alloc] init]; - [me performSelectorOnMainThread:@selector(diffViewTextSet:) - withObject:[NSArray arrayWithObjects:[NSString stringWithUTF8String:String_val(s)], - [NSString stringWithUTF8String:String_val(s2)], nil] - waitUntilDone:FALSE]; - [pool release]; - return Val_unit; -} - -// Called from ocaml to display diff error messages -CAMLprim value displayDiffErr(value s) -{ - id pool = [[NSAutoreleasePool alloc] init]; - NSString * str = [NSString stringWithUTF8String:String_val(s)]; - str = [[str componentsSeparatedByString:@"\n"] componentsJoinedByString:@" "]; - [me->statusText performSelectorOnMainThread:@selector(setStringValue:) - withObject:str waitUntilDone:FALSE]; - [pool release]; - return Val_unit; -} - -- (void)diffViewTextSet:(NSArray *)args -{ - [self diffViewTextSet:[args objectAtIndex:0] bodyText:[args objectAtIndex:1]]; -} - -- (void)diffViewTextSet:(NSString *)title bodyText:(NSString *)body { - if ([body length]==0) return; - [diffWindow setTitle:title]; - [diffView setFont:[NSFont fontWithName:@"Monaco" size:10]]; - [diffView setString:body]; - if (!doneFirstDiff) { - /* On first open, position the diff window to the right of - the main window, but without going off the mainwindow's screen */ - float screenOriginX = [[mainWindow screen] visibleFrame].origin.x; - float screenWidth = [[mainWindow screen] visibleFrame].size.width; - float mainOriginX = [mainWindow frame].origin.x; - float mainOriginY = [mainWindow frame].origin.y; - float mainWidth = [mainWindow frame].size.width; - float mainHeight = [mainWindow frame].size.height; - float diffWidth = [diffWindow frame].size.width; - - float diffX = mainOriginX+mainWidth; - float maxX = screenOriginX+screenWidth-diffWidth; - if (diffX > maxX) diffX = maxX; - float diffY = mainOriginY + mainHeight; - - NSPoint diffOrigin = NSMakePoint(diffX,diffY); - [diffWindow cascadeTopLeftFromPoint:diffOrigin]; - - doneFirstDiff = YES; - } - [diffWindow orderFront:nil]; -} - -- (void)displayDetails:(ReconItem *)item -{ - [detailsTextView setFont:[NSFont fontWithName:@"Monaco" size:10]]; - NSString *text = [item details]; - if (!text) text = @""; - [detailsTextView setString:text]; -} - -- (void)clearDetails -{ - [detailsTextView setString:@""]; -} - -- (IBAction)raiseCltoolWindow:(id)sender -{ - int pref = [[NSUserDefaults standardUserDefaults] - integerForKey:@"CheckCltool"]; - if (pref==doAsk) - [cltoolPref setState:NSOffState]; - else - [cltoolPref setState:NSOnState]; - - [self raiseWindow: cltoolWindow]; -} - -- (IBAction)cltoolYesButton:(id)sender; -{ - if ([cltoolPref state]==NSOnState) - [[NSUserDefaults standardUserDefaults] - setInteger:dontAsk forKey:@"CheckCltool"]; - else - [[NSUserDefaults standardUserDefaults] - setInteger:doAsk forKey:@"CheckCltool"]; - - [self installCommandLineTool:self]; - [cltoolWindow close]; -} - -- (IBAction)cltoolNoButton:(id)sender; -{ - if ([cltoolPref state]==NSOnState) - [[NSUserDefaults standardUserDefaults] - setInteger:dontAsk forKey:@"CheckCltool"]; - else - [[NSUserDefaults standardUserDefaults] - setInteger:doAsk forKey:@"CheckCltool"]; - - [cltoolWindow close]; -} - -- (IBAction)raiseAboutWindow:(id)sender -{ - [self raiseWindow: aboutWindow]; -} - -- (void)raiseWindow:(NSWindow *)theWindow -{ - NSRect screenFrame = [[mainWindow screen] visibleFrame]; - NSRect mainWindowFrame = [mainWindow frame]; - NSRect theWindowFrame = [theWindow frame]; - - float winX = mainWindowFrame.origin.x + - (mainWindowFrame.size.width - theWindowFrame.size.width)/2; - float winY = mainWindowFrame.origin.y + - (mainWindowFrame.size.height + theWindowFrame.size.height)/2; - - if (winX<screenFrame.origin.x) winX=screenFrame.origin.x; - float maxX = screenFrame.origin.x+screenFrame.size.width- - theWindowFrame.size.width; - if (winX>maxX) winX=maxX; - float minY = screenFrame.origin.y+theWindowFrame.size.height; - if (winY<minY) winY=minY; - float maxY = screenFrame.origin.y+screenFrame.size.height; - if (winY>maxY) winY=maxY; - - [theWindow cascadeTopLeftFromPoint: - NSMakePoint(winX,winY)]; - - [theWindow makeKeyAndOrderFront:nil]; -} - -- (IBAction)onlineHelp:(id)sender -{ - [[NSWorkspace sharedWorkspace] - openURL:[NSURL URLWithString:@"http://www.cis.upenn.edu/~bcpierce/unison/docs.html"]]; -} - -/* from http://developer.apple.com/documentation/Security/Conceptual/authorization_concepts/index.html */ -#include <Security/Authorization.h> -#include <Security/AuthorizationTags.h> -- (IBAction)installCommandLineTool:(id)sender -{ - /* Install the command-line tool in /usr/bin/unison. - Requires root privilege, so we ask for it and - pass the task off to /bin/sh. */ - - OSStatus myStatus; - - AuthorizationFlags myFlags = kAuthorizationFlagDefaults; - AuthorizationRef myAuthorizationRef; - myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, - myFlags, &myAuthorizationRef); - if (myStatus != errAuthorizationSuccess) return; - - { - AuthorizationItem myItems = {kAuthorizationRightExecute, 0, - NULL, 0}; - AuthorizationRights myRights = {1, &myItems}; - myFlags = kAuthorizationFlagDefaults | - kAuthorizationFlagInteractionAllowed | - kAuthorizationFlagPreAuthorize | - kAuthorizationFlagExtendRights; - myStatus = - AuthorizationCopyRights(myAuthorizationRef,&myRights,NULL,myFlags,NULL); - } - if (myStatus == errAuthorizationSuccess) { - NSBundle *bundle = [NSBundle mainBundle]; - NSString *bundle_path = [bundle bundlePath]; - NSString *exec_path = - [bundle_path stringByAppendingString:@"/Contents/MacOS/cltool"]; - // Not sure why but this doesn't work: - // [bundle pathForResource:@"cltool" ofType:nil]; - - if (exec_path == nil) return; - char *args[] = { "-f", (char *)[exec_path UTF8String], - "/usr/bin/unison", NULL }; - - myFlags = kAuthorizationFlagDefaults; - myStatus = AuthorizationExecuteWithPrivileges - (myAuthorizationRef, "/bin/cp", myFlags, args, - NULL); - } - AuthorizationFree (myAuthorizationRef, kAuthorizationFlagDefaults); - - /* - if (myStatus == errAuthorizationCanceled) - NSLog(@"The attempt was canceled\n"); - else if (myStatus) - NSLog(@"There was an authorization error: %ld\n", myStatus); - */ -} - -- (BOOL)validateItem:(IBAction *) action -{ - if (action == @selector(syncButton:)) return syncable; - // FIXME Restarting during sync is disabled because it causes UI corruption - else if (action == @selector(restartButton:)) return !duringSync; - else if (action == @selector(rescan:)) return ((syncable && !duringSync) || afterSync); - else return YES; -} - -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem -{ - return [self validateItem:[menuItem action]]; -} - -- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem -{ - return [self validateItem:[toolbarItem action]]; -} - -- (void)resizeWindowToSize:(NSSize)newSize -{ - NSRect aFrame; - - float newHeight = newSize.height+[self toolbarHeightForWindow:mainWindow]; - float newWidth = newSize.width; - - aFrame = [NSWindow contentRectForFrameRect:[mainWindow frame] - styleMask:[mainWindow styleMask]]; - - aFrame.origin.y += aFrame.size.height; - aFrame.origin.y -= newHeight; - aFrame.size.height = newHeight; - aFrame.size.width = newWidth; - - aFrame = [NSWindow frameRectForContentRect:aFrame - styleMask:[mainWindow styleMask]]; - - [mainWindow setFrame:aFrame display:YES animate:YES]; -} - -- (float)toolbarHeightForWindow:(NSWindow *)window -{ - NSToolbar *aToolbar; - float toolbarHeight = 0.0; - NSRect windowFrame; - - aToolbar = [window toolbar]; - if(aToolbar && [aToolbar isVisible]) - { - windowFrame = [NSWindow contentRectForFrameRect:[window frame] - styleMask:[window styleMask]]; - toolbarHeight = NSHeight(windowFrame) - - NSHeight([[window contentView] frame]); - } - return toolbarHeight; -} - -CAMLprim value fatalError(value s) -{ - NSString *str = [[NSString alloc] initWithUTF8String:String_val(s)]; - - [me performSelectorOnMainThread:@selector(fatalError:) withObject:str waitUntilDone:FALSE]; - [str release]; - return Val_unit; -} - -- (void)fatalError:(NSString *)msg { - NSRunAlertPanel(@"Fatal error", msg, @"Exit", nil, nil); - exit(1); -} - -@end - -@implementation NSString (_UnisonUtil) -- (NSString *)trim -{ - NSCharacterSet *ws = [NSCharacterSet whitespaceCharacterSet]; - int len = [self length], i = len; - while (i && [ws characterIsMember:[self characterAtIndex:i-1]]) i--; - return (i == len) ? self : [self substringToIndex:i]; -} -@end diff --git a/src/uimacnew/NotificationController.h b/src/uimacnew/NotificationController.h deleted file mode 100644 index 899bf83..0000000 --- a/src/uimacnew/NotificationController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// NotificationController.h -// uimac -// -// Created by Alan Schmitt on 02/02/06. -// Copyright 2006, see file COPYING for details. All rights reserved. -// - -#import <Cocoa/Cocoa.h> -#import <Growl/Growl.h> - -@interface NotificationController : NSObject <GrowlApplicationBridgeDelegate> -{ -} - -- (void)updateFinishedFor: (NSString *)profile; -- (void)syncFinishedFor: (NSString *)profile; - -/* Implement the GrowlApplicationBridgeDelegate protocol */ -- (NSDictionary *)registrationDictionaryForGrowl; -- (NSString *)applicationNameForGrowl; - -@end diff --git a/src/uimacnew/NotificationController.m b/src/uimacnew/NotificationController.m deleted file mode 100644 index 7749534..0000000 --- a/src/uimacnew/NotificationController.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// NotificationController.m -// uimac -// -// Created by Alan Schmitt on 02/02/06. -// Copyright 2006, see file COPYING for details. All rights reserved. -// - -#import "NotificationController.h" - -#define NOTIFY_UPDATE @"Scan finished" -#define NOTIFY_SYNC @"Synchronization finished" - -/* Show a simple notification */ -static void simpleNotify(NSString *name, NSString *descFmt, NSString *profile); - -@implementation NotificationController - -- (void)awakeFromNib -{ - [GrowlApplicationBridge setGrowlDelegate:self]; -} - -- (void)updateFinishedFor: (NSString *)profile -{ - simpleNotify(NOTIFY_UPDATE, - @"Profile '%@' is finished scanning for updates", - profile); -} - -- (void)syncFinishedFor: (NSString *)profile { - simpleNotify(NOTIFY_SYNC, - @"Profile '%@' is finished synchronizing", - profile); -} - -- (NSDictionary *)registrationDictionaryForGrowl -{ - NSArray* notifications = [NSArray arrayWithObjects: - NOTIFY_UPDATE, - NOTIFY_SYNC, - nil]; - return [NSDictionary dictionaryWithObjectsAndKeys: - notifications, GROWL_NOTIFICATIONS_ALL, - notifications, GROWL_NOTIFICATIONS_DEFAULT, - nil]; -} - -- (NSString *)applicationNameForGrowl -{ - return @"Unison"; -} - -@end - -static void simpleNotify(NSString *name, NSString *descFmt, NSString *profile) -{ - [GrowlApplicationBridge notifyWithTitle:name - description:[NSString stringWithFormat:descFmt, profile] - notificationName:name - iconData:nil - priority:0 - isSticky:false - clickContext:nil]; -}
\ No newline at end of file diff --git a/src/uimacnew/PreferencesController.h b/src/uimacnew/PreferencesController.h deleted file mode 100644 index 4a4a330..0000000 --- a/src/uimacnew/PreferencesController.h +++ /dev/null @@ -1,20 +0,0 @@ -/* PreferencesController */ - -#import <Cocoa/Cocoa.h> - -@interface PreferencesController : NSObject -{ - IBOutlet NSTextField *firstRootText; - IBOutlet NSButtonCell *localButtonCell; - IBOutlet NSTextField *profileNameText; - IBOutlet NSButtonCell *remoteButtonCell; - IBOutlet NSTextField *secondRootHost; - IBOutlet NSTextField *secondRootText; - IBOutlet NSTextField *secondRootUser; -} -- (IBAction)anyEnter:(id)sender; -- (IBAction)localClick:(id)sender; -- (IBAction)remoteClick:(id)sender; -- (BOOL)validatePrefs; -- (void)reset; -@end diff --git a/src/uimacnew/PreferencesController.m b/src/uimacnew/PreferencesController.m deleted file mode 100644 index f1e1ede..0000000 --- a/src/uimacnew/PreferencesController.m +++ /dev/null @@ -1,89 +0,0 @@ -#import "PreferencesController.h" -#import "Bridge.h" - -@implementation PreferencesController - -- (void)reset -{ - [profileNameText setStringValue:@""]; - [firstRootText setStringValue:@""]; - [secondRootUser setStringValue:@""]; - [secondRootHost setStringValue:@""]; - [secondRootText setStringValue:@""]; - [remoteButtonCell setState:NSOnState]; - [localButtonCell setState:NSOffState]; - [secondRootUser setSelectable:YES]; - [secondRootUser setEditable:YES]; - [secondRootHost setSelectable:YES]; - [secondRootHost setEditable:YES]; -} - -- (BOOL)validatePrefs -{ - NSString *profileName = [profileNameText stringValue]; - if (profileName == nil | [profileName isEqualTo:@""]) { - // FIX: should check for already existing names too - NSRunAlertPanel(@"Error",@"You must enter a profile name",@"OK",nil,nil); - return NO; - } - NSString *firstRoot = [firstRootText stringValue]; - if (firstRoot == nil | [firstRoot isEqualTo:@""]) { - NSRunAlertPanel(@"Error",@"You must enter a first root",@"OK",nil,nil); - return NO; - } - NSString *secondRoot; - if ([remoteButtonCell state] == NSOnState) { - NSString *user = [secondRootUser stringValue]; - if (user == nil | [user isEqualTo:@""]) { - NSRunAlertPanel(@"Error",@"You must enter a user",@"OK",nil,nil); - return NO; - } - NSString *host = [secondRootHost stringValue]; - if (host == nil | [host isEqualTo:@""]) { - NSRunAlertPanel(@"Error",@"You must enter a host",@"OK",nil,nil); - return NO; - } - NSString *file = [secondRootText stringValue]; - // OK for empty file, e.g., ssh://foo@bar/ - secondRoot = [NSString stringWithFormat:@"ssh://%@@%@/%@",user,host,file]; - } - else { - secondRoot = [secondRootText stringValue]; - if (secondRoot == nil | [secondRoot isEqualTo:@""]) { - NSRunAlertPanel(@"Error",@"You must enter a second root file",@"OK",nil,nil); - return NO; - } - } - ocamlCall("xSSS", "unisonProfileInit", profileName, firstRoot, secondRoot); - return YES; -} - -/* The target when enter is pressed in any of the text fields */ -// FIX: this is broken, it takes tab, mouse clicks, etc. -- (IBAction)anyEnter:(id)sender -{ - NSLog(@"enter"); - [self validatePrefs]; -} - -- (IBAction)localClick:(id)sender -{ - NSLog(@"local"); - [secondRootUser setStringValue:@""]; - [secondRootHost setStringValue:@""]; - [secondRootUser setSelectable:NO]; - [secondRootUser setEditable:NO]; - [secondRootHost setSelectable:NO]; - [secondRootHost setEditable:NO]; -} - -- (IBAction)remoteClick:(id)sender -{ - NSLog(@"remote"); - [secondRootUser setSelectable:YES]; - [secondRootUser setEditable:YES]; - [secondRootHost setSelectable:YES]; - [secondRootHost setEditable:YES]; -} - -@end diff --git a/src/uimacnew/ProfileController.h b/src/uimacnew/ProfileController.h deleted file mode 100644 index 20bbc97..0000000 --- a/src/uimacnew/ProfileController.h +++ /dev/null @@ -1,19 +0,0 @@ -/* ProfileController */ -/* Copyright (c) 2003, see file COPYING for details. */ - -#import <Cocoa/Cocoa.h> - -@interface ProfileController : NSObject -{ - IBOutlet NSTableView *tableView; - NSMutableArray *profiles; - int defaultIndex; // -1 if no default, else the index in profiles of @"default" -} -- (void)initProfiles; -- (int)numberOfRowsInTableView:(NSTableView *)aTableView; -- (id)tableView:(NSTableView *)aTableView - objectValueForTableColumn:(NSTableColumn *)aTableColumn - row:(int)rowIndex; -- (NSString *)selected; -- (NSTableView *)tableView; // allows MyController to set up firstResponder -@end diff --git a/src/uimacnew/ProfileController.m b/src/uimacnew/ProfileController.m deleted file mode 100644 index 94ec172..0000000 --- a/src/uimacnew/ProfileController.m +++ /dev/null @@ -1,80 +0,0 @@ -/* Copyright (c) 2003, see file COPYING for details. */ - -#import "ProfileController.h" -#import "Bridge.h" - -@implementation ProfileController - -NSString *unisonDirectory() -{ - return (NSString *)ocamlCall("S", "unisonDirectory"); -} - -- (void)initProfiles -{ - NSString *directory = unisonDirectory(); -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - NSArray *files = [[NSFileManager defaultManager] directoryContentsAtPath:directory]; -#else - NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil]; -#endif - unsigned int count = [files count]; - unsigned int i,j; - - [profiles release]; - profiles = [[NSMutableArray alloc] init]; - defaultIndex = -1; - - for (i = j = 0; i < count; i++) { - NSString *file = [files objectAtIndex:i]; - if ([[file pathExtension] isEqualTo:@"prf"]) { - NSString *withoutExtension = [file stringByDeletingPathExtension]; - [profiles insertObject:withoutExtension atIndex:j]; - if ([@"default" isEqualTo:withoutExtension]) defaultIndex = j; - j++; - } - } - if (j > 0) - [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO]; -} - -- (void)awakeFromNib -{ - // start with the default profile selected - [self initProfiles]; - if (defaultIndex >= 0) - [tableView selectRowIndexes:[NSIndexSet indexSetWithIndex:defaultIndex] byExtendingSelection:NO]; - // on awake the scroll bar is inactive, but after adding profiles we might need it; - // reloadData makes it happen. Q: is setNeedsDisplay more efficient? - [tableView reloadData]; -} - -- (int)numberOfRowsInTableView:(NSTableView *)aTableView -{ - if (!profiles) return 0; - else return [profiles count]; -} - -- (id)tableView:(NSTableView *)aTableView - objectValueForTableColumn:(NSTableColumn *)aTableColumn - row:(int)rowIndex -{ - if (rowIndex >= 0 && rowIndex < [profiles count]) - return [profiles objectAtIndex:rowIndex]; - else return @"[internal error!]"; -} - -- (NSString *)selected -{ - int rowIndex = [tableView selectedRow]; - if (rowIndex >= 0 && rowIndex < [profiles count]) - return [profiles objectAtIndex:rowIndex]; - else return @"[internal error!]"; -} - -- (NSTableView *)tableView -{ - return tableView; -} - -@end diff --git a/src/uimacnew/ProfileTableView.h b/src/uimacnew/ProfileTableView.h deleted file mode 100644 index 2ff6a86..0000000 --- a/src/uimacnew/ProfileTableView.h +++ /dev/null @@ -1,11 +0,0 @@ -/* ProfileTableView */ - -#import <Cocoa/Cocoa.h> - -@class MyController; - -@interface ProfileTableView : NSTableView -{ - IBOutlet MyController *myController; -} -@end diff --git a/src/uimacnew/ProfileTableView.m b/src/uimacnew/ProfileTableView.m deleted file mode 100644 index eea7b91..0000000 --- a/src/uimacnew/ProfileTableView.m +++ /dev/null @@ -1,36 +0,0 @@ -#import "MyController.h" -#import "ProfileTableView.h" - -@implementation ProfileTableView - -- (void)keyDown:(NSEvent *)event -{ - /* some keys return zero-length strings */ - if ([[event characters] length] == 0) { - [super keyDown:event]; - return; - } - - unichar c = [[event characters] characterAtIndex:0]; - switch (c) { - case '\r': - [myController openButton:self]; - break; - default: - [super keyDown:event]; - break; - } -} - -/* Override default highlight colour to match ReconTableView */ -- (id)_highlightColorForCell:(NSCell *)cell -{ - if(([[self window] firstResponder] == self) && - [[self window] isMainWindow] && - [[self window] isKeyWindow]) - - return [NSColor colorWithCalibratedRed:0.7 green:0.75 blue:0.8 alpha:1.0]; - else return [NSColor colorWithCalibratedRed:0.8 green:0.8 blue:0.8 alpha:1.0]; -} - -@end diff --git a/src/uimacnew/ProgressCell.h b/src/uimacnew/ProgressCell.h deleted file mode 100644 index c2ef4ad..0000000 --- a/src/uimacnew/ProgressCell.h +++ /dev/null @@ -1,15 +0,0 @@ -#import <Cocoa/Cocoa.h> - -@interface ProgressCell : NSCell -{ - float _minVal, _maxVal; // defaults to 0.0, 100.0 - BOOL _isActive; - BOOL _useFullView; // default: NO - BOOL _isError; // default: NO - NSImage *_icon; - NSString *_statusString; -} -- (void)setStatusString:(NSString *)string; -- (void)setIcon:(NSImage *)image; -- (void)setIsActive:(BOOL)yn; -@end diff --git a/src/uimacnew/ProgressCell.m b/src/uimacnew/ProgressCell.m deleted file mode 100644 index 011e164..0000000 --- a/src/uimacnew/ProgressCell.m +++ /dev/null @@ -1,199 +0,0 @@ -/****************************************************************************** - * Copyright 2008 (see file COPYING for more information) - * - * Loosely based on TorrentCell from Transmission (.png files are from - * the original). - *****************************************************************************/ - -#import "ProgressCell.h" - -#define BAR_HEIGHT 12.0 - -static NSImage *_ProgressWhite, *_ProgressBlue, *_ProgressGray, *_ProgressGreen, - *_ProgressAdvanced, *_ProgressEndWhite, *_ProgressEndBlue, - *_ProgressEndGray, *_ProgressEndGreen, *_ProgressLightGreen, - *_ProgressEndAdvanced, * _ErrorImage; -static NSSize ZeroSize; - -@implementation ProgressCell - -+ (void) initialize -{ - NSSize startSize = NSMakeSize(100.0, BAR_HEIGHT); - ZeroSize = NSMakeSize(0.0, 0.0); - - _ProgressWhite = [NSImage imageNamed: @"ProgressBarWhite.png"]; - [_ProgressWhite setScalesWhenResized: YES]; - - _ProgressBlue = [NSImage imageNamed: @"ProgressBarBlue.png"]; - [_ProgressBlue setScalesWhenResized: YES]; - [_ProgressBlue setSize: startSize]; - - _ProgressGray = [NSImage imageNamed: @"ProgressBarGray.png"]; - [_ProgressGray setScalesWhenResized: YES]; - [_ProgressGray setSize: startSize]; - - _ProgressGreen = [NSImage imageNamed: @"ProgressBarGreen.png"]; - [_ProgressGreen setScalesWhenResized: YES]; - - _ProgressLightGreen = [NSImage imageNamed: @"ProgressBarLightGreen.png"]; - [_ProgressLightGreen setScalesWhenResized: YES]; - - _ProgressAdvanced = [NSImage imageNamed: @"ProgressBarAdvanced.png"]; - [_ProgressAdvanced setScalesWhenResized: YES]; - - _ProgressEndWhite = [NSImage imageNamed: @"ProgressBarEndWhite.png"]; - _ProgressEndBlue = [NSImage imageNamed: @"ProgressBarEndBlue.png"]; - _ProgressEndGray = [NSImage imageNamed: @"ProgressBarEndGray.png"]; - _ProgressEndGreen = [NSImage imageNamed: @"ProgressBarEndGreen.png"]; - _ProgressEndAdvanced = [NSImage imageNamed: @"ProgressBarEndAdvanced.png"]; - - _ErrorImage = [[NSImage imageNamed: @"Error.tiff"] copy]; - [_ErrorImage setFlipped: YES]; -} - -- (id)init -{ - self = [super init]; - _minVal = 0.0; - _maxVal = 100.0; - _isActive = YES; - - return self; -} - -// BCP: Removed (11/09) per Onne Gorter -// - (void)dealloc -// { -// [_icon release]; -// [_statusString release]; -// [super dealloc]; -// } - -- (void)setStatusString:(NSString *)string -{ - // BCP: Removed (11/09) per Onne Gorter - // [_statusString autorelease]; - // _statusString = [string retain]; - // Added: - _statusString = string; -} - -- (void)setIcon:(NSImage *)image -{ - // BCP: Removed (11/09) per Onne Gorter - // [_icon autorelease]; - // _icon = [image retain]; - // Added: - _icon = image; -} - -- (void)setIsActive:(BOOL)yn -{ - _isActive = yn; -} - -- (void)drawBarImage:(NSImage *)barImage width:(float)width point:(NSPoint)point -{ - if (width <= 0.0) - return; - - if ([barImage size].width < width) - [barImage setSize: NSMakeSize(width * 2.0, BAR_HEIGHT)]; - - [barImage compositeToPoint: point fromRect: NSMakeRect(0, 0, width, BAR_HEIGHT) operation: NSCompositeSourceOver]; -} - -- (void)drawBar:(float)width point:(NSPoint)point -{ - id objectValue = [self objectValue]; - if (!objectValue) return; - - float value = [objectValue floatValue]; - float progress = (value - _minVal)/ (_maxVal - _minVal); - - width -= 2.0; - float completedWidth, remainingWidth = 0.0; - - //bar images and widths - NSImage * barLeftEnd, * barRightEnd, * barComplete, * barRemaining; - if (progress >= 1.0) { - completedWidth = width; - barLeftEnd = _ProgressEndGreen; - barRightEnd = _ProgressEndGreen; - barComplete = _ProgressGreen; - barRemaining = _ProgressLightGreen; - } - else { - completedWidth = progress * width; - remainingWidth = width - completedWidth; - barLeftEnd = (remainingWidth == width) ? _ProgressEndWhite - : ((_isActive) ? _ProgressEndBlue : _ProgressEndGray); - barRightEnd = (completedWidth < width) ? _ProgressEndWhite - : ((_isActive) ? _ProgressEndBlue : _ProgressEndGray); - barComplete = _isActive ? _ProgressBlue : _ProgressGray; - barRemaining = _ProgressWhite; - } - - [barLeftEnd compositeToPoint: point operation: NSCompositeSourceOver]; - - point.x += 1.0; - [self drawBarImage: barComplete width: completedWidth point: point]; - - point.x += completedWidth; - [self drawBarImage: barRemaining width: remainingWidth point: point]; - - point.x += remainingWidth; - [barRightEnd compositeToPoint: point operation: NSCompositeSourceOver]; -} - -- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)view -{ - NSPoint pen = cellFrame.origin; - const float PADDING = 3.0; - - // progress bar - pen.y += PADDING + BAR_HEIGHT; - float mainWidth = cellFrame.size.width; - float barWidth = mainWidth; - [self drawBar: barWidth point: pen]; - - //icon - NSImage * image = _isError ? _ErrorImage : _icon; - if (image) { - NSSize imageSize = [image size]; - NSRect imageFrame; - imageFrame.origin = cellFrame.origin; - imageFrame.size = imageSize; - imageFrame.origin.x += ceil((cellFrame.size.width - imageSize.width) / 2); - imageFrame.origin.y += [view isFlipped] ? - ceil((cellFrame.size.height + imageSize.height) / 2) - : ceil((cellFrame.size.height - imageSize.height) / 2); - [image compositeToPoint:imageFrame.origin operation:NSCompositeSourceOver]; - } - - // status string - if (_statusString) { - BOOL highlighted = [self isHighlighted] && [[self highlightColorWithFrame: cellFrame inView: view] - isEqual: [NSColor alternateSelectedControlColor]]; - NSMutableParagraphStyle * paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; - [paragraphStyle setLineBreakMode: NSLineBreakByTruncatingTail]; - - NSDictionary * statusAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - highlighted ? [NSColor whiteColor] : [NSColor darkGrayColor], NSForegroundColorAttributeName, - [NSFont boldSystemFontOfSize: 9.0], NSFontAttributeName, - paragraphStyle, NSParagraphStyleAttributeName, nil]; - [paragraphStyle release]; - - NSSize statusSize = [_statusString sizeWithAttributes: statusAttributes]; - pen = cellFrame.origin; - pen.x += (cellFrame.size.width - statusSize.width) * 0.5; - pen.y += (cellFrame.size.height - statusSize.height) * 0.5; - - [_statusString drawInRect: NSMakeRect(pen.x, pen.y, statusSize.width, statusSize.height) - withAttributes: statusAttributes]; - [statusAttributes release]; - } -} - -@end diff --git a/src/uimacnew/ReconItem.h b/src/uimacnew/ReconItem.h deleted file mode 100644 index fd9024b..0000000 --- a/src/uimacnew/ReconItem.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ReconItem */ - -#import <Cocoa/Cocoa.h> - -@class OCamlValue; - -@interface ReconItem : NSObject -{ - ReconItem *parent; - NSString *path; - NSString *fullPath; - BOOL selected; - NSImage *direction; - NSString *directionSortString; - double fileSize; - double bytesTransferred; - BOOL resolved; -} -- (BOOL)selected; -- (void)setSelected:(BOOL)x; -- (NSString *)path; -- (NSString *)fullPath; -- (NSString *)left; -- (NSString *)right; -- (NSImage *)direction; -- (NSImage *)fileIcon; -- (long)fileCount; -- (double)fileSize; -- (NSString *)fileSizeString; -- (double)bytesTransferred; -- (NSString *)bytesTransferredString; -- (void)setDirection:(char *)d; -- (void) doAction:(unichar)action; -- (void) doIgnore:(unichar)action; -- (NSString *)progress; -- (NSString *)progressString; -- (void)resetProgress; -- (NSString *)details; -- (NSString *)updateDetails; -- (BOOL)isConflict; -- (BOOL)changedFromDefault; -- (void)revertDirection; -- (BOOL)canDiff; -- (void)showDiffs; -- (NSString *)leftSortKey; -- (NSString *)rightSortKey; -- (NSString *)replicaSortKey:(NSString *)sortString; -- (NSString *)directionSortKey; -- (NSString *)progressSortKey; -- (NSString *)pathSortKey; -- (NSArray *)children; -- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot; -- (ReconItem *)parent; -- (void)setPath:(NSString *)aPath; -- (void)setFullPath:(NSString *)p; -- (void)setParent:(ReconItem *)p; -- (void)willChange; -@end - -@interface LeafReconItem : ReconItem -{ - NSString *left; - NSString *right; - NSString *progress; - NSString *details; - OCamlValue *ri; // an ocaml Common.reconItem - long index; // index in Ri list -} -- initWithRiAndIndex:(OCamlValue *)v index:(long)i; -@end - -@interface ParentReconItem : ReconItem -{ - NSMutableArray *_children; - long fileCount; -} -- (void)addChild:(ReconItem *)item nested:(BOOL)useNesting; -- (void)sortUsingDescriptors:(NSArray *)sortDescriptors; -- (BOOL)hasConflictedChildren; -@end diff --git a/src/uimacnew/ReconItem.m b/src/uimacnew/ReconItem.m deleted file mode 100644 index 653bd3e..0000000 --- a/src/uimacnew/ReconItem.m +++ /dev/null @@ -1,838 +0,0 @@ -#import "ReconItem.h" -#import "Bridge.h" - -#import <Carbon/Carbon.h> - -@implementation ReconItem - -- init { - [super init]; - selected = NO; // NB only used/updated during sorts. Not a - // reliable indicator of whether item is selected - fileSize = -1.; - bytesTransferred = -1.; - return self; -} - -- (void)dealloc -{ - [path release]; - [fullPath release]; - // [direction release]; // assuming retained by cache, so not retained - // [directionSortString release]; // no retain/release necessary because is constant - [super dealloc]; -} - -- (ReconItem *)parent -{ - return parent; -} - -- (void)setParent:(ReconItem *)p -{ - parent = p; -} - -- (void)willChange -{ - // propagate up parent chain - [parent willChange]; -} - -- (NSArray *)children -{ - return nil; -} - -- (BOOL)selected -{ - return selected; -} - -- (void)setSelected:(BOOL)x -{ - selected = x; -} - -- (NSString *)path -{ - return path; -} - -- (void)setPath:(NSString *)aPath -{ - [path autorelease]; - path = [aPath retain]; - - // invalidate - [fullPath autorelease]; - fullPath = nil; -} - -- (NSString *)fullPath -{ - if (!fullPath) { - NSString *parentPath = [parent fullPath]; - [self setFullPath:(([parentPath length] > 0) ? [parentPath stringByAppendingFormat:@"/%@", path] : path)]; - } - - return fullPath; -} - -- (void)setFullPath:(NSString *)p -{ - [fullPath autorelease]; - fullPath = [p retain]; -} - -- (NSString *)left -{ - return nil; -} - -- (NSString *)right -{ - return nil; -} - -static NSMutableDictionary *_ChangeIconsByType = nil; - -- (NSImage *)changeIconFor:(NSString *)type other:(NSString *)other -{ - if (![type length]) { - if ([other isEqual:@"Created"]) { - type = @"Absent"; - } else if ([other length]) { - type = @"Unmodified"; - } else - return nil; - } - - NSImage *result = [_ChangeIconsByType objectForKey:type]; - if (!result) { - NSString *imageName = [NSString stringWithFormat:@"Change_%@.png", type]; - result = [NSImage imageNamed:imageName]; - if (!_ChangeIconsByType) _ChangeIconsByType = [[NSMutableDictionary alloc] init]; - [_ChangeIconsByType setObject:result forKey:type]; - } - return result; -} - -- (NSImage *)leftIcon -{ - return [self changeIconFor:[self left] other:[self right]]; -} - -- (NSImage *)rightIcon -{ - return [self changeIconFor:[self right] other:[self left]]; -} - - -- (double)computeFileSize -{ - return 0.; -} - -- (double)bytesTransferred -{ - return 0.; -} - -- (long)fileCount -{ - return 1; -} - -- (double)fileSize -{ - if (fileSize == -1.) fileSize = [self computeFileSize]; - return fileSize; -} - -- (NSString *)formatFileSize:(double)size -{ - if (size == 0) return @"--"; - if (size < 1024) return @"< 1KB"; // return [NSString stringWithFormat:@"%i bytes", size]; - size /= 1024; - if (size < 1024) return [NSString stringWithFormat:@"%i KB", (int)size]; - size /= 1024; - if (size < 1024) return [NSString stringWithFormat:@"%1.1f MB", size]; - size = size / 1024; - return [NSString stringWithFormat:@"%1.1f GB", size]; -} - -- (NSString *)fileSizeString -{ - return [self formatFileSize:[self fileSize]]; -} - -- (NSString *)bytesTransferredString -{ - return [self formatFileSize:[self bytesTransferred]]; -} - -- (NSNumber *)percentTransferred -{ - double size = [self computeFileSize]; - return (size > 0) ? [NSNumber numberWithDouble:([self bytesTransferred] / (size) * 100.0)] - : nil; -} - -static NSMutableDictionary *_iconsByExtension = nil; - -- (NSImage *)iconForExtension:(NSString *)extension -{ - NSImage *icon = [_iconsByExtension objectForKey:extension]; - if (!_iconsByExtension) _iconsByExtension = [[NSMutableDictionary alloc] init]; - if (!icon) { - icon = [[NSWorkspace sharedWorkspace] iconForFileType:extension]; - [icon setSize:NSMakeSize(16.0, 16.0)]; - [_iconsByExtension setObject:icon forKey:extension]; - } - return icon; -} - -- (NSImage *)fileIcon -{ - return [self iconForExtension:NSFileTypeForHFSTypeCode(kOpenFolderIcon)]; -} - -- (NSString *)dirString -{ - return @"<-?->"; -} - -- (NSImage *)direction -{ - if (direction) return direction; - NSString * dirString = [self dirString]; - - BOOL changedFromDefault = [self changedFromDefault]; - - if ([dirString isEqual:@"<-?->"]) { - if (changedFromDefault | resolved) { - direction = [NSImage imageNamed: @"table-skip.tif"]; - directionSortString = @"3"; - } - else { - direction = [NSImage imageNamed: @"table-conflict.tif"]; - directionSortString = @"2"; - } - } - - else if ([dirString isEqual:@"---->"]) { - if (changedFromDefault) { - direction = [NSImage imageNamed: @"table-right-blue.tif"]; - directionSortString = @"6"; - } - else { - direction = [NSImage imageNamed: @"table-right-green.tif"]; - directionSortString = @"8"; - } - } - - else if ([dirString isEqual:@"<----"]) { - if (changedFromDefault) { - direction = [NSImage imageNamed: @"table-left-blue.tif"]; - directionSortString = @"5"; - } - else { - direction = [NSImage imageNamed: @"table-left-green.tif"]; - directionSortString = @"7"; - } - } - - else if ([dirString isEqual:@"<-M->"]) { - direction = [NSImage imageNamed: @"table-merge.tif"]; - directionSortString = @"4"; - } - - else if ([dirString isEqual:@"<--->"]) { - direction = [NSImage imageNamed: @"table-mixed.tif"]; - directionSortString = @"9"; - } - - else { - direction = [NSImage imageNamed: @"table-error.tif"]; - directionSortString = @"1"; - } - - [direction retain]; - return direction; -} - -- (void)setDirection:(char *)d -{ - [direction autorelease]; - direction = nil; -} - -- (void)doAction:(unichar)action -{ - switch (action) { - case '>': - [self setDirection:"unisonRiSetRight"]; - break; - case '<': - [self setDirection:"unisonRiSetLeft"]; - break; - case '/': - [self setDirection:"unisonRiSetConflict"]; - resolved = YES; - break; - case '-': - [self setDirection:"unisonRiForceOlder"]; - break; - case '+': - [self setDirection:"unisonRiForceNewer"]; - break; - case 'm': - [self setDirection:"unisonRiSetMerge"]; - break; - case 'd': - [self showDiffs]; - break; - case 'R': - [self revertDirection]; - break; - default: - NSLog(@"ReconItem.doAction : unknown action"); - break; - } -} - -- (void)doIgnore:(unichar)action -{ - switch (action) { - case 'I': - ocamlCall("xS", "unisonIgnorePath", [self fullPath]); - break; - case 'E': - ocamlCall("xS", "unisonIgnoreExt", [self path]); - break; - case 'N': - ocamlCall("xS", "unisonIgnoreName", [self path]); - break; - default: - NSLog(@"ReconItem.doIgnore : unknown ignore"); - break; - } -} - -/* Sorting functions. These have names equal to - column identifiers + "SortKey", and return NSStrings that - can be automatically sorted with their compare method */ - -- (NSString *) leftSortKey -{ - return [self replicaSortKey:[self left]]; -} - -- (NSString *) rightSortKey -{ - return [self replicaSortKey:[self right]]; -} - -- (NSString *) replicaSortKey:(NSString *)sortString -{ - /* sort order for left and right replicas */ - - if ([sortString isEqualToString:@"Created"]) return @"1"; - else if ([sortString isEqualToString:@"Deleted"]) return @"2"; - else if ([sortString isEqualToString:@"Modified"]) return @"3"; - else if ([sortString isEqualToString:@""]) return @"4"; - else return @"5"; -} - -- (NSString *) directionSortKey -{ - /* Since the direction indicators are unsortable images, use - directionSortString instead */ - - if ([directionSortString isEqual:@""]) - [self direction]; - return directionSortString; -} - -- (NSString *) progressSortKey -{ - /* Percentages, "done" and "" are sorted OK without help, - but "start " should be sorted after "" and before "0%" */ - - NSString * progressString = [self progress]; - if ([progressString isEqualToString:@"start "]) progressString = @" "; - return progressString; -} - -- (NSString *) pathSortKey -{ - /* default alphanumeric sort is fine for paths */ - return [self path]; -} - -- (NSString *)progress -{ - return nil; -} - -- (BOOL)transferInProgress -{ - double soFar = [self bytesTransferred]; - return (soFar > 0) && (soFar < [self fileSize]); -} - -- (void)resetProgress -{ -} - -- (NSString *)progressString -{ - NSString *progress = [self progress]; - if ([progress length] == 0. || [progress hasSuffix:@"%"]) - progress = [self transferInProgress] ? [self bytesTransferredString] : @""; - else if ([progress isEqual:@"done"]) progress = @""; - return progress; -} - -- (NSString *)details -{ - return nil; -} - -- (NSString *)updateDetails -{ - return [self details]; -} - -- (BOOL)isConflict -{ - return NO; -} - -- (BOOL)changedFromDefault -{ - return NO; -} - -- (void)revertDirection -{ - [self willChange]; - [direction release]; - direction = nil; - resolved = NO; -} - -- (BOOL)canDiff -{ - return NO; -} - -- (void)showDiffs -{ -} - -- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot -{ - return self; -} -@end - - -// --- Leaf items -- actually corresponding to ReconItems in OCaml -@implementation LeafReconItem - -- initWithRiAndIndex:(OCamlValue *)v index:(long)i -{ - [super init]; - ri = [v retain]; - index = i; - resolved = NO; - directionSortString = @""; - return self; -} - --(void)dealloc -{ - [ri release]; - [left release]; - [right release]; - [progress release]; - [details release]; - - [super dealloc]; -} - -- (NSString *)path -{ - if (!path) path = [(NSString *)ocamlCall("S@", "unisonRiToPath", ri) retain]; - return path; -} - -- (NSString *)left -{ - if (!left) left = [(NSString *)ocamlCall("S@", "unisonRiToLeft", ri) retain]; - return left; -} - -- (NSString *)right -{ - if (!right) right = [(NSString *)ocamlCall("S@", "unisonRiToRight", ri) retain]; - return right; -} - -- (double)computeFileSize -{ - return [(NSNumber *)ocamlCall("N@", "unisonRiToFileSize", ri) doubleValue]; -} - -- (double)bytesTransferred -{ - if (bytesTransferred == -1.) { - // need to force to fileSize if done, otherwise may not match up to 100% - bytesTransferred = ([[self progress] isEqual:@"done"]) ? [self fileSize] - : [(NSNumber*)ocamlCall("N@", "unisonRiToBytesTransferred", ri) doubleValue]; - } - return bytesTransferred; -} - -- (NSImage *)fileIcon -{ - NSString *extension = [[self path] pathExtension]; - - if ([@"" isEqual:extension]) { - NSString *type = (NSString *)ocamlCall("S@", "unisonRiToFileType", ri); - extension = [type isEqual:@"dir"] - ? NSFileTypeForHFSTypeCode(kGenericFolderIcon) - : NSFileTypeForHFSTypeCode(kGenericDocumentIcon); - } - return [self iconForExtension:extension]; -} - -- (NSString *)dirString -{ - return (NSString *)ocamlCall("S@", "unisonRiToDirection", ri); -} - -- (void)setDirection:(char *)d -{ - [self willChange]; - [super setDirection:d]; - ocamlCall("x@", d, ri); -} - -- (NSString *)progress -{ - if (!progress) { - progress = [(NSString *)ocamlCall("S@", "unisonRiToProgress", ri) retain]; - if ([progress isEqual:@"FAILED"]) [self updateDetails]; - } - return progress; -} - -- (void)resetProgress -{ - // Get rid of the memoized progress because we expect it to change - [self willChange]; - bytesTransferred = -1.; - [progress release]; - - // Force update now so we get the result while the OCaml thread is available - // [self progress]; - // [self bytesTransferred]; - progress = nil; -} - -- (NSString *)details -{ - if (details) return details; - return [self updateDetails]; -} - -- (NSString *)updateDetails -{ - [details autorelease]; - details = [(NSString *)ocamlCall("S@", "unisonRiToDetails", ri) retain]; - return details; -} - -- (BOOL)isConflict -{ - return ((long)ocamlCall("i@", "unisonRiIsConflict", ri) ? YES : NO); -} - -- (BOOL)changedFromDefault -{ - return ((long)ocamlCall("i@", "changedFromDefault", ri) ? YES : NO); -} - -- (void)revertDirection -{ - ocamlCall("x@", "unisonRiRevert", ri); - [super revertDirection]; -} - -- (BOOL)canDiff -{ - return ((long)ocamlCall("i@", "canDiff", ri) ? YES : NO); -} - -- (void)showDiffs -{ - ocamlCall("x@i", "runShowDiffs", ri, index); -} - -@end - -@interface NSImage (TintedImage) -- (NSImage *)tintedImageWithColor:(NSColor *) tint operation:(NSCompositingOperation) op; -@end - -@implementation NSImage (TintedImage) - -- (NSImage *)tintedImageWithColor:(NSColor *) tint operation:(NSCompositingOperation) op -{ - NSSize size = [self size]; - NSRect imageBounds = NSMakeRect(0, 0, size.width, size.height); - NSImage *newImage = [[NSImage alloc] initWithSize:size]; - - [newImage lockFocus]; - [self compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver]; - [tint set]; - NSRectFillUsingOperation(imageBounds, op); - [newImage unlockFocus]; - - return [newImage autorelease]; -} - -@end - -// ---- Parent nodes in grouped items -@implementation ParentReconItem - -- init -{ - [super init]; - _children = [[NSMutableArray alloc] init]; - return self; -} - -- initWithPath:(NSString *)aPath -{ - [self init]; - path = [aPath retain]; - return self; -} - -- (void)dealloc -{ - [_children release]; - [super dealloc]; -} - -- (NSArray *)children; -{ - return _children; -} - -- (void)addChild:(ReconItem *)item pathArray:(NSArray *)pathArray level:(int)level -{ - NSString *element = [pathArray count] ? [pathArray objectAtIndex:level] : @""; - - // if we're at the leaf of the path, then add the item - if (((0 == [pathArray count]) && (0 == level)) || (level == [pathArray count]-1)) { - [item setParent:self]; - [item setPath:element]; - [_children addObject:item]; - return; - } - - // find / add matching parent node - ReconItem *last = [_children lastObject]; - if (last == nil || ![last isKindOfClass:[ParentReconItem class]] || ![[last path] isEqual:element]) { - last = [[ParentReconItem alloc] initWithPath:element]; - [last setParent:self]; - [_children addObject:last]; - [last release]; - } - - [(ParentReconItem *)last addChild:item pathArray:pathArray level:level+1]; -} - -- (void)addChild:(ReconItem *)item nested:(BOOL)nested -{ - [item setPath:nil]; // invalidate/reset - - if (nested) { - [self addChild:item pathArray:[[item path] pathComponents] level:0]; - } else { - [item setParent:self]; - [_children addObject:item]; - } -} - -- (void)sortUsingDescriptors:(NSArray *)sortDescriptors -{ - // sort our children - [_children sortUsingDescriptors:sortDescriptors]; - - // then have them sort theirs - int i = [_children count]; - while (i--) { - id child = [_children objectAtIndex:i]; - if ([child isKindOfClass:[ParentReconItem class]]) [child sortUsingDescriptors:sortDescriptors]; - } -} - -- (ReconItem *)collapseParentsWithSingleChildren:(BOOL)isRoot -{ - // replace ourselves? - if (!isRoot && [_children count] == 1) { - ReconItem *child = [_children lastObject]; - [child setPath:[path stringByAppendingFormat:@"/%@", [child path]]]; - return [child collapseParentsWithSingleChildren:NO]; - } - - // recurse - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - ReconItem *replacement = [child collapseParentsWithSingleChildren:NO]; - if (child != replacement) { - [_children replaceObjectAtIndex:i withObject:replacement]; - [replacement setParent:self]; - } - } - return self; -} - -- (void)willChange -{ - // invalidate child-based state - // Assuming caches / constant, so not retained / released - // [direction autorelease]; - // [directionSortString autorelease]; - direction = nil; - directionSortString = nil; - bytesTransferred = -1.; - // fileSize = -1; - // resolved = NO; - - // propagate up parent chain - [parent willChange]; -} - -// Propagation methods -- (void)doAction:(unichar)action -{ - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - [child doAction:action]; - } -} - -- (void)doIgnore:(unichar)action -{ - // handle Path ignores at this level, name and extension at the child nodes - if (action == 'I') { - [super doIgnore:'I']; - } else { - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - [child doIgnore:action]; - } - } -} - -// Rollup methods -- (long)fileCount -{ - if (fileCount == 0) { - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - fileCount += [child fileCount]; - } - } - return fileCount; -} - -- (double)computeFileSize -{ - double size = 0; - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - size += [child fileSize]; - } - return size; -} - -- (double)bytesTransferred -{ - if (bytesTransferred == -1.) { - bytesTransferred = 0.; - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - bytesTransferred += [child bytesTransferred]; - } - } - return bytesTransferred; -} - - - -- (NSString *)dirString -{ - NSString *rollup = nil; - int i = [_children count]; - while (i--) { - ReconItem *child = [_children objectAtIndex:i]; - NSString *dirString = [child dirString]; - if (!rollup || [dirString isEqual:rollup]) { - rollup = dirString; - } else { - // conflict - if ([dirString isEqual:@"---->"] || [dirString isEqual:@"<----"] || [dirString isEqual:@"<--->"]) { - if ([rollup isEqual:@"---->"] || [rollup isEqual:@"<----"] || [rollup isEqual:@"<--->"]) { - rollup = @"<--->"; - } - } else { - rollup = @"<-?->"; - } - } - } - // NSLog(@"dirString for %@: %@", path, rollup); - return rollup; -} - -- (BOOL)hasConflictedChildren -{ - NSString *dirString = [self dirString]; - BOOL result = [dirString isEqual:@"<--->"] || [dirString isEqual:@"<-?->"]; - // NSLog(@"hasConflictedChildren (%@): %@: %i", [self path], dirString, result); - return result; -} - -static NSMutableDictionary *_parentImages = nil; -static NSColor *_veryLightGreyColor = nil; -- (NSImage *)direction -{ - if (!_parentImages) { - _parentImages = [[NSMutableDictionary alloc] init]; - _veryLightGreyColor = [[NSColor colorWithCalibratedRed:0.7 green:0.7 blue:0.7 alpha:1.0] retain]; - } - NSImage *baseImage = [super direction]; - NSImage *parentImage = [_parentImages objectForKey:baseImage]; - if (!parentImage) { - // make parent images a grey version of the leaf images - parentImage = [baseImage tintedImageWithColor:_veryLightGreyColor operation:NSCompositeSourceIn]; - [_parentImages setObject:parentImage forKey:baseImage]; - } - return parentImage; -} - -@end diff --git a/src/uimacnew/ReconTableView.h b/src/uimacnew/ReconTableView.h deleted file mode 100644 index 1fc5a66..0000000 --- a/src/uimacnew/ReconTableView.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// ReconTableView.h -// -// NSTableView extended to handle additional keyboard events for the reconcile window. -// The keyDown: method is redefined. -// -// Created by Trevor Jim on Wed Aug 27 2003. -// Copyright (c) 2003, licensed under GNU GPL. -// - -#import <AppKit/AppKit.h> - -@interface ReconTableView : NSOutlineView { - BOOL editable; -} -- (BOOL)editable; -- (void)setEditable:(BOOL)x; -- (BOOL)validateItem:(IBAction *) action; -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem; -- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem; -- (IBAction)ignorePath:(id)sender; -- (IBAction)ignoreExt:(id)sender; -- (IBAction)ignoreName:(id)sender; -- (IBAction)copyLR:(id)sender; -- (IBAction)copyRL:(id)sender; -- (IBAction)leaveAlone:(id)sender; -- (IBAction)forceOlder:(id)sender; -- (IBAction)forceNewer:(id)sender; -- (IBAction)selectConflicts:(id)sender; -- (IBAction)revert:(id)sender; -- (IBAction)merge:(id)sender; -- (IBAction)showDiff:(id)sender; -- (BOOL)canDiffSelection; -@end - -@interface NSOutlineView (_UnisonExtras) -- (NSArray *)selectedObjects; -- (NSEnumerator *)selectedObjectEnumerator; -- (void)setSelectedObjects:(NSArray *)selection; - -- (void)expandChildrenIfSpace; - -@end diff --git a/src/uimacnew/ReconTableView.m b/src/uimacnew/ReconTableView.m deleted file mode 100644 index a4df8b0..0000000 --- a/src/uimacnew/ReconTableView.m +++ /dev/null @@ -1,298 +0,0 @@ -// -// ReconTableView.m -// Unison -// -// Created by Trevor Jim on Wed Aug 27 2003. -// Copyright (c) 2003. See file COPYING for details. -// - -#import "ReconTableView.h" -#import "ReconItem.h" -#import "MyController.h" - -@implementation NSOutlineView (_UnisonExtras) - -- (NSArray *)selectedObjects -{ - NSMutableArray *result = [NSMutableArray array]; - NSIndexSet *set = [self selectedRowIndexes]; - NSUInteger index = [set firstIndex]; - while (index != NSNotFound) { - [result addObject:[self itemAtRow:index]]; - index = [set indexGreaterThanIndex: index]; - } - return result; -} - -- (void)setSelectedObjects:(NSArray *)selectedObjects -{ - NSMutableIndexSet *set = [NSMutableIndexSet indexSet]; - int i = [selectedObjects count]; - while (i--) { - int index = [self rowForItem:[selectedObjects objectAtIndex:i]]; - if (index >= 0) [set addIndex:index]; - } - [self selectRowIndexes:set byExtendingSelection:NO]; -} - -- (NSEnumerator *)selectedObjectEnumerator -{ - return [[self selectedObjects] objectEnumerator]; -} - -- (int)rowCapacityWithoutScrolling -{ - float bodyHeight = [self visibleRect].size.height; - bodyHeight -= [[self headerView] visibleRect].size.height; - return bodyHeight / ([self rowHeight] + 2.0); -} - -- (BOOL)_canAcceptRowCountWithoutScrolling:(int)rows -{ - return ([self numberOfRows] + rows) <= [self rowCapacityWithoutScrolling]; -} - -- (BOOL)_expandChildrenIfSpace:(id)parent level:(int)level -{ - BOOL didExpand = NO; - id dataSource = [self dataSource]; - int count = [dataSource outlineView:self numberOfChildrenOfItem:parent]; - if (level == 0) { - if (count && ([self isItemExpanded:parent] || [self _canAcceptRowCountWithoutScrolling:count])) { - [self expandItem:parent expandChildren:NO]; - didExpand = YES; - } - } else { - // try expanding each of our children. If all expand, then return YES, - // indicating that it may be worth trying the next level - int i; - for (i=0; i < count; i++) { - id child = [dataSource outlineView:self child:i ofItem:parent]; - didExpand = [self _expandChildrenIfSpace:child level:level-1] || didExpand; - } - } - - return didExpand; -} - -- (void)expandChildrenIfSpace -{ - int level = 1; - while ([self _expandChildrenIfSpace:nil level:level]) level++; -} - -@end - -@implementation ReconTableView - -- (BOOL)editable -{ - return editable; -} - -- (void)setEditable:(BOOL)x -{ - editable = x; -} - -- (BOOL)validateItem:(IBAction *) action -{ - if (action == @selector(selectAll:) - || action == @selector(selectConflicts:) - || action == @selector(copyLR:) - || action == @selector(copyRL:) - || action == @selector(leaveAlone:) - || action == @selector(forceNewer:) - || action == @selector(forceOlder:) - || action == @selector(revert:) - || action == @selector(ignorePath:) - || action == @selector(ignoreExt:) - || action == @selector(ignoreName:)) - return editable; - else if (action == @selector(merge:)) { - if (!editable) return NO; - else return [self canDiffSelection]; - } - else if (action == @selector(showDiff:)) { - if ((!editable) || (!([self numberOfSelectedRows]==1))) - return NO; - else return [self canDiffSelection]; - } - else return YES; -} - -- (BOOL)validateMenuItem:(NSMenuItem *)menuItem -{ - return [self validateItem:[menuItem action]]; -} - -- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem -{ - return [self validateItem:[toolbarItem action]]; -} - -- (void)doIgnore:(unichar)c -{ - NSEnumerator *e = [self selectedObjectEnumerator]; - ReconItem *item, *last = nil; - while (item = [e nextObject]) { - [item doIgnore:c]; - last = item; - } - if (last) { // something was selected - MyController* controller = (MyController*) [self dataSource]; - last = [controller updateForIgnore:last]; - [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self rowForItem:last]] byExtendingSelection:NO]; - [self reloadData]; - } -} - -- (IBAction)ignorePath:(id)sender -{ - [self doIgnore:'I']; -} - -- (IBAction)ignoreExt:(id)sender -{ - [self doIgnore:'E']; -} - -- (IBAction)ignoreName:(id)sender -{ - [self doIgnore:'N']; -} - -- (void)doAction:(unichar)c -{ - int numSelected = 0; - NSEnumerator *e = [self selectedObjectEnumerator]; - ReconItem *item, *last = nil; - while (item = [e nextObject]) { - numSelected++; - [item doAction:c]; - last = item; - } - if (numSelected>0) { - int nextRow = [self rowForItem:last] + 1; - if (numSelected == 1 && [self numberOfRows] > nextRow && c!='d') { - // Move to next row, unless already at last row, or if more than one row selected - [self selectRowIndexes:[NSIndexSet indexSetWithIndex:nextRow] byExtendingSelection:NO]; - [self scrollRowToVisible:nextRow]; - } - [self reloadData]; - } -} - -- (IBAction)copyLR:(id)sender -{ - [self doAction:'>']; -} - -- (IBAction)copyRL:(id)sender -{ - [self doAction:'<']; -} - -- (IBAction)leaveAlone:(id)sender -{ - [self doAction:'/']; -} - -- (IBAction)forceOlder:(id)sender -{ - [self doAction:'-']; -} - -- (IBAction)forceNewer:(id)sender -{ - [self doAction:'+']; -} - -- (IBAction)selectConflicts:(id)sender -{ - [self deselectAll:self]; - MyController* controller = (MyController*) [self dataSource]; - NSMutableArray *reconItems = [controller reconItems]; - int i = 0; - for (; i < [reconItems count]; i++) { - ReconItem *item = [reconItems objectAtIndex:i]; - if ([item isConflict]) - [self selectRowIndexes:[NSIndexSet indexSetWithIndex:[self rowForItem:item]] byExtendingSelection:YES]; - } -} - -- (IBAction)revert:(id)sender -{ - [self doAction:'R']; -} - -- (IBAction)merge:(id)sender -{ - [self doAction:'m']; -} - -- (IBAction)showDiff:(id)sender -{ - [self doAction:'d']; -} - -/* There are menu commands for these, but we add some shortcuts so you don't - have to press the Command key */ -- (void)keyDown:(NSEvent *)event -{ - /* some keys return zero-length strings */ - if ([[event characters] length] == 0) { - [super keyDown:event]; - return; - } - - /* actions are disabled when when menu items are */ - if (!editable) { - [super keyDown:event]; - return; - } - - unichar c = [[event characters] characterAtIndex:0]; - switch (c) { - case '>': - case NSRightArrowFunctionKey: - [self doAction:'>']; - break; - case '<': - case NSLeftArrowFunctionKey: - [self doAction:'<']; - break; - case '?': - case '/': - [self doAction:'/']; - break; - default: - [super keyDown:event]; - break; - } -} - -- (BOOL)canDiffSelection -{ - BOOL canDiff = YES; - NSEnumerator *e = [self selectedObjectEnumerator]; - ReconItem *item; - while (item = [e nextObject]) { - if (![item canDiff]) canDiff= NO; - } - return canDiff; -} - -/* Override default highlight colour because it's hard to see the - conflict/resolution icons */ -- (id)_highlightColorForCell:(NSCell *)cell -{ - if(([[self window] firstResponder] == self) && - [[self window] isMainWindow] && - [[self window] isKeyWindow]) - - return [NSColor colorWithCalibratedRed:0.7 green:0.75 blue:0.8 alpha:1.0]; - else return [NSColor colorWithCalibratedRed:0.8 green:0.8 blue:0.8 alpha:1.0]; -} - -@end diff --git a/src/uimacnew/TrevorsUnison.icns b/src/uimacnew/TrevorsUnison.icns Binary files differdeleted file mode 100644 index e1fa6f8..0000000 --- a/src/uimacnew/TrevorsUnison.icns +++ /dev/null diff --git a/src/uimacnew/Unison.icns b/src/uimacnew/Unison.icns Binary files differdeleted file mode 100644 index b7a4e60..0000000 --- a/src/uimacnew/Unison.icns +++ /dev/null diff --git a/src/uimacnew/UnisonToolbar.h b/src/uimacnew/UnisonToolbar.h deleted file mode 100644 index ba67d6b..0000000 --- a/src/uimacnew/UnisonToolbar.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// UnisonToolbar.h -// -// Extended NSToolbar with several views -// -// Created by Ben Willmore on Sun March 12 2006. -// Copyright (c) 2006, licensed under GNU GPL. -// - -#import <AppKit/AppKit.h> - -@class ReconTableView, MyController; - -@interface UnisonToolbar : NSToolbar -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060) - <NSToolbarDelegate> -#endif -{ - ReconTableView* tableView; - MyController* myController; - NSString* currentView; - NSView* tableModeView; -} - -- initWithIdentifier:(NSString *) identifier :(MyController *) aController :(ReconTableView *) aTableView; -- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted; -- (NSArray *) itemIdentifiersForView: (NSString *) whichView; -- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar; -- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar; -- (void) setView: (NSString *) whichView; -- (void)takeTableModeView:(NSView *)view; - -@end diff --git a/src/uimacnew/UnisonToolbar.m b/src/uimacnew/UnisonToolbar.m deleted file mode 100644 index ab6ee91..0000000 --- a/src/uimacnew/UnisonToolbar.m +++ /dev/null @@ -1,215 +0,0 @@ -// -// UnisonToolbar.h -// -// Extended NSToolbar with several views -// -// Created by Ben Willmore on Sun March 12 2006. -// Copyright (c) 2006, licensed under GNU GPL. -// - -#import "UnisonToolbar.h" -#import "MyController.h" - -static NSString* QuitItemIdentifier = @"Quit"; -static NSString* OpenItemIdentifier = @"Open"; -static NSString* NewItemIdentifier = @"New"; -static NSString* GoItemIdentifier = @"Go"; -static NSString* CancelItemIdentifier = @"Cancel"; -static NSString* SaveItemIdentifier = @"Save"; -static NSString* RestartItemIdentifier = @"Restart"; -static NSString* RescanItemIdentifier = @"Rescan"; -static NSString* RToLItemIdentifier = @"RToL"; -static NSString* MergeItemIdentifier = @"Merge"; -static NSString* LToRItemIdentifier = @"LToR"; -static NSString* SkipItemIdentifier = @"Skip"; -static NSString* DiffItemIdentifier = @"Diff"; -static NSString* TableModeIdentifier = @"TableMode"; - -@implementation UnisonToolbar - -- initWithIdentifier:(NSString *) identifier :(MyController *) aController :(ReconTableView *) aTableView { - - if ((self = [super initWithIdentifier: identifier])) { - [self setAllowsUserCustomization: NO]; - [self setAutosavesConfiguration: NO]; - [self setDelegate: self]; - myController = aController; - tableView = aTableView; - currentView = @""; - } - - return self; -} - -- (void)takeTableModeView:(NSView *)view -{ - tableModeView = [view retain]; - [view setHidden:YES]; -} - -- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted { - - NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease]; - if ([itemIdent isEqual: QuitItemIdentifier]) { - [toolbarItem setLabel: @"Quit"]; - [toolbarItem setImage: [NSImage imageNamed: @"quit.tif"]]; - [toolbarItem setTarget:NSApp]; - [toolbarItem setAction:@selector(terminate:)]; - } - else if ([itemIdent isEqual: OpenItemIdentifier]) { - [toolbarItem setLabel: @"Open"]; - [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(openButton:)]; - } - else if ([itemIdent isEqual: NewItemIdentifier]) { - [toolbarItem setLabel: @"New"]; - [toolbarItem setImage: [NSImage imageNamed: @"add.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(createButton:)]; - } - else if ([itemIdent isEqual: CancelItemIdentifier]) { - [toolbarItem setLabel: @"Cancel"]; - [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(chooseProfiles)]; - } - else if ([itemIdent isEqual: SaveItemIdentifier]) { - [toolbarItem setLabel: @"Save"]; - [toolbarItem setImage: [NSImage imageNamed: @"save.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(saveProfileButton:)]; - } - else if ([itemIdent isEqual: GoItemIdentifier]) { - [toolbarItem setLabel: @"Go"]; - [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(syncButton:)]; - } - else if ([itemIdent isEqual: RestartItemIdentifier]) { - [toolbarItem setLabel: @"Restart"]; - [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(restartButton:)]; - } - else if ([itemIdent isEqual: RescanItemIdentifier]) { - [toolbarItem setLabel: @"Rescan"]; - [toolbarItem setImage: [NSImage imageNamed: @"rescan.tif"]]; - [toolbarItem setTarget:myController]; - [toolbarItem setAction:@selector(rescan:)]; - } - else if ([itemIdent isEqual: RToLItemIdentifier]) { - [toolbarItem setLabel: @"Right to left"]; - [toolbarItem setImage: [NSImage imageNamed: @"left.tif"]]; - [toolbarItem setTarget:tableView]; - [toolbarItem setAction:@selector(copyRL:)]; - } - else if ([itemIdent isEqual: MergeItemIdentifier]) { - [toolbarItem setLabel: @"Merge"]; - [toolbarItem setImage: [NSImage imageNamed: @"merge.tif"]]; - [toolbarItem setTarget:tableView]; - [toolbarItem setAction:@selector(merge:)]; - } - else if ([itemIdent isEqual: LToRItemIdentifier]) { - [toolbarItem setLabel: @"Left to right"]; - [toolbarItem setImage: [NSImage imageNamed: @"right.tif"]]; - [toolbarItem setTarget:tableView]; - [toolbarItem setAction:@selector(copyLR:)]; - } - else if ([itemIdent isEqual: SkipItemIdentifier]) { - [toolbarItem setLabel: @"Skip"]; - [toolbarItem setImage: [NSImage imageNamed: @"skip.tif"]]; - [toolbarItem setTarget:tableView]; - [toolbarItem setAction:@selector(leaveAlone:)]; - } - else if ([itemIdent isEqual: DiffItemIdentifier]) { - [toolbarItem setLabel: @"Diff"]; - [toolbarItem setImage: [NSImage imageNamed: @"diff.tif"]]; - [toolbarItem setTarget:tableView]; - [toolbarItem setAction:@selector(showDiff:)]; - } - else if ([itemIdent isEqual: TableModeIdentifier]) { - [toolbarItem setLabel:@"Layout"]; - [toolbarItem setToolTip:@"Switch table nesting"]; - [tableModeView setHidden:NO]; - [toolbarItem setView:tableModeView]; - [toolbarItem setMinSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)]; - [toolbarItem setMaxSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)]; - } - - return toolbarItem; -} - -- (NSArray *) itemIdentifiersForView: (NSString *) whichView { - if ([whichView isEqual: @"chooseProfileView"]) { - return [NSArray arrayWithObjects: QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil]; - } - else if ([whichView isEqual: @"preferencesView"]) { - return [NSArray arrayWithObjects: QuitItemIdentifier, SaveItemIdentifier, CancelItemIdentifier, nil]; - } - else if ([whichView isEqual: @"ConnectingView"]) { - return [NSArray arrayWithObjects: QuitItemIdentifier, nil]; - } - else if ([whichView isEqual: @"updatesView"]) { - return [NSArray arrayWithObjects: QuitItemIdentifier, - RestartItemIdentifier, - NSToolbarSeparatorItemIdentifier, - GoItemIdentifier, - RescanItemIdentifier, - NSToolbarSeparatorItemIdentifier, - RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, - SkipItemIdentifier, NSToolbarSeparatorItemIdentifier, - DiffItemIdentifier, - TableModeIdentifier, nil]; - } - else { - return [NSArray arrayWithObjects: QuitItemIdentifier, Nil]; - } -} - -- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar { - return [NSArray arrayWithObjects: QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil]; -} - -- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar { - return [NSArray arrayWithObjects: QuitItemIdentifier, OpenItemIdentifier, NewItemIdentifier, - CancelItemIdentifier, SaveItemIdentifier, - GoItemIdentifier, RestartItemIdentifier, RescanItemIdentifier, - RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, - SkipItemIdentifier, DiffItemIdentifier, - NSToolbarSeparatorItemIdentifier, nil]; -} - -- (void) setView: (NSString *) whichView { - if ([whichView isEqual:currentView]) return; - - currentView = whichView; - - int i; - NSArray *identifiers; - NSString *oldIdentifier; - NSString *newIdentifier; - - identifiers=[self itemIdentifiersForView:whichView]; - for (i=0; i<[identifiers count]; i++) { - newIdentifier = [identifiers objectAtIndex:i]; - if (i<[[self items] count]) { - oldIdentifier = [[[self items] objectAtIndex:i] itemIdentifier]; - if ([newIdentifier isEqual: oldIdentifier] ) { - [[[self items] objectAtIndex:i] setEnabled:YES]; - } - else { - [self removeItemAtIndex:i]; - [self insertItemWithItemIdentifier:newIdentifier atIndex:i]; - } - } - else { - [self insertItemWithItemIdentifier:newIdentifier atIndex:i]; - } - } - while ([[self items] count] > [identifiers count]) { - [self removeItemAtIndex:[identifiers count]]; - } -} - -@end diff --git a/src/uimacnew/cltool.c b/src/uimacnew/cltool.c deleted file mode 100644 index dac3204..0000000 --- a/src/uimacnew/cltool.c +++ /dev/null @@ -1,67 +0,0 @@ -/* cltool.c - - This is a command-line tool for Mac OS X that looks up the unison - application, where ever it has been installed, and runs it. This - is intended to be installed in a standard place (e.g., - /usr/bin/unison) to make it easy to invoke unison as a server, or - to use unison from the command line when it has been installed with - a GUI. - - */ - -#import <CoreServices/CoreServices.h> -#import <ApplicationServices/ApplicationServices.h> -#include <stdio.h> - -#define BUFSIZE 1024 -#define EXECPATH "/Contents/MacOS/Unison" - -int main(int argc, char **argv) { - - /* Look up the application by its bundle identifier, which is given - in the Info.plist file. This will continue to work even if the - user changes the name of the application, unlike - fullPathForApplication. */ - - FSRef fsref; - OSStatus status; - int len; - char buf[BUFSIZE]; - - status = LSFindApplicationForInfo(kLSUnknownCreator,CFSTR("edu.upenn.cis.Unison"),NULL,&fsref,NULL); - if (status) { - if (status == kLSApplicationNotFoundErr) { - fprintf(stderr,"Error: can't find the Unison application using the Launch Services database.\n"); - fprintf(stderr,"Try launching Unison from the Finder, and then try this again.\n",status); - } - else fprintf(stderr,"Error: can't find Unison application (%ld).\n",status); - exit(1); - } - - status = FSRefMakePath(&fsref,(UInt8 *)buf,BUFSIZE); - if (status) { - fprintf(stderr,"Error: problem building path to Unison application (%ld).\n",status); - exit(1); - } - - len = strlen(buf); - if (len + strlen(EXECPATH) + 1 > BUFSIZE) { - fprintf(stderr,"Error: path to Unison application exceeds internal buffer size (%d).\n",BUFSIZE); - exit(1); - } - strcat(buf,EXECPATH); - - /* It's important to pass the absolute path on to the GUI, - that's how it knows where to find the bundle, e.g., the - Info.plist file. */ - argv[0] = buf; - - // printf("The Unison executable is at %s\n",argv[0]); - // printf("Running...\n"); - - execv(argv[0],argv); - - /* If we get here the execv has failed; print an error message to stderr */ - perror("unison"); - exit(1); -} diff --git a/src/uimacnew/main.m b/src/uimacnew/main.m deleted file mode 100644 index 668a287..0000000 --- a/src/uimacnew/main.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// main.m -// uimac -// -// Created by Trevor Jim on Sun Aug 17 2003. -// Copyright (c) 2003, see file COPYING for details. -// - -#import <Cocoa/Cocoa.h> -#import "Bridge.h" - -int main(int argc, const char *argv[]) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - int i; - - /* When you click-start or use the open command, the program is invoked with - a command-line arg of the form -psn_XXXXXXXXX. The XXXXXXXX is a "process - serial number" and it seems to be important for Carbon programs. We need - to get rid of it if it's there so the ocaml code won't exit. Note, the - extra arg is not added if the binary is invoked directly from the command - line without using the open command. */ - if (argc == 2 && strncmp(argv[1],"-psn_",5) == 0) { - argc--; - argv[1] = NULL; - } - - [Bridge startup:argv]; - - /* Check for invocations that don't start up the gui */ - for (i=1; i<argc; i++) { - if (!strcmp(argv[i],"-doc") || - !strcmp(argv[i],"-help") || - !strcmp(argv[i],"-version") || - !strcmp(argv[i],"-server") || - !strcmp(argv[i],"-socket") || - !strcmp(argv[i],"-ui")) { - NSLog(@"Calling nonGuiStartup"); - @try { - ocamlCall("x", "unisonNonGuiStartup"); - } @catch (NSException *ex) { - NSLog(@"Uncaught exception: %@", [ex reason]); - exit(1); - } - /* If we get here without exiting first, the non GUI startup detected a - -ui graphic or command-line profile, and we should in fact start the GUI. */ - } - } - - /* go! */ - [pool release]; - return NSApplicationMain(argc, argv); -} diff --git a/src/uimacnew/progressicons/ProgressBarAdvanced.png b/src/uimacnew/progressicons/ProgressBarAdvanced.png Binary files differdeleted file mode 100644 index 98ae868..0000000 --- a/src/uimacnew/progressicons/ProgressBarAdvanced.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarBlue.png b/src/uimacnew/progressicons/ProgressBarBlue.png Binary files differdeleted file mode 100644 index b4f4911..0000000 --- a/src/uimacnew/progressicons/ProgressBarBlue.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarEndAdvanced.png b/src/uimacnew/progressicons/ProgressBarEndAdvanced.png Binary files differdeleted file mode 100644 index b1eeaff..0000000 --- a/src/uimacnew/progressicons/ProgressBarEndAdvanced.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarEndBlue.png b/src/uimacnew/progressicons/ProgressBarEndBlue.png Binary files differdeleted file mode 100644 index 3621e32..0000000 --- a/src/uimacnew/progressicons/ProgressBarEndBlue.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarEndGray.png b/src/uimacnew/progressicons/ProgressBarEndGray.png Binary files differdeleted file mode 100644 index 549efc1..0000000 --- a/src/uimacnew/progressicons/ProgressBarEndGray.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarEndGreen.png b/src/uimacnew/progressicons/ProgressBarEndGreen.png Binary files differdeleted file mode 100644 index 721e258..0000000 --- a/src/uimacnew/progressicons/ProgressBarEndGreen.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarEndWhite.png b/src/uimacnew/progressicons/ProgressBarEndWhite.png Binary files differdeleted file mode 100644 index 3eb87fb..0000000 --- a/src/uimacnew/progressicons/ProgressBarEndWhite.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarGray.png b/src/uimacnew/progressicons/ProgressBarGray.png Binary files differdeleted file mode 100644 index af3bc9d..0000000 --- a/src/uimacnew/progressicons/ProgressBarGray.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarGreen.png b/src/uimacnew/progressicons/ProgressBarGreen.png Binary files differdeleted file mode 100644 index c11fe3a..0000000 --- a/src/uimacnew/progressicons/ProgressBarGreen.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarLightGreen.png b/src/uimacnew/progressicons/ProgressBarLightGreen.png Binary files differdeleted file mode 100644 index 18a1535..0000000 --- a/src/uimacnew/progressicons/ProgressBarLightGreen.png +++ /dev/null diff --git a/src/uimacnew/progressicons/ProgressBarWhite.png b/src/uimacnew/progressicons/ProgressBarWhite.png Binary files differdeleted file mode 100644 index ef368ae..0000000 --- a/src/uimacnew/progressicons/ProgressBarWhite.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_Absent.png b/src/uimacnew/tableicons/Change_Absent.png Binary files differdeleted file mode 100644 index 62c827f..0000000 --- a/src/uimacnew/tableicons/Change_Absent.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_Created.png b/src/uimacnew/tableicons/Change_Created.png Binary files differdeleted file mode 100644 index da60736..0000000 --- a/src/uimacnew/tableicons/Change_Created.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_Deleted.png b/src/uimacnew/tableicons/Change_Deleted.png Binary files differdeleted file mode 100644 index 7a19637..0000000 --- a/src/uimacnew/tableicons/Change_Deleted.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_Modified.png b/src/uimacnew/tableicons/Change_Modified.png Binary files differdeleted file mode 100644 index 3ae7761..0000000 --- a/src/uimacnew/tableicons/Change_Modified.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_PropsChanged.png b/src/uimacnew/tableicons/Change_PropsChanged.png Binary files differdeleted file mode 100644 index 721f78e..0000000 --- a/src/uimacnew/tableicons/Change_PropsChanged.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Change_Unmodified.png b/src/uimacnew/tableicons/Change_Unmodified.png Binary files differdeleted file mode 100644 index 4090504..0000000 --- a/src/uimacnew/tableicons/Change_Unmodified.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Outline-Deep.png b/src/uimacnew/tableicons/Outline-Deep.png Binary files differdeleted file mode 100644 index 74ecc68..0000000 --- a/src/uimacnew/tableicons/Outline-Deep.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Outline-Flat.png b/src/uimacnew/tableicons/Outline-Flat.png Binary files differdeleted file mode 100644 index b404acc..0000000 --- a/src/uimacnew/tableicons/Outline-Flat.png +++ /dev/null diff --git a/src/uimacnew/tableicons/Outline-Flattened.png b/src/uimacnew/tableicons/Outline-Flattened.png Binary files differdeleted file mode 100644 index 55e9d37..0000000 --- a/src/uimacnew/tableicons/Outline-Flattened.png +++ /dev/null diff --git a/src/uimacnew/tableicons/table-conflict.tif b/src/uimacnew/tableicons/table-conflict.tif Binary files differdeleted file mode 100644 index b84cd1b..0000000 --- a/src/uimacnew/tableicons/table-conflict.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-error.tif b/src/uimacnew/tableicons/table-error.tif Binary files differdeleted file mode 100644 index 72ebafb..0000000 --- a/src/uimacnew/tableicons/table-error.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-left-blue.tif b/src/uimacnew/tableicons/table-left-blue.tif Binary files differdeleted file mode 100644 index 9a2ad1b..0000000 --- a/src/uimacnew/tableicons/table-left-blue.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-left-green.tif b/src/uimacnew/tableicons/table-left-green.tif Binary files differdeleted file mode 100644 index e5f2909..0000000 --- a/src/uimacnew/tableicons/table-left-green.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-merge.tif b/src/uimacnew/tableicons/table-merge.tif Binary files differdeleted file mode 100644 index beb33ff..0000000 --- a/src/uimacnew/tableicons/table-merge.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-mixed.tif b/src/uimacnew/tableicons/table-mixed.tif Binary files differdeleted file mode 100644 index 0fb64e6..0000000 --- a/src/uimacnew/tableicons/table-mixed.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-right-blue.tif b/src/uimacnew/tableicons/table-right-blue.tif Binary files differdeleted file mode 100644 index 6cc7f30..0000000 --- a/src/uimacnew/tableicons/table-right-blue.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-right-green.tif b/src/uimacnew/tableicons/table-right-green.tif Binary files differdeleted file mode 100644 index 6a8a420..0000000 --- a/src/uimacnew/tableicons/table-right-green.tif +++ /dev/null diff --git a/src/uimacnew/tableicons/table-skip.tif b/src/uimacnew/tableicons/table-skip.tif Binary files differdeleted file mode 100644 index 4cc8b8c..0000000 --- a/src/uimacnew/tableicons/table-skip.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/add.tif b/src/uimacnew/toolbar/add.tif Binary files differdeleted file mode 100644 index 7d1e413..0000000 --- a/src/uimacnew/toolbar/add.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/diff.tif b/src/uimacnew/toolbar/diff.tif Binary files differdeleted file mode 100644 index c424403..0000000 --- a/src/uimacnew/toolbar/diff.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/go.tif b/src/uimacnew/toolbar/go.tif Binary files differdeleted file mode 100644 index ed368e3..0000000 --- a/src/uimacnew/toolbar/go.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/left.tif b/src/uimacnew/toolbar/left.tif Binary files differdeleted file mode 100644 index 0633aff..0000000 --- a/src/uimacnew/toolbar/left.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/merge.tif b/src/uimacnew/toolbar/merge.tif Binary files differdeleted file mode 100644 index d41dc06..0000000 --- a/src/uimacnew/toolbar/merge.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/quit.tif b/src/uimacnew/toolbar/quit.tif Binary files differdeleted file mode 100644 index f2911c2..0000000 --- a/src/uimacnew/toolbar/quit.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/rescan.tif b/src/uimacnew/toolbar/rescan.tif Binary files differdeleted file mode 100644 index 5e9ac45..0000000 --- a/src/uimacnew/toolbar/rescan.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/restart.tif b/src/uimacnew/toolbar/restart.tif Binary files differdeleted file mode 100644 index fe58a07..0000000 --- a/src/uimacnew/toolbar/restart.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/right.tif b/src/uimacnew/toolbar/right.tif Binary files differdeleted file mode 100644 index 1391f49..0000000 --- a/src/uimacnew/toolbar/right.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/save.tif b/src/uimacnew/toolbar/save.tif Binary files differdeleted file mode 100644 index bc1a468..0000000 --- a/src/uimacnew/toolbar/save.tif +++ /dev/null diff --git a/src/uimacnew/toolbar/skip.tif b/src/uimacnew/toolbar/skip.tif Binary files differdeleted file mode 100644 index 7ca1bb9..0000000 --- a/src/uimacnew/toolbar/skip.tif +++ /dev/null diff --git a/src/uimacnew/uimacnew.xcodeproj/project.pbxproj b/src/uimacnew/uimacnew.xcodeproj/project.pbxproj deleted file mode 100644 index 1a75f2e..0000000 --- a/src/uimacnew/uimacnew.xcodeproj/project.pbxproj +++ /dev/null @@ -1,746 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 42; - objects = { - -/* Begin PBXAggregateTarget section */ - 2A124E780DE1C48400524237 /* Create ExternalSettings */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 2A124E7C0DE1C4A200524237 /* Build configuration list for PBXAggregateTarget "Create ExternalSettings" */; - buildPhases = ( - 2A124E7E0DE1C4BE00524237 /* Run Script (version, ocaml lib dir) */, - ); - dependencies = ( - ); - name = "Create ExternalSettings"; - productName = "Create ExternalSettings"; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 2A3C3F3309922A8000E404E9 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2A3C3F3209922A8000E404E9 /* Growl.framework */; }; - 2A3C3F7D09922D4900E404E9 /* NotificationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C3F7B09922D4900E404E9 /* NotificationController.m */; }; - 2A3C3FAE0992323F00E404E9 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A3C3F3209922A8000E404E9 /* Growl.framework */; }; - 2E282CC80D9AE2B000439D01 /* unison-blob.o in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E282CC70D9AE2B000439D01 /* unison-blob.o */; }; - 44042CB60BE4FC9B00A6BBB2 /* ProgressCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */; }; - 44042D1B0BE52AED00A6BBB2 /* ProgressBarAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */; }; - 44042D1C0BE52AEE00A6BBB2 /* ProgressBarBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */; }; - 44042D1D0BE52AEE00A6BBB2 /* ProgressBarEndAdvanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */; }; - 44042D1E0BE52AEE00A6BBB2 /* ProgressBarEndBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */; }; - 44042D1F0BE52AEE00A6BBB2 /* ProgressBarEndGray.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */; }; - 44042D200BE52AEE00A6BBB2 /* ProgressBarEndGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */; }; - 44042D210BE52AEE00A6BBB2 /* ProgressBarEndWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */; }; - 44042D220BE52AEE00A6BBB2 /* ProgressBarGray.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */; }; - 44042D230BE52AEE00A6BBB2 /* ProgressBarGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */; }; - 44042D240BE52AEE00A6BBB2 /* ProgressBarLightGreen.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */; }; - 44042D250BE52AEE00A6BBB2 /* ProgressBarWhite.png in Resources */ = {isa = PBXBuildFile; fileRef = 44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */; }; - 440EEAF30C03EC3D00ACAAB0 /* Change_Created.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */; }; - 440EEAF90C03F0B800ACAAB0 /* Change_Deleted.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */; }; - 440EEAFA0C03F0B800ACAAB0 /* Change_Modified.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */; }; - 440EEAFB0C03F0B800ACAAB0 /* Change_PropsChanged.png in Resources */ = {isa = PBXBuildFile; fileRef = 440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */; }; - 445A291B0BFA5B3300E4E641 /* Outline-Deep.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A291A0BFA5B3300E4E641 /* Outline-Deep.png */; }; - 445A29270BFA5C1200E4E641 /* Outline-Flat.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A29260BFA5C1200E4E641 /* Outline-Flat.png */; }; - 445A29290BFA5C1B00E4E641 /* Outline-Flattened.png in Resources */ = {isa = PBXBuildFile; fileRef = 445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */; }; - 445A2A5E0BFAB6C300E4E641 /* ImageAndTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */; }; - 449F03E10BE00DE9003F15C8 /* Bridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 449F03DF0BE00DE9003F15C8 /* Bridge.m */; }; - 44A794A10BE16C380069680C /* ExceptionHandling.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44A794A00BE16C380069680C /* ExceptionHandling.framework */; }; - 44A797F40BE3F9B70069680C /* table-mixed.tif in Resources */ = {isa = PBXBuildFile; fileRef = 44A797F10BE3F9B70069680C /* table-mixed.tif */; }; - 44F472B10C0DB735006428EF /* Change_Absent.png in Resources */ = {isa = PBXBuildFile; fileRef = 44F472AF0C0DB735006428EF /* Change_Absent.png */; }; - 44F472B20C0DB735006428EF /* Change_Unmodified.png in Resources */ = {isa = PBXBuildFile; fileRef = 44F472B00C0DB735006428EF /* Change_Unmodified.png */; }; - 69C625E60664EC3300B3C46A /* MainMenu.nib in Resources */ = {isa = PBXBuildFile; fileRef = 29B97318FDCFA39411CA2CEA /* MainMenu.nib */; }; - 69C625E70664EC3300B3C46A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; - 69C625E80664EC3300B3C46A /* Unison.icns in Resources */ = {isa = PBXBuildFile; fileRef = 69C625CA0664E94E00B3C46A /* Unison.icns */; }; - 69C625EA0664EC3300B3C46A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; - 69C625EB0664EC3300B3C46A /* MyController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69660DC704F08CC100CF23A4 /* MyController.m */; }; - 69C625EC0664EC3300B3C46A /* ProfileController.m in Sources */ = {isa = PBXBuildFile; fileRef = 690F564504F11EC300CF23A4 /* ProfileController.m */; }; - 69C625ED0664EC3300B3C46A /* ReconItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 69D3C6F904F1CC3700CF23A4 /* ReconItem.m */; }; - 69C625EE0664EC3300B3C46A /* ReconTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 69BA7DA904FD695200CF23A4 /* ReconTableView.m */; }; - 69C625EF0664EC3300B3C46A /* PreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 697985CE050CFA2D00CF23A4 /* PreferencesController.m */; }; - 69C625F00664EC3300B3C46A /* ProfileTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 691CE181051BB44A00CF23A4 /* ProfileTableView.m */; }; - 69C625F20664EC3300B3C46A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; - 69E407BA07EB95AA00D37AA1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69E407B907EB95AA00D37AA1 /* Security.framework */; }; - B518071C09D6652100B1B21F /* add.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071209D6652100B1B21F /* add.tif */; }; - B518071D09D6652100B1B21F /* diff.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071309D6652100B1B21F /* diff.tif */; }; - B518071E09D6652100B1B21F /* go.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071409D6652100B1B21F /* go.tif */; }; - B518071F09D6652100B1B21F /* left.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071509D6652100B1B21F /* left.tif */; }; - B518072009D6652100B1B21F /* merge.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071609D6652100B1B21F /* merge.tif */; }; - B518072109D6652100B1B21F /* quit.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071709D6652100B1B21F /* quit.tif */; }; - B518072209D6652100B1B21F /* restart.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071809D6652100B1B21F /* restart.tif */; }; - B518072309D6652100B1B21F /* right.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071909D6652100B1B21F /* right.tif */; }; - B518072409D6652100B1B21F /* save.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071A09D6652100B1B21F /* save.tif */; }; - B518072509D6652100B1B21F /* skip.tif in Resources */ = {isa = PBXBuildFile; fileRef = B518071B09D6652100B1B21F /* skip.tif */; }; - B554004109C4E5AA0089E1C3 /* UnisonToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */; }; - B5B44C1909DF61A4000DC7AF /* table-conflict.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1109DF61A4000DC7AF /* table-conflict.tif */; }; - B5B44C1A09DF61A4000DC7AF /* table-error.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1209DF61A4000DC7AF /* table-error.tif */; }; - B5B44C1B09DF61A4000DC7AF /* table-left-blue.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */; }; - B5B44C1C09DF61A4000DC7AF /* table-left-green.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1409DF61A4000DC7AF /* table-left-green.tif */; }; - B5B44C1D09DF61A4000DC7AF /* table-merge.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1509DF61A4000DC7AF /* table-merge.tif */; }; - B5B44C1E09DF61A4000DC7AF /* table-right-blue.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */; }; - B5B44C1F09DF61A4000DC7AF /* table-right-green.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1709DF61A4000DC7AF /* table-right-green.tif */; }; - B5B44C2009DF61A4000DC7AF /* table-skip.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5B44C1809DF61A4000DC7AF /* table-skip.tif */; }; - B5E03B3909E38B9E0058C7B9 /* rescan.tif in Resources */ = {isa = PBXBuildFile; fileRef = B5E03B3809E38B9E0058C7B9 /* rescan.tif */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 2A124E7F0DE1C4E400524237 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2A124E780DE1C48400524237; - remoteInfo = "Create ExternalSettings"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 2A3C3F3709922AA600E404E9 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - 2A3C3F3309922A8000E404E9 /* Growl.framework in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; - 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; - 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; - 29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; }; - 2A3C3F3209922A8000E404E9 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Growl.framework; sourceTree = "<group>"; }; - 2A3C3F7A09922D4900E404E9 /* NotificationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NotificationController.h; sourceTree = "<group>"; }; - 2A3C3F7B09922D4900E404E9 /* NotificationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NotificationController.m; sourceTree = "<group>"; }; - 2E282CC70D9AE2B000439D01 /* unison-blob.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; name = "unison-blob.o"; path = "../unison-blob.o"; sourceTree = SOURCE_ROOT; }; - 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = ExternalSettings.xcconfig; sourceTree = "<group>"; }; - 44042CB30BE4FC9B00A6BBB2 /* ProgressCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProgressCell.h; sourceTree = "<group>"; }; - 44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProgressCell.m; sourceTree = "<group>"; }; - 44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarAdvanced.png; path = progressicons/ProgressBarAdvanced.png; sourceTree = "<group>"; }; - 44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarBlue.png; path = progressicons/ProgressBarBlue.png; sourceTree = "<group>"; }; - 44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndAdvanced.png; path = progressicons/ProgressBarEndAdvanced.png; sourceTree = "<group>"; }; - 44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndBlue.png; path = progressicons/ProgressBarEndBlue.png; sourceTree = "<group>"; }; - 44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGray.png; path = progressicons/ProgressBarEndGray.png; sourceTree = "<group>"; }; - 44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndGreen.png; path = progressicons/ProgressBarEndGreen.png; sourceTree = "<group>"; }; - 44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarEndWhite.png; path = progressicons/ProgressBarEndWhite.png; sourceTree = "<group>"; }; - 44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGray.png; path = progressicons/ProgressBarGray.png; sourceTree = "<group>"; }; - 44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarGreen.png; path = progressicons/ProgressBarGreen.png; sourceTree = "<group>"; }; - 44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarLightGreen.png; path = progressicons/ProgressBarLightGreen.png; sourceTree = "<group>"; }; - 44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ProgressBarWhite.png; path = progressicons/ProgressBarWhite.png; sourceTree = "<group>"; }; - 440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Created.png; sourceTree = "<group>"; }; - 440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Deleted.png; sourceTree = "<group>"; }; - 440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Modified.png; sourceTree = "<group>"; }; - 440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_PropsChanged.png; sourceTree = "<group>"; }; - 445A291A0BFA5B3300E4E641 /* Outline-Deep.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Deep.png"; sourceTree = "<group>"; }; - 445A29260BFA5C1200E4E641 /* Outline-Flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Flat.png"; sourceTree = "<group>"; }; - 445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Outline-Flattened.png"; sourceTree = "<group>"; }; - 445A2A5B0BFAB6A100E4E641 /* ImageAndTextCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageAndTextCell.h; sourceTree = "<group>"; }; - 445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ImageAndTextCell.m; sourceTree = "<group>"; }; - 449F03DE0BE00DE9003F15C8 /* Bridge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bridge.h; sourceTree = "<group>"; }; - 449F03DF0BE00DE9003F15C8 /* Bridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Bridge.m; sourceTree = "<group>"; }; - 44A794A00BE16C380069680C /* ExceptionHandling.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ExceptionHandling.framework; path = /System/Library/Frameworks/ExceptionHandling.framework; sourceTree = "<absolute>"; }; - 44A797F10BE3F9B70069680C /* table-mixed.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-mixed.tif"; sourceTree = "<group>"; }; - 44F472AF0C0DB735006428EF /* Change_Absent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Absent.png; sourceTree = "<group>"; }; - 44F472B00C0DB735006428EF /* Change_Unmodified.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Change_Unmodified.png; sourceTree = "<group>"; }; - 690F564404F11EC300CF23A4 /* ProfileController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProfileController.h; sourceTree = "<group>"; }; - 690F564504F11EC300CF23A4 /* ProfileController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProfileController.m; sourceTree = "<group>"; }; - 691CE180051BB44A00CF23A4 /* ProfileTableView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ProfileTableView.h; sourceTree = "<group>"; }; - 691CE181051BB44A00CF23A4 /* ProfileTableView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ProfileTableView.m; sourceTree = "<group>"; }; - 69660DC604F08CC100CF23A4 /* MyController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = MyController.h; sourceTree = "<group>"; }; - 69660DC704F08CC100CF23A4 /* MyController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = MyController.m; sourceTree = "<group>"; }; - 697985CD050CFA2D00CF23A4 /* PreferencesController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PreferencesController.h; sourceTree = "<group>"; }; - 697985CE050CFA2D00CF23A4 /* PreferencesController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = PreferencesController.m; sourceTree = "<group>"; }; - 69BA7DA804FD695200CF23A4 /* ReconTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReconTableView.h; sourceTree = "<group>"; }; - 69BA7DA904FD695200CF23A4 /* ReconTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReconTableView.m; sourceTree = "<group>"; }; - 69C625CA0664E94E00B3C46A /* Unison.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Unison.icns; sourceTree = "<group>"; }; - 69C625F40664EC3300B3C46A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - 69C625F50664EC3300B3C46A /* Unison.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Unison.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 69D3C6F904F1CC3700CF23A4 /* ReconItem.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = ReconItem.m; sourceTree = "<group>"; }; - 69D3C6FA04F1CC3700CF23A4 /* ReconItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ReconItem.h; sourceTree = "<group>"; }; - 69E407B907EB95AA00D37AA1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = /System/Library/Frameworks/Security.framework; sourceTree = "<absolute>"; }; - B518071209D6652100B1B21F /* add.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = add.tif; sourceTree = "<group>"; }; - B518071309D6652100B1B21F /* diff.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = diff.tif; sourceTree = "<group>"; }; - B518071409D6652100B1B21F /* go.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = go.tif; sourceTree = "<group>"; }; - B518071509D6652100B1B21F /* left.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = left.tif; sourceTree = "<group>"; }; - B518071609D6652100B1B21F /* merge.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = merge.tif; sourceTree = "<group>"; }; - B518071709D6652100B1B21F /* quit.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = quit.tif; sourceTree = "<group>"; }; - B518071809D6652100B1B21F /* restart.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = restart.tif; sourceTree = "<group>"; }; - B518071909D6652100B1B21F /* right.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = right.tif; sourceTree = "<group>"; }; - B518071A09D6652100B1B21F /* save.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = save.tif; sourceTree = "<group>"; }; - B518071B09D6652100B1B21F /* skip.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = skip.tif; sourceTree = "<group>"; }; - B554003E09C4E5A00089E1C3 /* UnisonToolbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UnisonToolbar.h; sourceTree = "<group>"; }; - B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = UnisonToolbar.m; sourceTree = "<group>"; }; - B5B44C1109DF61A4000DC7AF /* table-conflict.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-conflict.tif"; sourceTree = "<group>"; }; - B5B44C1209DF61A4000DC7AF /* table-error.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-error.tif"; sourceTree = "<group>"; }; - B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-left-blue.tif"; sourceTree = "<group>"; }; - B5B44C1409DF61A4000DC7AF /* table-left-green.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-left-green.tif"; sourceTree = "<group>"; }; - B5B44C1509DF61A4000DC7AF /* table-merge.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-merge.tif"; sourceTree = "<group>"; }; - B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-right-blue.tif"; sourceTree = "<group>"; }; - B5B44C1709DF61A4000DC7AF /* table-right-green.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-right-green.tif"; sourceTree = "<group>"; }; - B5B44C1809DF61A4000DC7AF /* table-skip.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "table-skip.tif"; sourceTree = "<group>"; }; - B5E03B3809E38B9E0058C7B9 /* rescan.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = rescan.tif; path = toolbar/rescan.tif; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 69C625F10664EC3300B3C46A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 69C625F20664EC3300B3C46A /* Cocoa.framework in Frameworks */, - 69E407BA07EB95AA00D37AA1 /* Security.framework in Frameworks */, - 2A3C3FAE0992323F00E404E9 /* Growl.framework in Frameworks */, - 44A794A10BE16C380069680C /* ExceptionHandling.framework in Frameworks */, - 2E282CC80D9AE2B000439D01 /* unison-blob.o in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 69C625F50664EC3300B3C46A /* Unison.app */, - ); - name = Products; - sourceTree = "<group>"; - }; - 29B97314FDCFA39411CA2CEA /* uimac */ = { - isa = PBXGroup; - children = ( - B5E03B3809E38B9E0058C7B9 /* rescan.tif */, - 44042D0F0BE52AD700A6BBB2 /* progressicons */, - B5B44C1009DF61A4000DC7AF /* tableicons */, - B518071109D6652000B1B21F /* toolbar */, - 44A795C90BE2B91B0069680C /* Classes */, - 29B97315FDCFA39411CA2CEA /* Other Sources */, - 29B97317FDCFA39411CA2CEA /* Resources */, - 29B97323FDCFA39411CA2CEA /* Frameworks */, - 19C28FACFE9D520D11CA2CBB /* Products */, - 69C625F40664EC3300B3C46A /* Info.plist */, - 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */, - 2E282CB80D9AE16300439D01 /* External objects */, - ); - name = uimac; - sourceTree = "<group>"; - }; - 29B97315FDCFA39411CA2CEA /* Other Sources */ = { - isa = PBXGroup; - children = ( - 29B97316FDCFA39411CA2CEA /* main.m */, - ); - name = "Other Sources"; - sourceTree = "<group>"; - }; - 29B97317FDCFA39411CA2CEA /* Resources */ = { - isa = PBXGroup; - children = ( - 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, - 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, - 69C625CA0664E94E00B3C46A /* Unison.icns */, - ); - name = Resources; - sourceTree = "<group>"; - }; - 29B97323FDCFA39411CA2CEA /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, - 44A794A00BE16C380069680C /* ExceptionHandling.framework */, - 2A3C3F3209922A8000E404E9 /* Growl.framework */, - 69E407B907EB95AA00D37AA1 /* Security.framework */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; - 2E282CB80D9AE16300439D01 /* External objects */ = { - isa = PBXGroup; - children = ( - 2E282CC70D9AE2B000439D01 /* unison-blob.o */, - ); - name = "External objects"; - sourceTree = "<group>"; - }; - 44042D0F0BE52AD700A6BBB2 /* progressicons */ = { - isa = PBXGroup; - children = ( - 44042D100BE52AED00A6BBB2 /* ProgressBarAdvanced.png */, - 44042D110BE52AED00A6BBB2 /* ProgressBarBlue.png */, - 44042D120BE52AED00A6BBB2 /* ProgressBarEndAdvanced.png */, - 44042D130BE52AED00A6BBB2 /* ProgressBarEndBlue.png */, - 44042D140BE52AED00A6BBB2 /* ProgressBarEndGray.png */, - 44042D150BE52AED00A6BBB2 /* ProgressBarEndGreen.png */, - 44042D160BE52AED00A6BBB2 /* ProgressBarEndWhite.png */, - 44042D170BE52AED00A6BBB2 /* ProgressBarGray.png */, - 44042D180BE52AED00A6BBB2 /* ProgressBarGreen.png */, - 44042D190BE52AED00A6BBB2 /* ProgressBarLightGreen.png */, - 44042D1A0BE52AED00A6BBB2 /* ProgressBarWhite.png */, - ); - name = progressicons; - sourceTree = "<group>"; - }; - 44A795C90BE2B91B0069680C /* Classes */ = { - isa = PBXGroup; - children = ( - 69660DC604F08CC100CF23A4 /* MyController.h */, - 69660DC704F08CC100CF23A4 /* MyController.m */, - 2A3C3F7A09922D4900E404E9 /* NotificationController.h */, - 2A3C3F7B09922D4900E404E9 /* NotificationController.m */, - 69BA7DA804FD695200CF23A4 /* ReconTableView.h */, - 69BA7DA904FD695200CF23A4 /* ReconTableView.m */, - 69D3C6FA04F1CC3700CF23A4 /* ReconItem.h */, - 69D3C6F904F1CC3700CF23A4 /* ReconItem.m */, - 445A2A5B0BFAB6A100E4E641 /* ImageAndTextCell.h */, - 445A2A5D0BFAB6C300E4E641 /* ImageAndTextCell.m */, - 44042CB30BE4FC9B00A6BBB2 /* ProgressCell.h */, - 44042CB40BE4FC9B00A6BBB2 /* ProgressCell.m */, - 690F564404F11EC300CF23A4 /* ProfileController.h */, - 690F564504F11EC300CF23A4 /* ProfileController.m */, - 697985CD050CFA2D00CF23A4 /* PreferencesController.h */, - 697985CE050CFA2D00CF23A4 /* PreferencesController.m */, - 691CE180051BB44A00CF23A4 /* ProfileTableView.h */, - 691CE181051BB44A00CF23A4 /* ProfileTableView.m */, - B554003E09C4E5A00089E1C3 /* UnisonToolbar.h */, - B554004009C4E5AA0089E1C3 /* UnisonToolbar.m */, - 449F03DE0BE00DE9003F15C8 /* Bridge.h */, - 449F03DF0BE00DE9003F15C8 /* Bridge.m */, - ); - name = Classes; - sourceTree = "<group>"; - }; - B518071109D6652000B1B21F /* toolbar */ = { - isa = PBXGroup; - children = ( - B518071209D6652100B1B21F /* add.tif */, - B518071309D6652100B1B21F /* diff.tif */, - B518071409D6652100B1B21F /* go.tif */, - B518071509D6652100B1B21F /* left.tif */, - B518071609D6652100B1B21F /* merge.tif */, - B518071709D6652100B1B21F /* quit.tif */, - B518071809D6652100B1B21F /* restart.tif */, - B518071909D6652100B1B21F /* right.tif */, - B518071A09D6652100B1B21F /* save.tif */, - B518071B09D6652100B1B21F /* skip.tif */, - ); - path = toolbar; - sourceTree = "<group>"; - }; - B5B44C1009DF61A4000DC7AF /* tableicons */ = { - isa = PBXGroup; - children = ( - 44F472AF0C0DB735006428EF /* Change_Absent.png */, - 44F472B00C0DB735006428EF /* Change_Unmodified.png */, - 440EEAF60C03F0B800ACAAB0 /* Change_Deleted.png */, - 440EEAF70C03F0B800ACAAB0 /* Change_Modified.png */, - 440EEAF80C03F0B800ACAAB0 /* Change_PropsChanged.png */, - 440EEAF20C03EC3D00ACAAB0 /* Change_Created.png */, - 44A797F10BE3F9B70069680C /* table-mixed.tif */, - B5B44C1109DF61A4000DC7AF /* table-conflict.tif */, - B5B44C1209DF61A4000DC7AF /* table-error.tif */, - B5B44C1309DF61A4000DC7AF /* table-left-blue.tif */, - B5B44C1409DF61A4000DC7AF /* table-left-green.tif */, - B5B44C1509DF61A4000DC7AF /* table-merge.tif */, - B5B44C1609DF61A4000DC7AF /* table-right-blue.tif */, - B5B44C1709DF61A4000DC7AF /* table-right-green.tif */, - B5B44C1809DF61A4000DC7AF /* table-skip.tif */, - 445A291A0BFA5B3300E4E641 /* Outline-Deep.png */, - 445A29260BFA5C1200E4E641 /* Outline-Flat.png */, - 445A29280BFA5C1B00E4E641 /* Outline-Flattened.png */, - ); - path = tableicons; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 69C625DD0664EC3300B3C46A /* uimac */ = { - isa = PBXNativeTarget; - buildConfigurationList = 2A3C3F280992245300E404E9 /* Build configuration list for PBXNativeTarget "uimac" */; - buildPhases = ( - 2E282CBA0D9AE17300439D01 /* Run Script (make unison-blob.o) */, - 69C625E50664EC3300B3C46A /* Resources */, - 69C625E90664EC3300B3C46A /* Sources */, - 69C625F10664EC3300B3C46A /* Frameworks */, - 2A3C3F3709922AA600E404E9 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - 2A124E800DE1C4E400524237 /* PBXTargetDependency */, - ); - name = uimac; - productInstallPath = "$(HOME)/Applications"; - productName = uimac; - productReference = 69C625F50664EC3300B3C46A /* Unison.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - buildConfigurationList = 2A3C3F2C0992245300E404E9 /* Build configuration list for PBXProject "uimacnew" */; - compatibilityVersion = "Xcode 2.4"; - hasScannedForEncodings = 1; - mainGroup = 29B97314FDCFA39411CA2CEA /* uimac */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 69C625DD0664EC3300B3C46A /* uimac */, - 2A124E780DE1C48400524237 /* Create ExternalSettings */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 69C625E50664EC3300B3C46A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 69C625E60664EC3300B3C46A /* MainMenu.nib in Resources */, - 69C625E70664EC3300B3C46A /* InfoPlist.strings in Resources */, - 69C625E80664EC3300B3C46A /* Unison.icns in Resources */, - B518071C09D6652100B1B21F /* add.tif in Resources */, - B518071D09D6652100B1B21F /* diff.tif in Resources */, - B518071E09D6652100B1B21F /* go.tif in Resources */, - B518071F09D6652100B1B21F /* left.tif in Resources */, - B518072009D6652100B1B21F /* merge.tif in Resources */, - B518072109D6652100B1B21F /* quit.tif in Resources */, - B518072209D6652100B1B21F /* restart.tif in Resources */, - B518072309D6652100B1B21F /* right.tif in Resources */, - B518072409D6652100B1B21F /* save.tif in Resources */, - B518072509D6652100B1B21F /* skip.tif in Resources */, - B5B44C1909DF61A4000DC7AF /* table-conflict.tif in Resources */, - B5B44C1A09DF61A4000DC7AF /* table-error.tif in Resources */, - B5B44C1B09DF61A4000DC7AF /* table-left-blue.tif in Resources */, - B5B44C1C09DF61A4000DC7AF /* table-left-green.tif in Resources */, - B5B44C1D09DF61A4000DC7AF /* table-merge.tif in Resources */, - B5B44C1E09DF61A4000DC7AF /* table-right-blue.tif in Resources */, - B5B44C1F09DF61A4000DC7AF /* table-right-green.tif in Resources */, - B5B44C2009DF61A4000DC7AF /* table-skip.tif in Resources */, - B5E03B3909E38B9E0058C7B9 /* rescan.tif in Resources */, - 44A797F40BE3F9B70069680C /* table-mixed.tif in Resources */, - 44042D1B0BE52AED00A6BBB2 /* ProgressBarAdvanced.png in Resources */, - 44042D1C0BE52AEE00A6BBB2 /* ProgressBarBlue.png in Resources */, - 44042D1D0BE52AEE00A6BBB2 /* ProgressBarEndAdvanced.png in Resources */, - 44042D1E0BE52AEE00A6BBB2 /* ProgressBarEndBlue.png in Resources */, - 44042D1F0BE52AEE00A6BBB2 /* ProgressBarEndGray.png in Resources */, - 44042D200BE52AEE00A6BBB2 /* ProgressBarEndGreen.png in Resources */, - 44042D210BE52AEE00A6BBB2 /* ProgressBarEndWhite.png in Resources */, - 44042D220BE52AEE00A6BBB2 /* ProgressBarGray.png in Resources */, - 44042D230BE52AEE00A6BBB2 /* ProgressBarGreen.png in Resources */, - 44042D240BE52AEE00A6BBB2 /* ProgressBarLightGreen.png in Resources */, - 44042D250BE52AEE00A6BBB2 /* ProgressBarWhite.png in Resources */, - 445A291B0BFA5B3300E4E641 /* Outline-Deep.png in Resources */, - 445A29270BFA5C1200E4E641 /* Outline-Flat.png in Resources */, - 445A29290BFA5C1B00E4E641 /* Outline-Flattened.png in Resources */, - 440EEAF30C03EC3D00ACAAB0 /* Change_Created.png in Resources */, - 440EEAF90C03F0B800ACAAB0 /* Change_Deleted.png in Resources */, - 440EEAFA0C03F0B800ACAAB0 /* Change_Modified.png in Resources */, - 440EEAFB0C03F0B800ACAAB0 /* Change_PropsChanged.png in Resources */, - 44F472B10C0DB735006428EF /* Change_Absent.png in Resources */, - 44F472B20C0DB735006428EF /* Change_Unmodified.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 2A124E7E0DE1C4BE00524237 /* Run Script (version, ocaml lib dir) */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script (version, ocaml lib dir)"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ -x /usr/libexec/path_helper ]; then\n eval `/usr/libexec/path_helper -s`\nfi\nif [ ! -x ${PROJECT_DIR}/../Makefile.ProjectInfo ]; then\n if [ ! -x ${PROJECT_DIR}/../mkProjectInfo ]; then\n cd ${PROJECT_DIR}/..; ocamlc -o mkProjectInfo unix.cma str.cma mkProjectInfo.ml\n fi\n cd ${PROJECT_DIR}/..; ./mkProjectInfo > Makefile.ProjectInfo\nfi\nOCAMLLIBDIR=`ocamlc -v | tail -n -1 | sed -e 's/.* //g' | sed -e 's/\\\\\\/\\\\//g' | tr -d '\\r'`\nsource ${PROJECT_DIR}/../Makefile.ProjectInfo\necho MARKETING_VERSION = $VERSION > ${PROJECT_DIR}/ExternalSettings.xcconfig\necho OCAMLLIBDIR = $OCAMLLIBDIR >> ${PROJECT_DIR}/ExternalSettings.xcconfig"; - }; - 2E282CBA0D9AE17300439D01 /* Run Script (make unison-blob.o) */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Script (make unison-blob.o)"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"Building unison-blob.o...\"\nif [ -x /usr/libexec/path_helper ]; then\n eval `/usr/libexec/path_helper -s`\nfi\ncd ${PROJECT_DIR}/..\nmake unison-blob.o\necho \"done\""; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 69C625E90664EC3300B3C46A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 69C625EA0664EC3300B3C46A /* main.m in Sources */, - 69C625EB0664EC3300B3C46A /* MyController.m in Sources */, - 69C625EC0664EC3300B3C46A /* ProfileController.m in Sources */, - 69C625ED0664EC3300B3C46A /* ReconItem.m in Sources */, - 69C625EE0664EC3300B3C46A /* ReconTableView.m in Sources */, - 69C625EF0664EC3300B3C46A /* PreferencesController.m in Sources */, - 69C625F00664EC3300B3C46A /* ProfileTableView.m in Sources */, - 2A3C3F7D09922D4900E404E9 /* NotificationController.m in Sources */, - B554004109C4E5AA0089E1C3 /* UnisonToolbar.m in Sources */, - 449F03E10BE00DE9003F15C8 /* Bridge.m in Sources */, - 44042CB60BE4FC9B00A6BBB2 /* ProgressCell.m in Sources */, - 445A2A5E0BFAB6C300E4E641 /* ImageAndTextCell.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 2A124E800DE1C4E400524237 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 2A124E780DE1C48400524237 /* Create ExternalSettings */; - targetProxy = 2A124E7F0DE1C4E400524237 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 089C165DFE840E0CC02AAC07 /* English */, - ); - name = InfoPlist.strings; - sourceTree = "<group>"; - }; - 29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = { - isa = PBXVariantGroup; - children = ( - 29B97319FDCFA39411CA2CEA /* English */, - ); - name = MainMenu.nib; - sourceTree = "<group>"; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 2A124E790DE1C48400524237 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - PRODUCT_NAME = "Create ExternalSettings"; - }; - name = Development; - }; - 2A124E7A0DE1C48400524237 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - PRODUCT_NAME = "Create ExternalSettings"; - ZERO_LINK = NO; - }; - name = Deployment; - }; - 2A124E7B0DE1C48400524237 /* Default */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "Create ExternalSettings"; - }; - name = Default; - }; - 2A3C3F290992245300E404E9 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64; - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(FRAMEWORK_SEARCH_PATHS)", - "$(SRCROOT)", - ); - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - NSZombieEnabled = YES; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-L$(OCAMLLIBDIR)", - "-lunix", - "-lthreadsnat", - "-lstr", - "-lbigarray", - "-lasmrun", - ); - PREBINDING = NO; - PRODUCT_NAME = Unison; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - ZERO_LINK = YES; - }; - name = Development; - }; - 2A3C3F2A0992245300E404E9 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64; - COPY_PHASE_STRIP = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(FRAMEWORK_SEARCH_PATHS)", - "$(SRCROOT)", - ); - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-L$(OCAMLLIBDIR)", - "-lunix", - "-lthreadsnat", - "-lstr", - "-lbigarray", - "-lasmrun", - ); - PREBINDING = NO; - PRODUCT_NAME = Unison; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - ZERO_LINK = NO; - }; - name = Deployment; - }; - 2A3C3F2B0992245300E404E9 /* Default */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1)"; - ARCHS_STANDARD_64_BIT_PRE_XCODE_3_1 = x86_64; - FRAMEWORK_SEARCH_PATHS = ( - "$(FRAMEWORK_SEARCH_PATHS)", - "$(SRCROOT)", - ); - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - INFOPLIST_FILE = Info.plist; - INSTALL_PATH = "$(HOME)/Applications"; - LIBRARY_SEARCH_PATHS = ""; - OTHER_CFLAGS = ""; - OTHER_LDFLAGS = ( - "-L$(OCAMLLIBDIR)", - "-lunix", - "-lthreadsnat", - "-lstr", - "-lbigarray", - "-lasmrun", - ); - PREBINDING = NO; - PRODUCT_NAME = Unison; - SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.6.sdk"; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = ( - "-Wmost", - "-Wno-four-char-constants", - "-Wno-unknown-pragmas", - ); - WRAPPER_EXTENSION = app; - ZERO_LINK = NO; - }; - name = Default; - }; - 2A3C3F2D0992245300E404E9 /* Development */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */; - buildSettings = { - LIBRARY_SEARCH_PATHS = ""; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR; - }; - name = Development; - }; - 2A3C3F2E0992245300E404E9 /* Deployment */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */; - buildSettings = { - LIBRARY_SEARCH_PATHS = ""; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR; - }; - name = Deployment; - }; - 2A3C3F2F0992245300E404E9 /* Default */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2E282CCC0D9AE2E800439D01 /* ExternalSettings.xcconfig */; - buildSettings = { - LIBRARY_SEARCH_PATHS = ""; - SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; - USER_HEADER_SEARCH_PATHS = $OCAMLLIBDIR; - }; - name = Default; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 2A124E7C0DE1C4A200524237 /* Build configuration list for PBXAggregateTarget "Create ExternalSettings" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2A124E790DE1C48400524237 /* Development */, - 2A124E7A0DE1C48400524237 /* Deployment */, - 2A124E7B0DE1C48400524237 /* Default */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; - }; - 2A3C3F280992245300E404E9 /* Build configuration list for PBXNativeTarget "uimac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2A3C3F290992245300E404E9 /* Development */, - 2A3C3F2A0992245300E404E9 /* Deployment */, - 2A3C3F2B0992245300E404E9 /* Default */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; - }; - 2A3C3F2C0992245300E404E9 /* Build configuration list for PBXProject "uimacnew" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2A3C3F2D0992245300E404E9 /* Development */, - 2A3C3F2E0992245300E404E9 /* Deployment */, - 2A3C3F2F0992245300E404E9 /* Default */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Default; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} |