[gtkmm] Gtk::TreeView::set_reorderable() not working



Hi,
I would like the rows in my treeview to be reorderable by drag & drop. I do call Gtk::TreeView::set_reorderable() but the rows can still not be dragged or reordered.
I am using gtkmm 2.0.
Help please !
Thanks,
Liza
#include <gtkmm.h>
#include <iostream>
#include <gtkmm/main.h>

class ExampleWindow : public Gtk::Window
{
public:
 ExampleWindow();
 virtual ~ExampleWindow();

protected:
 //Signal handlers:
 virtual void on_button_quit();

 //Tree model columns:
 class ModelColumns : public Gtk::TreeModel::ColumnRecord
 {
 public:

   ModelColumns()
   { add(m_col_id); add(m_col_name); }

   Gtk::TreeModelColumn<int> m_col_id;
   Gtk::TreeModelColumn<Glib::ustring> m_col_name;
 };

 ModelColumns m_Columns;

 //Child widgets:
 Gtk::VBox m_VBox;

 Gtk::ScrolledWindow m_ScrolledWindow;
 Gtk::TreeView m_TreeView;
 Glib::RefPtr<Gtk::TreeStore> m_refTreeModel;

 Gtk::HButtonBox m_ButtonBox;
 Gtk::Button m_Button_Quit;
};

ExampleWindow::ExampleWindow()
: m_Button_Quit("Quit")
{
 set_title("Gtk::TreeView (TreeStore) example");
 set_border_width(5);
 set_default_size(400, 200);


 add(m_VBox);

 //Add the TreeView, inside a ScrolledWindow, with the button underneath:
 m_ScrolledWindow.add(m_TreeView);

 //Only show the scrollbars when they are necessary:
 m_ScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);

 m_VBox.pack_start(m_ScrolledWindow);
 m_VBox.pack_start(m_ButtonBox, Gtk::PACK_SHRINK);

 m_ButtonBox.pack_start(m_Button_Quit, Gtk::PACK_SHRINK);
 m_ButtonBox.set_border_width(5);
 m_ButtonBox.set_layout(Gtk::BUTTONBOX_END);
m_Button_Quit.signal_clicked().connect( SigC::slot(*this, &ExampleWindow::on_button_quit) );

 //Create the Tree model:
 m_refTreeModel = Gtk::TreeStore::create(m_Columns);
 m_TreeView.set_model(m_refTreeModel);

 //All the items to be reordered with drag-and-drop:
 m_TreeView.set_reorderable();

 //Fill the TreeView's model
 Gtk::TreeModel::Row row = *(m_refTreeModel->append());
 row[m_Columns.m_col_id] = 1;
 row[m_Columns.m_col_name] = "Billy Bob";

 Gtk::TreeModel::Row childrow = *(m_refTreeModel->append(row.children()));
 childrow[m_Columns.m_col_id] = 11;
 childrow[m_Columns.m_col_name] = "Billy Bob Junior";

 childrow = *(m_refTreeModel->append(row.children()));
 childrow[m_Columns.m_col_id] = 12;
 childrow[m_Columns.m_col_name] = "Sue Bob";

 row = *(m_refTreeModel->append());
 row[m_Columns.m_col_id] = 2;
 row[m_Columns.m_col_name] = "Joey Jojo";


 row = *(m_refTreeModel->append());
 row[m_Columns.m_col_id] = 3;
 row[m_Columns.m_col_name] = "Rob McRoberts";

 childrow = *(m_refTreeModel->append(row.children()));
 childrow[m_Columns.m_col_id] = 31;
 childrow[m_Columns.m_col_name] = "Xavier McRoberts";

 //Add the TreeView's view columns:
 m_TreeView.append_column("ID", m_Columns.m_col_id);
 m_TreeView.append_column("Name", m_Columns.m_col_name);

 show_all_children();
}

ExampleWindow::~ExampleWindow()
{
}

void ExampleWindow::on_button_quit()
{
 hide();
}

int main(int argc, char *argv[])
{
 Gtk::Main kit(argc, argv);

 ExampleWindow window;
 Gtk::Main::run(window); //Shows the window and returns when it is closed.

 return 0;
}









[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]