A grand "Thank you" to Daniel Boles and Phil Wolff for their help.  I had been mixing up gtk and gtkmm documentation!  I am attaching the complete now working code for anyone interested.

On 8/10/19 10:04 AM, Phil Wolff via gtkmm-list wrote:
As indicated by the error message, liststore1 is a RefPtr to a ListStore model, which is a C++ entity that

    1) cannot be used as an argument to a gtk+ function, and

    2) cannot be dereferenced with the * operator.

At a more fundamental level, this approach is unnecessarily complicated. The entire contents of the function can be replace with a single statement:

    liststore1->clear ();


On 8/10/19 8:20 AM, pcr wrote:

I have changed from a tree store to a list store now, and I have working code, except for the last line in this call back used when a radio button is clicked in order to erase the list store and replace it with another at run time:

  void ExampleWindow::on_rb2_clicked()
 {
    std::cout << "rb2 clicked" << std::endl;

    typedef Gtk::TreeModel::Children type_children;
    type_children children = liststore1->children();
    type_children::iterator iter;
    for(iter=children.begin(); iter!=children.end(); ++iter)
               gtk_list_store_remove (*liststore1,*iter);

}

The compiler message I get is

test3.cc: In member function ‘void ExampleWindow::on_rb2_clicked()’:
test3.cc:104:27: error: no match for ‘operator*’ (operand type is ‘Glib::RefPtr<Gtk::ListStore>’)
    gtk_list_store_remove (*liststore1,*iter);

So my question is, I suppose, what is the proper syntax for using gtk_list_store_remove ???

On 8/8/19 3:46 PM, pcr wrote:

I'm trying to learn how to iterate over model rows in a manner similar to the code segment in section 9.3 of the gnome gtkmm tutorial.  Consider me a newbie; the "something" I want to do below is delete/clear/erase a row - really all rows so I can display a new set of rows in response to a user action like changing a radio button.  But I haven't been able to do it. Here is the snippit from section 9.3:

typedef Gtk::TreeModel::Children type_children; //minimise code length.
type_children children = refModel->children();
for(type_children::iterator iter = children.begin();
     iter != children.end(); ++iter)
{
   Gtk::TreeModel::Row row = *iter;
   //Do something with the row - see above for set/get.
}

*I'm also confused by the following comment I found on line; I don't see how this can work with the above code either. ***
iterator Gtk::TreeStore:erase(const iterator& iter)
    Returns an iterator to the next row or end() if there is none"

I hope you can help me .  Thanks, PCR


_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list

_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
//compile me with:  g++ -g -Wall -o test3 test3.cc `(pkg-config --cflags --libs gtkmm-3.0)`
#include <gtkmm.h>
#include <iostream>
#include <gtkmm/application.h>

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<unsigned int> columnid;
    Gtk::TreeModelColumn<Glib::ustring> 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<Gtk::ListStore> 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;j<count;j++)
  {
  	Gtk::TreeModel::Row row = *(liststore1->append());
	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;j<count;j++)
  {
  	Gtk::TreeModel::Row row = *(liststore1->append());
	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);
}

_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to