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