Версия wxWidgets-trunk.
Разбираюсь с сортировкой.
Как я понял, для сортировки используется wxDataViewModel::Compare(). Этот метод вызывается после клика по заголовку столбца, если тот имеет флаг wxDATAVIEW_COL_SORTABLE.
Но для виртуальной модели этого не происходит, те Compare() не вызывается.
Порылся в исходниках. Вызывается только wxDataViewModel::Resort().
Вообще сложилось такое ощущение, что сортировка виртуальных моделей никак не организована.. Или это пока не реализовано? Или просто недосмотр разработчиков?
Кто-нибудь реализовывал сортировку виртуальной модели?
Есть стандартные средства или самому писать workaround какой-нить?
Тк не в виртуальной модели тебе хотя бы передается номер столбца и направление сортировки..
Спасибо
Сортировка для wxDataViewVirtualListModel Topic is solved
Сортировка для wxDataViewVirtualListModel
WinXp, wxWidgets 2.8.9, wxWidgets-svn, MSVC 9
Пока сделал так:
Главная проблема, узнать столбец и направление сортировки, поэтому модель должна знать свой view.
Для этого добавляем в модель:
Теперь переопределяем метод Resort():
Ну а VirtualModel::doSort() уже реализует саму сортировку.
Тк модель должна знать свой view, то имеем ограничение - такая модель может использоваться только с одним представлением. + не забывать вызывать setParentView().
Главная проблема, узнать столбец и направление сортировки, поэтому модель должна знать свой view.
Для этого добавляем в модель:
Code: Select all
class VirtualModel: public wxDataViewVirtualListModel
{
...
wxDataViewCtrl *m_parentView;
...
};
...
void VirtualModel::setParentView(wxDataViewCtrl *view)
{
m_parentView = view;
}
Code: Select all
void VirtualModel::Resort()
{
wxDataViewColumn *col = m_parentView->GetSortingColumn();
if(!col){
wxASSERT_MSG(false, "No sorting column!");
} else {
int model_column = col->GetModelColumn();
bool ascending = col->IsSortOrderAscending();
doSort(model_column, ascending);
}
wxDataViewVirtualListModel::Resort();
}
Тк модель должна знать свой view, то имеем ограничение - такая модель может использоваться только с одним представлением. + не забывать вызывать setParentView().
WinXp, wxWidgets 2.8.9, wxWidgets-svn, MSVC 9