]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/configtool/src/utils.cpp
Fixes tex2rtf to search for files on current folder too. This is basically to test...
[wxWidgets.git] / utils / configtool / src / utils.cpp
index 13826439a691d854f4fbbbd7b23f505aa48df9a3..0ec2e0bb0ec63cd2abc877cb1a4434c316c78b58 100644 (file)
@@ -6,35 +6,42 @@
 // Created:     2002-09-04
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    
+// Licence:
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-// #pragma implementation
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
 #endif
 
-#include "wx/wx.h"
-#include "wx/image.h"
-#include "wx/notebook.h"
+#include <math.h>
+
+#ifndef WX_PRECOMP
+
 #include "wx/splitter.h"
-#include "wx/wfstream.h"
 #include "wx/datstrm.h"
 #include "wx/file.h"
 #include "wx/listctrl.h"
-#include "wx/tokenzr.h"
 #include "wx/process.h"
-#include "wx/mimetype.h"
 #include "wx/variant.h"
-#include "wx/cshelp.h"
 #include "wx/cmdline.h"
+#include "wx/msgdlg.h"
+#include "wx/log.h"
+#include "wx/sizer.h"
+#include "wx/icon.h"
+#include "wx/intl.h"
 
-#include <math.h>
-
-#ifdef __WXMSW__
-#include <windows.h>
-#include "wx/msw/winundef.h"
 #endif
 
+#include "wx/wfstream.h"
+#include "wx/cshelp.h"
+#include "wx/image.h"
+#include "wx/imaglist.h"
+#include "wx/tokenzr.h"
+#include "wx/notebook.h"
+#include "wx/mimetype.h"
 #include "utils.h"
 
 // Returns the image type, or -1, determined from the extension.
@@ -45,17 +52,17 @@ int apDetermineImageType(const wxString& filename)
     wxSplitPath(filename, & path, & name, & ext);
 
     ext.MakeLower();
-    if (ext == "jpg" || ext == "jpeg")
+    if (ext == _T("jpg") || ext == _T("jpeg"))
         return wxBITMAP_TYPE_JPEG;
-    else if (ext == "gif")
+    else if (ext == _T("gif"))
         return wxBITMAP_TYPE_GIF;
-    else if (ext == "bmp")
+    else if (ext == _T("bmp"))
         return wxBITMAP_TYPE_BMP;
-    else if (ext == "png")
+    else if (ext == _T("png"))
         return wxBITMAP_TYPE_PNG;
-    else if (ext == "pcx")
+    else if (ext == _T("pcx"))
         return wxBITMAP_TYPE_PCX;
-    else if (ext == "tif" || ext == "tiff")
+    else if (ext == _T("tif") || ext == _T("tiff"))
         return wxBITMAP_TYPE_TIF;
     else
         return -1;
@@ -76,12 +83,9 @@ wxString apColourToHexString(const wxColour& col)
 // Convert 6-digit hex string to a colour
 wxColour apHexStringToColour(const wxString& hex)
 {
-    unsigned int r = 0;
-    unsigned int g = 0;
-    unsigned int b = 0;
-    r = wxHexToDec(hex.Mid(0, 2));
-    g = wxHexToDec(hex.Mid(2, 2));
-    b = wxHexToDec(hex.Mid(4, 2));
+    unsigned char r = (unsigned char)wxHexToDec(hex.Mid(0, 2));
+    unsigned char g = (unsigned char)wxHexToDec(hex.Mid(2, 2));
+    unsigned char b = (unsigned char)wxHexToDec(hex.Mid(4, 2));
 
     return wxColour(r, g, b);
 }
@@ -97,6 +101,14 @@ wxString apFontToString(const wxFont& font)
     return str;
 }
 
+static inline int StringToInt(const wxString& s)
+{
+    long tmp;
+    s.ToLong(&tmp);
+
+    return int(tmp);
+}
+
 // Convert a string to a wxFont
 wxFont apStringToFont(const wxString& str)
 {
@@ -105,7 +117,7 @@ wxFont apStringToFont(const wxString& str)
     int style = wxNORMAL;
     int weight = wxNORMAL;
     int underlined = 0;
-    wxString facename(wxT(""));
+    wxString facename;
 
     wxStringTokenizer tkz(str, wxT(","));
     int i = 0;
@@ -115,22 +127,22 @@ wxFont apStringToFont(const wxString& str)
 
         if (i == 0)
         {
-            StringToInt(token, & pointSize);
+            pointSize = StringToInt(token);
 #if defined(__WXGTK__) || defined(__WXMAC__)
             if (pointSize < 8)
                 pointSize = 8;
             if (pointSize == 9)
                 pointSize = 10;
-#endif            
+#endif
         }
         else if (i == 1)
-            StringToInt(token, & family);
+            family = StringToInt(token);
         else if (i == 2)
-            StringToInt(token, & style);
+            style = StringToInt(token);
         else if (i == 3)
-            StringToInt(token, & weight);
+            weight = StringToInt(token);
         else if (i == 4)
-            StringToInt(token, & underlined);
+            underlined = StringToInt(token);
         else if (i == 5)
         {
             facename = token;
@@ -150,74 +162,26 @@ wxFont apStringToFont(const wxString& str)
 int apFindNotebookPage(wxNotebook* notebook, const wxString& name)
 {
     int i;
-    for (i = 0; i < notebook->GetPageCount(); i++)
+    for (i = 0; i < (int)notebook->GetPageCount(); i++)
         if (name == notebook->GetPageText(i))
             return i;
     return -1;
 }
 
-/*
- * View an HTML file
- */
-
-void apViewHTMLFile(const wxString& url)
-{
-#ifdef __WXMSW__
-    HKEY hKey;
-    TCHAR szCmdName[1024];
-    DWORD dwType, dw = sizeof(szCmdName);
-    LONG lRes;
-    lRes = RegOpenKey(HKEY_CLASSES_ROOT, "htmlfile\\shell\\open\\command", &hKey);
-    if(lRes == ERROR_SUCCESS && RegQueryValueEx(hKey,(LPTSTR)NULL, NULL,
-        &dwType, (LPBYTE)szCmdName, &dw) == ERROR_SUCCESS)
-    {
-        strcat(szCmdName, (const char*) url);
-        PROCESS_INFORMATION  piProcInfo;
-        STARTUPINFO          siStartInfo;
-        memset(&siStartInfo, 0, sizeof(STARTUPINFO));
-        siStartInfo.cb = sizeof(STARTUPINFO);
-        CreateProcess(NULL, szCmdName, NULL, NULL, FALSE, 0, NULL,
-            NULL, &siStartInfo, &piProcInfo );
-    }
-    if(lRes == ERROR_SUCCESS)
-        RegCloseKey(hKey);
-#else
-    wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(wxT("html"));
-    if ( !ft )
-    {
-        wxLogError(_T("Impossible to determine the file type for extension html. Please edit your MIME types."));
-        return ;
-    }
-
-    wxString cmd;
-    bool ok = ft->GetOpenCommand(&cmd,
-                                 wxFileType::MessageParameters(url, _T("")));
-    delete ft;
-
-    if (!ok)
-    {
-        // TODO: some kind of configuration dialog here.
-        wxMessageBox(_("Could not determine the command for running the browser."),
-                  wxT("Browsing problem"), wxOK|wxICON_EXCLAMATION);
-        return ;
-    }
-
-    ok = (wxExecute(cmd, FALSE) != 0);
-#endif
-}
-
 wxString wxGetTempDir()
 {
     wxString dir;
 #if defined(__WXMAC__) && !defined(__DARWIN__)
     dir = wxMacFindFolder(  (short) kOnSystemDisk, kTemporaryFolderType, kCreateFolder ) ;
 #else // !Mac
-    dir = wxGetenv(_T("TMP"));
+    wxString dirEnv(wxGetenv(_T("TMP")));
+    dir = dirEnv;
     if ( dir.empty() )
     {
-        dir = wxGetenv(_T("TEMP"));
+        wxString envVar(wxGetenv(_T("TEMP")));
+        dir = envVar;
     }
-    
+
     if ( dir.empty() )
     {
         // default
@@ -245,17 +209,14 @@ bool apInvokeAppForFile(const wxString& filename)
         msg.Printf(wxT("Sorry, could not determine what application to invoke for extension %s\nYou may need to edit your MIME types."),
             ext.c_str());
         wxMessageBox(msg, wxT("Application Invocation"), wxICON_EXCLAMATION|wxOK);
-        return FALSE;
+        return false;
     }
 
     wxString cmd;
-    bool ok = ft->GetOpenCommand(&cmd,
-                                 wxFileType::MessageParameters(filename, _T("")));
+    ft->GetOpenCommand(&cmd, wxFileType::MessageParameters(filename, wxEmptyString));
     delete ft;
 
-    ok = (wxExecute(cmd, FALSE) != 0);
-
-    return ok;
+    return (wxExecute(cmd, false) != 0);
 }
 
 // Find the absolute path where this application has been run from.
@@ -266,14 +227,12 @@ bool apInvokeAppForFile(const wxString& filename)
 
 wxString apFindAppPath(const wxString& argv0, const wxString& cwd, const wxString& appVariableName)
 {
-    wxString str;
-
     // Try appVariableName
-    if (!appVariableName.IsEmpty())
+    if (!appVariableName.empty())
     {
-        str = wxGetenv(appVariableName);
-        if (!str.IsEmpty())
-            return str;
+        wxString strVar(wxGetenv(appVariableName.c_str()));
+        if (!strVar.empty())
+            return strVar;
     }
 
     if (wxIsAbsolutePath(argv0))
@@ -285,9 +244,9 @@ wxString apFindAppPath(const wxString& argv0, const wxString& cwd, const wxStrin
         if (currentDir.Last() != wxFILE_SEP_PATH)
             currentDir += wxFILE_SEP_PATH;
 
-        str = currentDir + argv0;
-        if (wxFileExists(str))
-            return wxPathOnly(str);
+        currentDir += argv0;
+        if (wxFileExists(currentDir))
+            return wxPathOnly(currentDir);
     }
 
     // OK, it's neither an absolute path nor a relative path.
@@ -295,22 +254,46 @@ wxString apFindAppPath(const wxString& argv0, const wxString& cwd, const wxStrin
 
     wxPathList pathList;
     pathList.AddEnvList(wxT("PATH"));
-    str = pathList.FindAbsoluteValidPath(argv0);
-    if (!str.IsEmpty())
-        return wxPathOnly(str);
+    wxString strPath = pathList.FindAbsoluteValidPath(argv0);
+    if (!strPath.empty())
+        return wxPathOnly(strPath);
 
     // Failed
     return wxEmptyString;
 }
 
 // Adds a context-sensitive help button, for non-Windows platforms
-void apAddContextHelpButton(wxWindow* parent, wxSizer* sizer, int sizerFlags, int sizerBorder)
+void apAddContextHelpButton(wxWindow*
+                                      #if defined(__WXGTK__) || defined(__WXMAC__)
+                                      parent
+                                      #else
+                                      WXUNUSED(parent)
+                                      #endif
+                                      , wxSizer*
+                                                 #if defined(__WXGTK__) || defined(__WXMAC__)
+                                                 sizer
+                                                 #else
+                                                 WXUNUSED(sizer)
+                                                 #endif
+                                                 , int
+                                                       #if defined(__WXGTK__) || defined(__WXMAC__)
+                                                       sizerFlags
+                                                       #else
+                                                       WXUNUSED(sizerFlags)
+                                                       #endif
+                                                       , int
+                                                             #if defined(__WXGTK__) || defined(__WXMAC__)
+                                                             sizerBorder
+                                                             #else
+                                                             WXUNUSED(sizerBorder)
+                                                             #endif
+                                                             )
 {
 #if defined(__WXGTK__) || defined(__WXMAC__)
 #ifdef __WXMAC__
     wxSize buttonSize(20, 20);
 #else
-    wxSize buttonSize(-1, -1);
+    wxSize buttonSize = wxDefaultSize;
 #endif
     wxButton *contextButton = new wxContextHelpButton( parent, wxID_CONTEXT_HELP,
         wxDefaultPosition, buttonSize);
@@ -360,7 +343,7 @@ int wxIconInfo::GetIconId(int state, bool enabled) const
 {
     wxASSERT ( state < (wxMAX_ICON_STATES * 2) );
     wxASSERT ( state < m_maxStates );
-    
+
     return m_states[state * 2 + (enabled ? 0 : 1)];
 }
 
@@ -369,7 +352,7 @@ void wxIconInfo::SetIconId(int state, bool enabled, int iconId)
     wxASSERT ( state < (wxMAX_ICON_STATES * 2) );
     if (state+1 > m_maxStates)
         m_maxStates = state+1;
-    
+
     m_states[state * 2 + (enabled ? 0 : 1)] = iconId;
 }
 
@@ -381,7 +364,7 @@ void wxIconInfo::SetIconId(int state, bool enabled, int iconId)
 wxIconTable::wxIconTable(wxImageList* imageList)
 {
     m_imageList = imageList;
-    DeleteContents(TRUE);
+    WX_CLEAR_LIST(wxIconTable,*this);
 }
 
 void wxIconTable::AppendInfo(wxIconInfo* info)
@@ -394,7 +377,7 @@ void wxIconTable::AppendInfo(wxIconInfo* info)
 bool wxIconTable::AddInfo(const wxString& name, const wxIcon& icon, int state, bool enabled)
 {
     wxASSERT (m_imageList != NULL);
-    
+
     wxIconInfo* info = FindInfo(name);
     if (!info)
     {
@@ -402,12 +385,12 @@ bool wxIconTable::AddInfo(const wxString& name, const wxIcon& icon, int state, b
         Append(info);
     }
     info->SetIconId(state, enabled, m_imageList->Add(icon));
-    return TRUE;
+    return true;
 }
 
 wxIconInfo* wxIconTable::FindInfo(const wxString& name) const
 {
-    wxNode* node = GetFirst();
+    wxObjectList::compatibility_iterator node = GetFirst();
     while (node)
     {
         wxIconInfo* info = (wxIconInfo*) node->GetData();
@@ -430,9 +413,9 @@ bool wxIconTable::SetIconId(const wxString& name, int state, bool enabled, int i
 {
     wxIconInfo* info = FindInfo(name);
     if (!info)
-        return FALSE;
+        return false;
     info->SetIconId(state, enabled, iconId);
-    return TRUE;
+    return true;
 }
 
 // Output stream operators
@@ -450,7 +433,7 @@ wxOutputStream& operator <<(wxOutputStream& stream, long l)
     return stream << str;
 }
 
-wxOutputStream& operator <<(wxOutputStream& stream, const char c)
+wxOutputStream& operator <<(wxOutputStream& stream, const wxChar c)
 {
     wxString str;
     str.Printf(_T("%c"), c);
@@ -477,3 +460,36 @@ wxString ctEscapeHTMLCharacters(const wxString& str)
     }
     return s;
 }
+
+// Match 'matchText' against 'matchAgainst', optionally constraining to
+// whole-word only.
+bool ctMatchString(const wxString& matchAgainst, const wxString& matchText, bool wholeWordOnly)
+{
+    // Fast operation if not matching against whole words only
+    if (!wholeWordOnly)
+        return (matchAgainst.Find(matchText) != wxNOT_FOUND);
+
+    wxString left(matchAgainst);
+    bool success = false;
+    int matchTextLen = (int) matchText.Length();
+    while (!success && !matchAgainst.empty())
+    {
+        int pos = left.Find(matchText);
+        if (pos == wxNOT_FOUND)
+            return false;
+
+        bool firstCharOK = false;
+        bool lastCharOK = false;
+        if (pos == 0 || !wxIsalnum(left[(size_t) (pos-1)]))
+            firstCharOK = true;
+
+        if (((pos + matchTextLen) == (int) left.Length()) || !wxIsalnum(left[(size_t) (pos + matchTextLen)]))
+            lastCharOK = true;
+
+        if (firstCharOK && lastCharOK)
+            success = true;
+
+        left = left.Mid(pos+1);
+    }
+    return success;
+}