wxPathList cleanup by Francesco (patch 1521481)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40298 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -34,6 +34,8 @@
|
||||
#include "wx/filename.h"
|
||||
#include "wx/dir.h"
|
||||
|
||||
#include "wx/tokenzr.h"
|
||||
|
||||
// there are just too many of those...
|
||||
#ifdef __VISUALC__
|
||||
#pragma warning(disable:4706) // assignment within conditional expression
|
||||
@@ -144,23 +146,21 @@ WXDLLEXPORT int wxOpen( const wxChar *pathname, int flags, mode_t mode )
|
||||
// wxPathList
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// IMPLEMENT_DYNAMIC_CLASS(wxPathList, wxStringList)
|
||||
|
||||
static inline wxChar* MYcopystring(const wxString& s)
|
||||
{
|
||||
wxChar* copy = new wxChar[s.length() + 1];
|
||||
return wxStrcpy(copy, s.c_str());
|
||||
}
|
||||
|
||||
static inline wxChar* MYcopystring(const wxChar* s)
|
||||
{
|
||||
wxChar* copy = new wxChar[wxStrlen(s) + 1];
|
||||
return wxStrcpy(copy, s);
|
||||
}
|
||||
|
||||
void wxPathList::Add (const wxString& path)
|
||||
{
|
||||
wxStringList::Add (WXSTRINGCAST path);
|
||||
// add only the path part of the given string (not the filename, in case it's present)
|
||||
wxFileName fn(path + wxFileName::GetPathSeparator());
|
||||
fn.Normalize(); // add only normalized paths
|
||||
|
||||
wxString toadd = fn.GetPath();
|
||||
if (Index(toadd) == wxNOT_FOUND)
|
||||
wxArrayString::Add(toadd); // do not add duplicates
|
||||
}
|
||||
|
||||
void wxPathList::Add(const wxArrayString &arr)
|
||||
{
|
||||
for (size_t j=0; j < arr.GetCount(); j++)
|
||||
Add(arr[j]);
|
||||
}
|
||||
|
||||
// Add paths e.g. from the PATH environment variable
|
||||
@@ -168,43 +168,24 @@ void wxPathList::AddEnvList (const wxString& WXUNUSED_IN_WINCE(envVariable))
|
||||
{
|
||||
// No environment variables on WinCE
|
||||
#ifndef __WXWINCE__
|
||||
|
||||
// The space has been removed from the tokenizers, otherwise a
|
||||
// path such as "C:\Program Files" would be split into 2 paths:
|
||||
// "C:\Program" and "Files"; this is true for both Windows and Unix.
|
||||
|
||||
static const wxChar PATH_TOKS[] =
|
||||
#if defined(__WINDOWS__) || defined(__OS2__)
|
||||
/*
|
||||
The space has been removed from the tokenizers, otherwise a
|
||||
path such as "C:\Program Files" would be split into 2 paths:
|
||||
"C:\Program" and "Files"
|
||||
*/
|
||||
// wxT(" ;"); // Don't separate with colon in DOS (used for drive)
|
||||
wxT(";"); // Don't separate with colon in DOS (used for drive)
|
||||
#else
|
||||
wxT(" :;");
|
||||
wxT(":;");
|
||||
#endif
|
||||
|
||||
wxString val ;
|
||||
if (wxGetEnv (WXSTRINGCAST envVariable, &val))
|
||||
wxString val;
|
||||
if ( wxGetEnv(envVariable, &val) )
|
||||
{
|
||||
wxChar *s = MYcopystring (val);
|
||||
wxChar *save_ptr, *token = wxStrtok (s, PATH_TOKS, &save_ptr);
|
||||
|
||||
if (token)
|
||||
{
|
||||
Add(token);
|
||||
while (token)
|
||||
{
|
||||
if ( (token = wxStrtok ((wxChar *) NULL, PATH_TOKS, &save_ptr))
|
||||
!= NULL )
|
||||
{
|
||||
Add(token);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// suppress warning about unused variable save_ptr when wxStrtok() is a
|
||||
// macro which throws away its third argument
|
||||
save_ptr = token;
|
||||
|
||||
delete [] s;
|
||||
// split into an array of string the value of the env var
|
||||
wxArrayString arr = wxStringTokenize(val, PATH_TOKS);
|
||||
WX_APPEND_ARRAY(*this, arr);
|
||||
}
|
||||
#endif // !__WXWINCE__
|
||||
}
|
||||
@@ -217,60 +198,42 @@ void wxPathList::EnsureFileAccessible (const wxString& path)
|
||||
wxString path_only(wxPathOnly(path));
|
||||
if ( !path_only.empty() )
|
||||
{
|
||||
if ( !Member(path_only) )
|
||||
if ( Index(path_only) == wxNOT_FOUND )
|
||||
Add(path_only);
|
||||
}
|
||||
}
|
||||
|
||||
bool wxPathList::Member (const wxString& path)
|
||||
// deprecated !
|
||||
bool wxPathList::Member (const wxString& path) const
|
||||
{
|
||||
for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext())
|
||||
{
|
||||
wxString path2( node->GetData() );
|
||||
if (
|
||||
#if defined(__WINDOWS__) || defined(__OS2__) || defined(__VMS__) || defined(__WXMAC__)
|
||||
// Case INDEPENDENT
|
||||
path.CompareTo (path2, wxString::ignoreCase) == 0
|
||||
#else
|
||||
// Case sensitive File System
|
||||
path.CompareTo (path2) == 0
|
||||
#endif
|
||||
)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return Index(path) != wxNOT_FOUND;
|
||||
}
|
||||
|
||||
wxString wxPathList::FindValidPath (const wxString& file)
|
||||
wxString wxPathList::FindValidPath (const wxString& file) const
|
||||
{
|
||||
wxExpandPath(wxFileFunctionsBuffer, file);
|
||||
wxFileName fn(file);
|
||||
wxString strend;
|
||||
|
||||
wxChar buf[_MAXPATHLEN];
|
||||
wxStrcpy(buf, wxFileFunctionsBuffer);
|
||||
fn.Normalize();
|
||||
if (fn.IsAbsolute())
|
||||
strend = fn.GetFullName();
|
||||
else
|
||||
strend = fn.GetFullPath();
|
||||
|
||||
wxChar *filename = wxIsAbsolutePath (buf) ? wxFileNameFromPath (buf) : (wxChar *)buf;
|
||||
|
||||
for (wxStringList::compatibility_iterator node = GetFirst(); node; node = node->GetNext())
|
||||
for (size_t i=0; i<GetCount(); i++)
|
||||
{
|
||||
const wxString path(node->GetData());
|
||||
wxStrcpy (wxFileFunctionsBuffer, path);
|
||||
wxChar ch = wxFileFunctionsBuffer[wxStrlen(wxFileFunctionsBuffer)-1];
|
||||
if (ch != wxT('\\') && ch != wxT('/'))
|
||||
wxStrcat (wxFileFunctionsBuffer, wxT("/"));
|
||||
wxStrcat (wxFileFunctionsBuffer, filename);
|
||||
#ifdef __WINDOWS__
|
||||
wxUnix2DosFilename (wxFileFunctionsBuffer);
|
||||
#endif
|
||||
if (wxFileExists (wxFileFunctionsBuffer))
|
||||
{
|
||||
return wxString(wxFileFunctionsBuffer); // Found!
|
||||
}
|
||||
} // for()
|
||||
wxString strstart = Item(i);
|
||||
if (!strstart.IsEmpty() && strstart.Last() != wxFileName::GetPathSeparator())
|
||||
strstart += wxFileName::GetPathSeparator();
|
||||
|
||||
return wxEmptyString; // Not found
|
||||
if (wxFileExists(strstart + strend))
|
||||
return strstart + strend; // Found!
|
||||
}
|
||||
|
||||
return wxEmptyString; // Not found
|
||||
}
|
||||
|
||||
wxString wxPathList::FindAbsoluteValidPath (const wxString& file)
|
||||
wxString wxPathList::FindAbsoluteValidPath (const wxString& file) const
|
||||
{
|
||||
wxString f = FindValidPath(file);
|
||||
if ( f.empty() || wxIsAbsolutePath(f) )
|
||||
@@ -287,6 +250,23 @@ wxString wxPathList::FindAbsoluteValidPath (const wxString& file)
|
||||
return buf;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// miscellaneous global functions (TOFIX!)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
static inline wxChar* MYcopystring(const wxString& s)
|
||||
{
|
||||
wxChar* copy = new wxChar[s.length() + 1];
|
||||
return wxStrcpy(copy, s.c_str());
|
||||
}
|
||||
|
||||
static inline wxChar* MYcopystring(const wxChar* s)
|
||||
{
|
||||
wxChar* copy = new wxChar[wxStrlen(s) + 1];
|
||||
return wxStrcpy(copy, s);
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
wxFileExists (const wxString& filename)
|
||||
{
|
||||
|
Reference in New Issue
Block a user