// 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.
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;
// 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);
}
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)
{
int style = wxNORMAL;
int weight = wxNORMAL;
int underlined = 0;
- wxString facename(wxT(""));
+ wxString facename;
wxStringTokenizer tkz(str, wxT(","));
int i = 0;
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;
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
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.
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))
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.
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);
{
wxASSERT ( state < (wxMAX_ICON_STATES * 2) );
wxASSERT ( state < m_maxStates );
-
+
return m_states[state * 2 + (enabled ? 0 : 1)];
}
wxASSERT ( state < (wxMAX_ICON_STATES * 2) );
if (state+1 > m_maxStates)
m_maxStates = state+1;
-
+
m_states[state * 2 + (enabled ? 0 : 1)] = iconId;
}
wxIconTable::wxIconTable(wxImageList* imageList)
{
m_imageList = imageList;
- DeleteContents(TRUE);
+ WX_CLEAR_LIST(wxIconTable,*this);
}
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)
{
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();
{
wxIconInfo* info = FindInfo(name);
if (!info)
- return FALSE;
+ return false;
info->SetIconId(state, enabled, iconId);
- return TRUE;
+ return true;
}
// Output stream operators
return stream << str;
}
-wxOutputStream& operator <<(wxOutputStream& stream, const char c)
+wxOutputStream& operator <<(wxOutputStream& stream, const wxChar c)
{
wxString str;
str.Printf(_T("%c"), c);
}
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;
+}