/usr/include/gtkmm-3.0/gtkmm/treemodelcolumn.h is in libgtkmm-3.0-dev 3.22.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #ifndef _GTKMM_TREEMODELCOLUMN_H
#define _GTKMM_TREEMODELCOLUMN_H
/* Copyright (c) 2002 The gtkmm Development Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or(at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <gtkmmconfig.h>
#include <glibmm/value.h>
#include <glib-object.h>
#include <vector>
namespace Gtk
{
class TreeModelColumnBase;
/** Typedefed as TreeModel::ColumnRecord.
* Keeps a record of @link TreeModelColumn TreeModelColumns@endlink.
* @ingroup TreeView
* ColumnRecord objects are used to setup a new instance of a TreeModel
* (or rather, a new instance of an implementation of the model, such as Gtk::ListStore
* or Gtk::TreeStore). It is convenient to do that by deriving from
* TreeModel::ColumnRecord:
* @code
* class MyModelColumns : public Gtk::TreeModel::ColumnRecord
* {
* public:
* Gtk::TreeModelColumn<Glib::ustring> filename;
* Gtk::TreeModelColumn<Glib::ustring> description;
* Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > thumbnail;
*
* MyModelColumns() { add(filename); add(description); add(thumbnail); }
* };
* @endcode
*
* Whether or not you derive your own ColumnRecord, you need to add the
* @link TreeModelColumn TreeModelColumns@endlink to the ColumnRecord with the
* add() method.
*
* A ColumnRecord instance, such as an instance of @c MyModelColumns should then
* be passed to ListStore::create() or TreeStore::create().
* The @link TreeModelColumn TreeModelColumns@endlink, such as the members
* @c filename, @c description and @c thumbnail can then be used with Gtk::TreeRow::operator[]()
* to specify the column you're interested in.
*
* Neither TreeModel::ColumnRecord nor the
* @link TreeModelColumn TreeModelColumns@endlink contain any real data --
* they merely describe what C++ type is stored in which column
* of a TreeModel, and save you from having to repeat that type information in several places.
*
* Thus TreeModel::ColumnRecord can be made a singleton (as long as you make
* sure it's instantiated after Gtk::Main), even when creating multiple models
* from it.
*/
class TreeModelColumnRecord
{
public:
TreeModelColumnRecord();
virtual ~TreeModelColumnRecord() noexcept;
/** Adds a TreeModelColumn to this record.
* add() not only registers the @a column, but also assigns a column
* index to it. Once registered, the TreeModelColumn is final, and
* you're free to pass it around by value.
*/
void add(TreeModelColumnBase& column);
unsigned int size() const;
const GType* types() const;
private:
std::vector<GType> column_types_;
// noncopyable
TreeModelColumnRecord(const TreeModelColumnRecord&);
TreeModelColumnRecord& operator=(const TreeModelColumnRecord&);
};
/** Base class of TreeModelColumn templates.
* @ingroup TreeView
*/
class TreeModelColumnBase
{
public:
GType type() const { return type_; }
int index() const { return index_; }
protected:
explicit TreeModelColumnBase(GType g_type);
private:
GType type_;
int index_;
friend class Gtk::TreeModelColumnRecord;
};
/** @relates Gtk::TreeModelColumnBase */
inline bool operator==(const TreeModelColumnBase& lhs, const TreeModelColumnBase& rhs)
{ return (lhs.index() == rhs.index()); }
/** @relates Gtk::TreeModelColumnBase */
inline bool operator!=(const TreeModelColumnBase& lhs, const TreeModelColumnBase& rhs)
{ return (lhs.index() != rhs.index()); }
/** A Gtk::TreeModelColumn describes the C++ type of the data in a model column, and identifies that column in the model.
* See @link TreeModelColumnRecord Gtk::TreeModel::Columns@endlink for a usage example.
* @ingroup TreeView
*/
template <class T>
class TreeModelColumn : public TreeModelColumnBase
{
public:
typedef T ElementType;
typedef Glib::Value<T> ValueType;
TreeModelColumn() : TreeModelColumnBase(ValueType::value_type()) {}
};
} // namespace Gtk
#endif /* _GTKMM_TREEMODELCOLUMN_H */
|