]> git.saurik.com Git - wxWidgets.git/commitdiff
streamlining code for extra controls
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 18 Apr 2010 13:17:16 +0000 (13:17 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 18 Apr 2010 13:17:16 +0000 (13:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64027 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/filedlg.h
src/osx/carbon/filedlg.cpp
src/osx/cocoa/filedlg.mm

index abffd037f72b8c7a905648b2573609f05424eb8f..1cf1b5ce2eb67b9ec145bc2320f1447d7dc7808a 100644 (file)
@@ -51,6 +51,8 @@ protected:
     virtual void DoSetSize(int WXUNUSED(x), int WXUNUSED(y),
                            int WXUNUSED(width), int WXUNUSED(height),
                            int WXUNUSED(sizeFlags) = wxSIZE_AUTO) {}
+    
+    void SetupExtraControls(WXWindow nativeWindow);
 };
 
 #endif // _WX_FILEDLG_H_
index ef50e3d93b0d05c0c7d90bf7879066a85d8dd7d8..719654a23ae08a04abdde5098e61b26cad8e080f 100644 (file)
@@ -72,13 +72,13 @@ private:
     bool                m_saveMode;
     SInt16              m_lastRight;
     SInt16              m_lastBottom;
-    bool                m_firstAdjustRect;
+    bool                m_controlAdded;
 };
 
 OpenUserDataRec::OpenUserDataRec( wxFileDialog* d)
 {
     m_dialog = d;
-    m_firstAdjustRect = true;
+    m_controlAdded = false;
     m_saveMode = m_dialog->HasFdFlag(wxFD_SAVE);
     
     m_defaultLocation = m_dialog->GetDirectory();
@@ -187,6 +187,7 @@ void OpenUserDataRec::EventProcCBStart(NavCBRecPtr ioParams)
     
     if (m_dialog->GetExtraControl())
     {
+        m_controlAdded = true;
         ControlRef ref = m_dialog->GetExtraControl()->GetPeer()->GetControlRef();
         NavCustomControl(ioParams->context, kNavCtlAddControl, ref);
     }
@@ -264,15 +265,11 @@ void OpenUserDataRec::EventProcCBAdjustRect(NavCBRecPtr ioParams)
 {
     wxWindow* control = m_dialog->GetExtraControl();
     
-    if ( control )
+    if ( control && m_controlAdded)
     {
-        // workaround because the first time this is called it still seems to be 
-        // in composited coordinates, while later it is not
-        if ( !m_firstAdjustRect )
-        {
-            control->Move(ioParams->customRect.left , ioParams->customRect.top);
-        }
-        m_firstAdjustRect = false;
+        control->SetSize(ioParams->customRect.left , ioParams->customRect.top, 
+                         ioParams->customRect.right - ioParams->customRect.left,
+                         ioParams->customRect.bottom - ioParams->customRect.top);
     }
 }
 
@@ -467,6 +464,16 @@ wxFileDialog::wxFileDialog(
     wxASSERT_MSG( NavServicesAvailable() , wxT("Navigation Services are not running") ) ;
 }
 
+void wxFileDialog::SetupExtraControls(WXWindow nativeWindow)
+{
+    wxNonOwnedWindow::Create( GetParent(), nativeWindow );
+    
+    if (HasExtraControlCreator())
+    {
+        CreateExtraControl();
+    }
+}
+
 int wxFileDialog::ShowModal()
 {
     m_paths.Empty();
@@ -531,12 +538,7 @@ int wxFileDialog::ShowModal()
             &dialog );
     }
     
-    wxNonOwnedWindow::Create( GetParent(), NavDialogGetWindow(dialog) );
-
-    if (HasExtraControlCreator())
-    {
-        CreateExtraControl();
-    }
+    SetupExtraControls(NavDialogGetWindow(dialog));
     
     if (err == noErr)
         err = ::NavDialogRun(dialog);
index cf11f2c0565e829151441a27eb4edac3d28ee92f..4d5aaad01fcae3e5b3352ea9241c3b9f5f224ed7 100644 (file)
@@ -54,7 +54,7 @@ wxFileDialog::wxFileDialog(
 
 bool wxFileDialog::SupportsExtraControl() const
 {
-    return false;
+    return true;
 }
 
 NSArray* GetTypesFromFilter( const wxString filter )
@@ -167,6 +167,9 @@ void wxFileDialog::ShowWindowModal()
     if (HasFlag(wxFD_SAVE))
     {
         NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+        SetupExtraControls(sPanel);
+
         // makes things more convenient:
         [sPanel setCanCreateDirectories:YES];
         [sPanel setMessage:cf.AsNSString()];
@@ -187,6 +190,9 @@ void wxFileDialog::ShowWindowModal()
     {
         NSArray* types = GetTypesFromFilter( m_wildCard ) ;
         NSOpenPanel* oPanel = [NSOpenPanel openPanel];
+        
+        SetupExtraControls(oPanel);
+
         [oPanel setTreatsFilePackagesAsDirectories:NO];
         [oPanel setCanChooseDirectories:NO];
         [oPanel setResolvesAliases:YES];
@@ -204,10 +210,31 @@ void wxFileDialog::ShowWindowModal()
     }
 }
 
-int wxFileDialog::ShowModal()
+void wxFileDialog::SetupExtraControls(WXWindow nativeWindow)
 {
-    NSSavePanel *panel = nil;
+    NSSavePanel* panel = (NSSavePanel*) nativeWindow;
+    
+    wxNonOwnedWindow::Create( GetParent(), nativeWindow );
+    
+    if (HasExtraControlCreator())
+    {
+        CreateExtraControl();
+        wxWindow* control = GetExtraControl();
+        if ( control )
+        {
+            NSView* accView = control->GetHandle();
+            [accView removeFromSuperview];
+            [panel setAccessoryView:accView];
+        }
+        else
+        {
+            [panel setAccessoryView:nil];
+        }
+    }
+}
 
+int wxFileDialog::ShowModal()
+{
     wxCFStringRef cf( m_message );
 
     wxCFStringRef dir( m_dir );
@@ -230,6 +257,9 @@ int wxFileDialog::ShowModal()
     if (HasFlag(wxFD_SAVE))
     {
         NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+        SetupExtraControls(sPanel);
+
         // makes things more convenient:
         [sPanel setCanCreateDirectories:YES];
         [sPanel setMessage:cf.AsNSString()];
@@ -244,11 +274,16 @@ int wxFileDialog::ShowModal()
 
         returnCode = [sPanel runModalForDirectory:dir.AsNSString() file:file.AsNSString() ];
         ModalFinishedCallback(sPanel, returnCode);
+
+        [sPanel setAccessoryView:nil];
     }
     else
     {
         NSArray* types = GetTypesFromFilter( m_wildCard ) ;
         NSOpenPanel* oPanel = [NSOpenPanel openPanel];
+        
+        SetupExtraControls(oPanel);
+                
         [oPanel setTreatsFilePackagesAsDirectories:NO];
         [oPanel setCanChooseDirectories:NO];
         [oPanel setResolvesAliases:YES];
@@ -260,6 +295,8 @@ int wxFileDialog::ShowModal()
 
         ModalFinishedCallback(oPanel, returnCode);
         
+        [oPanel setAccessoryView:nil];
+        
         if ( types != nil )
             [types release];
     }
@@ -308,6 +345,8 @@ void wxFileDialog::ModalFinishedCallback(void* panel, int returnCode)
     
     if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
         SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED  );
+    
+    [(NSSavePanel*) panel setAccessoryView:nil];
 }
 
 #endif // wxUSE_FILEDLG