#if wxUSE_PROPGRID
+#include "wx/thread.h"
#include "wx/dcclient.h"
#include "wx/scrolwin.h"
#include "wx/tooltip.h"
wxPGGlobalVarsClass();
~wxPGGlobalVarsClass();
+#if wxUSE_THREADS
+ // Critical section for handling the globals. Generally it is not needed
+ // since GUI code is supposed to be in single thread. However,
+ // we do want the user to be able to convey wxPropertyGridEvents to other
+ // threads.
+ wxCriticalSection m_critSect;
+#endif
+
// Used by advprops, but here to make things easier.
wxString m_pDefaultImageWildcard;
*/
wxPG_DESCRIPTION = 0x00002000,
-/** wxPropertyGridManager only: don't show an internal border around the property grid
+/** wxPropertyGridManager only: don't show an internal border around
+ the property grid.
*/
wxPG_NO_INTERNAL_BORDER = 0x00004000
};
+#if wxPG_COMPATIBILITY_1_4
+ // In wxPG 1.4 this was used to enable now-default theme border support
+ // in wxPropertyGridManager.
+ #define wxPG_THEME_BORDER 0x00000000
+#endif
+
+
enum wxPG_EX_WINDOW_STYLES
{
/** Don't show divider above toolbar, on Windows.
*/
-wxPG_EX_NO_TOOLBAR_DIVIDER = 0x04000000,
+wxPG_EX_NO_TOOLBAR_DIVIDER = 0x08000000,
/** Show a separator below the toolbar.
*/
-wxPG_EX_TOOLBAR_SEPARATOR = 0x08000000
+wxPG_EX_TOOLBAR_SEPARATOR = 0x10000000
};
/**
Returns reference to pending value.
*/
- const wxVariant& GetValue() const
+ wxVariant& GetValue()
{
wxASSERT(m_pValue);
return *m_pValue;
class WXDLLIMPEXP_PROPGRID
wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
{
+ friend class wxPropertyGridEvent;
friend class wxPropertyGridPageState;
friend class wxPropertyGridInterface;
friend class wxPropertyGridManager;
// labels when properties use common values
wxVector<wxPGCommonValue*> m_commonValues;
+ // array of live events
+ wxVector<wxPropertyGridEvent*> m_liveEvents;
+
// Which cv selection really sets value to unspecified?
int m_cvUnspecified;
*/
void Veto( bool veto = true ) { m_wasVetoed = veto; }
- /** Returns value that is about to be set for wxEVT_PG_CHANGING.
+ /**
+ Returns name of the associated property.
+
+ @remarks Property name is stored in event, so it remains
+ accessible even after the associated property or
+ the property grid has been deleted.
+ */
+ wxString GetPropertyName() const
+ {
+ return m_propertyName;
+ }
+
+ /**
+ Returns value of the associated property. Works for all event
+ types, but for wxEVT_PG_CHANGING this member function returns
+ the value that is pending, so you can call Veto() if the
+ value is not satisfactory.
+
+ @remarks Property value is stored in event, so it remains
+ accessible even after the associated property or
+ the property grid has been deleted.
*/
- const wxVariant& GetValue() const
+ wxVariant GetPropertyValue() const
{
- wxASSERT_MSG( m_validationInfo,
- "Only call GetValue from a handler "
- "of event type that supports it" );
- return m_validationInfo->GetValue();
+ if ( m_validationInfo )
+ return m_validationInfo->GetValue();
+ return m_value;
+ }
+
+ /**
+ Returns value of the associated property.
+
+ @see GetPropertyValue
+ */
+ wxVariant GetValue() const
+ {
+ return GetPropertyValue();
}
/**
bool WasVetoed() const { return m_wasVetoed; }
/** Changes the associated property. */
- void SetProperty( wxPGProperty* p ) { m_property = p; }
+ void SetProperty( wxPGProperty* p )
+ {
+ m_property = p;
+ if ( p )
+ m_propertyName = p->GetName();
+ }
- void SetPropertyGrid( wxPropertyGrid* pg ) { m_pg = pg; }
+ void SetPropertyValue( wxVariant value )
+ {
+ m_value = value;
+ }
+
+ void SetPropertyGrid( wxPropertyGrid* pg )
+ {
+ m_pg = pg;
+ OnPropertyGridSet();
+ }
void SetupValidationInfo()
{
wxASSERT(m_pg);
wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
m_validationInfo = &m_pg->GetValidationInfo();
+ m_value = m_validationInfo->GetValue();
}
private:
void Init();
+ void OnPropertyGridSet();
DECLARE_DYNAMIC_CLASS(wxPropertyGridEvent)
wxPGProperty* m_property;
wxPropertyGrid* m_pg;
wxPGValidationInfo* m_validationInfo;
+ wxString m_propertyName;
+ wxVariant m_value;
+
unsigned int m_column;
bool m_canVeto;