]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - tools/src/tools/configtool/standalone/wxwin/ecutils.h
Initial revision
[karo-tx-redboot.git] / tools / src / tools / configtool / standalone / wxwin / ecutils.h
1 //####COPYRIGHTBEGIN####
2 //                                                                          
3 // ----------------------------------------------------------------------------
4 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
5 // Copyright (C) 2003 John Dallaway
6 //
7 // This program is part of the eCos host tools.
8 //
9 // This program is free software; you can redistribute it and/or modify it 
10 // under the terms of the GNU General Public License as published by the Free 
11 // Software Foundation; either version 2 of the License, or (at your option) 
12 // any later version.
13 // 
14 // This program is distributed in the hope that it will be useful, but WITHOUT 
15 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
16 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
17 // more details.
18 // 
19 // You should have received a copy of the GNU General Public License along with
20 // this program; if not, write to the Free Software Foundation, Inc., 
21 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 //
23 // ----------------------------------------------------------------------------
24 //                                                                          
25 //####COPYRIGHTEND####
26 //===========================================================================
27 //#####DESCRIPTIONBEGIN####
28 //
29 // Author(s):   sdf, jld
30 // Contact(s):  sdf
31 // Date:                1998/08/11
32 // Version:             0.01
33 // Purpose:     
34 // Description: Interface to various global utility functions.  Everything in this
35 //                              class is static (there are no instances).
36 //              Modified by julians for wxWindows (originally CTUtils.h)
37 // Requires:    
38 // Provides:    
39 // See also:    
40 // Known bugs:  
41 // Usage:       
42 //
43 //####DESCRIPTIONEND####
44 //  
45 //===========================================================================
46
47 #ifndef _ECUTILS_H_
48 #define _ECUTILS_H_
49
50 #ifdef __GNUG__
51 #pragma interface "ecutils.cpp"
52 #endif
53
54 #include "wx/hash.h"
55 #include "wx/confbase.h"
56 #include "wx/dynarray.h"
57
58 #include "filename.h"
59 #include "cdl.hxx"
60
61 //#define INCLUDEFILE <string>
62 //#include "IncludeSTL.h"
63
64 //#include <stdarg.h>     // vsnprintf
65
66 /*
67  * ecUtils
68  * This class implements a miscellany of utility functions.
69  * They are being implemented as and when they are required during Configtool
70  * development.
71  */
72
73 class ecUtils {
74 public:
75 #if 0
76     static bool Launch (const ecFileName &strFileName,const ecFileName &strViewer);
77     static wxString GetLastErrorMessageString ();
78 #endif    
79
80     static const wxString PosixToNativePath(const wxString & posix);
81     static const wxString NativeToPosixPath(const wxString & native);
82     static bool AddToPath (const ecFileName &strFolder, bool bAtFront=true);
83
84 #if 0
85     static const wxString LoadString (UINT id);
86     
87     // Messagebox functions
88     
89     // Vararg message box compositor
90     static int MessageBoxF (LPCTSTR pszFormat, ...);
91     // Same, with type
92     static int MessageBoxFT (UINT nType, LPCTSTR pszFormat, ...);
93     // As above but with resource
94     static int MessageBoxFR (UINT nID, UINT nType, LPCTSTR pszFormat, ...);
95     // Same, with type
96     static int MessageBoxFR (UINT nID, LPCTSTR pszFormat, ...);
97     // vararg form
98     static int vMessageBox(UINT nType, LPCTSTR  pszFormat, va_list marker);
99     
100 #endif
101     // String functions
102     
103     // Chop the string into pieces using separator cSep.
104     // The Boolean controls whether " and \ make a difference
105     static int Chop(const wxString& psz,wxArrayString &ar, wxChar cSep=wxT(' '),
106         bool bObserveStrings = FALSE, bool bBackslashQuotes = FALSE);
107
108     static int Chop(const wxString& psz,wxArrayString &ar, const wxString& pszSep,
109         bool bObserveStrings=FALSE, bool bBackslashQuotes = FALSE);
110
111     // String -> Integer, observing the current hex/decimal setting
112     //static BOOL StrToItemIntegerType(const wxString &str, __int64 &d);
113     static bool StrToItemIntegerType(const wxString &str, long &d);
114     static bool StrToDouble (const wxString &strValue, double &dValue);
115
116     // Integer -> String, observing the current hex/decimal setting
117     static const wxString IntToStr(long d,bool bHex=false);
118     static const wxString DoubleToStr (double dValue);
119     static wxString StripExtraWhitespace (const wxString & strInput);
120
121     static void UnicodeToCStr(const wxChar* str,char *&psz);
122     static std::string UnicodeToStdStr(const wxChar* str);
123
124 #if 0    
125     // Provide a failure explanation for what just went wrong
126     static const wxString Explanation (CFileException &exc);
127     static ecFileName WPath(const std::string &str);
128     static bool CopyFile (LPCTSTR pszSource,LPCTSTR pszDest);
129 #endif
130 };
131
132 /*
133  * wxStringToStringMap
134  *
135  * Stores string values keyed by strings.
136  * Note that only one value is allowed per key.
137  */
138
139 class wxStringToStringMap: public wxObject
140 {
141 public:
142     wxStringToStringMap(): m_hashTable(wxKEY_STRING) {}
143     ~wxStringToStringMap() { Clear(); }
144
145 //// Operations
146
147     // Remove the key/value pair
148     bool Remove(const wxString& key);
149
150     // Clear the map
151     void Clear();
152
153     // Begin a search through the whole map: use Next to find key/value pairs
154     void BeginFind();
155
156     // Retrieve the next key/value pair, FALSE indicates end of data
157     bool Next(wxString& key, wxString& value);
158
159 //// Accessors
160
161     // Replaces the value (if any) associated with the key
162     void Set(const wxString& key, const wxString& value);
163
164     // Finds a value associated with the key, returns FALSE if none
165     bool Find(const wxString& key, wxString& value);
166
167 protected:
168     wxHashTable m_hashTable;
169 };
170
171 // Is str a member of arr?
172 bool wxArrayStringIsMember(const wxArrayString& arr, const wxString& str);
173
174 // Eliminate .. and .
175 wxString wxGetRealPath(const wxString& path);
176
177 // A version of the above but prepending the cwd (current path) first
178 // if 'path' is relative
179 wxString wxGetRealPath(const wxString& cwd, const wxString& path);
180
181 // Find the absolute path where this application has been run from.
182 // argv0 is wxTheApp->argv[0]
183 // cwd is the current working directory (at startup)
184 // appVariableName is the name of a variable containing the directory for this app, e.g.
185 //   MYAPPDIR. This is used as a last resort. Or should it be a first resort?
186 wxString wxFindAppPath(const wxString& argv0, const wxString& cwd, const wxString& appVariableName = wxEmptyString);
187
188 // Find the text of the list control item at the given column
189 class WXDLLEXPORT wxListCtrl;
190 wxString wxListCtrlGetItemTextColumn(wxListCtrl& listCtrl, long item, int col);
191
192 // Select the given item
193 void wxListCtrlSelectItem(wxListCtrl& listCtrl, long sel, bool deselectOther = TRUE);
194
195 // Find the selection
196 long wxListCtrlGetSelection(wxListCtrl& listCtrl);
197
198 // Find which column the cursor is on
199 int wxListCtrlFindColumn(wxListCtrl& listCtrl, int noCols, int x);
200
201 // Refresh children of this window (e.g. on Windows, laying out a window containing
202 // controls can cause screen corruption)
203 void wxRefreshControls(wxWindow* win);
204
205 // Make a path name with no separators, out of a full pathname,
206 // e.g. opt_ecos_ecos-1.4.5 out of /opt/ecos/ecos-1.4.5
207 wxString ecMakeNameFromPath(const wxString& path);
208
209 // Kill a process
210 int ecKill(long pid, wxSignal sig);
211
212 class WXDLLEXPORT wxOutputStream;
213
214 wxOutputStream& operator <<(wxOutputStream&, const wxString& s);
215 wxOutputStream& operator <<(wxOutputStream&, const char c);
216 wxOutputStream& operator <<(wxOutputStream&, long l);
217
218 /*
219  * Class for recursively killing a process and its children.
220  * This has been taken from CSubprocess, but we can't use CSubprocess
221  * directly for killing a process because it assumes it's been used to create
222  * the process.
223  */
224
225 class wxProcessKiller
226 {
227
228 public:
229     const wxString ErrorString() const;
230
231     wxProcessKiller(int pid);
232     ~wxProcessKiller();
233     
234     void SetVerbose   (bool b)         { m_bVerbose=b; }
235       
236     int Pid() const { return m_idProcess; } // returns process id (even when process is terminated)
237     
238     // Get the process exit code.  This can be:
239     //   exit code of process (if terminated)
240     //   0xffffffff (if process not yet run)
241     //   GetLastError result (if process could not be run)
242     int GetExitCode() { return m_nExitCode; }
243     
244     // Kill the process:
245     bool Kill(bool bRecurse = true);
246     
247     // Is the process running?
248     bool ProcessAlive();
249     
250 protected:
251     static const wxString Name (int pid); // for debugging - only works under NT
252     
253     struct wxPInfo;
254     struct wxPInfo {
255         wxPInfo *pParent;
256 #ifdef _WIN32
257         wxLongLong_t tCreation;
258 #endif
259         long tCpu;
260         int PID;
261         int PPID;
262         bool IsChildOf(int pid) const;
263     };
264     
265     typedef std::vector<wxPInfo> wxPInfoArray;
266     
267     static bool PSExtract(wxPInfoArray &arPinfo);
268     static void SetParents(wxPInfoArray &arPinfo);
269     
270 #ifdef _WIN32
271     static long GetPlatform();
272     WXHANDLE m_hrPipe;
273     WXHANDLE m_hwPipe;
274     WXHANDLE m_hProcess;     // This handle is "owned" by the ThreadFunc
275     static WXHINSTANCE hInstLib1, hInstLib2;
276     int m_nErr;
277 #else
278     int m_tty;
279     wxString m_strCmd;
280 #endif
281     
282     bool m_bVerbose;
283     int m_nExitCode;
284     int m_idProcess;
285     
286     static const unsigned int PROCESS_KILL_EXIT_CODE;
287 };
288
289 /*
290  * ecDialog
291  * Supports features we want to have for all dialogs in the application.
292  * So far, this just allows dialogs to be resizeable under MSW by
293  * refreshing the controls in OnSize (otherwise there's a mess)
294  */
295
296 class ecDialog: public wxDialog
297 {
298 public:
299     DECLARE_CLASS(ecDialog)
300
301     ecDialog() {};
302
303     ecDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition,
304         const wxSize& sz = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE)
305     {
306         Create(parent, id, title, pos, sz, style);
307     }
308 /*
309     bool Create(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition,
310         const wxSize& sz = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE);
311 */
312
313     void OnSize(wxSizeEvent& event);
314
315 DECLARE_EVENT_TABLE()
316 };
317
318 /*
319  * Implements saving/loading of window settings - fonts only for now
320  */
321
322 class wxWindowSettingsObject: public wxObject
323 {
324 public:
325     wxWindowSettingsObject(const wxString& name, wxWindow* win) { m_windowName = name; if (win) m_arrWindow.Add(win); }
326     wxString    m_windowName;
327     wxFont      m_font;
328     wxArrayPtrVoid m_arrWindow;
329 };
330
331 class wxWindowSettings: public wxObject
332 {
333 public:
334     wxWindowSettings() { m_useDefaults = TRUE; };
335     ~wxWindowSettings() { Clear(); }
336
337 //// Operations
338     wxWindowSettingsObject* FindSettings(const wxString& windowName) const;
339     void Add(const wxString& name, wxWindow* win = NULL) { m_settings.Append(new wxWindowSettingsObject(name, win)); }
340
341     bool LoadConfig(wxConfigBase& config);
342     bool SaveConfig(wxConfigBase& config);
343
344     bool LoadFont(wxConfigBase& config, const wxString& windowName, wxFont& font);
345     bool SaveFont(wxConfigBase& config, const wxString& windowName, const wxFont& font);
346
347     void Clear() { m_settings.DeleteContents(TRUE); m_settings.Clear(); m_settings.DeleteContents(FALSE); }
348
349     bool ApplyFontsToWindows();
350
351 //// Accessors
352     wxFont GetFont(const wxString& name) const;
353     void SetFont(const wxString& name, const wxFont& font);
354
355     wxWindow* GetWindow(const wxString& name) const;
356     void SetWindow(const wxString& name, wxWindow* win);
357
358     wxArrayPtrVoid* GetWindows(const wxString& name) const;
359     void SetWindows(const wxString& name, wxArrayPtrVoid& arr);
360
361     int GetCount() const { return m_settings.Number(); }
362     wxWindowSettingsObject* GetNth(int i) const { return (wxWindowSettingsObject*) m_settings.Nth(i)->Data(); }
363     wxString GetName(int i) const { return GetNth(i)->m_windowName; }
364
365     void SetUseDefaults(bool useDefaults) { m_useDefaults = useDefaults; }
366     bool GetUseDefaults() const { return m_useDefaults; }
367
368 public:
369     wxList  m_settings;
370     bool    m_useDefaults;
371 };
372
373 #endif
374 // _ECUTILS_H_