// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
#if wxUSE_FILEDLG
#include "wx/filedlg.h"
#include "wx/dirdlg.h"
+#include "wx/filename.h"
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/window.h"
#endif // WX_PRECOMP
+extern WXDLLEXPORT_DATA(const char) wxFileDialogNameStr[] = "filedlg";
+extern WXDLLEXPORT_DATA(const char) wxFileSelectorPromptStr[] = "Select a file";
+extern WXDLLEXPORT_DATA(const char) wxFileSelectorDefaultWildcardStr[] =
+#if defined(__WXMSW__) || defined(__OS2__)
+ "*.*"
+#else // Unix/Mac
+ "*"
+#endif
+ ;
+
//----------------------------------------------------------------------------
// wxFileDialogBase
//----------------------------------------------------------------------------
void wxFileDialogBase::Init()
{
- m_filterIndex =
+ m_filterIndex = 0;
m_windowStyle = 0;
+ m_extraControl = NULL;
+ m_extraControlCreator = NULL;
}
bool wxFileDialogBase::Create(wxWindow *parent,
// check that the styles are not contradictory
wxASSERT_MSG( !(HasFdFlag(wxFD_SAVE) && HasFdFlag(wxFD_OPEN)),
- _T("can't specify both wxFD_SAVE and wxFD_OPEN at once") );
+ wxT("can't specify both wxFD_SAVE and wxFD_OPEN at once") );
wxASSERT_MSG( !HasFdFlag(wxFD_SAVE) ||
(!HasFdFlag(wxFD_MULTIPLE) && !HasFdFlag(wxFD_FILE_MUST_EXIST)),
- _T("wxFD_MULTIPLE or wxFD_FILE_MUST_EXIST can't be used with wxFD_SAVE" ) );
+ wxT("wxFD_MULTIPLE or wxFD_FILE_MUST_EXIST can't be used with wxFD_SAVE" ) );
wxASSERT_MSG( !HasFdFlag(wxFD_OPEN) || !HasFdFlag(wxFD_OVERWRITE_PROMPT),
- _T("wxFD_OVERWRITE_PROMPT can't be used with wxFD_OPEN") );
+ wxT("wxFD_OVERWRITE_PROMPT can't be used with wxFD_OPEN") );
if ( wildCard.empty() || wildCard == wxFileSelectorDefaultWildcardStr )
{
// convert m_wildCard from "*.bar" to "bar files (*.bar)|*.bar"
if ( m_wildCard.Find(wxT('|')) == wxNOT_FOUND )
{
- wxString::size_type nDot = m_wildCard.find(_T("*."));
+ wxString::size_type nDot = m_wildCard.find(wxT("*."));
if ( nDot != wxString::npos )
nDot++;
else
return filePath + ext;
}
+bool wxFileDialogBase::SetExtraControlCreator(ExtraControlCreatorFunction creator)
+{
+ wxCHECK_MSG( !m_extraControlCreator, false,
+ "wxFileDialog::SetExtraControl() called second time" );
+
+ m_extraControlCreator = creator;
+ return SupportsExtraControl();
+}
+
+bool wxFileDialogBase::CreateExtraControl()
+{
+ if (!m_extraControlCreator || m_extraControl)
+ return false;
+ m_extraControl = (*m_extraControlCreator)(this);
+ return true;
+}
+
+wxSize wxFileDialogBase::GetExtraControlSize()
+{
+ if ( !m_extraControlCreator )
+ return wxDefaultSize;
+
+ // create the extra control in an empty dialog just to find its size: this
+ // is not terribly efficient but we do need to know the size before
+ // creating the native dialog and this seems to be the only way
+ wxDialog dlg(NULL, wxID_ANY, "");
+ return (*m_extraControlCreator)(&dlg)->GetSize();
+}
+
+void wxFileDialogBase::SetPath(const wxString& path)
+{
+ wxString ext;
+ wxFileName::SplitPath(path, &m_dir, &m_fileName, &ext);
+ if ( !ext.empty() )
+ m_fileName << wxT('.') << ext;
+ m_path = path;
+}
+
+void wxFileDialogBase::SetDirectory(const wxString& dir)
+{
+ m_dir = dir;
+ m_path = wxFileName(m_dir, m_fileName).GetFullPath();
+}
+
+void wxFileDialogBase::SetFilename(const wxString& name)
+{
+ m_fileName = name;
+ m_path = wxFileName(m_dir, m_fileName).GetFullPath();
+}
+
//----------------------------------------------------------------------------
// wxFileDialog convenience functions
//----------------------------------------------------------------------------
wxString ext;
if ( !extension.empty() )
{
- if ( extension[0u] == _T('.') )
+ if ( extension[0u] == wxT('.') )
ext = extension.substr(1);
else
ext = extension;
}
return wxFileSelector(prompt, wxEmptyString, default_name, ext, wild,
- load ? wxFD_OPEN : wxFD_SAVE, parent);
+ load ? (wxFD_OPEN | wxFD_FILE_MUST_EXIST) : wxFD_SAVE,
+ parent);
}
//----------------------------------------------------------------------------