//compile me with: g++ -g -Wall -o test3 test3.cc `(pkg-config --cflags --libs gtkmm-3.0)` #include #include #include class ExampleWindow : public Gtk::Window { public: ExampleWindow(); virtual ~ExampleWindow(); protected: //Signal handlers: void on_rb1_clicked(); void on_rb2_clicked(); void on_treeview_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); //Tree model columns: class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns(){ add(columnid); add(columnname);} Gtk::TreeModelColumn columnid; Gtk::TreeModelColumn columnname; }; ModelColumns modelcolumns; //the ModelColumns object //Child widgets: Gtk::Box vbox1; Gtk::Box hbox1; Gtk::RadioButton rb1, rb2; Gtk::ScrolledWindow scroll1; Gtk::TreeView treeview1; Glib::RefPtr liststore1; }; ExampleWindow::ExampleWindow():vbox1(Gtk::ORIENTATION_VERTICAL),hbox1(Gtk::ORIENTATION_HORIZONTAL),rb1("with Model1"),rb2("Model2") { set_title("Gtk::TreeView (ListStore) with callbacks"); set_border_width(5); set_default_size(400, 400); rb2.join_group(rb1); add(vbox1); vbox1.add(hbox1); hbox1.pack_start(rb1); hbox1.pack_end(rb2); //Add the TreeView, inside a ScrolledWindow scroll1.add(treeview1); scroll1.set_min_content_height(400); //Only show the scrollbars when they are necessary: scroll1.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); vbox1.add(scroll1); //Create the Tree model: liststore1 = Gtk::ListStore::create(modelcolumns); treeview1.set_model(liststore1); //Add the TreeView's view columns: treeview1.append_column("ID", modelcolumns.columnid); treeview1.append_column("Name", modelcolumns.columnname); //Conection from signals to callbacks rb1.signal_clicked().connect(sigc::mem_fun(*this,&ExampleWindow::on_rb1_clicked)); rb2.signal_clicked().connect(sigc::mem_fun(*this,&ExampleWindow::on_rb2_clicked)); treeview1.signal_row_activated().connect( sigc::mem_fun(*this, &ExampleWindow::on_treeview_row_activated)); show_all_children(); } void ExampleWindow::on_rb1_clicked() { int count=5; std::string names[count] = {"alpha", "beta", "gamma", "delta", "epsilon"}; liststore1->clear(); for(int j=0;jappend()); row[modelcolumns.columnid] = j; row[modelcolumns.columnname] = names[j]; } } void ExampleWindow::on_rb2_clicked() { std::string newnames[]= {"Alpha", "Beta", "Gamma", "Delta", "Epsilon"}; liststore1->clear(); int count=5; for(int j=0;jappend()); row[modelcolumns.columnid] = j; row[modelcolumns.columnname] = newnames[j]; } } void ExampleWindow::on_treeview_row_activated(const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn*) { std::cout << "row_activated has been called" << std::endl; } ExampleWindow::~ExampleWindow() { } int main(int argc, char *argv[]) { auto app = Gtk::Application::create(argc,argv, "org.pcrt.example"); ExampleWindow window; return app->run(window); }