#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;
/** wxPropertyGridManager only: Show adjustable text box showing description
or help text, if available, for currently selected property.
*/
-wxPG_DESCRIPTION = 0x00002000
+wxPG_DESCRIPTION = 0x00002000,
+/** 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
{
wxPropertyGrid's top-level parent window on its own, then you
are recommended to enable this style.
*/
-wxPG_EX_ENABLE_TLP_TRACKING = 0x04000000
+wxPG_EX_ENABLE_TLP_TRACKING = 0x04000000,
+
+/** Don't show divider above toolbar, on Windows.
+*/
+wxPG_EX_NO_TOOLBAR_DIVIDER = 0x08000000,
+
+/** Show a separator below the toolbar.
+*/
+wxPG_EX_TOOLBAR_SEPARATOR = 0x10000000
};
/**
Returns reference to pending value.
*/
- const wxVariant& GetValue() const
+ wxVariant& GetValue()
{
wxASSERT(m_pValue);
return *m_pValue;
#define wxPG_FL_IN_SELECT_PROPERTY 0x00100000
// Set when help string is shown in status bar
#define wxPG_FL_STRING_IN_STATUSBAR 0x00200000
-// Splitter position has been custom-set by the user
-#define wxPG_FL_SPLITTER_PRE_SET 0x00400000
// Validation failed. Clear on modify event.
#define wxPG_FL_VALIDATION_FAILED 0x00800000
// Auto sort is enabled (for categorized mode)
class WXDLLIMPEXP_PROPGRID
wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
{
+ friend class wxPropertyGridEvent;
friend class wxPropertyGridPageState;
friend class wxPropertyGridInterface;
friend class wxPropertyGridManager;
- friend class wxPGCanvas;
DECLARE_DYNAMIC_CLASS(wxPropertyGrid)
public:
Returns wxWindow that the properties are painted on, and which should
be used as the parent for editor controls.
*/
- wxPanel* GetPanel() const
+ wxWindow* GetPanel()
{
- return m_canvas;
+ return this;
}
/** Returns current category caption background colour. */
void SetSplitterPosition( int newxpos, int col = 0 )
{
DoSetSplitterPosition_(newxpos, true, col);
- m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
+ m_pState->m_isSplitterPreSet = true;
}
/**
wxWindow *m_wndEditor;
wxWindow *m_wndEditor2;
- /** wxPGCanvas instance. */
- wxPanel *m_canvas;
-
#if wxPG_DOUBLE_BUFFER
wxBitmap *m_doubleBuffer;
#endif
// handling mess).
wxWindow* m_curFocused;
+ // Event currently being sent - NULL if none at the moment
+ wxPropertyGridEvent* m_processedEvent;
+
// Last known top-level parent
wxWindow* m_tlp;
// 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;
// main event receivers
void OnMouseMove( wxMouseEvent &event );
- void OnMouseMoveBottom( wxMouseEvent &event );
void OnMouseClick( wxMouseEvent &event );
void OnMouseRightClick( wxMouseEvent &event );
void OnMouseDoubleClick( wxMouseEvent &event );
void CorrectEditorWidgetPosY();
int DoDrawItems( wxDC& dc,
- const wxRect* clipRect,
+ const wxRect* drawRect,
bool isBuffered ) const;
/** Draws an expand/collapse (ie. +/-) button.
wxPGProperty* property ) const;
/** Draws items from topitemy to bottomitemy */
- void DrawItems( wxDC& dc, unsigned int topitemy, unsigned int bottomitemy,
- const wxRect* clip_rect = (const wxRect*) NULL );
+ void DrawItems( wxDC& dc,
+ unsigned int topItemY,
+ unsigned int bottomItemY,
+ const wxRect* drawRect = NULL );
// Translate wxKeyEvent to wxPG_ACTION_XXX
int KeyEventToActions(wxKeyEvent &event, int* pSecond) const;
*/
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.
+ */
+ wxVariant GetPropertyValue() const
+ {
+ if ( m_validationInfo )
+ return m_validationInfo->GetValue();
+ return m_value;
+ }
+
+ /**
+ Returns value of the associated property.
+
+ @see GetPropertyValue
*/
- const wxVariant& GetValue() const
+ wxVariant GetValue() const
{
- wxASSERT_MSG( m_validationInfo,
- "Only call GetValue from a handler "
- "of event type that supports it" );
- return m_validationInfo->GetValue();
+ 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;
#undef wxPG_FL_MOUSE_CAPTURED
#undef wxPG_FL_INITIALIZED
#undef wxPG_FL_ACTIVATION_BY_CLICK
- #undef wxPG_FL_DONT_CENTER_SPLITTER
#undef wxPG_SUPPORT_TOOLTIPS
#undef wxPG_DOUBLE_BUFFER
#undef wxPG_ICON_WIDTH