1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Utility functions and classes
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
10 /////////////////////////////////////////////////////////////////////////////
14 * \brief A file of utility functions and classes.
24 #include "wx/imaglist.h"
29 * \defgroup ForwardDeclarations Forward Declations
34 class WXDLLEXPORT wxImage
;
35 class WXDLLEXPORT wxNotebook
;
36 class WXDLLEXPORT wxInputStream
;
37 class WXDLLEXPORT wxOutputStream
;
38 class WXDLLEXPORT wxFileInputStream
;
39 class WXDLLEXPORT wxFileOutputStream
;
40 class WXDLLEXPORT wxDataInputStream
;
41 class WXDLLEXPORT wxDataOutputStream
;
42 class WXDLLEXPORT wxSplitterWindow
;
43 class WXDLLEXPORT wxVariant
;
44 class WXDLLEXPORT wxListCtrl
;
54 #define wxNEWLINE wxT("\r\n")
56 #define wxNEWLINE wxT("\n")
59 /// Returns the image type, or -1, determined from the extension.
60 int apDetermineImageType(const wxString
& filename
);
62 /// Convert a colour to a 6-digit hex string
63 wxString
apColourToHexString(const wxColour
& col
);
65 /// Convert 6-digit hex string to a colour
66 wxColour
apHexStringToColour(const wxString
& hex
);
68 /// Convert a wxFont to a string
69 wxString
apFontToString(const wxFont
& font
);
71 /// Convert a string to a wxFont
72 wxFont
apStringToFont(const wxString
& str
);
74 /// Get the index of the given named wxNotebook page
75 int apFindNotebookPage(wxNotebook
* notebook
, const wxString
& name
);
77 /// View the given URL
78 void apViewHTMLFile(const wxString
& url
);
80 /// Returns the system temporary directory.
81 wxString
wxGetTempDir();
83 /// Launch the application associated with the filename's extension
84 bool apInvokeAppForFile(const wxString
& filename
);
86 /// \brief Find the absolute path where this application has been run from.
88 /// \param argv0 wxTheApp->argv[0]
89 /// \param cwd The current working directory (at startup)
90 /// \param appVariableName The name of a variable containing the directory for this app, e.g.
91 /// MYAPPDIR. This is used as a last resort.
92 wxString
apFindAppPath(const wxString
& argv0
, const wxString
& cwd
, const wxString
& appVariableName
= wxEmptyString
);
94 /// Adds a context-sensitive help button, for non-Windows platforms
95 void apAddContextHelpButton(wxWindow
* parent
, wxSizer
* sizer
, int sizerFlags
= wxALIGN_CENTRE
|wxALL
, int sizerBorder
= 5);
97 /// Get selected wxNotebook page
98 wxWindow
* apNotebookGetSelectedPage(wxNotebook
* notebook
);
100 #define wxMAX_ICON_STATES 4
104 wxIconInfo, wxIconTable
105 associate multiple state icons with items in tree controls
106 (and potentially other controls).
108 So instead of having to remember a lot of image list ids,
109 you have a named state info object which contains up to 4 different states
110 (identified by the integers 0 - 3). Each of these states can
111 be in a further 2 sub-states - enabled or disabled.
113 wxIconTable holds a list of these state info objects
114 and has a convenient API. For example, the following adds
115 icons for a checkbox item that can be: on/enabled, off/enabled,
116 on/disabled,off/disabled.
118 m_iconTable.AddInfo("Checkbox", wxICON(checked), 0, true);
119 m_iconTable.AddInfo("Checkbox", wxICON(checked_dis), 0, false);
120 m_iconTable.AddInfo("Checkbox", wxICON(unchecked), 1, true);
121 m_iconTable.AddInfo("Checkbox", wxICON(unchecked_dis), 1, false);
123 When you update the item image in response to (e.g.) user interaction,
124 you can say something like this:
126 int iconId = m_iconTable.GetIconId("Checkbox", 0, false);
128 treeCtrl.SetItemImage(itemId, iconId, wxTreeItemIcon_Normal);
129 treeCtrl.SetItemImage(itemId, iconId, wxTreeItemIcon_Selected);
135 * Stores information about the visual state of an item in a tree control
138 class wxIconInfo
: public wxObject
141 wxIconInfo(const wxString
& name
);
143 // How many states? (Each state
144 // has enabled/disabled state)
145 // Max (say) 4 states, each with
147 int GetStateCount() const { return m_maxStates
; };
149 void SetStateCount(int count
) { m_maxStates
= count
; }
150 int GetIconId(int state
, bool enabled
= true) const;
151 void SetIconId(int state
, bool enabled
, int iconId
);
153 const wxString
& GetName() const { return m_name
; }
157 int m_states
[wxMAX_ICON_STATES
* 2]; // Enabled/disabled
158 wxString m_name
; // Name of icon, e.g. "Package"
163 * Contains a list of wxIconInfos
166 class wxIconTable
: public wxList
169 wxIconTable(wxImageList
* imageList
= NULL
);
171 void AppendInfo(wxIconInfo
* info
);
173 // Easy way of initialising both the image list and the
174 // info db. It will generate image ids itself while appending the icon.
175 // 'state' is an integer from 0 up to the max allowed, representing a different
176 // state. There may be only one, or (for a checkbox) there may be two.
177 // A folder that can be open or closed would have two states.
178 // Enabled/disabled is taken as a special case.
179 bool AddInfo(const wxString
& name
, const wxIcon
& icon
, int state
, bool enabled
);
181 wxIconInfo
* FindInfo(const wxString
& name
) const;
183 int GetIconId(const wxString
& name
, int state
, bool enabled
= true) const;
184 bool SetIconId(const wxString
& name
, int state
, bool enabled
, int iconId
) ;
186 void SetImageList(wxImageList
* imageList
) { m_imageList
= imageList
; }
187 wxImageList
* GetImageList() const { return m_imageList
; }
190 wxImageList
* m_imageList
;
193 /// Useful insertion operators for wxOutputStream.
194 wxOutputStream
& operator <<(wxOutputStream
&, const wxString
& s
);
195 wxOutputStream
& operator <<(wxOutputStream
&, const char c
);
196 wxOutputStream
& operator <<(wxOutputStream
&, long l
);
198 // Convert characters to HTML equivalents
199 wxString
ctEscapeHTMLCharacters(const wxString
& str
);
201 // Match 'matchText' against 'matchAgainst', optionally constraining to
203 bool ctMatchString(const wxString
& matchAgainst
, const wxString
& matchText
, bool wholeWordOnly
);