我有一个自定义的GenericTreeModel,工作得很好。现在我希望用户能够使用拖放来重新排列节点,所以我将节点移动到数据模型中的新父节点。 然而,TreeModel希望使用像row_has_child_toggled
,row_deleted
和row_inserted
这样的方法来通知。如何在移动子树后更新TreeModel
所以显然没有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))
也发生了,但是该行一)已经被删除和b)row_has_child_toggled
需要一个tree_iter
参考,我不能得到,因为它不再存在。
也许我在这里采取了完全错误的方法,那么最好的方法是什么?
这对于gtk.TreeStore是正确的,但是gtk.GenericTreeModel不支持insert_after/before函数。所以我必须执行它们,不幸的是我会回到我的问题。 – rumpel