Don't duplicate practically the same code in all ports, just add m_paths itself to the base class. The only drawback of doing this is that it's unused in the ports not (yet) using it, but this saves enough code in the aggregate to be worth it.
149 lines
4.9 KiB
C++
149 lines
4.9 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/dirdlg.h
|
|
// Purpose: wxDirDialog base class
|
|
// Author: Robert Roebling
|
|
// Modified by:
|
|
// Created:
|
|
// Copyright: (c) Robert Roebling
|
|
// Licence: wxWindows Licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_DIRDLG_H_BASE_
|
|
#define _WX_DIRDLG_H_BASE_
|
|
|
|
#include "wx/defs.h"
|
|
|
|
#if wxUSE_DIRDLG
|
|
|
|
#include "wx/dialog.h"
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// constants
|
|
// ----------------------------------------------------------------------------
|
|
|
|
extern WXDLLIMPEXP_DATA_CORE(const char) wxDirDialogNameStr[];
|
|
extern WXDLLIMPEXP_DATA_CORE(const char) wxDirDialogDefaultFolderStr[];
|
|
extern WXDLLIMPEXP_DATA_CORE(const char) wxDirSelectorPromptStr[];
|
|
|
|
|
|
/*
|
|
The flags below must coexist with the following flags in m_windowStyle
|
|
#define wxCAPTION 0x20000000
|
|
#define wxMAXIMIZE 0x00002000
|
|
#define wxCLOSE_BOX 0x00001000
|
|
#define wxSYSTEM_MENU 0x00000800
|
|
wxBORDER_NONE = 0x00200000
|
|
#define wxRESIZE_BORDER 0x00000040
|
|
#define wxDIALOG_NO_PARENT 0x00000020
|
|
*/
|
|
|
|
#define wxDD_CHANGE_DIR 0x0100
|
|
#define wxDD_DIR_MUST_EXIST 0x0200
|
|
#define wxDD_MULTIPLE 0x0400
|
|
#define wxDD_SHOW_HIDDEN 0x0001
|
|
|
|
// deprecated, on by default now, use wxDD_DIR_MUST_EXIST to disable it
|
|
#define wxDD_NEW_DIR_BUTTON 0
|
|
|
|
#define wxDD_DEFAULT_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
|
|
|
|
//-------------------------------------------------------------------------
|
|
// wxDirDialogBase
|
|
//-------------------------------------------------------------------------
|
|
|
|
class WXDLLIMPEXP_CORE wxDirDialogBase : public wxDialog
|
|
{
|
|
public:
|
|
wxDirDialogBase() {}
|
|
wxDirDialogBase(wxWindow *parent,
|
|
const wxString& title = wxDirSelectorPromptStr,
|
|
const wxString& defaultPath = wxEmptyString,
|
|
long style = wxDD_DEFAULT_STYLE,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& sz = wxDefaultSize,
|
|
const wxString& name = wxDirDialogNameStr)
|
|
{
|
|
Create(parent, title, defaultPath, style, pos, sz, name);
|
|
}
|
|
|
|
virtual ~wxDirDialogBase() {}
|
|
|
|
|
|
bool Create(wxWindow *parent,
|
|
const wxString& title = wxDirSelectorPromptStr,
|
|
const wxString& defaultPath = wxEmptyString,
|
|
long style = wxDD_DEFAULT_STYLE,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& sz = wxDefaultSize,
|
|
const wxString& name = wxDirDialogNameStr)
|
|
{
|
|
if (!wxDialog::Create(parent, wxID_ANY, title, pos, sz, style, name))
|
|
return false;
|
|
m_path = defaultPath;
|
|
m_message = title;
|
|
return true;
|
|
}
|
|
|
|
virtual void SetMessage(const wxString& message) { m_message = message; }
|
|
virtual void SetPath(const wxString& path) { m_path = path; }
|
|
|
|
virtual wxString GetMessage() const { return m_message; }
|
|
virtual wxString GetPath() const
|
|
{
|
|
wxCHECK_MSG( !HasFlag(wxDD_MULTIPLE), wxString(),
|
|
"When using wxDD_MULTIPLE, must call GetPaths() instead" );
|
|
return m_path;
|
|
}
|
|
|
|
virtual void GetPaths(wxArrayString& paths) const
|
|
{
|
|
paths = m_paths;
|
|
}
|
|
|
|
protected:
|
|
wxString m_message;
|
|
wxString m_path;
|
|
wxArrayString m_paths;
|
|
};
|
|
|
|
|
|
// Universal and non-port related switches with need for generic implementation
|
|
#if defined(__WXUNIVERSAL__)
|
|
#include "wx/generic/dirdlgg.h"
|
|
#define wxDirDialog wxGenericDirDialog
|
|
#elif defined(__WXMSW__) && !wxUSE_OLE
|
|
#include "wx/generic/dirdlgg.h"
|
|
#define wxDirDialog wxGenericDirDialog
|
|
#elif defined(__WXMSW__)
|
|
#include "wx/msw/dirdlg.h" // Native MSW
|
|
#elif defined(__WXGTK20__)
|
|
#include "wx/gtk/dirdlg.h" // Native GTK for gtk2.4
|
|
#elif defined(__WXGTK__)
|
|
#include "wx/generic/dirdlgg.h"
|
|
#define wxDirDialog wxGenericDirDialog
|
|
#elif defined(__WXMAC__)
|
|
#include "wx/osx/dirdlg.h" // Native Mac
|
|
#elif defined(__WXMOTIF__) || \
|
|
defined(__WXX11__)
|
|
#include "wx/generic/dirdlgg.h" // Other ports use generic implementation
|
|
#define wxDirDialog wxGenericDirDialog
|
|
#elif defined(__WXQT__)
|
|
#include "wx/qt/dirdlg.h"
|
|
#endif
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// common ::wxDirSelector() function
|
|
// ----------------------------------------------------------------------------
|
|
|
|
WXDLLIMPEXP_CORE wxString
|
|
wxDirSelector(const wxString& message = wxDirSelectorPromptStr,
|
|
const wxString& defaultPath = wxEmptyString,
|
|
long style = wxDD_DEFAULT_STYLE,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
wxWindow *parent = NULL);
|
|
|
|
#endif // wxUSE_DIRDLG
|
|
|
|
#endif
|
|
// _WX_DIRDLG_H_BASE_
|