親を子にドロップしたらダメですよw
さて、次は何をやろうか・・・。と思っていたところに重大なバグ発見。
* 自分の子供にドラッグするとノードが消える。
そうですね。仕様からして親を子供にドロップするのは違反ですね。例のごとく定石があるのかどうか知らないまま自前で処理を書いてみます。
TreeStore
def isParentItem(self, parent, child): item = self.iter_parent(child) while item!=self.getHiddenRoot(): if item == parent: return True else: item = self.iter_parent(item) return False
TreeCtrl
def onTreeEndDrag(self, event): print "treeEndDrag" src_item = self.dragItem target_item = event.GetItem() if target_item == None: print "item=None" elif self.get_model().isParentItem(src_item, target_item): print "Parent item cannot drop to child." else: item, flag = self.HitTest(event.GetPoint()) print "flag == %s" % flag status = self.__dropPointStatus(flag) if status==0: self.get_model().moveNodeBefore(src_item, target_item) elif status==1: self.get_model().moveNodeAfter(src_item, target_item) elif status==2: self.get_model().moveNodeToChild(src_item, target_item) self.Expand(target_item)
こんな感じで親子判定を行うようにしたらうまくいきました。
Rev.43でコミット。