У меня есть пользовательский GenericTreeModel, который работает просто отлично. Теперь я хочу, чтобы пользователь мог переставлять узлы с помощью перетаскивания, поэтому я перемещаю узел к его новому родителю в модели данных.
Однако затем TreeModel хочет получать уведомления, используя такие методы, как row_has_child_toggled
, row_deleted
и row_inserted
.
Таким образом, очевидно, что нет row_moved
, и вызовов row_deleted
(для первоначального пути) и row_inserted
(для нового пути) кажется недостаточно. Поэтому я подумал, что, возможно, придется рекурсивно выдавать эти изменения.
Рассмотрим следующий пример:
* A (0,)
* B (1,)
* C (1,0)
* D (1,0,0)
Теперь, если я переместлю C в A, произойдут следующие вещи:
row_delete( (1,0) ) # C
row_delete( (1,0,0) ) # D
row_inserted( (0,0) ) # C'
row_inserted( (0,0,0) ) # D'
child_toggle( (0,) ) # A
child_toggle( (1,) ) # B
child_toggle( (0,1) ) # C'
Однако gtk по-прежнему жалуется на несовместимое состояние модели. Две вещи приходят мне на ум:
- может быть, порядок вызова этих функций уместен (если да, то как?)
- технически
child_toggle( (1,0) )
также происходит, однако строка a) уже удалена и b) row_has_child_toggled
нужна ссылка tree_iter
, которую я не могу получить, поскольку ее больше не существует.
Может быть, я придерживаюсь абсолютно неправильного подхода, так как лучше всего это сделать?