]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/propgriddefs.h
don't draw borders for bitmap buttons with wxBORDER_NONE style
[wxWidgets.git] / include / wx / propgrid / propgriddefs.h
index 97cde0852aa6be97f1138b5e26da39815a9e0dfa..f2c3aab9638d91b1b021094409756f36e91aa784 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2008-08-31
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2008-08-31
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
@@ -15,6 +15,7 @@
 #if wxUSE_PROPGRID
 
 #include "wx/dynarray.h"
 #if wxUSE_PROPGRID
 
 #include "wx/dynarray.h"
+#include "wx/vector.h"
 #include "wx/hashmap.h"
 #include "wx/variant.h"
 #include "wx/longlong.h"
 #include "wx/hashmap.h"
 #include "wx/variant.h"
 #include "wx/longlong.h"
@@ -83,7 +84,7 @@
     // comment to use bitmap buttons
     #define wxPG_ICON_WIDTH             9
     // 1 if wxRendererNative should be employed
     // comment to use bitmap buttons
     #define wxPG_ICON_WIDTH             9
     // 1 if wxRendererNative should be employed
-    #define wxPG_USE_RENDERER_NATIVE    0
+    #define wxPG_USE_RENDERER_NATIVE    1
 
     // 1 to use double-buffer that guarantees flicker-free painting
     #define wxPG_DOUBLE_BUFFER          1
 
     // 1 to use double-buffer that guarantees flicker-free painting
     #define wxPG_DOUBLE_BUFFER          1
     #define wxPG_XBEFOREWIDGET          1
 
     // x position adjustment for wxTextCtrl (and like)
     #define wxPG_XBEFOREWIDGET          1
 
     // x position adjustment for wxTextCtrl (and like)
-    #define wxPG_TEXTCTRLXADJUST        3
+    #define wxPG_TEXTCTRLXADJUST        0
 
     // comment to use bitmap buttons
     #define wxPG_ICON_WIDTH             11
 
     // comment to use bitmap buttons
     #define wxPG_ICON_WIDTH             11
 #define wxCC_CUSTOM_IMAGE_MARGIN1       4  // before image
 #define wxCC_CUSTOM_IMAGE_MARGIN2       5  // after image
 
 #define wxCC_CUSTOM_IMAGE_MARGIN1       4  // before image
 #define wxCC_CUSTOM_IMAGE_MARGIN2       5  // after image
 
+#define DEFAULT_IMAGE_OFFSET_INCREMENT \
+    (wxCC_CUSTOM_IMAGE_MARGIN1 + wxCC_CUSTOM_IMAGE_MARGIN2)
+
 #define wxPG_DRAG_MARGIN                30
 
 #if wxPG_NO_CHILD_EVT_MOTION
 #define wxPG_DRAG_MARGIN                30
 
 #if wxPG_NO_CHILD_EVT_MOTION
 // (for tree buttons)
 //#undef wxPG_ICON_WIDTH
 
 // (for tree buttons)
 //#undef wxPG_ICON_WIDTH
 
+#if WXWIN_COMPATIBILITY_2_6 || WXWIN_COMPATIBILITY_2_8
+    #define wxPG_COMPATIBILITY_1_4      1
+#else
+    #define wxPG_COMPATIBILITY_1_4      0
+#endif
+
 // Need to force disable tooltips?
 #if !wxUSE_TOOLTIPS
     #undef wxPG_SUPPORT_TOOLTIPS
 // Need to force disable tooltips?
 #if !wxUSE_TOOLTIPS
     #undef wxPG_SUPPORT_TOOLTIPS
 // -----------------------------------------------------------------------
 
 
 // -----------------------------------------------------------------------
 
 
-// wxPG_CHECK_FOO_DBG - debug check with message that does not
-//                      interrupt program flow.
-#define wxPG_CHECK_RET_DBG(A,B) \
-    if ( !(A) ) { wxLogWarning(B); return; }
-#define wxPG_CHECK_MSG_DBG(A,B,C) \
-    if ( !(A) ) { wxLogWarning(C); return B; }
-
-
 class wxPGEditor;
 class wxPGProperty;
 class wxPropertyCategory;
 class wxPGEditor;
 class wxPGProperty;
 class wxPropertyCategory;
@@ -267,9 +269,8 @@ class wxPropertyGrid;
 class wxPropertyGridEvent;
 class wxPropertyGridManager;
 class wxPGOwnerDrawnComboBox;
 class wxPropertyGridEvent;
 class wxPropertyGridManager;
 class wxPGOwnerDrawnComboBox;
-class wxPGCustomComboControl;
 class wxPGEditorDialogAdapter;
 class wxPGEditorDialogAdapter;
-struct wxPGValidationInfo;
+class wxPGValidationInfo;
 
 
 // -----------------------------------------------------------------------
 
 
 // -----------------------------------------------------------------------
@@ -303,6 +304,29 @@ struct wxPGValidationInfo;
 #define wxPG_DEFAULT_IMAGE_SIZE             wxSize(-1, -1)
 
 
 #define wxPG_DEFAULT_IMAGE_SIZE             wxSize(-1, -1)
 
 
+/** This callback function is used for sorting properties.
+
+    Call wxPropertyGrid::SetSortFunction() to set it.
+
+    Sort function should return a value greater than 0 if position of p1 is
+    after p2. So, for instance, when comparing property names, you can use
+    following implementation:
+
+        @code
+            int MyPropertySortFunction(wxPropertyGrid* propGrid,
+                                       wxPGProperty* p1,
+                                       wxPGProperty* p2)
+            {
+                return p1->GetBaseName().compare( p2->GetBaseName() );
+            }
+        @endcode
+*/
+typedef int (*wxPGSortCallback)(wxPropertyGrid* propGrid,
+                                wxPGProperty* p1,
+                                wxPGProperty* p2);
+
+
+
 typedef wxString wxPGCachedString;
 
 /** @}
 typedef wxString wxPGCachedString;
 
 /** @}
@@ -331,7 +355,10 @@ WX_DECLARE_STRING_HASH_MAP_WITH_DECL(void*,
                                      wxPGHashMapS2P,
                                      class WXDLLIMPEXP_PROPGRID);
 
                                      wxPGHashMapS2P,
                                      class WXDLLIMPEXP_PROPGRID);
 
-
+WX_DECLARE_STRING_HASH_MAP_WITH_DECL(wxString,
+                                     wxPGHashMapS2S,
+                                     class WXDLLIMPEXP_PROPGRID);
 WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(void*,
                                       wxPGHashMapP2P,
                                       class WXDLLIMPEXP_PROPGRID);
 WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(void*,
                                       wxPGHashMapP2P,
                                       class WXDLLIMPEXP_PROPGRID);
@@ -363,7 +390,12 @@ wxPG_INC_ATTRIBUTES               = 0x00000040,
 wxPG_RECURSE_STARTS               = 0x00000080,
 
 /** Force value change. */
 wxPG_RECURSE_STARTS               = 0x00000080,
 
 /** Force value change. */
-wxPG_FORCE                        = 0x00000100
+wxPG_FORCE                        = 0x00000100,
+
+/** Only sort categories and their immediate children.
+    Sorting done by wxPG_AUTO_SORT option uses this.
+*/
+wxPG_SORT_TOP_LEVEL_ONLY          = 0x00000200
 
 };
 
 
 };
 
@@ -391,7 +423,14 @@ enum wxPG_MISC_ARG_FLAGS
 
     // Means property for which final string value is for can not really be
     // edited.
 
     // Means property for which final string value is for can not really be
     // edited.
-    wxPG_UNEDITABLE_COMPOSITE_FRAGMENT  = 0x00000020
+    wxPG_UNEDITABLE_COMPOSITE_FRAGMENT  = 0x00000020,
+
+    // ValueToString() called from GetValueAsString()
+    // (guarantees that input wxVariant value is current own value)
+    wxPG_VALUE_IS_CURRENT               = 0x00000040,
+
+    // Value is being set programmatically (ie. not by user)
+    wxPG_PROGRAMMATIC_VALUE             = 0x00000080
 };
 
 // -----------------------------------------------------------------------
 };
 
 // -----------------------------------------------------------------------
@@ -426,7 +465,7 @@ enum wxPG_SETVALUE_FLAGS
 
 #ifndef SWIG
 
 
 #ifndef SWIG
 
-// Editor accessor.
+// Editor accessor (for backwards compatiblity use only).
 #define wxPG_EDITOR(T)          wxPGEditor_##T
 
 // Declare editor class, with optional part.
 #define wxPG_EDITOR(T)          wxPGEditor_##T
 
 // Declare editor class, with optional part.
@@ -478,6 +517,12 @@ template<> inline wxVariant WXVARIANT( const wxArrayString& value )
     { return wxVariant(value); }
 template<> inline wxVariant WXVARIANT( const wxString& value )
     { return wxVariant(value); }
     { return wxVariant(value); }
 template<> inline wxVariant WXVARIANT( const wxString& value )
     { return wxVariant(value); }
+#if wxUSE_LONGLONG
+template<> inline wxVariant WXVARIANT( const wxLongLong& value )
+    { return wxVariant(value); }
+template<> inline wxVariant WXVARIANT( const wxULongLong& value )
+    { return wxVariant(value); }
+#endif
 #if wxUSE_DATETIME
 template<> inline wxVariant WXVARIANT( const wxDateTime& value )
     { return wxVariant(value); }
 #if wxUSE_DATETIME
 template<> inline wxVariant WXVARIANT( const wxDateTime& value )
     { return wxVariant(value); }
@@ -513,7 +558,9 @@ extern expdecl const char* classname##_VariantType;
 #define WX_PG_IMPLEMENT_VARIANT_DATA(classname) \
     WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE)
 
 #define WX_PG_IMPLEMENT_VARIANT_DATA(classname) \
     WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE)
 
-#define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ(classname,expdecl) \
+// Add getter (ie. classname << variant) separately to allow
+// custom implementations.
+#define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(classname,expdecl) \
 const char* classname##_VariantType = #classname; \
 class classname##VariantData: public wxVariantData \
 { \
 const char* classname##_VariantType = #classname; \
 class classname##VariantData: public wxVariantData \
 { \
@@ -522,16 +569,14 @@ public:\
     classname##VariantData( const classname &value ) { m_value = value; } \
 \
     classname &GetValue() { return m_value; } \
     classname##VariantData( const classname &value ) { m_value = value; } \
 \
     classname &GetValue() { return m_value; } \
+\
+    const classname &GetValue() const { return m_value; } \
 \
     virtual bool Eq(wxVariantData& data) const; \
 \
     virtual wxString GetType() const; \
 \
     virtual wxVariantData* Clone() const { return new classname##VariantData(m_value); } \
 \
     virtual bool Eq(wxVariantData& data) const; \
 \
     virtual wxString GetType() const; \
 \
     virtual wxVariantData* Clone() const { return new classname##VariantData(m_value); } \
-\
-    classname& GetValueRef() { return m_value; } \
-\
-    const classname& GetValueRef() const { return m_value; } \
 \
 protected:\
     classname m_value; \
 \
 protected:\
     classname m_value; \
@@ -542,15 +587,6 @@ wxString classname##VariantData::GetType() const\
     return wxS(#classname);\
 }\
 \
     return wxS(#classname);\
 }\
 \
-expdecl classname& operator << ( classname &value, const wxVariant &variant )\
-{\
-    wxASSERT( variant.GetType() == #classname );\
-    \
-    classname##VariantData *data = (classname##VariantData*) variant.GetData();\
-    value = data->GetValue();\
-    return value;\
-}\
-\
 expdecl wxVariant& operator << ( wxVariant &variant, const classname &value )\
 {\
     classname##VariantData *data = new classname##VariantData( value );\
 expdecl wxVariant& operator << ( wxVariant &variant, const classname &value )\
 {\
     classname##VariantData *data = new classname##VariantData( value );\
@@ -559,22 +595,38 @@ expdecl wxVariant& operator << ( wxVariant &variant, const classname &value )\
 } \
 expdecl classname& classname##RefFromVariant( wxVariant& variant ) \
 { \
 } \
 expdecl classname& classname##RefFromVariant( wxVariant& variant ) \
 { \
-    wxASSERT( variant.GetType() == #classname );\
-    classname##VariantData *data = (classname##VariantData*) variant.GetData();\
-    return data->GetValueRef();\
+    wxASSERT_MSG( variant.GetType() == wxS(#classname), \
+                  wxString::Format("Variant type should have been '%s'" \
+                                   "instead of '%s'", \
+                                   wxS(#classname), \
+                                   variant.GetType().c_str())); \
+    classname##VariantData *data = \
+        (classname##VariantData*) variant.GetData(); \
+    return data->GetValue();\
 } \
 expdecl const classname& classname##RefFromVariant( const wxVariant& variant ) \
 { \
 } \
 expdecl const classname& classname##RefFromVariant( const wxVariant& variant ) \
 { \
+    wxASSERT_MSG( variant.GetType() == wxS(#classname), \
+                  wxString::Format("Variant type should have been '%s'" \
+                                   "instead of '%s'", \
+                                   wxS(#classname), \
+                                   variant.GetType().c_str())); \
+    classname##VariantData *data = \
+        (classname##VariantData*) variant.GetData(); \
+    return data->GetValue();\
+}
+
+#define WX_PG_IMPLEMENT_VARIANT_DATA_GETTER(classname, expdecl) \
+expdecl classname& operator << ( classname &value, const wxVariant &variant )\
+{\
     wxASSERT( variant.GetType() == #classname );\
     wxASSERT( variant.GetType() == #classname );\
+    \
     classname##VariantData *data = (classname##VariantData*) variant.GetData();\
     classname##VariantData *data = (classname##VariantData*) variant.GetData();\
-    return data->GetValueRef();\
+    value = data->GetValue();\
+    return value;\
 }
 
 }
 
-// implements a wxVariantData-derived class using for the Eq() method the
-// operator== which must have been provided by "classname"
-#define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname,expdecl) \
-WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
-\
+#define WX_PG_IMPLEMENT_VARIANT_DATA_EQ(classname, expdecl) \
 bool classname##VariantData::Eq(wxVariantData& data) const \
 {\
     wxASSERT( GetType() == data.GetType() );\
 bool classname##VariantData::Eq(wxVariantData& data) const \
 {\
     wxASSERT( GetType() == data.GetType() );\
@@ -584,12 +636,20 @@ bool classname##VariantData::Eq(wxVariantData& data) const \
     return otherData.m_value == m_value;\
 }
 
     return otherData.m_value == m_value;\
 }
 
+// implements a wxVariantData-derived class using for the Eq() method the
+// operator== which must have been provided by "classname"
+#define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname,expdecl) \
+WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
+WX_PG_IMPLEMENT_VARIANT_DATA_GETTER(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
+WX_PG_IMPLEMENT_VARIANT_DATA_EQ(classname,wxEMPTY_PARAMETER_VALUE expdecl)
+
 #define WX_PG_IMPLEMENT_VARIANT_DATA(classname) \
 WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE)
 
 // with Eq() implementation that always returns false
 #define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_DUMMY_EQ(classname,expdecl) \
 #define WX_PG_IMPLEMENT_VARIANT_DATA(classname) \
 WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE)
 
 // with Eq() implementation that always returns false
 #define WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_DUMMY_EQ(classname,expdecl) \
-WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
+WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_NO_EQ_NO_GETTER(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
+WX_PG_IMPLEMENT_VARIANT_DATA_GETTER(classname,wxEMPTY_PARAMETER_VALUE expdecl) \
 \
 bool classname##VariantData::Eq(wxVariantData& WXUNUSED(data)) const \
 {\
 \
 bool classname##VariantData::Eq(wxVariantData& WXUNUSED(data)) const \
 {\
@@ -602,8 +662,6 @@ WX_PG_IMPLEMENT_VARIANT_DATA_EXPORTED_DUMMY_EQ(classname, wxEMPTY_PARAMETER_VALU
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxPoint, WXDLLIMPEXP_PROPGRID)
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxSize, WXDLLIMPEXP_PROPGRID)
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxArrayInt, WXDLLIMPEXP_PROPGRID)
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxPoint, WXDLLIMPEXP_PROPGRID)
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxSize, WXDLLIMPEXP_PROPGRID)
 WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxArrayInt, WXDLLIMPEXP_PROPGRID)
-WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxLongLong, WXDLLIMPEXP_PROPGRID)
-WX_PG_DECLARE_VARIANT_DATA_EXPORTED(wxULongLong, WXDLLIMPEXP_PROPGRID)
 DECLARE_VARIANT_OBJECT_EXPORTED(wxFont, WXDLLIMPEXP_PROPGRID)
 template<> inline wxVariant WXVARIANT( const wxFont& value )
 {
 DECLARE_VARIANT_OBJECT_EXPORTED(wxFont, WXDLLIMPEXP_PROPGRID)
 template<> inline wxVariant WXVARIANT( const wxFont& value )
 {
@@ -628,24 +686,8 @@ template<> inline wxVariant WXVARIANT( const wxColour& value )
 #define wxPG_VARIANT_TYPE_DOUBLE        wxS("double")
 #define wxPG_VARIANT_TYPE_ARRSTRING     wxS("arrstring")
 #define wxPG_VARIANT_TYPE_DATETIME      wxS("datetime")
 #define wxPG_VARIANT_TYPE_DOUBLE        wxS("double")
 #define wxPG_VARIANT_TYPE_ARRSTRING     wxS("arrstring")
 #define wxPG_VARIANT_TYPE_DATETIME      wxS("datetime")
-
-// Safely converts a wxVariant to (long) int. Supports converting from string
-// and boolean as well.
-WXDLLIMPEXP_PROPGRID
-long wxPGVariantToInt( const wxVariant& variant, long defVal = 1 );
-
-// Safely converts a wxVariant to wxLongLong_t. Returns true on success.
-WXDLLIMPEXP_PROPGRID
-bool wxPGVariantToLongLong( const wxVariant& variant, wxLongLong_t* pResult );
-
-// Safely converts a wxVariant to wxULongLong_t. Returns true on success.
-WXDLLIMPEXP_PROPGRID
-bool wxPGVariantToULongLong( const wxVariant& variant, wxULongLong_t* pResult );
-
-// Safely converts a wxVariant to double. Supports converting from string and
-// wxLongLong as well.
-WXDLLIMPEXP_PROPGRID
-bool wxPGVariantToDouble( const wxVariant& variant, double* pResult );
+#define wxPG_VARIANT_TYPE_LONGLONG      wxS("longlong")
+#define wxPG_VARIANT_TYPE_ULONGLONG     wxS("ulonglong")
 
 #endif // !SWIG
 
 
 #endif // !SWIG