No changes, just avoid code duplication in wxOSX wxDirDialog.

Factor our common parts of wxDirDialog::ShowModal() and ShowWindowModal() in
OSXCreatePanel() helper.

Also some minor cosmetic changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72814 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-10-29 01:20:26 +00:00
parent baa6b3327f
commit 95c854dfc1
2 changed files with 35 additions and 35 deletions

View File

@ -12,6 +12,10 @@
#ifndef _WX_DIRDLG_H_
#define _WX_DIRDLG_H_
#if wxOSX_USE_COCOA
DECLARE_WXCOCOA_OBJC_CLASS(NSOpenPanel);
#endif
class WXDLLIMPEXP_CORE wxDirDialog : public wxDirDialogBase
{
public:
@ -34,14 +38,16 @@ public:
virtual void ModalFinishedCallback(void* panel, int returnCode);
#endif
protected:
DECLARE_DYNAMIC_CLASS(wxDirDialog)
private:
#if wxOSX_USE_COCOA
// Create and initialize NSOpenPanel that we use in both ShowModal() and
// ShowWindowModal().
WX_NSOpenPanel OSXCreatePanel() const;
WX_NSObject m_sheetDelegate;
#endif
DECLARE_DYNAMIC_CLASS(wxDirDialog)
};
#endif
// _WX_DIRDLG_H_
#endif // _WX_DIRDLG_H_

View File

@ -55,12 +55,8 @@ wxDirDialog::~wxDirDialog()
[m_sheetDelegate release];
}
void wxDirDialog::ShowWindowModal()
WX_NSOpenPanel wxDirDialog::OSXCreatePanel() const
{
wxCFStringRef dir( m_path );
m_modality = wxDIALOG_MODALITY_WINDOW_MODAL;
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
[oPanel setCanChooseDirectories:YES];
[oPanel setResolvesAliases:YES];
@ -71,38 +67,36 @@ void wxDirDialog::ShowWindowModal()
if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
[oPanel setCanCreateDirectories:YES];
return oPanel;
}
void wxDirDialog::ShowWindowModal()
{
wxNonOwnedWindow* parentWindow = NULL;
if (GetParent())
parentWindow = dynamic_cast<wxNonOwnedWindow*>(wxGetTopLevelParent(GetParent()));
wxASSERT_MSG(parentWindow, "Window modal display requires parent.");
if (parentWindow)
{
NSWindow* nativeParent = parentWindow->GetWXWindow();
[oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
modalForWindow: nativeParent modalDelegate: m_sheetDelegate
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
}
wxCHECK_RET(parentWindow, "Window modal display requires parent.");
m_modality = wxDIALOG_MODALITY_WINDOW_MODAL;
NSOpenPanel *oPanel = OSXCreatePanel();
NSWindow* nativeParent = parentWindow->GetWXWindow();
wxCFStringRef dir( m_path );
[oPanel beginSheetForDirectory:dir.AsNSString() file:nil types: nil
modalForWindow: nativeParent modalDelegate: m_sheetDelegate
didEndSelector: @selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo: nil];
}
int wxDirDialog::ShowModal()
{
wxCFEventLoopPauseIdleEvents pause;
NSOpenPanel *oPanel = [NSOpenPanel openPanel];
[oPanel setCanChooseDirectories:YES];
[oPanel setResolvesAliases:YES];
[oPanel setCanChooseFiles:NO];
wxCFStringRef cf( m_message );
[oPanel setMessage:cf.AsNSString()];
if ( HasFlag(wxDD_NEW_DIR_BUTTON) )
[oPanel setCanCreateDirectories:YES];
NSOpenPanel *oPanel = OSXCreatePanel();
wxCFStringRef dir( m_path );
@ -127,7 +121,7 @@ void wxDirDialog::ModalFinishedCallback(void* panel, int returnCode)
result = wxID_OK;
}
SetReturnCode(result);
if (GetModality() == wxDIALOG_MODALITY_WINDOW_MODAL)
SendWindowModalDialogEvent ( wxEVT_WINDOW_MODAL_DIALOG_CLOSED );
}