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();
if (m_dialog->GetExtraControl())
{
+ m_controlAdded = true;
ControlRef ref = m_dialog->GetExtraControl()->GetPeer()->GetControlRef();
NavCustomControl(ioParams->context, kNavCtlAddControl, ref);
}
{
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);
}
}
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();
&dialog );
}
- wxNonOwnedWindow::Create( GetParent(), NavDialogGetWindow(dialog) );
-
- if (HasExtraControlCreator())
- {
- CreateExtraControl();
- }
+ SetupExtraControls(NavDialogGetWindow(dialog));
if (err == noErr)
err = ::NavDialogRun(dialog);
bool wxFileDialog::SupportsExtraControl() const
{
- return false;
+ return true;
}
NSArray* GetTypesFromFilter( const wxString filter )
if (HasFlag(wxFD_SAVE))
{
NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+ SetupExtraControls(sPanel);
+
// makes things more convenient:
[sPanel setCanCreateDirectories:YES];
[sPanel setMessage:cf.AsNSString()];
{
NSArray* types = GetTypesFromFilter( m_wildCard ) ;
NSOpenPanel* oPanel = [NSOpenPanel openPanel];
+
+ SetupExtraControls(oPanel);
+
[oPanel setTreatsFilePackagesAsDirectories:NO];
[oPanel setCanChooseDirectories:NO];
[oPanel setResolvesAliases:YES];
}
}
-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 );
if (HasFlag(wxFD_SAVE))
{
NSSavePanel* sPanel = [NSSavePanel savePanel];
+
+ SetupExtraControls(sPanel);
+
// makes things more convenient:
[sPanel setCanCreateDirectories:YES];
[sPanel setMessage:cf.AsNSString()];
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];
ModalFinishedCallback(oPanel, returnCode);
+ [oPanel setAccessoryView:nil];
+
if ( types != nil )
[types release];
}
if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
+
+ [(NSSavePanel*) panel setAccessoryView:nil];
}
#endif // wxUSE_FILEDLG