ドラッグ・アンド・ドロップ

Gtk::ListStoreGtk::TreeStoreを使う場合、Gtk::TreeViewには既に単純なドラッグ・アンド・ドロップ機能が実装されています。必要ならば、アイテムをドラッグ・アンド・ドロップしたときにより複雑な振る舞いをするよう実装することもできます。これには通常のドラッグ・アンド・ドロップAPIを使ってください。

再配置可能な行

Gtk::TreeView::set_reorderable()を呼ぶと、TreeViewのアイテムはその中で動かすことができるようになります。これはTreeStoreの例にデモがあります。

ですがこの状態では、どのアイテムがドラッグ可能で、どのアイテムがドロップ可能なのか設定することは全くできなくなります。この場合、新しくTreeStoreListStoreから派生したGtk::TreeModelを作成し、virtualメソッドGtk::TreeDragSource::row_draggable()Gdk::TreeDragDest::row_drop_possible()をオーバーライドしてください。提供されているGtk::TreeModel::Pathで真偽値を見ることでドラッグ/ドロップが、許可/禁止/ドロップ可能か調べることができます。

以上のことはコード例のdrag_and_dropにデモがあります。