Revision: 12584
          http://bibdesk.svn.sourceforge.net/bibdesk/?rev=12584&view=rev
Author:   hofman
Date:     2008-01-19 10:52:39 -0800 (Sat, 19 Jan 2008)

Log Message:
-----------
Add a clipboard scripting property to the application and allow it as a 
parameter for the "export using template" command. Works as a workaround for 
the bug that scripts commands currently cannot return rich text.

Modified Paths:
--------------
    trunk/bibdesk/BDSKAppController+Scripting.h
    trunk/bibdesk/BDSKAppController+Scripting.m
    trunk/bibdesk/BDSKExportUsingTemplateCommand.m
    trunk/bibdesk/BibDocument+Scripting.m
    trunk/bibdesk/Scripting/BibDesk.sdef

Modified: trunk/bibdesk/BDSKAppController+Scripting.h
===================================================================
--- trunk/bibdesk/BDSKAppController+Scripting.h 2008-01-19 17:13:25 UTC (rev 
12583)
+++ trunk/bibdesk/BDSKAppController+Scripting.h 2008-01-19 18:52:39 UTC (rev 
12584)
@@ -52,6 +52,8 @@
 
 - (NSArray *)allFieldNames;
 
+- (id)clipboard;
+
 - (BDSKScriptHook *)valueInScriptHooksWithUniqueID:(NSNumber *)uniqueID;
 
 - (BDSKMacro *)valueInMacrosWithName:(NSString *)name;
@@ -62,3 +64,6 @@
 
 @end
 
+
[EMAIL PROTECTED] BDSKClipboard : NSObject
[EMAIL PROTECTED]

Modified: trunk/bibdesk/BDSKAppController+Scripting.m
===================================================================
--- trunk/bibdesk/BDSKAppController+Scripting.m 2008-01-19 17:13:25 UTC (rev 
12583)
+++ trunk/bibdesk/BDSKAppController+Scripting.m 2008-01-19 18:52:39 UTC (rev 
12584)
@@ -37,12 +37,14 @@
  */
 
 #import "BDSKAppController+Scripting.h"
+#import "BDSKApplication.h"
 #import <OmniFoundation/OFPreference.h>
 #import "BDSKScriptHookManager.h"
 #import "BDSKTypeManager.h"
 #import "BDSKMacroResolver.h"
 #import "BDSKMacro.h"
 
+
 /* ssp
 Category on BDSKAppController making the papers folder readable for scripting
 */
@@ -68,6 +70,10 @@
        return [[BDSKTypeManager sharedManager] allFieldNamesIncluding:nil 
excluding:nil];
 }
 
+- (id)clipboard {
+    return [[[BDSKClipboard alloc] init] autorelease];
+}
+
 - (BDSKScriptHook *)valueInScriptHooksWithUniqueID:(NSNumber *)uniqueID {
        return [[BDSKScriptHookManager sharedManager] 
scriptHookWithUniqueID:uniqueID];
 }
@@ -97,10 +103,25 @@
                [key isEqualToString:@"allTypes"] ||
                [key isEqualToString:@"allFieldNames"] ||
                [key isEqualToString:@"macros"] ||
-               [key isEqualToString:@"scriptHooks"]) 
+               [key isEqualToString:@"scriptHooks"] ||
+               [key isEqualToString:@"clipboard"]) 
                return YES;
        return NO;
 }
 
 @end
 
+
[EMAIL PROTECTED] BDSKClipboard
+
+- (NSScriptObjectSpecifier *)objectSpecifier {
+    // this is necessary as our container is the application 
+    NSScriptClassDescription *containerClassDescription = 
(NSScriptClassDescription *)[NSClassDescription 
classDescriptionForClass:[BDSKApplication class]];
+    return [[[NSPropertySpecifier allocWithZone: [self zone]] 
+          initWithContainerClassDescription: containerClassDescription 
+                         containerSpecifier: nil // the application is the 
null container
+                                        key: @"clipboard"] autorelease];
+}
+
[EMAIL PROTECTED]
+

Modified: trunk/bibdesk/BDSKExportUsingTemplateCommand.m
===================================================================
--- trunk/bibdesk/BDSKExportUsingTemplateCommand.m      2008-01-19 17:13:25 UTC 
(rev 12583)
+++ trunk/bibdesk/BDSKExportUsingTemplateCommand.m      2008-01-19 18:52:39 UTC 
(rev 12584)
@@ -42,6 +42,7 @@
 #import "BDSKPublicationsArray.h"
 #import "NSArray_BDSKExtensions.h"
 #import "BibItem.h"
+#import "BDSKAppController+Scripting.h"
 
 @implementation BDSKExportUsingTemplateCommand
 
@@ -98,7 +99,7 @@
        
        // the 'to' parameters gives the file to save to, either as a path or a 
url (it seems)
        id fileObj = [params objectForKey:@"to"];
-    NSURL *fileURL;
+    NSURL *fileURL = nil;
        // make sure we get something
        if (!fileObj) {
                [self 
setScriptErrorNumber:NSRequiredArgumentsMissingScriptError]; 
@@ -111,6 +112,8 @@
             return nil;
     } else if ([fileObj isKindOfClass:[NSURL class]]) {
         fileURL = (NSURL*)fileObj;
+    } else if ([fileObj isKindOfClass:[BDSKClipboard class]]) {
+        fileURL = nil;
     } else {
                [self setScriptErrorNumber:NSArgumentsWrongScriptError]; 
         return nil;
@@ -145,7 +148,21 @@
         fileData = [document stringDataForPublications:items 
usingTemplate:template];
     }
     
-    [fileData writeToURL:fileURL atomically:YES];
+    if (fileURL) {
+        [fileData writeToURL:fileURL atomically:YES];
+    } else {
+        NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+        NSString *string = nil;
+        if ([template templateFormat] & BDSKRichTextTemplateFormat) {
+            [pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, 
NSRTFPboardType, nil] owner:nil];
+            string = [[[[NSAttributedString alloc] initWithRTF:fileData 
documentAttributes:NULL] autorelease] string];
+            [pboard setData:fileData forType:NSRTFPboardType];
+        } else {
+            [pboard declareTypes:[NSArray arrayWithObjects:NSStringPboardType, 
nil] owner:nil];
+            string = [[[NSString alloc] initWithData:fileData 
encoding:NSUTF8StringEncoding] autorelease];
+        }
+        [pboard setString:string forType:NSStringPboardType];
+    }
     
        return nil;
 }

Modified: trunk/bibdesk/BibDocument+Scripting.m
===================================================================
--- trunk/bibdesk/BibDocument+Scripting.m       2008-01-19 17:13:25 UTC (rev 
12583)
+++ trunk/bibdesk/BibDocument+Scripting.m       2008-01-19 18:52:39 UTC (rev 
12584)
@@ -47,6 +47,7 @@
 #import "NSArray_BDSKExtensions.h"
 #import "BDSKMacroResolver.h"
 #import "BDSKPreviewer.h"
+#import "BDSKAppController+Scripting.h"
 #import <Quartz/Quartz.h>
 
 @implementation BibDocument (Scripting)
@@ -280,4 +281,8 @@
        return [[[NSTextStorage alloc] initWithRTF:data 
documentAttributes:NULL] autorelease];
 }
 
+- (id)clipboard {
+    return [[[BDSKClipboard alloc] init] autorelease];
+}
+
 @end

Modified: trunk/bibdesk/Scripting/BibDesk.sdef
===================================================================
--- trunk/bibdesk/Scripting/BibDesk.sdef        2008-01-19 17:13:25 UTC (rev 
12583)
+++ trunk/bibdesk/Scripting/BibDesk.sdef        2008-01-19 18:52:39 UTC (rev 
12584)
@@ -524,6 +524,10 @@
                                <type type="text" list="yes"/>
                                <cocoa key="allFieldNames"/>
                        </property>
+                       <property name="clipboard" code="pcli" type="specifier" 
access="r"
+                               description="The clipboard">
+                               <cocoa key="clipboard"/>
+                       </property>
                        <responds-to name="open">
                                <cocoa method="handleOpenScriptCommand:"/>
                        </responds-to>
@@ -590,6 +594,10 @@
                                <type type="publication" list="yes"/>
                                <cocoa key="shownPublications"/>
                        </property>
+                       <property name="clipboard" code="pcli" type="specifier" 
access="r" hidden="yes"
+                               description="The clipboard">
+                               <cocoa key="clipboard"/>
+                       </property>
                        <responds-to name="close">
                                <cocoa method="handleCloseScriptCommand:"/>
                        </responds-to>
@@ -943,7 +951,7 @@
             <result description="the templated rich text" type="rich text">
             </result>
         </command>
-        
+
         <command name="export" code="BDSKexpt"
                        description="Exports publications in the document using 
a template to file.">
             <cocoa name="exportUsingTemplate" 
class="BDSKExportUsingTemplateCommand"/>
@@ -963,8 +971,10 @@
                 description="The template rich text to use. Either this, 
'using', or 'using text' should be used.">
                 <cocoa key="usingRichText"/>
             </parameter>
-            <parameter name="to" code="to  " type="file"
-                description="The file to export to">
+            <parameter name="to" code="to  "
+                description="The file to export to, or the clipboard">
+                <type type="file"/>
+                <type type="specifier"/>
                 <cocoa key="to"/>
             </parameter>
             <parameter name="for" code="for " optional="yes"


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to