// Author: Jaakko Salli
// Modified by:
// Created: 2005-01-14
-// RCS-ID: $Id$
// Copyright: (c) Jaakko Salli
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROPGRID_MANAGER_H_
#define _WX_PROPGRID_MANAGER_H_
+#include "wx/defs.h"
+
#if wxUSE_PROPGRID
#include "wx/propgrid/propgrid.h"
#include "wx/button.h"
#include "wx/textctrl.h"
#include "wx/dialog.h"
+#include "wx/headerctrl.h"
// -----------------------------------------------------------------------
*/
int GetToolId() const
{
- return m_id;
+ return m_toolId;
}
/** Do any member initialization in this method.
*/
virtual void DoSetSplitterPosition( int pos,
int splitterColumn = 0,
- bool allPages = false,
- bool fromAutoCenter = false );
+ int flags = wxPG_SPLITTER_REFRESH );
/** Page label (may be referred as name in some parts of documentation).
Can be set in constructor, or passed in
*/
wxString m_label;
-#ifndef SWIG
-
//virtual bool ProcessEvent( wxEvent& event );
wxPropertyGridManager* m_manager;
- int m_id; // toolbar index
+ // Toolbar tool id. Note that this is only valid when the tool bar
+ // exists.
+ int m_toolId;
private:
bool m_isDefault; // is this base page object?
-private:
DECLARE_EVENT_TABLE()
-#endif
};
// -----------------------------------------------------------------------
+#if wxUSE_HEADERCTRL
+class wxPGHeaderCtrl;
+#endif
+
+
/** @class wxPropertyGridManager
wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid,
*/
bool IsPageModified( size_t index ) const;
+ /**
+ Returns true if property is selected. Since selection is page
+ based, this function checks every page in the manager.
+ */
+ virtual bool IsPropertySelected( wxPGPropArg id ) const;
+
virtual void Refresh( bool eraseBackground = true,
const wxRect* rect = (const wxRect*) NULL );
return p->GetParentState()->DoSelectProperty(p, focus);
}
- /** Sets number of columns on given page (default is current page).
+ /**
+ Sets a column title. Default title for column 0 is "Property",
+ and "Value" for column 1.
+
+ @remarks If header is not shown yet, then calling this
+ member function will make it visible.
+ */
+ void SetColumnTitle( int idx, const wxString& title );
+
+ /**
+ Sets number of columns on given page (default is current page).
+
+ @remarks If you use header, then you should always use this
+ member function to set the column count, instead of
+ ones present in wxPropertyGrid or wxPropertyGridPage.
*/
void SetColumnCount( int colCount, int page = -1 );
*/
void SetSplitterLeft( bool subProps = false, bool allPages = true );
- /** Sets splitter position on individual page. */
- void SetPageSplitterPosition( int page, int pos, int column = 0 )
- {
- GetPage(page)->DoSetSplitterPosition( pos, column );
- }
+ /** Moves splitter as left as possible on an individual page, while still allowing all
+ labels to be shown in full.
+ */
+ void SetPageSplitterLeft(int page, bool subProps = false);
- /** Sets splitter position for all pages.
- @remarks
- Splitter position cannot exceed grid size, and therefore setting it
- during form creation may fail as initial grid size is often smaller
- than desired splitter position, especially when sizers are being used.
+ /**
+ Sets splitter position on individual page.
+
+ @remarks If you use header, then you should always use this
+ member function to set the splitter position, instead of
+ ones present in wxPropertyGrid or wxPropertyGridPage.
+ */
+ void SetPageSplitterPosition( int page, int pos, int column = 0 );
+
+ /**
+ Sets splitter position for all pages.
+
+ @remarks Splitter position cannot exceed grid size, and therefore
+ setting it during form creation may fail as initial grid
+ size is often smaller than desired splitter position,
+ especially when sizers are being used.
+
+ If you use header, then you should always use this
+ member function to set the splitter position, instead of
+ ones present in wxPropertyGrid or wxPropertyGridPage.
*/
void SetSplitterPosition( int pos, int column = 0 );
+#if wxUSE_HEADERCTRL
+ /**
+ Show or hide the property grid header control. It is hidden
+ by the default.
+
+ @remarks Grid may look better if you use wxPG_NO_INTERNAL_BORDER
+ window style when showing a header.
+ */
+ void ShowHeader(bool show = true);
+#endif
+
protected:
//
/**
Creates property grid for the manager. Reimplement in derived class to
- use subclassed wxPropertyGrid. However, if you you do this then you
+ use subclassed wxPropertyGrid. However, if you do this then you
must also use the two-step construction (ie. default constructor and
Create() instead of constructor with arguments) when creating the
manager.
virtual void SetExtraStyle ( long exStyle );
virtual bool SetFont ( const wxFont& font );
virtual void SetWindowStyleFlag ( long style );
+ virtual bool Reparent( wxWindowBase *newParent );
protected:
virtual wxSize DoGetBestSize() const;
-public:
-
-#ifndef SWIG
-
//
// Event handlers
//
void OnToolbarClick( wxCommandEvent &event );
void OnResize( wxSizeEvent& event );
void OnPropertyGridSelect( wxPropertyGridEvent& event );
+ void OnPGColDrag( wxPropertyGridEvent& event );
-protected:
wxPropertyGrid* m_pPropGrid;
#if wxUSE_TOOLBAR
wxToolBar* m_pToolbar;
+#endif
+#if wxUSE_HEADERCTRL
+ wxPGHeaderCtrl* m_pHeaderCtrl;
#endif
wxStaticText* m_pTxtHelpCaption;
wxStaticText* m_pTxtHelpContent;
wxPropertyGridPage* m_emptyPage;
+ wxArrayString m_columnLabels;
+
long m_iFlags;
// Selected page index.
int m_splitterHeight;
- int m_nextTbInd;
-
int m_dragOffset;
wxCursor m_cursorSizeNS;
int m_nextDescBoxSize;
- wxWindowID m_baseId;
+ // Toolbar tool ids for categorized and alphabetic mode selectors.
+ int m_categorizedModeToolId;
+ int m_alphabeticModeToolId;
unsigned char m_dragStatus;
unsigned char m_onSplitter;
+ bool m_showHeader;
+
virtual wxPGProperty* DoGetPropertyByName( const wxString& name ) const;
/** Select and displays a given page. */
private:
DECLARE_EVENT_TABLE()
-#endif // #ifndef SWIG
};
// -----------------------------------------------------------------------