Re: Using a TreeStore with a ComboBox
- From: "Jonathon Jongsma" <jonathon jongsma gmail com>
- To: "Jef Driesen" <jefdriesen hotmail com>
- Cc: gtkmm-list gnome org
- Subject: Re: Using a TreeStore with a ComboBox
- Date: Fri, 22 Jun 2007 10:31:50 -0500
On 6/22/07, Jef Driesen <jefdriesen hotmail com> wrote:
Jonathon Jongsma wrote:
> On 6/21/07, Jef Driesen <jefdriesen hotmail com> wrote:
>> Using a treestore model with a combobox creates a nice dropdown list
>> with submenus. Inside each submenu, the parent item is shown with a
>> separator below to separate it from its children. I want to know how I
>> can hide this parent node, so I can only select leaf nodes (e.g items
>> without children).
>>
>> The model contains places that can be are arranged by the user in an
>> arbitrary hierarchy, to group related places together (for instance by
>> continent and/or country). This is very similar how files (my places)
>> can be arranged into directories (my hierarchy). But when the user needs
>> to select a place with the combobox, it doesn't make sense to be able to
>> select an item that is not a place.
>
> You could probably accomplish this fairly easily with TreeModelFilter
> (http://gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1TreeModelFilter.html)
> wrapping your existing treestore. You'd just need to provide a
> function which checks whether a node has children or not, and pass
> that function to TreeModelFilter::set_visible_func(). Hope that
> helps.
I tried a TreeModelFilter like this:
Glib::RefPtr<Gtk::TreeStore> store = Gtk::TreeStore::create(m_columns);
Glib::RefPtr<Gtk::TreeModelFilter> filter = Gtk::TreeModelFilter::create
(store);
filter->set_visible_func (sigc::mem_fun(*this, &Example::on_model_visible
combo.set_model(filter);
bool
Example::on_model_visible (const Gtk:TreeModel::const_iterator& iter)
{
return iter->children().empty();
}
But it doesn't work. Exactly the same tree structure is shown if the
model is populated after the set_visible_func. Or the combobox is
completely empty, if the tree is populated before that.
does it work if you explicitly call TreeModelFilter::refilter() after
populating the model? I'm not sure whether this should be necessary,
but it might give you a clue as to what's not working...
--
jonner
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]