X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/36668b357c1bf5374ca24455f6ca8afb58fe1a01..9175b26272dc4f9062bf268fa916f5b7a21d1dc6:/src/generic/filedlgg.cpp diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp index 3bc760fb6b..638c1173f1 100644 --- a/src/generic/filedlgg.cpp +++ b/src/generic/filedlgg.cpp @@ -140,7 +140,7 @@ int wxCALLBACK wxFileDataTimeCompare( long data1, long data2, long data) #endif #if defined(__DOS__) || defined(__WINDOWS__) || defined (__OS2__) -#define IsTopMostDir(dir) (dir.IsEmpty()) +#define IsTopMostDir(dir) (dir.empty()) #endif #if defined(__DOS__) || defined(__WINDOWS__) || defined(__OS2__) @@ -157,6 +157,7 @@ extern size_t wxGetAvailableDrives(wxArrayString &paths, wxArrayString &names, w wxFileData::wxFileData( const wxString &filePath, const wxString &fileName, fileType type, int image_id ) { + Init(); m_fileName = fileName; m_filePath = filePath; m_type = type; @@ -165,6 +166,13 @@ wxFileData::wxFileData( const wxString &filePath, const wxString &fileName, file ReadData(); } +void wxFileData::Init() +{ + m_size = 0; + m_type = wxFileData::is_file; + m_image = wxFileIconsTable::file; +} + void wxFileData::Copy( const wxFileData& fileData ) { m_fileName = fileData.GetFileName(); @@ -173,7 +181,7 @@ void wxFileData::Copy( const wxFileData& fileData ) m_dateTime = fileData.GetDateTime(); m_permissions = fileData.GetPermissions(); m_type = fileData.GetType(); - m_image = GetImageId(); + m_image = fileData.GetImageId(); } void wxFileData::ReadData() @@ -200,7 +208,13 @@ void wxFileData::ReadData() lstat( m_filePath.fn_str(), &buff ); m_type |= S_ISLNK( buff.st_mode ) != 0 ? is_link : 0; #else // no lstat() + // only translate to file charset if we don't go by our + // wxStat implementation +#ifndef wxNEED_WX_UNISTD_H + wxStat( m_filePath.fn_str() , &buff ); +#else wxStat( m_filePath, &buff ); +#endif #endif m_type |= (buff.st_mode & S_IFDIR) != 0 ? is_dir : 0; @@ -218,7 +232,7 @@ void wxFileData::ReadData() } } - m_size = buff.st_size; + m_size = (long)buff.st_size; m_dateTime = buff.st_mtime; @@ -476,7 +490,7 @@ void wxFileCtrl::UpdateItem(const wxListItem &item) fd->ReadData(); SetItemText(item, fd->GetFileName()); - SetItemImage(item, fd->GetImageId(), fd->GetImageId()); + SetItemImage(item, fd->GetImageId()); if (GetWindowStyleFlag() & wxLC_REPORT) { @@ -501,20 +515,20 @@ void wxFileCtrl::UpdateFiles() #if defined(__WINDOWS__) || defined(__DOS__) || defined(__WXMAC__) || defined(__OS2__) if ( IsTopMostDir(m_dirName) ) - { + { wxArrayString names, paths; wxArrayInt icons; size_t n, count = wxGetAvailableDrives(paths, names, icons); for (n=0; nAdd( m_choice, 1, wxCENTER|wxALL, 5 ); buttonsizer = new wxBoxSizer( wxHORIZONTAL ); - buttonsizer->Add( new wxButton( this, wxID_OK, wxSTOCK_OK ), 0, wxCENTER | wxALL, 5 ); - buttonsizer->Add( new wxButton( this, wxID_CANCEL, wxSTOCK_CANCEL ), 0, wxCENTER | wxALL, 5 ); + buttonsizer->Add( new wxButton( this, wxID_OK ), 0, wxCENTER | wxALL, 5 ); + buttonsizer->Add( new wxButton( this, wxID_CANCEL ), 0, wxCENTER | wxALL, 5 ); mainsizer->Add( buttonsizer, 0, wxALIGN_RIGHT ); } else @@ -1004,7 +1055,7 @@ wxGenericFileDialog::wxGenericFileDialog(wxWindow *parent, wxBoxSizer *textsizer = new wxBoxSizer( wxHORIZONTAL ); m_text = new wxTextCtrl( this, ID_TEXT, m_fileName, wxDefaultPosition, wxDefaultSize, wxPROCESS_ENTER ); textsizer->Add( m_text, 1, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); - textsizer->Add( new wxButton( this, wxID_OK, wxSTOCK_OK ), 0, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); + textsizer->Add( new wxButton( this, wxID_OK ), 0, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); mainsizer->Add( textsizer, 0, wxEXPAND ); wxBoxSizer *choicesizer = new wxBoxSizer( wxHORIZONTAL ); @@ -1013,15 +1064,11 @@ wxGenericFileDialog::wxGenericFileDialog(wxWindow *parent, m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden files") ); m_check->SetValue( ms_lastShowHidden ); choicesizer->Add( m_check, 0, wxCENTER|wxALL, 10 ); - choicesizer->Add( new wxButton( this, wxID_CANCEL, wxSTOCK_CANCEL ), 0, wxCENTER | wxALL, 10 ); + choicesizer->Add( new wxButton( this, wxID_CANCEL ), 0, wxCENTER | wxALL, 10 ); mainsizer->Add( choicesizer, 0, wxEXPAND ); } - for (size_t n=0; nAppend( wildDescriptions[n], (void*) new wxString( wildFilters[n] ) ); - } - SetFilterIndex( 0 ); + SetWildcard(wildCard); SetAutoLayout( true ); SetSizer( mainsizer ); @@ -1032,22 +1079,27 @@ wxGenericFileDialog::wxGenericFileDialog(wxWindow *parent, Centre( wxBOTH ); m_text->SetFocus(); + + return true; } wxGenericFileDialog::~wxGenericFileDialog() { - if (wxConfig::Get(false)) + if (!m_bypassGenericImpl) { - wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ViewStyle"), - ms_lastViewStyle); - wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ShowHidden"), - ms_lastShowHidden); - } + if (wxConfig::Get(false)) + { + wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ViewStyle"), + ms_lastViewStyle); + wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ShowHidden"), + ms_lastShowHidden); + } - const int count = m_choice->GetCount(); - for ( int i = 0; i < count; i++ ) - { - delete (wxString *)m_choice->GetClientData(i); + const int count = m_choice->GetCount(); + for ( int i = 0; i < count; i++ ) + { + delete (wxString *)m_choice->GetClientData(i); + } } } @@ -1089,6 +1141,31 @@ void wxGenericFileDialog::DoSetFilterIndex(int filterindex) } } +void wxGenericFileDialog::SetWildcard(const wxString& wildCard) +{ + wxFileDialogBase::SetWildcard(wildCard); + + wxArrayString wildDescriptions, wildFilters; + const size_t count = wxParseCommonDialogsFilter(m_wildCard, + wildDescriptions, + wildFilters); + wxCHECK_RET( count, wxT("wxFileDialog: bad wildcard string") ); + + 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] ) ); + } + + SetFilterIndex( 0 ); +} + void wxGenericFileDialog::SetFilterIndex( int filterindex ) { m_choice->SetSelection( filterindex ); @@ -1159,7 +1236,7 @@ void wxGenericFileDialog::HandleAction( const wxString &fn ) { wxString filename( fn ); wxString dir = m_list->GetDir(); - if (filename.IsEmpty()) return; + if (filename.empty()) return; if (filename == wxT(".")) return; // "some/place/" means they want to chdir not try to load "place" @@ -1186,7 +1263,7 @@ void wxGenericFileDialog::HandleAction( const wxString &fn ) if (filename.BeforeFirst(wxT('/')) == wxT("~")) { - filename = wxGetUserHome() + filename.Remove(0, 1); + filename = wxString(wxGetUserHome()) + filename.Remove(0, 1); } #endif // __UNIX__