X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4bc1aa27cb33f679d7e9c1518a7855bbc1fa471..937d5b6075db060b98daa0f0fadbaa528bc85554:/include/wx/propgrid/propgriddefs.h diff --git a/include/wx/propgrid/propgriddefs.h b/include/wx/propgrid/propgriddefs.h index 97cde0852a..d7180e71c8 100644 --- a/include/wx/propgrid/propgriddefs.h +++ b/include/wx/propgrid/propgriddefs.h @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2008-08-31 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -15,6 +15,7 @@ #if wxUSE_PROPGRID #include "wx/dynarray.h" +#include "wx/vector.h" #include "wx/hashmap.h" #include "wx/variant.h" #include "wx/longlong.h" @@ -36,9 +37,6 @@ // space between vertical line and value editor control #define wxPG_XBEFOREWIDGET 1 - // x position adjustment for wxTextCtrl (and like) - #define wxPG_TEXTCTRLXADJUST 3 - // comment to use bitmap buttons #define wxPG_ICON_WIDTH 9 // 1 if wxRendererNative should be employed @@ -53,10 +51,6 @@ // width of optional bitmap/image in front of property #define wxPG_CUSTOM_IMAGE_WIDTH 20 - // 1 to create controls out of sight, hide them, and then move them into - // correct position - #define wxPG_CREATE_CONTROLS_HIDDEN 0 - // 1 if splitter drag detect margin and control cannot overlap #define wxPG_NO_CHILD_EVT_MOTION 0 @@ -78,12 +72,14 @@ #define wxPG_XBEFOREWIDGET 1 // x position adjustment for wxTextCtrl (and like) - #define wxPG_TEXTCTRLXADJUST 3 + // NB: Only define wxPG_TEXTCTRLXADJUST for platforms that do not + // (yet) support wxTextEntry::SetMargins() for the left margin. + //#define wxPG_TEXTCTRLXADJUST 3 // 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 @@ -94,10 +90,6 @@ // width of optional bitmap/image in front of property #define wxPG_CUSTOM_IMAGE_WIDTH 20 - // 1 to create controls out of sight, hide them, and then move them into - // correct position - #define wxPG_CREATE_CONTROLS_HIDDEN 0 - // 1 if splitter drag detect margin and control cannot overlap #define wxPG_NO_CHILD_EVT_MOTION 1 @@ -119,7 +111,7 @@ #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 @@ -135,10 +127,6 @@ // width of optional bitmap/image in front of property #define wxPG_CUSTOM_IMAGE_WIDTH 20 - // 1 to create controls out of sight, hide them, and then move them into - // correct position - #define wxPG_CREATE_CONTROLS_HIDDEN 0 - // 1 if splitter drag detect margin and control cannot overlap #define wxPG_NO_CHILD_EVT_MOTION 0 @@ -176,10 +164,6 @@ // width of optional bitmap/image in front of property #define wxPG_CUSTOM_IMAGE_WIDTH 20 - // 1 to create controls out of sight, hide them, and then move them into - // correct position - #define wxPG_CREATE_CONTROLS_HIDDEN 0 - // 1 if splitter drag detect margin and control cannot overlap #define wxPG_NO_CHILD_EVT_MOTION 1 @@ -200,6 +184,9 @@ #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 @@ -228,6 +215,12 @@ // (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 @@ -245,14 +238,6 @@ // ----------------------------------------------------------------------- -// 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; @@ -267,9 +252,8 @@ class wxPropertyGrid; class wxPropertyGridEvent; class wxPropertyGridManager; class wxPGOwnerDrawnComboBox; -class wxPGCustomComboControl; class wxPGEditorDialogAdapter; -struct wxPGValidationInfo; +class wxPGValidationInfo; // ----------------------------------------------------------------------- @@ -303,6 +287,29 @@ struct wxPGValidationInfo; #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; /** @} @@ -318,19 +325,18 @@ typedef wxString wxPGCachedString; #ifndef SWIG -#if wxUSE_STL -typedef std::vector wxArrayPGProperty; -#else WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(wxPGProperty*, wxArrayPGProperty, wxBaseArrayPtrVoid, class WXDLLIMPEXP_PROPGRID); -#endif // Always use wxString based hashmap with unicode, stl, swig and GCC 4.0+ WX_DECLARE_STRING_HASH_MAP_WITH_DECL(void*, 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, @@ -363,7 +369,12 @@ wxPG_INC_ATTRIBUTES = 0x00000040, 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 +402,14 @@ enum wxPG_MISC_ARG_FLAGS // 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 +444,7 @@ enum wxPG_SETVALUE_FLAGS #ifndef SWIG -// Editor accessor. +// Editor accessor (for backwards compatiblity use only). #define wxPG_EDITOR(T) wxPGEditor_##T // Declare editor class, with optional part. @@ -478,6 +496,12 @@ template<> inline wxVariant WXVARIANT( const wxArrayString& 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); } @@ -513,7 +537,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_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 \ { \ @@ -522,16 +548,14 @@ public:\ 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); } \ -\ - classname& GetValueRef() { return m_value; } \ -\ - const classname& GetValueRef() const { return m_value; } \ \ protected:\ classname m_value; \ @@ -542,15 +566,6 @@ wxString classname##VariantData::GetType() const\ 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 );\ @@ -559,22 +574,38 @@ expdecl wxVariant& operator << ( wxVariant &variant, const classname &value )\ } \ 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 ) \ { \ + 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 );\ + \ 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() );\ @@ -584,12 +615,20 @@ bool classname##VariantData::Eq(wxVariantData& data) const \ 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) \ -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 \ {\ @@ -602,8 +641,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(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 ) { @@ -628,24 +665,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") - -// 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