]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/app.cpp
added wxSpinCtrl::SetSelection method
[wxWidgets.git] / src / mac / app.cpp
index 6473c26f070fe53d2d49bd8ca035019d86484b40..587cdeb344de35a9dd6f8d17100a3942527fd3ad 100644 (file)
@@ -133,23 +133,88 @@ pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , long WX
     return wxTheApp->MacHandleAEQuit( (AppleEvent*) event , reply) ;
 }
 
-short wxApp::MacHandleAEODoc(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
+// new virtual public method in wxApp
+void wxApp::MacOpenFile(const wxString & WXUNUSED(fileName) )
 {
-    SysBeep(40) ;
+}
+
+void wxApp::MacPrintFile(const wxString & WXUNUSED(fileName) )
+{
+}
+
+void wxApp::MacNewFile()
+{
+}
+
+// new implementation, which parses the event and calls
+// MacOpenFile on each of the files it's passed
+short wxApp::MacHandleAEODoc(const WXEVENTREF event, WXEVENTREF WXUNUSED(reply))
+{
+    AEDescList docList;
+    AEKeyword keywd;
+    DescType returnedType;
+    Size actualSize;
+    long itemsInList;
+    FSSpec theSpec;
+    OSErr err;
+    short i;
+    err = AEGetParamDesc((AppleEvent *)event, keyDirectObject, typeAEList,&docList);
+    if (err != noErr)
+        return err;
+    
+    err = AECountItems(&docList, &itemsInList);
+    if (err != noErr)
+        return err;
+    
     ProcessSerialNumber PSN ;
     PSN.highLongOfPSN = 0 ;
     PSN.lowLongOfPSN = kCurrentProcess ;
     SetFrontProcess( &PSN ) ;
-    return noErr ;
-}
-
-short wxApp::MacHandleAEPDoc(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
-{
-    return noErr ;
+    
+    for (i = 1; i <= itemsInList; i++) {
+        AEGetNthPtr(&docList, i, typeFSS, &keywd, &returnedType,
+        (Ptr) & theSpec, sizeof(theSpec), &actualSize);
+        wxString fName = wxMacFSSpec2MacFilename(&theSpec);
+        MacOpenFile(fName);
+    }
+    return noErr;
+}
+
+short wxApp::MacHandleAEPDoc(const WXEVENTREF event , WXEVENTREF WXUNUSED(reply))
+{
+    AEDescList docList;
+    AEKeyword keywd;
+    DescType returnedType;
+    Size actualSize;
+    long itemsInList;
+    FSSpec theSpec;
+    OSErr err;
+    short i;
+    err = AEGetParamDesc((AppleEvent *)event, keyDirectObject, typeAEList,&docList);
+    if (err != noErr)
+        return err;
+    
+    err = AECountItems(&docList, &itemsInList);
+    if (err != noErr)
+        return err;
+    
+    ProcessSerialNumber PSN ;
+    PSN.highLongOfPSN = 0 ;
+    PSN.lowLongOfPSN = kCurrentProcess ;
+    SetFrontProcess( &PSN ) ;
+    
+    for (i = 1; i <= itemsInList; i++) {
+        AEGetNthPtr(&docList, i, typeFSS, &keywd, &returnedType,
+        (Ptr) & theSpec, sizeof(theSpec), &actualSize);
+        wxString fName = wxMacFSSpec2MacFilename(&theSpec);
+        MacPrintFile(fName);
+    }
+    return noErr;
 }
 
 short wxApp::MacHandleAEOApp(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
 {
+    MacNewFile() ;
     return noErr ;
 }
 
@@ -1831,24 +1896,31 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi
     keychar = short(keymessage & charCodeMask);
     keycode = short(keymessage & keyCodeMask) >> 8 ;
     
-    if ( (modifiers & controlKey) )
+    if ( modifiers & ( controlKey|shiftKey|optionKey ) )
     {
         // control interferes with some built-in keys like pgdown, return etc. therefore we remove the controlKey modifier
         // and look at the character after
         UInt32 state = 0;
-        UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~controlKey)) | keycode, &state);
+        UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~(controlKey|shiftKey|optionKey))) | keycode, &state);
         keychar = short(keyInfo & charCodeMask);
         keycode = short(keyInfo & keyCodeMask) >> 8 ;
     }
     long keyval = wxMacTranslateKey(keychar, keycode) ;
-
+       long realkeyval = keyval ;
+       if ( keyval == keychar )
+       {
+               // we are not on a special character combo -> pass the real os event-value to EVT_CHAR, but not to EVT_KEY (make upper first)
+               realkeyval = short(keymessage & charCodeMask) ;
+               keyval = wxToupper( keyval ) ;
+       }
+       
     wxKeyEvent event(wxEVT_KEY_DOWN);
     bool handled = false ;
     event.m_shiftDown = modifiers & shiftKey;
     event.m_controlDown = modifiers & controlKey;
     event.m_altDown = modifiers & optionKey;
     event.m_metaDown = modifiers & cmdKey;
-    event.m_keyCode = wxToupper(keyval );
+    event.m_keyCode = keyval ;
 
     event.m_x = wherex;
     event.m_y = wherey;
@@ -1884,7 +1956,7 @@ bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifi
         event.Skip( FALSE ) ;
         event.SetEventType( wxEVT_CHAR ) ;
         // raw value again
-        event.m_keyCode = keyval ;
+        event.m_keyCode = realkeyval ;
 
         handled = focus->GetEventHandler()->ProcessEvent( event ) ;
         if ( handled && event.GetSkipped() )
@@ -1969,17 +2041,21 @@ bool wxApp::MacSendKeyUpEvent( wxWindow* focus , long keymessage , long modifier
     short keychar ;
     keychar = short(keymessage & charCodeMask);
     keycode = short(keymessage & keyCodeMask) >> 8 ;
-    if ( (modifiers & controlKey) )
+    if ( modifiers & ( controlKey|shiftKey|optionKey ) )
     {
         // control interferes with some built-in keys like pgdown, return etc. therefore we remove the controlKey modifier
         // and look at the character after
         UInt32 state = 0;
-        UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~controlKey)) | keycode, &state);
+        UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~(controlKey|shiftKey|optionKey))) | keycode, &state);
         keychar = short(keyInfo & charCodeMask);
         keycode = short(keyInfo & keyCodeMask) >> 8 ;
     }
     long keyval = wxMacTranslateKey(keychar, keycode) ;
 
+       if ( keyval == keychar )
+       {
+               keyval = wxToupper( keyval ) ;  
+       }
     bool handled = false ;
 
     wxKeyEvent event(wxEVT_KEY_UP);
@@ -1987,7 +2063,7 @@ bool wxApp::MacSendKeyUpEvent( wxWindow* focus , long keymessage , long modifier
     event.m_controlDown = modifiers & controlKey;
     event.m_altDown = modifiers & optionKey;
     event.m_metaDown = modifiers & cmdKey;
-    event.m_keyCode = wxToupper(keyval );
+    event.m_keyCode = keyval ;
 
     event.m_x = wherex;
     event.m_y = wherey;