Install ardour as a binary, a script and a set of shared
[ardour.git] / libs / gtkmm2 / gtk / gtkmm / treemodel.h
1 // -*- c++ -*-
2 // Generated by gtkmmproc -- DO NOT MODIFY!
3 #ifndef _GTKMM_TREEMODEL_H
4 #define _GTKMM_TREEMODEL_H
5
6 #include <glibmm.h>
7
8 /* $Id$ */
9
10 /* Copyright (C) 1998-2002 The gtkmm Development Team
11  *
12  * This library is free software; you can redistribute it and/or
13  * modify it under the terms of the GNU Library General Public
14  * License as published by the Free Software Foundation; either
15  * version 2 of the License, or (at your option) any later version.
16  *
17  * This library is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20  * Library General Public License for more details.
21  *
22  * You should have received a copy of the GNU Library General Public
23  * License along with this library; if not, write to the Free
24  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25  */
26
27 #include <gtk/gtktreemodel.h>
28 #include <glibmm/interface.h>
29 #include <gtkmm/treeiter.h>
30 #include <gtkmm/treemodelcolumn.h>
31
32
33 #ifndef DOXYGEN_SHOULD_SKIP_THIS
34 typedef struct _GtkTreeModel GtkTreeModel;
35 typedef struct _GtkTreeModelClass GtkTreeModelClass;
36 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
37
38
39 namespace Gtk
40 { class TreeModel_Class; } // namespace Gtk
41 namespace Gtk
42 {
43
44 class TreeModelSort;
45 class TreePath;
46 class TreeRowReference;
47
48
49 /** @addtogroup gtkmmEnums Enums and Flags */
50
51 /**
52  * @ingroup gtkmmEnums
53  * @par Bitwise operators:
54  * <tt>%TreeModelFlags operator|(TreeModelFlags, TreeModelFlags)</tt><br>
55  * <tt>%TreeModelFlags operator&(TreeModelFlags, TreeModelFlags)</tt><br>
56  * <tt>%TreeModelFlags operator^(TreeModelFlags, TreeModelFlags)</tt><br>
57  * <tt>%TreeModelFlags operator~(TreeModelFlags)</tt><br>
58  * <tt>%TreeModelFlags& operator|=(TreeModelFlags&, TreeModelFlags)</tt><br>
59  * <tt>%TreeModelFlags& operator&=(TreeModelFlags&, TreeModelFlags)</tt><br>
60  * <tt>%TreeModelFlags& operator^=(TreeModelFlags&, TreeModelFlags)</tt><br>
61  */
62 enum TreeModelFlags
63 {
64   TREE_MODEL_ITERS_PERSIST = 1 << 0,
65   TREE_MODEL_LIST_ONLY = 1 << 1
66 };
67
68 /** @ingroup gtkmmEnums */
69 inline TreeModelFlags operator|(TreeModelFlags lhs, TreeModelFlags rhs)
70   { return static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs)); }
71
72 /** @ingroup gtkmmEnums */
73 inline TreeModelFlags operator&(TreeModelFlags lhs, TreeModelFlags rhs)
74   { return static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs)); }
75
76 /** @ingroup gtkmmEnums */
77 inline TreeModelFlags operator^(TreeModelFlags lhs, TreeModelFlags rhs)
78   { return static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs)); }
79
80 /** @ingroup gtkmmEnums */
81 inline TreeModelFlags operator~(TreeModelFlags flags)
82   { return static_cast<TreeModelFlags>(~static_cast<unsigned>(flags)); }
83
84 /** @ingroup gtkmmEnums */
85 inline TreeModelFlags& operator|=(TreeModelFlags& lhs, TreeModelFlags rhs)
86   { return (lhs = static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs))); }
87
88 /** @ingroup gtkmmEnums */
89 inline TreeModelFlags& operator&=(TreeModelFlags& lhs, TreeModelFlags rhs)
90   { return (lhs = static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs))); }
91
92 /** @ingroup gtkmmEnums */
93 inline TreeModelFlags& operator^=(TreeModelFlags& lhs, TreeModelFlags rhs)
94   { return (lhs = static_cast<TreeModelFlags>(static_cast<unsigned>(lhs) ^ static_cast<unsigned>(rhs))); }
95
96 } // namespace Gtk
97
98
99 #ifndef DOXYGEN_SHOULD_SKIP_THIS
100 namespace Glib
101 {
102
103 template <>
104 class Value<Gtk::TreeModelFlags> : public Glib::Value_Flags<Gtk::TreeModelFlags>
105 {
106 public:
107   static GType value_type() G_GNUC_CONST;
108 };
109
110 } // namespace Glib
111 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
112
113
114 namespace Gtk
115 {
116
117
118 //TODO: Remove any mention of null arguments from the method documentation, by adding overrides in gtk_docs_override.xml.
119 /** This class defines a generic tree interface for use by the Gtk::TreeView widget.
120  * @ingroup TreeView
121  *
122  * It is is designed to be usable with any appropriate data structure. The
123  * programmer just has to implement this interface on their own data type for
124  * it to be viewable by a Gtk::TreeView widget.
125  *
126  * The model is represented as a hierarchical tree of strongly-typed, columned
127  * data. In other words, the model can be seen as a tree where every node has
128  * different values depending on which column is being queried.  The type of
129  * data found in a column is determined by TreeModel::Column<> templates.
130  * The types are homogeneous per column across all nodes. It is important to note that this
131  * interface only provides a way of examining a model and observing changes.
132  * The implementation of each individual model decides how and if changes are
133  * made.
134  *
135  * In order to make life simpler for programmers who do not need to write their
136  * own specialized model, two generic models are provided - the Gtk::TreeStore
137  * and the Gtk::ListStore. To use these, the developer simply pushes data into
138  * these models as necessary. These models provide the data structure as well
139  * as all appropriate tree interfaces. As a result, implementing drag and drop,
140  * sorting, and storing data is trivial. For the vast majority of trees and
141  * lists, these two models are sufficient.
142  *
143  * Models are accessed on a node/column level of granularity. One can query for
144  * the value of a model at a certain node and a certain column on that node.
145  * There are two structures used to reference a particular node in a model.
146  * They are the @link Gtk::TreePath Path@endlink and the iterator. Most of the interface consists of
147  * operations on an @link Gtk::TreeIter iterator@endlink.
148  *
149  * A @link Gtk::TreePath Gtk::TreeModel::Path@endlink is essentially a potential node. It is a location on a model that may
150  * or may not actually correspond to a node on a specific model.
151  *
152  * By contrast, an @link Gtk::TreeIter Gtk::TreeModel::iterator@endlink  is a reference to a specific node on a specific
153  * model. One can convert a path to an @link Gtk::TreeIter iterator@endlink by calling Gtk::TreeModel::get_iter().
154  * These iterators are the primary way of accessing a model and are similar to the iterators
155  * used by Gtk::TextBuffer. The model interface defines a set of operations
156  * using them for navigating the model.
157  *
158  * The @link Gtk::TreeRowReference RowReference@endlink is also useful, because it remains
159  * valid as long as there is an existing row pointed to by it's path. You can convert between RowReferences and iterators and @link Gtk::TreePath Path@endlink s.
160  */
161
162 class TreeModel : public Glib::Interface
163 {
164   
165 #ifndef DOXYGEN_SHOULD_SKIP_THIS
166
167 public:
168   typedef TreeModel CppObjectType;
169   typedef TreeModel_Class CppClassType;
170   typedef GtkTreeModel BaseObjectType;
171   typedef GtkTreeModelIface BaseClassType;
172
173 private:
174   friend class TreeModel_Class;
175   static CppClassType treemodel_class_;
176
177   // noncopyable
178   TreeModel(const TreeModel&);
179   TreeModel& operator=(const TreeModel&);
180
181 protected:
182   TreeModel(); // you must derive from this class
183   explicit TreeModel(GtkTreeModel* castitem);
184
185 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
186
187 public:
188   virtual ~TreeModel();
189
190   static void add_interface(GType gtype_implementer);
191
192 #ifndef DOXYGEN_SHOULD_SKIP_THIS
193   static GType get_type()      G_GNUC_CONST;
194   static GType get_base_type() G_GNUC_CONST;
195 #endif
196
197   ///Provides access to the underlying C GObject.
198   GtkTreeModel*       gobj()       { return reinterpret_cast<GtkTreeModel*>(gobject_); }
199
200   ///Provides access to the underlying C GObject.  
201   const GtkTreeModel* gobj() const { return reinterpret_cast<GtkTreeModel*>(gobject_); }
202
203 private:
204
205   
206 public:
207   typedef TreeModelColumnRecord ColumnRecord;
208
209   typedef TreeNodeChildren Children;
210   typedef Children::iterator iterator;
211   typedef Children::reverse_iterator reverse_iterator;
212   typedef Children::const_iterator const_iterator;
213   typedef Children::const_reverse_iterator const_reverse_iterator;
214   
215   typedef TreeRow Row;
216   typedef TreePath Path;
217   typedef TreeRowReference RowReference;
218   
219
220   //These are part of GtkTreeModelFilter or GtkTreeModelSort, not GtkTreeModel:
221   
222
223   /** Returns a valid iterator pointing to @a path.
224    *
225    * @param path The @link Gtk::TreePath Gtk::TreeModel::Path@endlink.
226    * @result A valid iterator pointing to the path, or an invalid iterator if that is not possible.
227    */
228   iterator get_iter(const Path& path);
229   //TODO: Add const_iterator get_iter(const Path& path) const;
230   //Implement a const_iterator?
231
232   /** Returns a valid iterator pointing to @a path_string.
233    *
234    * @param path_string The path, as a string representation.
235    * @result A valid iterator pointing to the path, or an invalid iterator if that is not possible.
236    */
237   iterator get_iter(const Glib::ustring& path_string);
238   //TODO: Implement a const_iterator? const_iterator get_iter(const Glib::ustring& path_string) const;
239
240   ///This returns an STL-like container API, for iterating over the rows.
241   Children children();
242
243   //TODO: Return a real TreeNodeChildren (a container of const_iterators), when we have a real const_iterator.
244   ///This returns an STL-like container API, for iterating over the rows.
245   Children children() const;
246
247   
248   /** For example,
249    * void on_foreach(const Gtk::TreeModel::iterator& iter);
250    *
251    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
252    */
253   typedef sigc::slot<bool, const TreeModel::iterator&> SlotForeachIter;
254
255   /** Calls a callback slot on each node in the model in a depth-first fashion.
256    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
257    *
258    * @param slot The function to call for each selected node.
259    */
260   void foreach_iter(const SlotForeachIter& slot);
261
262   /** For example,
263    * void on_foreach(const Gtk::TreeModel::Path& path);
264    *
265    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
266    */
267   typedef sigc::slot<bool, const TreeModel::Path&> SlotForeachPath;
268
269   /** Calls a callback slot on each node in the model in a depth-first fashion.
270    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
271    *
272    * @param slot The function to call for each selected node.
273    */
274   void foreach_path(const SlotForeachPath& slot);
275
276   /** For example,
277    * void on_foreach(const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter);
278    *
279    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
280    */
281   typedef sigc::slot<bool, const TreeModel::Path&, const TreeModel::iterator&> SlotForeachPathAndIter;
282
283   /** Calls a callback slot on each node in the model in a depth-first fashion.
284    * If the callback function returns true, then the tree ceases to be walked, and foreach() returns.
285    *
286    * @param slot The function to call for each selected node.
287    */
288   void foreach(const SlotForeachPathAndIter& slot);
289
290   
291   /** Returns a set of flags supported by this interface.  The flags are a bitwise
292    * combination of Gtk::TreeModelFlags.  The flags supported should not change
293    * during the lifecycle of the tree_model.
294    * @return The flags supported by this interface.
295    */
296   TreeModelFlags get_flags() const;
297   
298   /** Returns the number of columns supported by @a tree_model .
299    * @return The number of columns.
300    */
301   int get_n_columns() const;
302   
303   /** Returns the type of the column.
304    * @param index The column index.
305    * @return The type of the column.
306    */
307   GType get_column_type(int index) const;
308   //TODO: A C++-type version of get_column_type()?
309   
310   
311   /** Returns a Gtk::TreePath referenced by @a iter .
312    * @param iter The Gtk::TreeIter.
313    * @return A Gtk::TreePath.
314    */
315   TreeModel::Path get_path(const iterator& iter) const;
316
317   
318   /** Emits the "row_changed" signal on @a tree_model .
319    * @param path A Gtk::TreePath pointing to the changed row.
320    * @param iter A valid Gtk::TreeIter pointing to the changed row.
321    */
322   void row_changed(const Path& path, const iterator& iter);
323   
324   /** Emits the "row_inserted" signal on @a tree_model 
325    * @param path A Gtk::TreePath pointing to the inserted row.
326    * @param iter A valid Gtk::TreeIter pointing to the inserted row.
327    */
328   void row_inserted(const Path& path, const iterator& iter);
329   
330   /** Emits the "row_has_child_toggled" signal on @a tree_model .  This should be
331    * called by models after the child state of a node changes.
332    * @param path A Gtk::TreePath pointing to the changed row.
333    * @param iter A valid Gtk::TreeIter pointing to the changed row.
334    */
335   void row_has_child_toggled(const Path& path, const iterator& iter);
336   
337   /** Emits the "row_deleted" signal on @a tree_model .  This should be called by
338    * models after a row has been removed.  The location pointed to by @a path  should
339    * be the location that the row previously was at.  It may not be a valid
340    * location anymore.
341    * @param path A Gtk::TreePath pointing to the previous location of the deleted row.
342    */
343   void row_deleted(const Path& path);
344
345   void rows_reordered(const Path& path, const iterator& iter, const Glib::ArrayHandle<int>& new_order);
346   
347   
348   /** Emits the "rows_reordered" signal on @a tree_model .  This should be called by
349    * models when their rows have been reordered.
350    * @param path A Gtk::TreePath pointing to the tree node whose children have been reordered.
351    * @param iter A valid Gtk::TreeIter pointing to the node whose children have been reordered.
352    * @param new_order An array of integers mapping the current position of each child
353    * to its old position before the re-ordering,
354    * i.e. @a new_order <tt>[newpos] = oldpos</tt>.
355    */
356   void rows_reordered(const Path& path, const iterator& iter, int* new_order);
357
358   
359   /** Generates a string representation of the iter. This string is a ':'
360    * separated list of numbers. For example, "4:10:0:3" would be an
361    * acceptable return value for this string.
362    * @param iter An Gtk::TreeIter.
363    * @return The string.
364    * 
365    * Since: 2.2.
366    */
367   Glib::ustring get_string(const iterator& iter) const;
368
369  
370   Glib::SignalProxy2< void,const TreeModel::Path&,const TreeModel::iterator& > signal_row_changed();
371
372   
373   Glib::SignalProxy2< void,const TreeModel::Path&,const TreeModel::iterator& > signal_row_inserted();
374
375   
376   Glib::SignalProxy2< void,const TreeModel::Path&,const TreeModel::iterator& > signal_row_has_child_toggled();
377
378   
379   Glib::SignalProxy1< void,const TreeModel::Path& > signal_row_deleted();
380
381   
382   Glib::SignalProxy3< void,const TreeModel::Path&,const TreeModel::iterator&,int* > signal_rows_reordered();
383
384
385 protected:
386     virtual TreeModelFlags get_flags_vfunc() const;
387     virtual int get_n_columns_vfunc() const;
388     virtual GType get_column_type_vfunc(int index) const;
389
390   //These are only for deriving new TreeModels, which isn't very common or easy:
391
392   /** Override and implement this in a derived TreeModel class.
393    * Sets @a iter_next to refer to the node following @a iter it at the current level.
394    * If there is no next iter, false is returned and iter_next is set to be invalid.
395    *
396    * @param iter An iterator.
397    * @param iter_next An iterator that will be set to refer to the next node, or will be set as invalid.
398    * @result true if the operation was possible.
399    */
400   virtual bool iter_next_vfunc(const iterator& iter, iterator& iter_next) const;
401
402   /** Override and implement this in a derived TreeModel class.
403    * Sets @a iter to a valid iterator pointing to @a path
404    *
405    * @param path An path to a node.
406    * @param iter An iterator that will be set to refer to a node to the path, or will be set as invalid.
407    * @result true if the operation was possible.
408    */
409   virtual bool get_iter_vfunc(const Path& path, iterator& iter) const;
410
411   /** Override and implement this in a derived TreeModel class.
412    * Sets @a iter to refer to the first child of @a parent. If @a parent has no children,
413    * false is returned and @a iter is set to be invalid.
414    *
415    * @param parent An iterator.
416    * @param iter An iterator that will be set to refer to the firt child node, or will be set as invalid.
417    * @result true if the operation was possible.
418    */
419   virtual bool iter_children_vfunc(const iterator& parent, iterator& iter) const;
420   
421   /** Override and implement this in a derived TreeModel class.
422    * Sets @a iter to be the parent of @a child. If @a child is at the toplevel, and
423    * doesn't have a parent, then @a iter is set to an invalid iterator and false
424    * is returned.
425    *
426    * @param child An iterator.
427    * @param iter An iterator that will be set to refer to the parent node, or will be set as invalid.
428    * @result true if the operation was possible.
429    */
430   virtual bool iter_parent_vfunc(const iterator& child, iterator& iter) const;
431
432   /** Override and implement this in a derived TreeModel class.
433    * Sets @a iter to be the child of @a parent using the given index.  The first
434    * index is 0.  If @a n is too big, or @a parent has no children, @a iter is set
435    * to an invalid iterator and false is returned.
436    * See also iter_nth_root_child_vfunc()
437    *
438    * @param parent An iterator.
439    * @param n The index of the child node to which @a iter should be set.
440    * @param iter An iterator that will be set to refer to the nth node, or will be set as invalid.
441    * @result true if the operation was possible.
442    */
443   virtual bool iter_nth_child_vfunc(const iterator& parent, int n, iterator& iter) const;
444
445    /** Override and implement this in a derived TreeModel class.
446    * Sets @a iter to be the child of at the root level using the given index.  The first
447    * index is 0.  If @a n is too big, or if there are no children, @a iter is set
448    * to an invalid iterator and false is returned.
449    * See also iter_nth_child_vfunc().
450    *
451    * @param n The index of the child node to which @a iter should be set.
452    * @param iter An iterator that will be set to refer to the nth node, or will be set as invalid.
453    * @result true if the operation was possible.
454    */
455   virtual bool iter_nth_root_child_vfunc(int n, iterator& iter) const;
456
457   
458   /** Override and implement this in a derived TreeModel class.
459    * Returns true if @a iter has children, false otherwise.
460    *
461    * @param iter The iterator to test for children.
462    * @result true if @a iter has children.
463    */
464     virtual bool iter_has_child_vfunc(const iterator& iter) const;
465
466   /** Override and implement this in a derived TreeModel class.
467    * Returns the number of children that @a iter has.
468    * See also iter_n_root_children_vfunc().  
469    *
470    * @param iter The iterator to test for children.
471    * @result The number of children of @a iter.
472    */
473   virtual int iter_n_children_vfunc(const iterator& iter) const;
474
475   /** Override and implement this in a derived TreeModel class.
476    * Returns the number of toplevel nodes.
477    * See also iter_n_children().
478    *
479    * @result The number of children at the root level.
480    */
481   virtual int iter_n_root_children_vfunc() const;
482
483   /** Override and implement this in a derived TreeModel class.
484    * Lets the tree ref the node.  This is an optional method for models to
485    * implement.  To be more specific, models may ignore this call as it exists
486    * primarily for performance reasons.
487    *
488    * This function is primarily meant as a way for views to let caching model know
489    * when nodes are being displayed (and hence, whether or not to cache that
490    * node.)  For example, a file-system based model would not want to keep the
491    * entire file-hierarchy in memory, just the sections that are currently being
492    * displayed by every current view.
493    *
494    * A model should be expected to be able to get an iter independent of its
495    * reffed state.
496    *
497    * @param iter the iterator.
498    */
499     virtual void ref_node_vfunc(const iterator& iter) const;
500
501   /** Override and implement this in a derived TreeModel class.
502    * Lets the tree unref the node.  This is an optional method for models to
503    * implement.  To be more specific, models may ignore this call as it exists
504    * primarily for performance reasons.
505    *
506    * For more information on what this means, see unref_node_vfunc().
507    * Please note that nodes that are deleted are not unreffed.
508    *
509    * @param iter the iterator.
510    */
511     virtual void unref_node_vfunc(const iterator& iter) const;
512
513   /** Override and implement this in a derived TreeModel class.
514    * Returns a Path referenced by @a iter.
515    *
516    * @param iter The iterator.
517    * @result The path.
518    */
519  
520
521     virtual TreeModel::Path get_path_vfunc(const iterator& iter) const;
522
523   /** Override and implement this in a derived TreeModel class.
524    * Initializes and sets @a value to that at @a column.
525    *
526    * @param iter The iterator.
527    * @param column The column to lookup the value at.
528    * @param value An empty Glib:Value to set.
529    */
530     virtual void get_value_vfunc(const iterator& iter, int column, Glib::ValueBase& value) const;
531
532   /** Override and implement this in a derived TreeModel class.
533    * @note This virtual method is <em>deprecated</em>.  If you want to check
534    * whether an iterator is valid, call TreeStore::iter_is_valid(),
535    * ListStore::iter_is_valid() or TreeModelSort::iter_is_valid() directly
536    * instead.  Because these methods are intended to be used only for debugging
537    * and/or testing purposes, it doesn't make sense to provide an abstract
538    * interface to them.
539    *
540    * @result true if the iterator is valid.
541    *
542    * @deprecated Use iter_is_valid() in the derived class.
543    */
544   virtual bool iter_is_valid(const iterator& iter) const;
545
546   //Called by TreeRow, which is a friend class:
547   //The comment about set_row_changed() in the documentation is based on my reading of the source of
548   //gtk_list_store_set_value() and gtk_tree_store_set_value().  
549   /** Override and implement this in a derived TreeModel class, so that Row::operator() and
550    * Row::set_value() work.
551    * You can probably just implement this by calling set_value_vfunc().
552    * Your implementation of set_value_impl() should also call set_row_changed() after changing the value.
553    */
554   virtual void set_value_impl(const iterator& row, int column, const Glib::ValueBase& value);
555
556   //This might not need to be virtual, but it's not a big deal. murrayc.
557   virtual void get_value_impl(const iterator& row, int column, Glib::ValueBase& value) const;
558
559   friend class Gtk::TreeModelSort;
560   friend class Gtk::TreeRow;
561   friend class Gtk::TreeIter;
562
563
564 public:
565
566 public:
567   //C++ methods used to invoke GTK+ virtual functions:
568
569 protected:
570   //GTK+ Virtual Functions (override these to change behaviour):
571
572   //Default Signal Handlers::
573   virtual void on_row_changed(const TreeModel::Path& path, const TreeModel::iterator& iter);
574   virtual void on_row_inserted(const TreeModel::Path& path, const TreeModel::iterator& iter);
575   virtual void on_row_has_child_toggled(const TreeModel::Path& path, const TreeModel::iterator& iter);
576   virtual void on_row_deleted(const TreeModel::Path& path);
577   virtual void on_rows_reordered(const TreeModel::Path& path, const TreeModel::iterator& iter, int* new_order);
578
579
580 };
581
582 } // namespace Gtk
583
584
585 namespace Glib
586 {
587   /** @relates Gtk::TreeModel
588    * @param object The C instance
589    * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
590    * @result A C++ instance that wraps this C instance.
591    */
592   Glib::RefPtr<Gtk::TreeModel> wrap(GtkTreeModel* object, bool take_copy = false);
593
594 } // namespace Glib
595
596 #endif /* _GTKMM_TREEMODEL_H */
597