Re: gtk combobox questions



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]