git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76220 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/persist/treebook.h
 | 
						|
// Purpose:     persistence support for wxBookCtrl
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2009-01-19
 | 
						|
// Copyright:   (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
 | 
						|
// Licence:     wxWindows licence
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_PERSIST_TREEBOOK_H_
 | 
						|
#define _WX_PERSIST_TREEBOOK_H_
 | 
						|
 | 
						|
#include "wx/persist/bookctrl.h"
 | 
						|
 | 
						|
#include "wx/arrstr.h"
 | 
						|
#include "wx/treebook.h"
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// string constants used by wxPersistentTreeBookCtrl
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
#define wxPERSIST_TREEBOOK_KIND "TreeBook"
 | 
						|
 | 
						|
// this key contains the indices of all expanded nodes in the tree book
 | 
						|
// separated by wxPERSIST_TREEBOOK_EXPANDED_SEP
 | 
						|
#define wxPERSIST_TREEBOOK_EXPANDED_BRANCHES "Expanded"
 | 
						|
#define wxPERSIST_TREEBOOK_EXPANDED_SEP ','
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// wxPersistentTreeBookCtrl: supports saving/restoring open tree branches
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
class wxPersistentTreeBookCtrl : public wxPersistentBookCtrl
 | 
						|
{
 | 
						|
public:
 | 
						|
    wxPersistentTreeBookCtrl(wxTreebook *book)
 | 
						|
        : wxPersistentBookCtrl(book)
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    virtual void Save() const wxOVERRIDE
 | 
						|
    {
 | 
						|
        const wxTreebook * const book = GetTreeBook();
 | 
						|
 | 
						|
        wxString expanded;
 | 
						|
        const size_t count = book->GetPageCount();
 | 
						|
        for ( size_t n = 0; n < count; n++ )
 | 
						|
        {
 | 
						|
            if ( book->IsNodeExpanded(n) )
 | 
						|
            {
 | 
						|
                if ( !expanded.empty() )
 | 
						|
                    expanded += wxPERSIST_TREEBOOK_EXPANDED_SEP;
 | 
						|
 | 
						|
                expanded += wxString::Format("%u", static_cast<unsigned>(n));
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        SaveValue(wxPERSIST_TREEBOOK_EXPANDED_BRANCHES, expanded);
 | 
						|
 | 
						|
        wxPersistentBookCtrl::Save();
 | 
						|
    }
 | 
						|
 | 
						|
    virtual bool Restore() wxOVERRIDE
 | 
						|
    {
 | 
						|
        wxTreebook * const book = GetTreeBook();
 | 
						|
 | 
						|
        wxString expanded;
 | 
						|
        if ( RestoreValue(wxPERSIST_TREEBOOK_EXPANDED_BRANCHES, &expanded) )
 | 
						|
        {
 | 
						|
            const wxArrayString
 | 
						|
                indices(wxSplit(expanded, wxPERSIST_TREEBOOK_EXPANDED_SEP));
 | 
						|
 | 
						|
            const size_t pageCount = book->GetPageCount();
 | 
						|
            const size_t count = indices.size();
 | 
						|
            for ( size_t n = 0; n < count; n++ )
 | 
						|
            {
 | 
						|
                unsigned long idx;
 | 
						|
                if ( indices[n].ToULong(&idx) && idx < pageCount )
 | 
						|
                    book->ExpandNode(idx);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return wxPersistentBookCtrl::Restore();
 | 
						|
    }
 | 
						|
 | 
						|
    virtual wxString GetKind() const wxOVERRIDE { return wxPERSIST_TREEBOOK_KIND; }
 | 
						|
 | 
						|
    wxTreebook *GetTreeBook() const { return static_cast<wxTreebook *>(Get()); }
 | 
						|
};
 | 
						|
 | 
						|
inline wxPersistentObject *wxCreatePersistentObject(wxTreebook *book)
 | 
						|
{
 | 
						|
    return new wxPersistentTreeBookCtrl(book);
 | 
						|
}
 | 
						|
 | 
						|
#endif // _WX_PERSIST_TREEBOOK_H_
 |