Re: [glade--]Treeview no glademm

Christof Petig <[email protected]> Thu, 15 Jan 2004 12:36:11 +0100
Newsgroups gmane.comp.gnome.glademm
Organization Adolf Petig GmbH & Co. KG
Message-ID <[email protected]>
PhYx schrieb:
> thx you very much but dont lose your time to do this exemple, i have 
> finally decided to use gtkmm without glade. I really need the treeview 
> and i am part of a member of 4 people so we have to do a sound table mix 
> for school, its our projet.

I put together a _minimal_ (only glademm file created and 30 lines of 
code added to window1.hh and window1.cc) example of a treeview with 
glade(mm).

It should give you (and other people) an idea of how much work has to be 
done to get treeview support with current glade-2.

> btw i ll need to use drag and drop to take a file from a treeview in a 
> window and to drop it in another window, if you have any advice about 
> doing that in gtkmm thx to tell me =)

Look into my example (running). You can drop lines into _existing_ 
positions but you cannot move a line to become a child of another 
(unless it already has  children). This is a problem of gtk2.2 (fixed in 
2.3). If this is important for you should raise your voice on gtk-devel, see
http://lists.gnome.org/archives/gtk-devel-list/2004-January/msg00061.html

> i saw there is a signal drag and drop in treeview but it works only to 
> drag and drop in the treeview right ?

You can drag and drop between treeviews, given that you implement it 
yourself. You have to derive from the Model (!) [TreeStore] and override 
the dnd vfuncs:

class MyTreeStore : public Gtk::TreeStore
{       MyTreeStore(const Gtk::TreeModelColumnRecord& cols)
                 : Gtk::TreeStore(cols) {}
         virtual bool drag_data_get_vfunc(const Gtk::TreeModel::Path& 
path, GtkSelectionData* selection_data);
         virtual bool drag_data_delete_vfunc(const Gtk::TreeModel::Path& 
path);
         virtual bool drag_data_received_vfunc(const TreeModel::Path& 
dest, GtkSelectionData* selection_data);
public:
         static Glib::RefPtr<MyTreeStore> MyTreeStore::create(const 
Gtk::TreeModelColumnRecord& cols)
         {  MyTreeStore *x=new MyTreeStore(cols);
            x->reference();
            return Glib::RefPtr<MyTreeStore>(x);
         }
};

I experimented with drag_data_received beeing like:

    GtkTreeModel *model=0;
    GtkTreePath *path=0;
    if (!gtk_tree_get_row_drag_data(selection_data,&model,&path))
       return false;
    Glib::RefPtr<Gtk::TreeModel> source=Glib::wrap(model);
    Gtk::TreeIter 
sourceit=source->get_iter(Gtk::TreeModel::Path(path,false)),
         destit=get_iter(dest);

that should give you an initial idea about what to do.

Feel free to ask more
    Christof
minimal_tv_example.tgz (application/x-gtar, 3.4 KB) - not displayed