From: Julian Smart Date: Sat, 12 Sep 1998 17:31:48 +0000 (+0000) Subject: Added variant.h/cpp; changed variable names in object.h; added some functions X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/8cb50e4b4677abb67ffe9026780861c1b12a0463 Added variant.h/cpp; changed variable names in object.h; added some functions to wxStringList; added wxTrue and wxFalse to supress some warnings; some bugs fixes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@731 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/confbase.h b/include/wx/confbase.h index 961d4c3ff8..7cc1d07729 100644 --- a/include/wx/confbase.h +++ b/include/wx/confbase.h @@ -276,14 +276,14 @@ private: #if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE #ifdef __WIN32__ #define wxConfig wxRegConfig - #define classwxConfig classwxRegConfig + #define sm_classwxConfig sm_classwxRegConfig #else //WIN16 #define wxConfig wxIniConfig - #define classwxConfig classwxIniConfig + #define sm_classwxConfig sm_classwxIniConfig #endif #else // either we're under Unix or wish to use files even under Windows #define wxConfig wxFileConfig - #define classwxConfig classwxFileConfig + #define sm_classwxConfig sm_classwxFileConfig #endif diff --git a/include/wx/debug.h b/include/wx/debug.h index 816caa0324..99758d1f7a 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -65,9 +65,9 @@ #endif //WXDEBUG /// special form of assert: always triggers it (in debug mode) -#define wxFAIL wxASSERT(0) +#define wxFAIL wxASSERT(wxFalse) /// FAIL with some message -#define wxFAIL_MSG(msg) wxASSERT_MSG(0, msg) +#define wxFAIL_MSG(msg) wxASSERT_MSG(wxFalse, msg) //@} // NB: these macros work also in release mode! diff --git a/include/wx/defs.h b/include/wx/defs.h index 843ea408c8..c4ff0facb3 100644 --- a/include/wx/defs.h +++ b/include/wx/defs.h @@ -230,6 +230,10 @@ enum ErrCode /// size of statically declared array #define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) +// Use of these suppresses some compiler warnings +WXDLLEXPORT_DATA(extern const bool) wxTrue; +WXDLLEXPORT_DATA(extern const bool) wxFalse; + // ---------------------------------------------------------------------------- // compiler and OS identification // ---------------------------------------------------------------------------- diff --git a/include/wx/fontdlg.h b/include/wx/fontdlg.h index 20445e8842..f851cd8ee9 100644 --- a/include/wx/fontdlg.h +++ b/include/wx/fontdlg.h @@ -6,23 +6,23 @@ #elif defined(__WXMOTIF__) #include "wx/generic/fontdlgg.h" # define wxFontDialog wxGenericFontDialog -# define classwxFontDialog classwxGenericFontDialog +# define sm_classwxFontDialog sm_classwxGenericFontDialog #elif defined(__WXGTK__) #include "wx/generic/fontdlgg.h" # define wxFontDialog wxGenericFontDialog -# define classwxFontDialog classwxGenericFontDialog +# define sm_classwxFontDialog sm_classwxGenericFontDialog #elif defined(__WXQT__) #include "wx/generic/fontdlgg.h" # define wxFontDialog wxGenericFontDialog -# define classwxFontDialog classwxGenericFontDialog +# define sm_classwxFontDialog sm_classwxGenericFontDialog #elif defined(__WXMAC__) #include "wx/generic/fontdlgg.h" # define wxFontDialog wxGenericFontDialog -# define classwxFontDialog classwxGenericFontDialog +# define sm_classwxFontDialog sm_classwxGenericFontDialog #elif defined(__WXSTUBS__) #include "wx/generic/fontdlgg.h" # define wxFontDialog wxGenericFontDialog -# define classwxFontDialog classwxGenericFontDialog +# define sm_classwxFontDialog sm_classwxGenericFontDialog #endif #endif diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h index 17517cce8a..d726d44c1e 100644 --- a/include/wx/gdicmn.h +++ b/include/wx/gdicmn.h @@ -326,21 +326,27 @@ extern wxSize WXDLLEXPORT wxGetDisplaySize(); extern void WXDLLEXPORT wxSetCursor(const wxCursor& cursor); -// Useful macro for create icons portably +// Useful macro for creating icons portably #ifdef __WXMSW__ -# define wxICON(X) wxIcon(X##_icon); -#elif defined(__X__) -# define wxICON(X) wxIcon(X##_bits, X##_width, X##_height); +// Load from a resource +# define wxICON(X) wxIcon("" #X "") + +#elif defined(__WXGTK__) +// Initialize from an included XPM +# define wxICON(X) wxIcon(X##_xpm) #else -# define wxICON wxIcon + +// This will usually mean something on any platform +# define wxICON(X) wxIcon("" #X "") #endif /* Example: - #define wxbuild_icon "wxbuild" - - wxIcon *icon = new wxICON(wxbuild); + wxIcon *icon = new wxICON(mondrian); + expands into: + wxIcon *icon = new wxIcon("mondrian"); // On wxMSW + wxIcon *icon = new wxIcon(mondrian_xpm); // On wxGTK */ class WXDLLEXPORT wxResourceCache: public wxList diff --git a/include/wx/generic/laywin.h b/include/wx/generic/laywin.h index fcfc87a53d..cc2f79ce8b 100644 --- a/include/wx/generic/laywin.h +++ b/include/wx/generic/laywin.h @@ -63,6 +63,7 @@ public: SetEventType(wxEVT_QUERY_LAYOUT_INFO); m_requestedLength = 0; m_flags = 0; + m_id = id; m_alignment = wxLAYOUT_TOP; m_orientation = wxLAYOUT_HORIZONTAL; } @@ -107,6 +108,7 @@ public: { SetEventType(wxEVT_CALCULATE_LAYOUT); m_flags = 0; + m_id = id; } // Read by the app inline void SetFlags(int flags) { m_flags = flags; } diff --git a/include/wx/help.h b/include/wx/help.h index 71bff121f6..36c6b04e41 100644 --- a/include/wx/help.h +++ b/include/wx/help.h @@ -11,13 +11,13 @@ #ifdef __WXMSW__ #define wxHelpController wxWinHelpController -#define classwxHelpController classwxWinHelpController +#define sm_classwxHelpController sm_classwxWinHelpController #elif defined(__WXGTK__) #define wxHelpController wxHTMLHelpController -#define classwxHelpController classwxHTMLHelpController +#define sm_classwxHelpController sm_classwxHTMLHelpController #else #define wxHelpController wxXLPHelpController -#define classwxHelpController classwxXLPHelpController +#define sm_classwxHelpController sm_classwxXLPHelpController #endif #endif diff --git a/include/wx/list.h b/include/wx/list.h index 9f3753d37c..1a04556ba9 100644 --- a/include/wx/list.h +++ b/include/wx/list.h @@ -97,17 +97,17 @@ class WXDLLEXPORT wxList: public wxObject bool DeleteObject(wxObject *object); // Finds object pointer and // deletes node (and object if // DeleteContents is on) - void Clear(void); // Delete all nodes + virtual void Clear(void); // Delete all nodes inline wxNode *First(void) const { return first_node; } inline wxNode *Last(void) const { return last_node; } wxNode *Nth(int i) const; // nth node counting from 0 // Keyed search - wxNode *Find(long key) const; - wxNode *Find(const char *key) const; + virtual wxNode *Find(long key) const; + virtual wxNode *Find(const char *key) const; - wxNode *Member(wxObject *object) const; + virtual wxNode *Member(wxObject *object) const; inline void DeleteContents(int destroy) { destroy_data = destroy; } // Instruct it to destroy user data @@ -129,6 +129,7 @@ class WXDLLEXPORT wxStringList: public wxList public: wxStringList(void); + wxStringList(const wxStringList& list); wxStringList(const char *first ...); ~wxStringList(void); @@ -137,6 +138,9 @@ class WXDLLEXPORT wxStringList: public wxList virtual char **ListToArray(bool new_copies = FALSE) const; virtual void Sort(void); virtual bool Member(const char *s) const; + virtual void Clear(void); + void operator= (const wxStringList& list); + char* operator[] (int i) const; }; #endif diff --git a/include/wx/msw/gauge.h b/include/wx/msw/gauge.h index 0751cada22..3b5569a769 100644 --- a/include/wx/msw/gauge.h +++ b/include/wx/msw/gauge.h @@ -19,11 +19,11 @@ #ifdef __WIN95__ #include "wx/msw/gauge95.h" #define wxGauge wxGauge95 -#define classwxGauge classwxGauge95 +#define sm_classwxGauge sm_classwxGauge95 #else #include "wx/msw/gaugemsw.h" #define wxGauge wxGaugeMSW -#define classwxGauge classwxGaugeMSW +#define sm_classwxGauge sm_classwxGaugeMSW #endif #endif diff --git a/include/wx/msw/slider.h b/include/wx/msw/slider.h index 07ae358658..95cf43b5f6 100644 --- a/include/wx/msw/slider.h +++ b/include/wx/msw/slider.h @@ -19,11 +19,11 @@ #ifdef __WIN95__ #include "wx/msw/slider95.h" #define wxSlider wxSlider95 -#define classwxSlider classwxSlider95 +#define sm_classwxSlider sm_classwxSlider95 #else #include "wx/msw/slidrmsw.h" #define wxSlider wxSliderMSW -#define classwxSlider classwxSliderMSW +#define sm_classwxSlider sm_classwxSliderMSW #endif #endif diff --git a/include/wx/object.h b/include/wx/object.h index de08899955..319022cdfe 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -59,7 +59,7 @@ class WXDLLEXPORT wxClassInfo inline wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } inline wxClassInfo* GetFirst() const { return sm_first; } inline wxClassInfo* GetNext() const { return m_next; } - bool IsKindOf(wxClassInfo *info); + bool IsKindOf(wxClassInfo *info) const; static wxClassInfo *FindClass(char *c); @@ -96,7 +96,7 @@ wxObject* WXDLLEXPORT wxCreateStoredObject( wxInputStream& stream ); #define DECLARE_DYNAMIC_CLASS(name) \ public:\ static wxClassInfo sm_class##name;\ - wxClassInfo *GetClassInfo() \ + wxClassInfo *GetClassInfo() const \ { return &name::sm_class##name; } #define DECLARE_ABSTRACT_CLASS(name) DECLARE_DYNAMIC_CLASS(name) @@ -174,9 +174,9 @@ class WXDLLEXPORT wxObject wxObject(void); virtual ~wxObject(void); - virtual wxClassInfo *GetClassInfo(void) { return &sm_classwxObject; } + virtual wxClassInfo *GetClassInfo(void) const { return &sm_classwxObject; } - bool IsKindOf(wxClassInfo *info); + bool IsKindOf(wxClassInfo *info) const; #if WXDEBUG && USE_MEMORY_TRACING void * operator new (size_t size, char * fileName = NULL, int lineNum = 0); diff --git a/include/wx/toolbar.h b/include/wx/toolbar.h index 3e09456f59..e2499addee 100644 --- a/include/wx/toolbar.h +++ b/include/wx/toolbar.h @@ -6,11 +6,11 @@ #if defined(__WXMSW__) && defined(__WIN95__) # include "wx/msw/tbar95.h" # define wxToolBar wxToolBar95 -# define classwxToolBar classwxToolBar95 +# define sm_classwxToolBar sm_classwxToolBar95 #elif defined(__WXMSW__) # include "wx/msw/tbarmsw.h" # define wxToolBar wxToolBarMSW -# define classwxToolBar classwxToolBarMSW +# define sm_classwxToolBar sm_classwxToolBarMSW #elif defined(__WXGTK__) # include "wx/gtk/tbargtk.h" #elif defined(__WXQT__) diff --git a/include/wx/variant.h b/include/wx/variant.h new file mode 100644 index 0000000000..e165f87168 --- /dev/null +++ b/include/wx/variant.h @@ -0,0 +1,202 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: variant.h +// Purpose: wxVariant class, container for any type +// Author: Julian Smart +// Modified by: +// Created: 10/09/98 +// RCS-ID: $Id$ +// Copyright: (c) +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_VARIANT_H_ +#define _WX_VARIANT_H_ + +#ifdef __GNUG__ +#pragma interface "variant.h" +#endif + +#include "wx/defs.h" +#include "wx/object.h" +#include "wx/string.h" +#include "wx/list.h" + +#if USE_IOSTREAMH +#include +#else +#include +#endif + +/* + * wxVariantData stores the actual data in a wxVariant object, + * to allow it to store any type of data. + * Derive from this to provide custom data handling. + * + * TODO: in order to replace wxPropertyValue, we would need + * to consider adding constructors that take pointers to C++ variables, + * or removing that functionality from the wxProperty library. + * Essentially wxPropertyValue takes on some of the wxValidator functionality + * by storing pointers and not just actual values, allowing update of C++ data + * to be handled automatically. Perhaps there's another way of doing this without + * overloading wxVariant with unnecessary functionality. + */ + +class WXDLLEXPORT wxVariantData: public wxObject +{ +DECLARE_ABSTRACT_CLASS(wxVariantData) +public: + +// Construction & destruction + wxVariantData() {}; + +// Override these to provide common functionality + // Copy to data + virtual void Copy(wxVariantData& data) = 0; + virtual bool Eq(wxVariantData& data) const = 0; + virtual bool Write(ostream& str) const = 0; + virtual bool Write(wxString& str) const = 0; + virtual bool Read(istream& str) = 0; + virtual bool Read(wxString& str) = 0; + // What type is it? Return a string name. + virtual wxString GetType() const = 0; +}; + +/* + * wxVariant can store any kind of data, but has some basic types + * built in. + * NOTE: this eventually should have a reference-counting implementation. + * PLEASE, if you change it to ref-counting, make sure it doesn't involve bloating + * this class too much. + */ + +class WXDLLEXPORT wxVariant: public wxObject +{ +DECLARE_DYNAMIC_CLASS(wxVariant) +public: + +// Construction & destruction + wxVariant(); + wxVariant(double val); + wxVariant(long val); + wxVariant(bool val); + wxVariant(char val); + wxVariant(const wxString& val); + wxVariant(const char* val); // Necessary or VC++ assumes bool! +/* Causes ambiguity + wxVariant(const wxStringList& val); +*/ + wxVariant(const wxList& val); // List of variants + wxVariant(const wxVariant& variant); + wxVariant(wxVariantData* data); // User-defined data + ~wxVariant(); + +// Generic operators + // Assignment + void operator= (const wxVariant& variant); + + // Assignment using data, e.g. + // myVariant = new wxStringVariantData("hello"); + void operator= (wxVariantData* variantData); + bool operator== (const wxVariant& variant) const; + bool operator!= (const wxVariant& variant) const; + +// Specific operators + bool operator== (double value) const; + bool operator!= (double value) const; + void operator= (double value) ; + bool operator== (long value) const; + bool operator!= (long value) const; + void operator= (long value) ; + bool operator== (char value) const; + bool operator!= (char value) const; + void operator= (char value) ; + bool operator== (bool value) const; + bool operator!= (bool value) const; + void operator= (bool value) ; + bool operator== (const wxString& value) const; + bool operator!= (const wxString& value) const; + void operator= (const wxString& value) ; + void operator= (const char* value) ; // Necessary or VC++ assumes bool! + bool operator== (const wxStringList& value) const; + bool operator!= (const wxStringList& value) const; + void operator= (const wxStringList& value) ; + bool operator== (const wxList& value) const; + bool operator!= (const wxList& value) const; + void operator= (const wxList& value) ; + + // Treat a list variant as an array + wxVariant operator[] (size_t idx) const; + wxVariant& operator[] (size_t idx) ; + + // Implicit conversion to a wxString + inline operator wxString () const { return MakeString(); } + wxString MakeString() const; + + // Other implicit conversions + inline operator double () const { return GetDouble(); } + inline operator long () const { return GetLong(); } + inline operator bool () const { return GetBool(); } + +// Accessors + // Tests whether there is data + inline bool IsNull() const { return (m_data == (wxVariantData*) NULL); } + + wxVariantData* GetData() const { return m_data; } + void SetData(wxVariantData* data) ; + + // Returns a string representing the type of the variant, + // e.g. "string", "bool", "stringlist", "list", "double", "long" + wxString GetType() const; + + bool IsType(const wxString& type) const; + + // Return the number of elements in a list + int GetCount() const; + +// Value accessors + double GetReal() const ; + inline double GetDouble() const { return GetReal(); }; + long GetInteger() const ; + inline long GetLong() const { return GetInteger(); }; + char GetChar() const ; + bool GetBool() const ; + wxString GetString() const ; + wxList& GetList() const ; + wxStringList& GetStringList() const ; + +// Operations + // Make NULL (i.e. delete the data) + void MakeNull(); + + // Make empty list + void NullList(); + + // Append to list + void Append(const wxVariant& value); + + // Insert at front of list + void Insert(const wxVariant& value); + + // Returns TRUE if the variant is a member of the list + bool Member(const wxVariant& value) const; + + // Deletes the nth element of the list + bool Delete(int item); + + // Clear list + void ClearList(); + +// Type conversion + bool Convert(long* value) const; + bool Convert(bool* value) const; + bool Convert(double* value) const; + bool Convert(wxString* value) const; + bool Convert(char* value) const; + +// Attributes +protected: + wxVariantData* m_data; +}; + +#endif + // _WX_VARIANT_H_