Revision: 25464
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25464
Author:   damien78
Date:     2009-12-18 14:13:14 +0100 (Fri, 18 Dec 2009)

Log Message:
-----------
Cocoa : add confirmation request before opening a .blend file (dropped on 
Blender icon or dbl-clicked in Finder)

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h       2009-12-18 
13:08:11 UTC (rev 25463)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.h       2009-12-18 
13:13:14 UTC (rev 25464)
@@ -140,6 +140,24 @@
         */
        GHOST_TUns8 handleQuitRequest();
        
+       /**
+        * Handle Cocoa openFile event
+        * Display confirmation request panel if changes performed since last 
save
+        */
+       bool handleOpenDocumentRequest(void *filepathStr);      
+       
+       /**
+     * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa 
window subclass
+     * @param eventType The type of drag'n'drop event
+        * @param draggedObjectType The type object concerned (currently array 
of file names, string, TIFF image)
+        * @param mouseX x mouse coordinate (in cocoa base window coordinates)
+        * @param mouseY y mouse coordinate
+        * @param window The window on which the event occured
+     * @return Indication whether the event was handled. 
+     */
+       GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, 
GHOST_TDragnDropTypes draggedObjectType,
+                                                                          
GHOST_WindowCocoa* window, int mouseX, int mouseY, void* data);
+       
        
/***************************************************************************************
         ** Cursor management functionality
         
***************************************************************************************/
@@ -207,18 +225,6 @@
     GHOST_TSuccess handleApplicationBecomeActiveEvent();
        
        
-       /**
-     * Handles a drag'n'drop destination event. Called by GHOST_WindowCocoa 
window subclass
-     * @param eventType The type of drag'n'drop event
-        * @param draggedObjectType The type object concerned (currently array 
of file names, string, TIFF image)
-        * @param mouseX x mouse coordinate (in cocoa base window coordinates)
-        * @param mouseY y mouse coordinate
-        * @param window The window on which the event occured
-     * @return Indication whether the event was handled. 
-     */
-       GHOST_TSuccess handleDraggingEvent(GHOST_TEventType eventType, 
GHOST_TDragnDropTypes draggedObjectType,
-                                                                          
GHOST_WindowCocoa* window, int mouseX, int mouseY, void* data);
-       
 protected:
        /**
         * Initializes the system.

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm      2009-12-18 
13:08:11 UTC (rev 25463)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm      2009-12-18 
13:13:14 UTC (rev 25464)
@@ -436,9 +436,7 @@
 
 - (BOOL)application:(NSApplication *)theApplication openFile:(NSString 
*)filename
 {
-       NSLog(@"\nGet open file event from cocoa : %@",filename);
-       systemCocoa->handleDraggingEvent(GHOST_kEventDraggingDropOnIcon, 
GHOST_kDragnDropTypeFilenames, nil, 0, 0, [NSArray arrayWithObject:filename]);
-       return YES;
+       return systemCocoa->handleOpenDocumentRequest(filename);
 }
 
 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication 
*)sender
@@ -1086,7 +1084,34 @@
        return GHOST_kExitCancel;
 }
 
+bool GHOST_SystemCocoa::handleOpenDocumentRequest(void *filepathStr)
+{
+       NSString *filepath = (NSString*)filepathStr;
+       int confirmOpen = NSAlertAlternateReturn;
+       NSArray *windowsList;
+       
+       //Check open windows if some changes are not saved
+       if (m_windowManager->getAnyModifiedState())
+       {
+               confirmOpen = NSRunAlertPanel([NSString 
stringWithFormat:@"Opening %@",[filepath lastPathComponent]],
+                                                                               
 @"Current document has not been saved.\nDo you really want to proceed?",
+                                                                               
 @"Cancel", @"Open", nil);
+       }
 
+       //Give back focus to the blender window
+       windowsList = [NSApp orderedWindows];
+       if ([windowsList count]) {
+               [[windowsList objectAtIndex:0] makeKeyAndOrderFront:nil];
+       }
+
+       if (confirmOpen == NSAlertAlternateReturn)
+       {
+               
handleDraggingEvent(GHOST_kEventDraggingDropOnIcon,GHOST_kDragnDropTypeFilenames,NULL,0,0,
 [NSArray arrayWithObject:filepath]);
+               return YES;
+       }
+       else return NO;
+}
+
 GHOST_TSuccess GHOST_SystemCocoa::handleTabletEvent(void *eventPtr, short 
eventType)
 {
        NSEvent *event = (NSEvent *)eventPtr;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to