c++ - Why is the information displayed twice in TreeView when using CellRenderer in gtkmm -


having following code:

mytreeview::mytreeview(gtktreeview* cobject, const glib::refptr<gtk::builder>& builder)     : gtk::treeview(cobject) {     glib::refptr< gtk::treestore > treemodel;     treemodel = gtk::treestore::create(treecolumns);      this->set_model(treemodel);      gtk::treemodel::row row = *(treemodel->append());     row[treecolumns.id] = 1;     row[treecolumns.name] = "one";      gtk::treemodel::row childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 11;     childrow[treecolumns.name] = "eleven";      childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 12;     childrow[treecolumns.name] = "twelve";      row = *(treemodel->append());     row[treecolumns.id] = 2;     row[treecolumns.name] = "two";       row = *(treemodel->append());     row[treecolumns.id] = 3;     row[treecolumns.name] = "three";      childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 31;     childrow[treecolumns.name] = "thirtyone";      gtk::treemodel::row subchild = *(treemodel->append(childrow.children()));     subchild[treecolumns.id] = 311;     subchild[treecolumns.name] = "three hundred eleven";      gtk::treeviewcolumn *view_column = gtk::manage(new gtk::treeviewcolumn("name", treecolumns.name));     gtk::cellrenderertext *cellrenderer = gtk::manage(new gtk::cellrenderertext());      view_column->pack_start(*cellrenderer, false);     view_column->set_cell_data_func(*cellrenderer, sigc::mem_fun(*this, &mytreeview::on_cell_data_name));     this->append_column(*view_column); }   void mytreeview::on_cell_data_name(gtk::cellrenderer* renderer, const gtk::treemodel::iterator& iter) {     //get value model , show appropriately in view:     gtk::treemodel::row row = *iter;     int id = row[treecolumns.id];     glib::ustring name = row[treecolumns.name];      gtk::cellrenderertext* text_renderer = dynamic_cast<gtk::cellrenderertext*>(renderer);      if (id == 11)     {         text_renderer->property_weight().set_value(pango::weight::weight_heavy);     }     else     {         text_renderer->property_weight().set_value(pango::weight::weight_normal);     }      if(text_renderer)     {         text_renderer->property_text() = name;     } } 

i have following:

two data columns in same column

so data duplicated in sort of subcolumn or somesuch. why happen? can have rendered text (with correct font).

i have managed make example without using glade, problem still there:

treeview.cpp:

#include <gtkmm.h>  #include "mywindow.hpp" int main(int argc, char *argv[]) {     glib::refptr<gtk::application> app = gtk::application::create(argc, argv, "org.spike.treeview");      mywindow window;         app->run(window);      return 0; } 

mywindow.hpp:

#include <gtkmm.h>  #include "mytreeview.hpp"  class mywindow : public gtk::applicationwindow { public:     mywindow();     virtual ~mywindow();  protected:     mytreeview *treeview; }; 

mytreeview.hpp:

#include <gtkmm.h>  class mytreeview : public gtk::treeview { public:     mytreeview();      void on_cell_data_name(gtk::cellrenderer* renderer, const gtk::treemodel::iterator& iter);      class modelcolumns : public gtk::treemodel::columnrecord       {       public:          modelcolumns()         { add(id); add(name); add(type); add(publickey); add(privatekey); }          gtk::treemodelcolumn<int> id;         gtk::treemodelcolumn<glib::ustring> name;         gtk::treemodelcolumn<char> type;         gtk::treemodelcolumn<glib::ustring> publickey;         gtk::treemodelcolumn<glib::ustring> privatekey;       } treecolumns; }; 

mywindow.cpp:

#include <iostream>  #include "mywindow.hpp"  mywindow::mywindow() {     treeview = gtk::manage(new mytreeview());     add(*treeview);     show_all_children(); }  mywindow::~mywindow() {} 

mytreeview.cpp:

#include <iostream>  #include "mytreeview.hpp"  mytreeview::mytreeview() {     glib::refptr< gtk::treestore > treemodel;     treemodel = gtk::treestore::create(treecolumns);      this->set_model(treemodel);      gtk::treemodel::row row = *(treemodel->append());     row[treecolumns.id] = 1;     row[treecolumns.name] = "one";      gtk::treemodel::row childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 11;     childrow[treecolumns.name] = "eleven";      childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 12;     childrow[treecolumns.name] = "twelve";      row = *(treemodel->append());     row[treecolumns.id] = 2;     row[treecolumns.name] = "two";       row = *(treemodel->append());     row[treecolumns.id] = 3;     row[treecolumns.name] = "three";      childrow = *(treemodel->append(row.children()));     childrow[treecolumns.id] = 31;     childrow[treecolumns.name] = "thirtyone";      gtk::treemodel::row subchild = *(treemodel->append(childrow.children()));     subchild[treecolumns.id] = 311;     subchild[treecolumns.name] = "three hundred eleven";  //  this->append_column_editable("name (orig)", treecolumns.name); //  this->append_column("id", treecolumns.id);       gtk::treeviewcolumn *view_column = gtk::manage(new gtk::treeviewcolumn("name", treecolumns.name));     gtk::cellrenderertext *cellrenderer = gtk::manage(new gtk::cellrenderertext());      view_column->pack_start(*cellrenderer, false);     view_column->set_cell_data_func(*cellrenderer, sigc::mem_fun(*this, &mytreeview::on_cell_data_name));     this->append_column(*view_column); }   void mytreeview::on_cell_data_name(gtk::cellrenderer* renderer, const gtk::treemodel::iterator& iter) {     //get value model , show appropriately in view:     gtk::treemodel::row row = *iter;     int id = row[treecolumns.id];     glib::ustring name = row[treecolumns.name];      gtk::cellrenderertext* text_renderer = dynamic_cast<gtk::cellrenderertext*>(renderer);      if (id == 11)     {         text_renderer->property_weight().set_value(pango::weight::weight_heavy);     }     else     {         text_renderer->property_weight().set_value(pango::weight::weight_normal);     }      if(text_renderer)     {         text_renderer->property_text() = name;     } } 

because of line:

gtk::treeviewcolumn *view_column = gtk::manage(new gtk::treeviewcolumn("name", treecolumns.name)); 

you've specified treemodel column instead of title, has added default cell renderer default renderering of data in column. need instead:

gtk::treeviewcolumn *view_column = gtk::manage(new gtk::treeviewcolumn("name")); 

Comments

Popular posts from this blog

How to provide Authorization & Authentication using Asp.net, C#? -

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

How to use Authorization & Authentication in Asp.net, C#? -