X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/398eebb155b2a5804359a0f40935e75424e169e2..9a958328220b25226d259e43791eee4b06fe86ef:/src/generic/filectrlg.cpp diff --git a/src/generic/filectrlg.cpp b/src/generic/filectrlg.cpp index 1974401fab..66ee552da4 100644 --- a/src/generic/filectrlg.cpp +++ b/src/generic/filectrlg.cpp @@ -1080,44 +1080,52 @@ wxFileName wxGenericFileCtrl::DoGetFileName() const return fn; } -void wxGenericFileCtrl::DoGetFilenames( wxArrayString& filenames, const bool fullPath ) const +// helper used in DoGetFilenames() and needed because Borland can't compile +// operator?: inline +static inline wxString GetFileNameOrPath(const wxFileName& fn, bool fullPath) { - filenames.Empty(); + return fullPath ? fn.GetFullPath() : fn.GetFullName(); +} + +void +wxGenericFileCtrl::DoGetFilenames(wxArrayString& filenames, bool fullPath) const +{ + filenames.clear(); const wxString dir = m_list->GetDir(); - const wxString value = m_text->GetValue(); + const wxString value = m_text->GetValue(); if ( !value.empty() ) { - if ( fullPath ) - filenames.Add( dir + value ); - else - filenames.Add( value ); + wxFileName fn(value); + if ( fn.IsRelative() ) + fn.MakeAbsolute(dir); + + filenames.push_back(GetFileNameOrPath(fn, fullPath)); return; } - if ( m_list->GetSelectedItemCount() == 0 ) - { + const int numSel = m_list->GetSelectedItemCount(); + if ( !numSel ) return; - } - filenames.Alloc( m_list->GetSelectedItemCount() ); + filenames.reserve(numSel); wxListItem item; item.m_mask = wxLIST_MASK_TEXT; - - item.m_itemId = m_list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); - while ( item.m_itemId != -1 ) + item.m_itemId = -1; + for ( ;; ) { - m_list->GetItem( item ); + item.m_itemId = m_list->GetNextItem(item.m_itemId, wxLIST_NEXT_ALL, + wxLIST_STATE_SELECTED); - if ( fullPath ) - filenames.Add( dir + item.m_text ); - else - filenames.Add( item.m_text ); + if ( item.m_itemId == -1 ) + break; + + m_list->GetItem(item); - item.m_itemId = m_list->GetNextItem( item.m_itemId, - wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); + const wxFileName fn(dir, item.m_text); + filenames.push_back(GetFileNameOrPath(fn, fullPath)); } }