]> git.saurik.com Git - wxWidgets.git/blob - include/wx/persist/treebook.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / persist / treebook.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/persist/treebook.h
3 // Purpose: persistence support for wxBookCtrl
4 // Author: Vadim Zeitlin
5 // Created: 2009-01-19
6 // Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_PERSIST_TREEBOOK_H_
11 #define _WX_PERSIST_TREEBOOK_H_
12
13 #include "wx/persist/bookctrl.h"
14
15 #include "wx/arrstr.h"
16 #include "wx/treebook.h"
17
18 // ----------------------------------------------------------------------------
19 // string constants used by wxPersistentTreeBookCtrl
20 // ----------------------------------------------------------------------------
21
22 #define wxPERSIST_TREEBOOK_KIND "TreeBook"
23
24 // this key contains the indices of all expanded nodes in the tree book
25 // separated by wxPERSIST_TREEBOOK_EXPANDED_SEP
26 #define wxPERSIST_TREEBOOK_EXPANDED_BRANCHES "Expanded"
27 #define wxPERSIST_TREEBOOK_EXPANDED_SEP ','
28
29 // ----------------------------------------------------------------------------
30 // wxPersistentTreeBookCtrl: supports saving/restoring open tree branches
31 // ----------------------------------------------------------------------------
32
33 class wxPersistentTreeBookCtrl : public wxPersistentBookCtrl
34 {
35 public:
36 wxPersistentTreeBookCtrl(wxTreebook *book)
37 : wxPersistentBookCtrl(book)
38 {
39 }
40
41 virtual void Save() const
42 {
43 const wxTreebook * const book = GetTreeBook();
44
45 wxString expanded;
46 const size_t count = book->GetPageCount();
47 for ( size_t n = 0; n < count; n++ )
48 {
49 if ( book->IsNodeExpanded(n) )
50 {
51 if ( !expanded.empty() )
52 expanded += wxPERSIST_TREEBOOK_EXPANDED_SEP;
53
54 expanded += wxString::Format("%u", static_cast<unsigned>(n));
55 }
56 }
57
58 SaveValue(wxPERSIST_TREEBOOK_EXPANDED_BRANCHES, expanded);
59
60 wxPersistentBookCtrl::Save();
61 }
62
63 virtual bool Restore()
64 {
65 wxTreebook * const book = GetTreeBook();
66
67 wxString expanded;
68 if ( RestoreValue(wxPERSIST_TREEBOOK_EXPANDED_BRANCHES, &expanded) )
69 {
70 const wxArrayString
71 indices(wxSplit(expanded, wxPERSIST_TREEBOOK_EXPANDED_SEP));
72
73 const size_t pageCount = book->GetPageCount();
74 const size_t count = indices.size();
75 for ( size_t n = 0; n < count; n++ )
76 {
77 unsigned long idx;
78 if ( indices[n].ToULong(&idx) && idx < pageCount )
79 book->ExpandNode(idx);
80 }
81 }
82
83 return wxPersistentBookCtrl::Restore();
84 }
85
86 virtual wxString GetKind() const { return wxPERSIST_TREEBOOK_KIND; }
87
88 wxTreebook *GetTreeBook() const { return static_cast<wxTreebook *>(Get()); }
89 };
90
91 inline wxPersistentObject *wxCreatePersistentObject(wxTreebook *book)
92 {
93 return new wxPersistentTreeBookCtrl(book);
94 }
95
96 #endif // _WX_PERSIST_TREEBOOK_H_