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
This commit is contained in:
Julian Smart
1998-09-12 17:31:48 +00:00
parent 341287bf49
commit 8cb50e4b46
13 changed files with 253 additions and 35 deletions

View File

@@ -276,14 +276,14 @@ private:
#if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE #if defined(__WXMSW__) && wxCONFIG_WIN32_NATIVE
#ifdef __WIN32__ #ifdef __WIN32__
#define wxConfig wxRegConfig #define wxConfig wxRegConfig
#define classwxConfig classwxRegConfig #define sm_classwxConfig sm_classwxRegConfig
#else //WIN16 #else //WIN16
#define wxConfig wxIniConfig #define wxConfig wxIniConfig
#define classwxConfig classwxIniConfig #define sm_classwxConfig sm_classwxIniConfig
#endif #endif
#else // either we're under Unix or wish to use files even under Windows #else // either we're under Unix or wish to use files even under Windows
#define wxConfig wxFileConfig #define wxConfig wxFileConfig
#define classwxConfig classwxFileConfig #define sm_classwxConfig sm_classwxFileConfig
#endif #endif

View File

@@ -65,9 +65,9 @@
#endif //WXDEBUG #endif //WXDEBUG
/// special form of assert: always triggers it (in debug mode) /// special form of assert: always triggers it (in debug mode)
#define wxFAIL wxASSERT(0) #define wxFAIL wxASSERT(wxFalse)
/// FAIL with some message /// 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! // NB: these macros work also in release mode!

View File

@@ -230,6 +230,10 @@ enum ErrCode
/// size of statically declared array /// size of statically declared array
#define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) #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 // compiler and OS identification
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -6,23 +6,23 @@
#elif defined(__WXMOTIF__) #elif defined(__WXMOTIF__)
#include "wx/generic/fontdlgg.h" #include "wx/generic/fontdlgg.h"
# define wxFontDialog wxGenericFontDialog # define wxFontDialog wxGenericFontDialog
# define classwxFontDialog classwxGenericFontDialog # define sm_classwxFontDialog sm_classwxGenericFontDialog
#elif defined(__WXGTK__) #elif defined(__WXGTK__)
#include "wx/generic/fontdlgg.h" #include "wx/generic/fontdlgg.h"
# define wxFontDialog wxGenericFontDialog # define wxFontDialog wxGenericFontDialog
# define classwxFontDialog classwxGenericFontDialog # define sm_classwxFontDialog sm_classwxGenericFontDialog
#elif defined(__WXQT__) #elif defined(__WXQT__)
#include "wx/generic/fontdlgg.h" #include "wx/generic/fontdlgg.h"
# define wxFontDialog wxGenericFontDialog # define wxFontDialog wxGenericFontDialog
# define classwxFontDialog classwxGenericFontDialog # define sm_classwxFontDialog sm_classwxGenericFontDialog
#elif defined(__WXMAC__) #elif defined(__WXMAC__)
#include "wx/generic/fontdlgg.h" #include "wx/generic/fontdlgg.h"
# define wxFontDialog wxGenericFontDialog # define wxFontDialog wxGenericFontDialog
# define classwxFontDialog classwxGenericFontDialog # define sm_classwxFontDialog sm_classwxGenericFontDialog
#elif defined(__WXSTUBS__) #elif defined(__WXSTUBS__)
#include "wx/generic/fontdlgg.h" #include "wx/generic/fontdlgg.h"
# define wxFontDialog wxGenericFontDialog # define wxFontDialog wxGenericFontDialog
# define classwxFontDialog classwxGenericFontDialog # define sm_classwxFontDialog sm_classwxGenericFontDialog
#endif #endif
#endif #endif

View File

@@ -326,21 +326,27 @@ extern wxSize WXDLLEXPORT wxGetDisplaySize();
extern void WXDLLEXPORT wxSetCursor(const wxCursor& cursor); extern void WXDLLEXPORT wxSetCursor(const wxCursor& cursor);
// Useful macro for create icons portably // Useful macro for creating icons portably
#ifdef __WXMSW__ #ifdef __WXMSW__
# define wxICON(X) wxIcon(X##_icon); // Load from a resource
#elif defined(__X__) # define wxICON(X) wxIcon("" #X "")
# define wxICON(X) wxIcon(X##_bits, X##_width, X##_height);
#elif defined(__WXGTK__)
// Initialize from an included XPM
# define wxICON(X) wxIcon(X##_xpm)
#else #else
# define wxICON wxIcon
// This will usually mean something on any platform
# define wxICON(X) wxIcon("" #X "")
#endif #endif
/* /*
Example: Example:
#define wxbuild_icon "wxbuild" wxIcon *icon = new wxICON(mondrian);
expands into:
wxIcon *icon = new wxICON(wxbuild); wxIcon *icon = new wxIcon("mondrian"); // On wxMSW
wxIcon *icon = new wxIcon(mondrian_xpm); // On wxGTK
*/ */
class WXDLLEXPORT wxResourceCache: public wxList class WXDLLEXPORT wxResourceCache: public wxList

View File

@@ -63,6 +63,7 @@ public:
SetEventType(wxEVT_QUERY_LAYOUT_INFO); SetEventType(wxEVT_QUERY_LAYOUT_INFO);
m_requestedLength = 0; m_requestedLength = 0;
m_flags = 0; m_flags = 0;
m_id = id;
m_alignment = wxLAYOUT_TOP; m_alignment = wxLAYOUT_TOP;
m_orientation = wxLAYOUT_HORIZONTAL; m_orientation = wxLAYOUT_HORIZONTAL;
} }
@@ -107,6 +108,7 @@ public:
{ {
SetEventType(wxEVT_CALCULATE_LAYOUT); SetEventType(wxEVT_CALCULATE_LAYOUT);
m_flags = 0; m_flags = 0;
m_id = id;
} }
// Read by the app // Read by the app
inline void SetFlags(int flags) { m_flags = flags; } inline void SetFlags(int flags) { m_flags = flags; }

View File

@@ -11,13 +11,13 @@
#ifdef __WXMSW__ #ifdef __WXMSW__
#define wxHelpController wxWinHelpController #define wxHelpController wxWinHelpController
#define classwxHelpController classwxWinHelpController #define sm_classwxHelpController sm_classwxWinHelpController
#elif defined(__WXGTK__) #elif defined(__WXGTK__)
#define wxHelpController wxHTMLHelpController #define wxHelpController wxHTMLHelpController
#define classwxHelpController classwxHTMLHelpController #define sm_classwxHelpController sm_classwxHTMLHelpController
#else #else
#define wxHelpController wxXLPHelpController #define wxHelpController wxXLPHelpController
#define classwxHelpController classwxXLPHelpController #define sm_classwxHelpController sm_classwxXLPHelpController
#endif #endif
#endif #endif

View File

@@ -97,17 +97,17 @@ class WXDLLEXPORT wxList: public wxObject
bool DeleteObject(wxObject *object); // Finds object pointer and bool DeleteObject(wxObject *object); // Finds object pointer and
// deletes node (and object if // deletes node (and object if
// DeleteContents is on) // 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 *First(void) const { return first_node; }
inline wxNode *Last(void) const { return last_node; } inline wxNode *Last(void) const { return last_node; }
wxNode *Nth(int i) const; // nth node counting from 0 wxNode *Nth(int i) const; // nth node counting from 0
// Keyed search // Keyed search
wxNode *Find(long key) const; virtual wxNode *Find(long key) const;
wxNode *Find(const char *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; } inline void DeleteContents(int destroy) { destroy_data = destroy; }
// Instruct it to destroy user data // Instruct it to destroy user data
@@ -129,6 +129,7 @@ class WXDLLEXPORT wxStringList: public wxList
public: public:
wxStringList(void); wxStringList(void);
wxStringList(const wxStringList& list);
wxStringList(const char *first ...); wxStringList(const char *first ...);
~wxStringList(void); ~wxStringList(void);
@@ -137,6 +138,9 @@ class WXDLLEXPORT wxStringList: public wxList
virtual char **ListToArray(bool new_copies = FALSE) const; virtual char **ListToArray(bool new_copies = FALSE) const;
virtual void Sort(void); virtual void Sort(void);
virtual bool Member(const char *s) const; virtual bool Member(const char *s) const;
virtual void Clear(void);
void operator= (const wxStringList& list);
char* operator[] (int i) const;
}; };
#endif #endif

View File

@@ -19,11 +19,11 @@
#ifdef __WIN95__ #ifdef __WIN95__
#include "wx/msw/gauge95.h" #include "wx/msw/gauge95.h"
#define wxGauge wxGauge95 #define wxGauge wxGauge95
#define classwxGauge classwxGauge95 #define sm_classwxGauge sm_classwxGauge95
#else #else
#include "wx/msw/gaugemsw.h" #include "wx/msw/gaugemsw.h"
#define wxGauge wxGaugeMSW #define wxGauge wxGaugeMSW
#define classwxGauge classwxGaugeMSW #define sm_classwxGauge sm_classwxGaugeMSW
#endif #endif
#endif #endif

View File

@@ -19,11 +19,11 @@
#ifdef __WIN95__ #ifdef __WIN95__
#include "wx/msw/slider95.h" #include "wx/msw/slider95.h"
#define wxSlider wxSlider95 #define wxSlider wxSlider95
#define classwxSlider classwxSlider95 #define sm_classwxSlider sm_classwxSlider95
#else #else
#include "wx/msw/slidrmsw.h" #include "wx/msw/slidrmsw.h"
#define wxSlider wxSliderMSW #define wxSlider wxSliderMSW
#define classwxSlider classwxSliderMSW #define sm_classwxSlider sm_classwxSliderMSW
#endif #endif
#endif #endif

View File

@@ -59,7 +59,7 @@ class WXDLLEXPORT wxClassInfo
inline wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } inline wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; }
inline wxClassInfo* GetFirst() const { return sm_first; } inline wxClassInfo* GetFirst() const { return sm_first; }
inline wxClassInfo* GetNext() const { return m_next; } inline wxClassInfo* GetNext() const { return m_next; }
bool IsKindOf(wxClassInfo *info); bool IsKindOf(wxClassInfo *info) const;
static wxClassInfo *FindClass(char *c); static wxClassInfo *FindClass(char *c);
@@ -96,7 +96,7 @@ wxObject* WXDLLEXPORT wxCreateStoredObject( wxInputStream& stream );
#define DECLARE_DYNAMIC_CLASS(name) \ #define DECLARE_DYNAMIC_CLASS(name) \
public:\ public:\
static wxClassInfo sm_class##name;\ static wxClassInfo sm_class##name;\
wxClassInfo *GetClassInfo() \ wxClassInfo *GetClassInfo() const \
{ return &name::sm_class##name; } { return &name::sm_class##name; }
#define DECLARE_ABSTRACT_CLASS(name) DECLARE_DYNAMIC_CLASS(name) #define DECLARE_ABSTRACT_CLASS(name) DECLARE_DYNAMIC_CLASS(name)
@@ -174,9 +174,9 @@ class WXDLLEXPORT wxObject
wxObject(void); wxObject(void);
virtual ~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 #if WXDEBUG && USE_MEMORY_TRACING
void * operator new (size_t size, char * fileName = NULL, int lineNum = 0); void * operator new (size_t size, char * fileName = NULL, int lineNum = 0);

View File

@@ -6,11 +6,11 @@
#if defined(__WXMSW__) && defined(__WIN95__) #if defined(__WXMSW__) && defined(__WIN95__)
# include "wx/msw/tbar95.h" # include "wx/msw/tbar95.h"
# define wxToolBar wxToolBar95 # define wxToolBar wxToolBar95
# define classwxToolBar classwxToolBar95 # define sm_classwxToolBar sm_classwxToolBar95
#elif defined(__WXMSW__) #elif defined(__WXMSW__)
# include "wx/msw/tbarmsw.h" # include "wx/msw/tbarmsw.h"
# define wxToolBar wxToolBarMSW # define wxToolBar wxToolBarMSW
# define classwxToolBar classwxToolBarMSW # define sm_classwxToolBar sm_classwxToolBarMSW
#elif defined(__WXGTK__) #elif defined(__WXGTK__)
# include "wx/gtk/tbargtk.h" # include "wx/gtk/tbargtk.h"
#elif defined(__WXQT__) #elif defined(__WXQT__)

202
include/wx/variant.h Normal file
View File

@@ -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 <iostream.h>
#else
#include <iostream>
#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_