Implement persistence for wxDataViewListCtrl
This commit is contained in:
124
include/wx/persist/dataview.h
Normal file
124
include/wx/persist/dataview.h
Normal file
@@ -0,0 +1,124 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/persist/dataview.h
|
||||
// Purpose: Persistence support for wxDataViewListCtrl
|
||||
// Author: wxWidgets Team
|
||||
// Created: 2017-08-21
|
||||
// Copyright: (c) 2017 wxWidgets.org
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_PERSIST_DATAVIEW_H_
|
||||
#define _WX_PERSIST_DATAVIEW_H_
|
||||
|
||||
#include "wx/persist/window.h"
|
||||
#include "wx/dataview.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// String constants used by wxPersistentDataViewListCtrl.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#define wxPERSIST_DVLC_KIND "DataViewList"
|
||||
|
||||
#define wxPERSIST_DVLC_COL_PREFIX "Column"
|
||||
|
||||
#define wxPERSIST_DVLC_WIDTH "ColWidth"
|
||||
#define wxPERSIST_DVLC_SORT_KEY "SortKey"
|
||||
#define wxPERSIST_DVLC_SORT_ASC "SortAsc"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxPersistentDataViewListCtrl: Saves and restores user modified column widths
|
||||
// and single column sort order.
|
||||
//
|
||||
// Future improvements could be to save and restore column order if the user
|
||||
// has changed it and multicolumn sorts.
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class wxPersistentDataViewListCtrl :
|
||||
public wxPersistentWindow<wxDataViewListCtrl>
|
||||
{
|
||||
public:
|
||||
wxPersistentDataViewListCtrl(wxDataViewListCtrl* control)
|
||||
: wxPersistentWindow<wxDataViewListCtrl>(control)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void Save() const wxOVERRIDE
|
||||
{
|
||||
wxDataViewListCtrl* const control = Get();
|
||||
|
||||
int sortColumn = -1;
|
||||
|
||||
for ( unsigned int col = 0; col < control->GetColumnCount(); col++ )
|
||||
{
|
||||
// Create a prefix string to identify each column.
|
||||
wxString columnPrefix;
|
||||
columnPrefix.Printf("%s %d ", wxPERSIST_DVLC_COL_PREFIX, col);
|
||||
|
||||
// Save the width of each column.
|
||||
int width = control->GetColumn(col)->GetWidth();
|
||||
SaveValue(columnPrefix + wxPERSIST_DVLC_WIDTH, width);
|
||||
|
||||
// Check if this column is the current sort key.
|
||||
if ( control->GetColumn(col)->IsSortKey() )
|
||||
sortColumn = col;
|
||||
}
|
||||
|
||||
// Note: The current implementation does not save and restore multi-
|
||||
// column sort keys.
|
||||
if (control->IsMultiColumnSortAllowed())
|
||||
return;
|
||||
|
||||
// Save the current sort key.
|
||||
SaveValue(wxPERSIST_DVLC_SORT_KEY, sortColumn);
|
||||
|
||||
// Save the sort direction.
|
||||
if ( sortColumn > -1 )
|
||||
{
|
||||
bool sortAsc =
|
||||
control->GetColumn(sortColumn)->IsSortOrderAscending();
|
||||
SaveValue(wxPERSIST_DVLC_SORT_ASC, sortAsc);
|
||||
}
|
||||
}
|
||||
|
||||
virtual bool Restore() wxOVERRIDE
|
||||
{
|
||||
wxDataViewListCtrl* const control = Get();
|
||||
|
||||
for ( unsigned int col = 0; col < control->GetColumnCount(); col++ )
|
||||
{
|
||||
// Create a prefix string to identify each column.
|
||||
wxString columnPrefix =
|
||||
wxString::Format("%s %d ", wxPERSIST_DVLC_COL_PREFIX, col);
|
||||
|
||||
// Restore the column width.
|
||||
int width;
|
||||
if ( RestoreValue(columnPrefix + wxPERSIST_DVLC_WIDTH, &width) )
|
||||
control->GetColumn(col)->SetWidth(width);
|
||||
}
|
||||
|
||||
// Restore the sort key and order.
|
||||
int sortColumn;
|
||||
if ( RestoreValue(wxPERSIST_DVLC_SORT_KEY, &sortColumn) &&
|
||||
sortColumn > -1 &&
|
||||
sortColumn < (int)control->GetColumnCount() )
|
||||
{
|
||||
bool sortAsc = true;
|
||||
|
||||
RestoreValue(wxPERSIST_DVLC_SORT_ASC, &sortAsc);
|
||||
control->GetColumn(sortColumn)->SetSortOrder(sortAsc);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual wxString GetKind() const wxOVERRIDE
|
||||
{
|
||||
return wxPERSIST_DVLC_KIND;
|
||||
}
|
||||
};
|
||||
|
||||
inline wxPersistentObject *wxCreatePersistentObject(wxDataViewListCtrl* control)
|
||||
{
|
||||
return new wxPersistentDataViewListCtrl(control);
|
||||
}
|
||||
|
||||
#endif // _WX_PERSIST_DATAVIEW_H_
|
Reference in New Issue
Block a user