Re: Using a TreeStore with a ComboBox



Jonathon Jongsma wrote:
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...

After refilter, the combobox contains no items anymore, just like when I populate the model before using set_visible_func. This is what I expected, because in my model all toplevel nodes have children. Of course this is not the solution I need.




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]