Re: gtk combobox questions
- From: Bob Caryl <bob fis-cal com>
- To: Anca Mitrica <ancamitrica yahoo com>
- Cc: gtkmm-list gnome org
- Subject: Re: gtk combobox questions
- Date: Thu, 14 Jul 2005 05:30:00 -0500
Anca Mitrica wrote:
Hello,
I am trying to attach a Gtk::ComboBox to a Gtk::Table,
in a dynamical way: the combobox list store is filled
with values read from different list<Glib::ustring>
(several if branches). The problem is that I receive a
segmentation fault each time I try to visualize the
combobox.
Here is the code :
DirWindow.h file:
..................
class DirWindow{
public:
.............
protected:
//define class for tree model for combobox
class ModelTree:public Gtk::TreeModel::ColumnRecord{
public:
ModelTree(){
add(colName);
}
Gtk::TreeModelColumn<Glib::ustring> colName;
};
private:
Glib::RefPtr<Gtk::ListStore> typelist;
Gtk::ComboBox *combo ;
.......................
};
DirWindow.cc file :
......................................
void DirWindow::on_Combo_Name_Type(){
Glib::ustring parname,partype,pardelim;
Glib::ustring ns = getComboNameActive();
Glib::ustring typesel = getComboTypeActive();
//oxLabel = new Gtk::Label("0x");
butAjouter->set_sensitive(true);
delete intable;
paramTableRowNumber = 1;
intable = new Gtk::Table(paramTableRowNumber,3,true);
intable->set_col_spacings(8);
intable->set_row_spacings(8);
if(typesel =="SES"){
for(parseIterator=seslist.begin();parseIterator !=
seslist.end();parseIterator++){
Glib::ustring elem = *parseIterator;
Glib::ustring name =
elem.substr(0,elem.find_first_of("<",0));
if((name == ns)||(name =="\t"+ns)){
//get all parameters for a directive in put thzm
into a list
tokenizeString(elem,"<");
//li = list containing all parameters of a
directive
for(p = li.begin();p != li.end();++p){
//p = a parameter with name type and delimiter
Glib::ustring parameter = *p;
tokenizeParameter(parameter);
for(unsigned int i = 0;i<vecteur.size();i++){
if(i == 0)
parname = vecteur[i];
else if(i == 1){
partype = vecteur[i];
}else if(i == 2){
pardelim = vecteur[i];
}
}
paramTableRowNumber++;
intable->resize(paramTableRowNumber,3);
intable->set_resize_mode(Gtk::RESIZE_IMMEDIATE);
newParameterName = new Gtk::Label(parname);
newParameterType = new
Gtk::Label(Glib::ustring("(")+partype+Glib::ustring(")"));
newParameterEntry = new Gtk::Entry();
combo = new Gtk::ComboBox();
typelist = Gtk::ListStore::create(columns);
combo->set_model(typelist);
for(parsetypeIterator =
hexlist.begin();parsetypeIterator!=hexlist.end();++parsetypeIterator){
Glib::ustring s = *parsetypeIterator;
Gtk::TreeModel::Row firstrow =
*(typelist->append());
firstrow[columns.colName] = s;
}
combo->pack_start(columns.colName);
combo->signal_changed().connect(sigc::mem_fun(*this,&DirWindow::on_Combo_Type_Enum));
combo->set_active(0);
intable->attach(*newParameterName,0,1,paramTableRowNumber-1,paramTableRowNumber,Gtk::EXPAND,Gtk::EXPAND,0,0);
if(partype == "ENUM_HEX"){
hb = new Gtk::HBox();
oxLabel = new Gtk::Label("0x");
hb->pack_start(*oxLabel,Gtk::PACK_SHRINK);
hb->pack_start(*newParameterEntry,Gtk::PACK_SHRINK);
intable->attach(*hb,1,2,paramTableRowNumber-1,paramTableRowNumber,Gtk::FILL,Gtk::FILL,0,0);
hb->show_all_children();
intable->attach(*combo,2,3,paramTableRowNumber-1,paramTableRowNumber);
}else{
intable->attach(*newParameterEntry,1,2,paramTableRowNumber-1,paramTableRowNumber,Gtk::FILL,Gtk::FILL,0,0);
intable->attach(*newParameterType,2,3,paramTableRowNumber-1,paramTableRowNumber,Gtk::FILL,Gtk::FILL,0,0);
} intable->queue_resize();
}
}
}
}
..............................................
The table also is updated dynamically.
Does anyone has an idea about what's wrong with my
code? Or what could generate a seg fault?
Thank you
Anca Mitrica
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
_______________________________________________
gtkmm-list mailing list
gtkmm-list gnome org
http://mail.gnome.org/mailman/listinfo/gtkmm-list
In "DirWindow::on_Combo_Name_Type()" you delete "intable" and then you
reinstantiate it, attaching several widgets to it, but I do not see you
adding this table to a container (not even to your main app window).
You have potential memory leak problems with the various widgets you are
instantiating to put into the new intable widget. I would suggest using
the "manage" method of your main application window when you instantiate
these widgets. You might want to want until you finish initializing
typelist before you set it as the model for combo. Beyond that, I do
not see anything that appears to be wrong with your construction of combo.
Perhaps you have left out a good deal of detail for the sake of brevity,
so I think it might be helpful if more information were available.
Bob Caryl
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]