X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ca9fb418d278d68df3529b04aea268600fb0080a..966b84b9140622dd94b081206bb52ceb5ce2c401:/src/generic/filedlgg.cpp diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp index 334e2370df..83a751a5bb 100644 --- a/src/generic/filedlgg.cpp +++ b/src/generic/filedlgg.cpp @@ -135,17 +135,10 @@ int wxCALLBACK wxFileDataTimeCompare( long data1, long data2, long data) return fd1->GetDateTime().IsLaterThan(fd2->GetDateTime()) ? int(data) : -int(data); } -#if defined(__UNIX__) && !defined(__OS2__) -#define IsTopMostDir(dir) (dir == wxT("/")) -#endif - #if defined(__DOS__) || defined(__WINDOWS__) || defined (__OS2__) #define IsTopMostDir(dir) (dir.empty()) -#endif - -#if defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) -// defined in src/generic/dirctrlg.cpp -extern bool wxIsDriveAvailable(const wxString& dirName); +#else +#define IsTopMostDir(dir) (dir == wxT("/")) #endif // defined in src/generic/dirctrlg.cpp @@ -268,7 +261,7 @@ wxString wxFileData::GetFileType() const return _(""); else if (IsDrive()) return _(""); - else if (m_fileName.Find(wxT('.'), true) != wxNOT_FOUND) + else if (m_fileName.Find(wxT('.'), true) != wxNOT_FOUND) return m_fileName.AfterLast(wxT('.')); return wxEmptyString; @@ -325,7 +318,7 @@ wxString wxFileData::GetEntry( fileListFieldType num ) const break; case FileList_Time: - if (!IsDrive()) + if (!IsDrive()) s = GetModificationTime(); break; @@ -541,7 +534,7 @@ void wxFileCtrl::UpdateFiles() #endif // __UNIX__ wxFileData *fd = new wxFileData(p, wxT(".."), wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) - item.m_itemId++; + item.m_itemId++; else delete fd; } @@ -570,7 +563,7 @@ void wxFileCtrl::UpdateFiles() { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_dir, wxFileIconsTable::folder); if (Add(fd, item) != -1) - item.m_itemId++; + item.m_itemId++; else delete fd; @@ -588,7 +581,7 @@ void wxFileCtrl::UpdateFiles() { wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_file, wxFileIconsTable::file); if (Add(fd, item) != -1) - item.m_itemId++; + item.m_itemId++; else delete fd; @@ -855,7 +848,6 @@ wxFileCtrl::~wxFileCtrl() #define ID_CHOICE (wxID_FILEDLGG + 8) #define ID_TEXT (wxID_FILEDLGG + 9) #define ID_LIST_CTRL (wxID_FILEDLGG + 10) -#define ID_ACTIVATED (wxID_FILEDLGG + 11) #define ID_CHECK (wxID_FILEDLGG + 12) IMPLEMENT_DYNAMIC_CLASS(wxGenericFileDialog, wxFileDialogBase) @@ -878,32 +870,54 @@ END_EVENT_TABLE() long wxGenericFileDialog::ms_lastViewStyle = wxLC_LIST; bool wxGenericFileDialog::ms_lastShowHidden = false; +void wxGenericFileDialog::Init() +{ + m_bypassGenericImpl = false; + + m_choice = NULL; + m_text = NULL; + m_list = NULL; + m_check = NULL; + m_static = NULL; + m_upDirButton = NULL; + m_newDirButton = NULL; +} + wxGenericFileDialog::wxGenericFileDialog(wxWindow *parent, const wxString& message, const wxString& defaultDir, const wxString& defaultFile, const wxString& wildCard, - long style, + long style, const wxPoint& pos, - bool bypassGenericImpl ) - :wxFileDialogBase(parent, message, defaultDir, defaultFile, wildCard, style, pos) + bool bypassGenericImpl ) : wxFileDialogBase() { - m_bypassGenericImpl = bypassGenericImpl; - - if (!m_bypassGenericImpl) - Create( parent, message, defaultDir, defaultFile, wildCard, style, pos ); + Init(); + Create( parent, message, defaultDir, defaultFile, wildCard, style, pos, bypassGenericImpl ); } bool wxGenericFileDialog::Create( wxWindow *parent, const wxString& message, - const wxString& WXUNUSED(defaultDir), + const wxString& defaultDir, const wxString& defaultFile, const wxString& wildCard, - long WXUNUSED(style), - const wxPoint& pos ) + long style, + const wxPoint& pos, + bool bypassGenericImpl ) { + m_bypassGenericImpl = bypassGenericImpl; + + if (!wxFileDialogBase::Create(parent, message, defaultDir, defaultFile, + wildCard, style, pos)) + { + return false; + } + + if (m_bypassGenericImpl) + return true; + if (!wxDialog::Create( parent, wxID_ANY, message, pos, wxDefaultSize, - wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER )) + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER )) { return false; } @@ -1129,8 +1143,14 @@ void wxGenericFileDialog::SetWildcard(const wxString& wildCard) wildFilters); wxCHECK_RET( count, wxT("wxFileDialog: bad wildcard string") ); - m_choice->Clear(); - for ( size_t n = 0; n < count; n++ ) + const size_t countOld = m_choice->GetCount(); + size_t n; + for ( n = 0; n < countOld; n++ ) + { + delete (wxString *)m_choice->GetClientData(n); + } + + for ( n = 0; n < count; n++ ) { m_choice->Append( wildDescriptions[n], new wxString( wildFilters[n] ) ); } @@ -1239,16 +1259,19 @@ void wxGenericFileDialog::HandleAction( const wxString &fn ) } #endif // __UNIX__ - if ((filename.Find(wxT('*')) != wxNOT_FOUND) || - (filename.Find(wxT('?')) != wxNOT_FOUND)) + if (!(m_dialogStyle & wxSAVE)) { - if (filename.Find(wxFILE_SEP_PATH) != wxNOT_FOUND) + if ((filename.Find(wxT('*')) != wxNOT_FOUND) || + (filename.Find(wxT('?')) != wxNOT_FOUND)) { - wxMessageBox(_("Illegal file specification."), _("Error"), wxOK | wxICON_ERROR ); + if (filename.Find(wxFILE_SEP_PATH) != wxNOT_FOUND) + { + wxMessageBox(_("Illegal file specification."), _("Error"), wxOK | wxICON_ERROR ); + return; + } + m_list->SetWild( filename ); return; } - m_list->SetWild( filename ); - return; } if (!IsTopMostDir(dir))