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