1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxPropertyGridManager 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows licence 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10     @class wxPropertyGridPage 
  12     Holder of property grid page information. You can subclass this and 
  13     give instance in wxPropertyGridManager::AddPage. It inherits from 
  14     wxEvtHandler and can be used to process events specific to this 
  15     page (id of events will still be same as manager's). If you don't 
  16     want to use it to process all events of the page, you need to 
  17     return @false in the derived wxPropertyGridPage::IsHandlingAllEvents. 
  19     Please note that wxPropertyGridPage lacks many non-const property 
  20     manipulation functions found in wxPropertyGridManager. 
  21     Please use parent manager (m_manager member variable) when needed. 
  23     Please note that most member functions are inherited and as such not 
  24     documented on this page. This means you will probably also want to read 
  25     wxPropertyGridInterface class reference. 
  27     @section propgridpage_event_handling Event Handling 
  29     wxPropertyGridPage receives events emitted by its wxPropertyGridManager, but 
  30     only those events that are specific to that page. If wxPropertyGridPage:: 
  31     IsHandlingAllEvents returns false, then unhandled events are sent to the 
  32     manager's parent, as usual. 
  34     See @ref propgrid_event_handling "wxPropertyGrid Event Handling" 
  40 class WXDLLIMPEXP_PROPGRID wxPropertyGridPage 
: public wxEvtHandler
, 
  41                                                 public wxPropertyGridInterface
 
  43     friend class wxPropertyGridManager
; 
  47     virtual ~wxPropertyGridPage(); 
  50         Deletes all properties on page. 
  55         Reduces column sizes to minimum possible that contents are still visibly 
  56         (naturally some margin space will be applied as well). 
  58         @return Returns minimum size for the page to still display everything. 
  60         @remarks This function only works properly if size of containing grid was 
  63                 Note that you can also get calculated column widths by calling 
  64                 GetColumnWidth() immediately after this function returns. 
  69         Returns page index in manager; 
  71     inline int GetIndex() const; 
  74         Returns "root property". It does not have name, etc. and it is not 
  75         visible. It is only useful for accessing its children. 
  77     wxPGProperty
* GetRoot() const; 
  80         Returns x-coordinate position of splitter on a page. 
  82     int GetSplitterPosition( int col 
= 0 ) const; 
  85         Returns id of the tool bar item that represents this page on 
  86         wxPropertyGridManager's wxToolBar. 
  88     int GetToolId() const; 
  91         Do any member initialization in this method. 
  93         @remarks - Called every time the page is added into a manager. 
  94                 - You can add properties to the page here. 
  99         Return false here to indicate unhandled events should be 
 100         propagated to manager's parent, as normal. 
 102     virtual bool IsHandlingAllEvents() const; 
 105         Called every time page is about to be shown. 
 106         Useful, for instance, creating properties just-in-time. 
 108     virtual void OnShow(); 
 111         Refreshes given property on page. 
 113     virtual void RefreshProperty( wxPGProperty
* p 
); 
 116         Sets splitter position on page. 
 119         Splitter position cannot exceed grid size, and therefore setting it 
 120         during form creation may fail as initial grid size is often smaller than 
 121         desired splitter position, especially when sizers are being used. 
 123     void SetSplitterPosition( int splitterPos
, int col 
= 0 ); 
 128     @class wxPropertyGridManager 
 130     wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid, 
 131     which can optionally have toolbar for mode and page selection, a help text 
 134     wxPropertyGridManager inherits from wxPropertyGridInterface, and as such 
 135     it has most property manipulation functions. However, only some of them affect 
 136     properties on all pages (eg. GetPropertyByName() and ExpandAll()), while some 
 137     (eg. Append()) only apply to the currently selected page. 
 139     To operate explicitly on properties on specific page, use 
 140     wxPropertyGridManager::GetPage() to obtain pointer to page's 
 141     wxPropertyGridPage object. 
 143     Visual methods, such as SetCellBackgroundColour() are only available in 
 144     wxPropertyGrid. Use wxPropertyGridManager::GetGrid() to obtain pointer to it. 
 146     Non-virtual iterators will not work in wxPropertyGridManager. Instead, you must 
 147     acquire the internal grid (GetGrid()) or wxPropertyGridPage object (GetPage()). 
 149     wxPropertyGridManager constructor has exact same format as wxPropertyGrid 
 150     constructor, and basicly accepts same extra window style flags (albeit also 
 151     has some extra ones). 
 153     Here's some example code for creating and populating a wxPropertyGridManager: 
 156         wxPropertyGridManager* pgMan = new wxPropertyGridManager(this, PGID, 
 157             wxDefaultPosition, wxDefaultSize, 
 158             // These and other similar styles are automatically 
 159             // passed to the embedded wxPropertyGrid. 
 160             wxPG_BOLD_MODIFIED|wxPG_SPLITTER_AUTO_CENTER| 
 163             // Include description box. 
 165             // Include compactor. 
 168             wxPGMAN_DEFAULT_STYLE 
 171         wxPropertyGridPage* page; 
 173         page = pgMan->AddPage("First Page"); 
 175         page->Append( new wxPropertyCategory("Category A1") ); 
 177         page->Append( new wxIntProperty("Number",wxPG_LABEL,1) ); 
 179         page->Append( new wxColourProperty("Colour",wxPG_LABEL,*wxWHITE) ); 
 181         page = pgMan->AddPage("Second Page"); 
 183         page->Append( "Text",wxPG_LABEL,"(no text)" ); 
 185         page->Append( new wxFontProperty("Font",wxPG_LABEL) ); 
 187         // Display a header above the grid 
 191     @section propgridmanager_window_styles_ Window Styles 
 193     See @ref propgrid_window_styles. 
 195     @section propgridmanager_event_handling Event Handling 
 197     See @ref propgrid_event_handling "wxPropertyGrid Event Handling" 
 198     for more information. 
 203 class wxPropertyGridManager 
: public wxPanel
, public wxPropertyGridInterface
 
 207         Creates new property page. Note that the first page is not created 
 211             A label for the page. This may be shown as a toolbar tooltip etc. 
 214             Bitmap image for toolbar. If wxNullBitmap is used, then a built-in 
 215             default image is used. 
 218             wxPropertyGridPage instance. Manager will take ownership of this 
 219             object. NULL indicates that a default page instance should be created. 
 221         @return Returns pointer to created property grid page. 
 223         @remarks If toolbar is used, it is highly recommended that the pages are 
 224                 added when the toolbar is not turned off using window style flag 
 225                 switching. Otherwise toolbar buttons might not be added properly. 
 227     wxPropertyGridPage
* AddPage( const wxString
& label 
= wxEmptyString
, 
 228                                  const wxBitmap
& bmp 
= wxPG_NULL_BITMAP
, 
 229                                  wxPropertyGridPage
* pageObj 
= NULL 
); 
 232         Deletes all properties and all pages. 
 234     virtual void Clear(); 
 237         Deletes all properties on given page. 
 239     void ClearPage( int page 
); 
 242         Forces updating the value of property from the editor control. 
 244         @return Returns @true if value was actually updated. 
 246     bool CommitChangesFromEditor( wxUint32 flags 
= 0 ); 
 249         Two step creation. Whenever the control is created without any parameters, 
 250         use Create to actually create it. Don't access the control's public methods 
 251         before this is called. 
 253         @see @ref propgrid_window_styles 
 255     bool Create( wxWindow 
*parent
, wxWindowID id 
= wxID_ANY
, 
 256                  const wxPoint
& pos 
= wxDefaultPosition
, 
 257                  const wxSize
& size 
= wxDefaultSize
, 
 258                  long style 
= wxPGMAN_DEFAULT_STYLE
, 
 259                  const wxChar
* name 
= wxPropertyGridManagerNameStr 
); 
 262         Enables or disables (shows/hides) categories according to parameter enable. 
 265             Calling his may not properly update toolbar buttons. 
 267     bool EnableCategories( bool enable 
); 
 270         Selects page, scrolls and/or expands items to ensure that the 
 271         given item is visible. 
 273         @return Returns @true if something was actually done. 
 275     bool EnsureVisible( wxPGPropArg id 
); 
 278         Returns number of columns on given page. By the default, 
 279         returns number of columns on current page. 
 281     int GetColumnCount( int page 
= -1 ) const; 
 284         Returns height of the description text box. 
 286     int GetDescBoxHeight() const; 
 289         Returns pointer to the contained wxPropertyGrid. This does not change 
 290         after wxPropertyGridManager has been created, so you can safely obtain 
 291         pointer once and use it for the entire lifetime of the manager 
 294     wxPropertyGrid
* GetGrid(); 
 297         Similar to GetIterator, but instead returns wxPGVIterator instance, 
 298         which can be useful for forward-iterating through arbitrary property 
 301     virtual wxPGVIterator 
GetVIterator( int flags 
) const; 
 304         Returns currently selected page. 
 306     wxPropertyGridPage
* GetCurrentPage() const; 
 309         Returns page object for given page index. 
 311     wxPropertyGridPage
* GetPage( unsigned int ind 
) const; 
 314         Returns page object for given page name. 
 316     wxPropertyGridPage
* GetPage( const wxString
& name 
) const; 
 319         Returns index for a page name. If no match is found, wxNOT_FOUND is 
 322     int GetPageByName( const wxString
& name 
) const; 
 325         Returns number of managed pages. 
 327     size_t GetPageCount() const; 
 330         Returns name of given page. 
 332     const wxString
& GetPageName( int index 
) const; 
 335         Returns "root property" of the given page. It does not have name, etc. 
 336         and it is not visible. It is only useful for accessing its children. 
 338     wxPGProperty
* GetPageRoot( int index 
) const; 
 340     /** Returns index to currently selected page. */ 
 341     int GetSelectedPage() const; 
 343     /** Shortcut for GetGrid()->GetSelection(). */ 
 344     wxPGProperty
* GetSelectedProperty() const; 
 346     /** Synonyme for GetSelectedPage. */ 
 347     int GetSelection() const; 
 350         Returns a pointer to the toolbar currently associated with the 
 351         wxPropertyGridManager (if any). 
 353     wxToolBar
* GetToolBar() const; 
 356         Creates new property page. Note that the first page is not created 
 360             Add to this position. -1 will add as the last item. 
 363             A label for the page. This may be shown as a toolbar tooltip etc. 
 366             Bitmap image for toolbar. If wxNullBitmap is used, then a built-in 
 367             default image is used. 
 370             wxPropertyGridPage instance. Manager will take ownership of this 
 371             object. If NULL, default page object is constructed. 
 373         @return Returns pointer to created page. 
 375     virtual wxPropertyGridPage
* InsertPage( int index
, const wxString
& label
, 
 376                                             const wxBitmap
& bmp 
= wxNullBitmap
, 
 377                                             wxPropertyGridPage
* pageObj 
= NULL 
); 
 380         Returns @true if any property on any page has been modified by the user. 
 382     bool IsAnyModified() const; 
 385         Returns @true if updating is frozen (ie. Freeze() called but not yet Thaw() ). 
 387     bool IsFrozen() const; 
 390         Returns @true if any property on given page has been modified by the user. 
 392     bool IsPageModified( size_t index 
) const; 
 395         Returns true if property is selected. Since selection is page 
 396         based, this function checks every page in the manager. 
 398     virtual bool IsPropertySelected( wxPGPropArg id 
) const; 
 403         @return Returns @false if it was not possible to remove page in question. 
 405     virtual bool RemovePage( int page 
); 
 408         Select and displays a given page. 
 411             Index of page being seleced. Can be -1 to select nothing. 
 413     void SelectPage( int index 
); 
 416         Select and displays a given page (by label). 
 418     void SelectPage( const wxString
& label 
); 
 420     /** Select and displays a given page. */ 
 421     void SelectPage( wxPropertyGridPage
* page 
); 
 426         @see wxPropertyGrid::SelectProperty(), 
 427              wxPropertyGridInterface::ClearSelection() 
 429     bool SelectProperty( wxPGPropArg id
, bool focus 
= false ); 
 432         Sets number of columns on given page (default is current page). 
 434         @remarks If you use header, then you should always use this 
 435                  member function to set the column count, instead of 
 436                  ones present in wxPropertyGrid or wxPropertyGridPage. 
 438     void SetColumnCount( int colCount
, int page 
= -1 ); 
 441         Sets a column title. Default title for column 0 is "Property", 
 442         and "Value" for column 1. 
 444         @remarks If header is not shown yet, then calling this 
 445                  member function will make it visible. 
 447     void SetColumnTitle( int idx
, const wxString
& title 
); 
 450         Sets label and text in description box. 
 452     void SetDescription( const wxString
& label
, const wxString
& content 
); 
 454     /** Sets y coordinate of the description box splitter. */ 
 455     void SetDescBoxHeight( int ht
, bool refresh 
= true ); 
 458         Moves splitter as left as possible, while still allowing all 
 459         labels to be shown in full. 
 462             If @false, will still allow sub-properties (ie. properties which 
 463             parent is not root or category) to be cropped. 
 466             If @true, takes labels on all pages into account. 
 468     void SetSplitterLeft( bool subProps 
= false, bool allPages 
= true ); 
 471         Sets splitter position on individual page. 
 473         @remarks If you use header, then you should always use this 
 474                  member function to set the splitter position, instead of 
 475                  ones present in wxPropertyGrid or wxPropertyGridPage. 
 477     void SetPageSplitterPosition( int page
, int pos
, int column 
= 0 ); 
 480         Sets splitter position for all pages. 
 482         @remarks Splitter position cannot exceed grid size, and therefore 
 483                  setting it during form creation may fail as initial grid 
 484                  size is often smaller than desired splitter position, 
 485                  especially when sizers are being used. 
 487                  If you use header, then you should always use this 
 488                  member function to set the splitter position, instead of 
 489                  ones present in wxPropertyGrid or wxPropertyGridPage. 
 491     void SetSplitterPosition( int pos
, int column 
= 0 ); 
 493     /** Synonyme for SelectPage(name). */ 
 494     void SetStringSelection( const wxChar
* name 
); 
 497         Show or hide the property grid header control. It is hidden 
 500         @remarks Grid may look better if you use wxPG_NO_INTERNAL_BORDER 
 501                  window style when showing a header. 
 503     void ShowHeader(bool show 
= true); 
 508     // Subclassing helpers 
 512         Creates property grid for the manager. Reimplement in derived class to 
 513         use subclassed wxPropertyGrid. However, if you you do this then you 
 514         must also use the two-step construction (ie. default constructor and 
 515         Create() instead of constructor with arguments) when creating the 
 518     virtual wxPropertyGrid
* CreatePropertyGrid() const;