00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #ifndef _WX_VARIANTHANDLERS_H_
00013 #define _WX_VARIANTHANDLERS_H_
00014
00015 #include "wx/defs.h"
00016 #include "wx/variant.h"
00017
00018 class WXDLLEXPORT wxOutputStream;
00019 class WXDLLEXPORT wxInputStream;
00020 class WXDLLEXPORT wxDataOutputStream;
00021 class WXDLLEXPORT wxDataInputStream;
00022
00028 class wxVariantHandler: public wxObject
00029 {
00030 DECLARE_CLASS(wxVariantHandler)
00031 public:
00032 wxVariantHandler(const wxString& name = wxEmptyString)
00033 : m_name(name)
00034 { }
00035
00036 virtual bool ReadValue(const wxString& type, wxVariant& variant, wxInputStream& stream, wxDataInputStream& dataStream) = 0;
00037 virtual bool WriteValue(const wxVariant& variant, wxOutputStream& stream, wxDataOutputStream& dataStream) = 0;
00038
00039 virtual bool CanRead(wxInputStream& WXUNUSED(stream)) { return true; }
00040 virtual bool CanHandle(const wxString& type) = 0;
00041
00043 virtual wxVariant GetDefaultValue(const wxString& type) = 0;
00044
00045 void SetName(const wxString& name) { m_name = name; }
00046 const wxString& GetName() const { return m_name; }
00047
00048 protected:
00049
00050 wxString m_name;
00051 };
00052
00057 class wxVariantHandlers: public wxObject
00058 {
00059 DECLARE_CLASS(wxVariantHandlers)
00060 public:
00061
00062
00063
00064 wxVariantHandlers() {}
00065 ~wxVariantHandlers() {}
00066
00067 static bool CanHandle(const wxString& type);
00068 static bool Read(wxVariant& variant, wxInputStream& stream, wxDataInputStream& dataStream);
00069 static bool Write(const wxVariant& variant, wxOutputStream& stream, wxDataOutputStream& dataStream);
00070
00072 static wxVariant GetDefaultValue(const wxString& type);
00073
00074 static wxList& GetHandlers() { return sm_handlers; }
00075 static void AddHandler(wxVariantHandler *handler);
00076 static void InsertHandler(wxVariantHandler *handler);
00077 static bool RemoveHandler(const wxString& name);
00078 static wxVariantHandler *FindHandlerByName(const wxString& name);
00079 static wxVariantHandler *FindHandlerByType(const wxString& type);
00080
00081 static void CleanUpHandlers();
00082 static void InitStandardHandlers();
00083
00084 private:
00085
00086 static wxList sm_handlers;
00087 };
00088
00090 bool wxReadVariant(wxVariant& variant, wxInputStream& stream, wxDataInputStream& dataStream);
00091
00093 bool wxWriteVariant(const wxVariant& variant, wxOutputStream& stream, wxDataOutputStream& dataStream);
00094
00096 wxOutputStream& operator<<(wxOutputStream& stream, const wxVariant& variant);
00097 wxInputStream& operator>>(wxInputStream& stream, wxVariant& variant);
00098
00099 #endif
00100