我有一个自定义的 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
引用,我无法得到它,因为它不再存在。
也许我在这里采用了完全错误的方法,那么最好的方法是什么?