Author: fredkiefer
Date: Tue Jul 12 10:41:17 2016
New Revision: 39978

URL: http://svn.gna.org/viewcvs/gnustep?rev=39978&view=rev
Log:
* Headers/AppKit/NSDocumentController.h,
* Source/NSDocumentController.m: Add 10.7 methods.

Modified:
    libs/gui/trunk/ChangeLog
    libs/gui/trunk/Headers/AppKit/NSDocumentController.h
    libs/gui/trunk/Source/NSDocumentController.m

Modified: libs/gui/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/ChangeLog?rev=39978&r1=39977&r2=39978&view=diff
==============================================================================
--- libs/gui/trunk/ChangeLog    (original)
+++ libs/gui/trunk/ChangeLog    Tue Jul 12 10:41:17 2016
@@ -1,3 +1,8 @@
+2016-07-13 Fred Kiefer <[email protected]>
+
+       * Headers/AppKit/NSDocumentController.h,
+        * Source/NSDocumentController.m: Add 10.7 methods.
+
 2016-07-12 Riccardo Mottola <[email protected]>
 
        * Source/NSWorkspace.m

Modified: libs/gui/trunk/Headers/AppKit/NSDocumentController.h
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Headers/AppKit/NSDocumentController.h?rev=39978&r1=39977&r2=39978&view=diff
==============================================================================
--- libs/gui/trunk/Headers/AppKit/NSDocumentController.h        (original)
+++ libs/gui/trunk/Headers/AppKit/NSDocumentController.h        Tue Jul 12 
10:41:17 2016
@@ -106,6 +106,31 @@
          contextInfo: (void*)context;
 - (NSError*) willPresentError: (NSError*)err;
 #endif 
+#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST) 
+DEFINE_BLOCK_TYPE(GSCompletionBlock1, void, NSDocument*, BOOL, NSError*);
+DEFINE_BLOCK_TYPE(GSCompletionBlock2, void, NSArray*);
+
+- (id) duplicateDocumentWithContentsOfURL: (NSURL*)url
+                                  copying: (BOOL)duplicateByCopying
+                              displayName: (NSString*)displayNameOrNil
+                                    error: (NSError**)outError;
+- (void) openDocumentWithContentsOfURL: (NSURL*)url
+                               display: (BOOL)displayDocument
+                     completionHandler: (GSCompletionBlock1)completionHandler;
+- (void) reopenDocumentForURL: (NSURL*)urlOrNil
+            withContentsOfURL: (NSURL*)contentsURL
+                      display: (BOOL)displayDocument
+            completionHandler: (GSCompletionBlock1)completionHandler;
+- (void) beginOpenPanelWithCompletionHandler: 
(GSCompletionBlock2)completionHandler;
+
+#endif
+#if OS_API_VERSION(MAC_OS_X_VERSION_10_8, GS_API_LATEST) 
+DEFINE_BLOCK_TYPE(GSCompletionBlock3, void, NSInteger);
+
+- (void) beginOpenPanel: (NSOpenPanel*)openPanel
+               forTypes: (NSArray*)inTypes
+      completionHandler: (GSCompletionBlock3)completionHandler;
+#endif
 
 /*" With or without UI "*/
 - (BOOL) shouldCreateUI;

Modified: libs/gui/trunk/Source/NSDocumentController.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/gui/trunk/Source/NSDocumentController.m?rev=39978&r1=39977&r2=39978&view=diff
==============================================================================
--- libs/gui/trunk/Source/NSDocumentController.m        (original)
+++ libs/gui/trunk/Source/NSDocumentController.m        Tue Jul 12 10:41:17 2016
@@ -676,6 +676,77 @@
     }
 }
 
+- (void) openDocumentWithContentsOfURL: (NSURL*)url
+                               display: (BOOL)display
+                     completionHandler: (GSCompletionBlock1)completionHandler
+{
+  NSError *err = nil;
+  BOOL existing = NO;
+  
+  if (OVERRIDDEN(openDocumentWithContentsOfURL:display:error:))
+    {
+      NSDocument *document = [self openDocumentWithContentsOfURL: url 
+                                                         display: display
+                                                           error: &err];
+      CALL_BLOCK(completionHandler, document, existing, err);
+    }
+  else
+    {
+      if (OVERRIDDEN(openDocumentWithContentsOfFile:display:) && [url 
isFileURL])
+        {
+          NSDocument *document = [self openDocumentWithContentsOfFile: [url 
path] 
+                                                              display: 
display];
+          CALL_BLOCK(completionHandler, document, existing, err);
+        }
+      else
+        {
+          NSDocument *document = [self documentForURL: url];
+          
+          if (document == nil)
+            {
+              NSString *type = [self typeForContentsOfURL: url error: &err];
+              
+              if (type == nil)
+                {
+                  CALL_BLOCK(completionHandler, document, existing, err);
+                  return;
+                }
+              
+              document = [self makeDocumentWithContentsOfURL: url  
+                                                      ofType: type 
+                                                       error: &err];
+              
+              if (document == nil)
+                {
+                  CALL_BLOCK(completionHandler, document, existing, err);
+                  return;
+                }
+              
+              [self addDocument: document];
+              
+              if (display)
+                {
+                  [document makeWindowControllers];
+                }
+            }
+          else
+            {
+              existing = YES;
+            }
+          
+          // remember this document as opened
+          [self noteNewRecentDocument: document];
+          
+          if (display)
+            {
+              [document showWindows];
+            }
+          
+          CALL_BLOCK(completionHandler, document, existing, err);
+        }
+    }
+}
+
 - (BOOL) reopenDocumentForURL: (NSURL *)url
             withContentsOfURL: (NSURL *)contents
                         error: (NSError **)err
@@ -706,6 +777,53 @@
   return NO;
 }
 
+- (void) reopenDocumentForURL: (NSURL*)url
+            withContentsOfURL: (NSURL*)contents
+                      display: (BOOL)display
+            completionHandler: (GSCompletionBlock1)completionHandler
+{
+  NSError *err = nil;
+  BOOL existing = NO;
+  
+  if (OVERRIDDEN(reopenDocumentForURL:withContentsOfURL:error:))
+    {
+      [self reopenDocumentForURL: url
+               withContentsOfURL: contents
+                           error: &err];
+    }
+  else
+    {
+      NSDocument *document = nil;
+      NSString *type = [self typeForContentsOfURL: contents error: &err];
+      
+      if (type == nil)
+        {
+          CALL_BLOCK(completionHandler, document, existing, err);
+          return;
+        }
+      
+      document = [self makeDocumentForURL: url
+                        withContentsOfURL: contents
+                                   ofType: type
+                                    error: &err];
+      if (document)
+        {
+          [self addDocument:document];
+
+          // remember this document as opened
+          [self noteNewRecentDocument: document];
+
+          if ([self shouldCreateUI])
+            {
+              [document makeWindowControllers];
+              [document showWindows];
+            }  
+        }
+
+      CALL_BLOCK(completionHandler, document, existing, err);
+    }
+}
+
 - (NSOpenPanel *) _setupOpenPanel
 {
   NSOpenPanel *openPanel = [NSOpenPanel openPanel];
@@ -777,6 +895,50 @@
   return nil;
 }
 
+- (void) beginOpenPanelWithCompletionHandler: 
(GSCompletionBlock2)completionHandler
+{
+  if (OVERRIDDEN(URLsFromRunningOpenPanel) || 
OVERRIDDEN(runModalOpenPanel:forTypes:))
+    {
+      NSArray *urls = [self URLsFromRunningOpenPanel];
+      CALL_BLOCK(completionHandler, urls);
+      return;
+    }
+  else
+    {
+#if __has_feature(blocks)
+      NSArray *types = [self _openableFileExtensions];
+      __block NSOpenPanel *openPanel = [self _setupOpenPanel];
+      __block GSCompletionBlock2 ch = completionHandler;
+
+      GSCompletionBlock3 block =
+        ^(NSInteger result)
+        {
+          if (result == NSOKButton)
+            {
+              CALL_BLOCK(ch, [openPanel URLs]);
+            }
+          else
+            {
+              CALL_BLOCK(ch, nil);
+            }
+        }
+       [self beginOpenPanel: openPanel forTypes: types completionHandler: 
block];
+#else
+      NSArray *urls = [self URLsFromRunningOpenPanel];
+      CALL_BLOCK(completionHandler, urls);
+#endif
+    }
+}
+
+- (void) beginOpenPanel: (NSOpenPanel*)openPanel
+               forTypes: (NSArray*)types
+      completionHandler: (GSCompletionBlock3)completionHandler
+{
+  // FIXME
+  NSInteger result = [self runModalOpenPanel: openPanel forTypes: types];
+  CALL_BLOCK(completionHandler, result);
+}
+
 - (IBAction) saveAllDocuments: (id)sender
 {
   NSDocument *document;
@@ -800,11 +962,25 @@
   urlEnum = [[self URLsFromRunningOpenPanel] objectEnumerator];
   while ((url = [urlEnum nextObject]))
     {
+#if __has_feature(blocks)
+  GSCompletionBlock1 block =
+    ^(NSDocument *document, BOOL existing, NSError *err)
+    {
+      if (err)
+        {
+          [self presentError: err];
+        }
+    };
+  [self openDocumentWithContentsOfURL: url display: YES completionHandler: 
block];
+#else
+      // FIXME: Should be calling 
openDocumentWithContentsOfURL:display:completionHandler:
+      // but this requires Block support
       [self openDocumentWithContentsOfURL: url display: YES error: &err];
       if (err && ![self presentError: err])
         {
           break;
         }
+#endif
     }
 }
         
@@ -974,6 +1150,14 @@
                     nil);
 }
 
+- (id) duplicateDocumentWithContentsOfURL: (NSURL*)url
+                                  copying: (BOOL)duplicateByCopying
+                              displayName: (NSString*)displayNameOrNil
+                                    error: (NSError**)outError
+{
+  // FIXME: Implementation missing
+  return nil;
+}
 
 #ifdef OPENSTEP_ONLY
 /*


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to