私はカスタム 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 はまだモデルの状態に一貫性がないことについて不平を言っています。次の 2 つのことが頭に浮かびます。
- おそらく、これらの関数を呼び出す順序が関連している可能性があります(もしそうなら、どのように考えていますか?)
- 技術的
child_toggle( (1,0) )
にも発生しますが、行は a) 既に削除されており、b)参照row_has_child_toggled
が必要tree_iter
ですが、もう存在しないため取得できません。
たぶん私はここで完全に間違ったアプローチに従っているので、これを行う最善の方法は何ですか?