1 /* === S I N F G =========================================================== */
2 /*! \file metadatatreestore.cpp
3 ** \brief Template File
5 ** $Id: metadatatreestore.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
8 ** Copyright (c) 2002 Robert B. Quattlebaum Jr.
10 ** This software and associated documentation
11 ** are CONFIDENTIAL and PROPRIETARY property of
12 ** the above-mentioned copyright holder.
14 ** You may not copy, print, publish, or in any
15 ** other way distribute this software without
16 ** a prior written agreement with
17 ** the copyright holder.
20 /* ========================================================================= */
22 /* === H E A D E R S ======================================================= */
31 #include "metadatatreestore.h"
32 #include <sinfgapp/canvasinterface.h>
36 /* === U S I N G =========================================================== */
40 using namespace sinfg;
41 using namespace studio;
43 /* === M A C R O S ========================================================= */
45 /* === G L O B A L S ======================================================= */
47 /* === P R O C E D U R E S ================================================= */
49 /* === M E T H O D S ======================================================= */
51 static MetaDataTreeStore::Model& ModelHack()
53 static MetaDataTreeStore::Model* model(0);
54 if(!model)model=new MetaDataTreeStore::Model;
58 MetaDataTreeStore::MetaDataTreeStore(etl::loose_handle<sinfgapp::CanvasInterface> canvas_interface_):
59 Gtk::TreeStore (ModelHack()),
60 canvas_interface_ (canvas_interface_)
63 get_canvas()->signal_meta_data_changed().connect(sigc::mem_fun(*this,&MetaDataTreeStore::meta_data_changed));
68 MetaDataTreeStore::~MetaDataTreeStore()
70 sinfg::info("MetaDataTreeStore::~MetaDataTreeStore(): Deleted");
74 Glib::RefPtr<MetaDataTreeStore>
75 MetaDataTreeStore::create(etl::loose_handle<sinfgapp::CanvasInterface> canvas_interface_)
77 return Glib::RefPtr<MetaDataTreeStore>(new MetaDataTreeStore(canvas_interface_));
81 MetaDataTreeStore::meta_data_changed(sinfg::String key)
87 MetaDataTreeStore::rebuild()
91 std::list<String> keys(get_canvas()->get_meta_data_keys());
93 for(;!keys.empty();keys.pop_front())
95 Gtk::TreeRow row(*append());
96 row[model.key]=keys.front();
101 MetaDataTreeStore::get_value_vfunc (const Gtk::TreeModel::iterator& iter, int column, Glib::ValueBase& value)const
103 if(column>=get_n_columns_vfunc())
105 g_warning("KeyframeTreeStore::set_value_impl: Bad column (%d)",column);
109 if(column==model.data.index())
111 sinfg::String key((Glib::ustring)(*iter)[model.key]);
112 g_value_init(value.gobj(),G_TYPE_STRING);
113 g_value_set_string(value.gobj(),get_canvas()->get_meta_data(key).c_str());
117 Gtk::TreeStore::get_value_vfunc(iter,column,value);
121 MetaDataTreeStore::set_value_impl(const Gtk::TreeModel::iterator& iter, int column, const Glib::ValueBase& value)
123 if(column>=get_n_columns_vfunc())
125 g_warning("KeyframeTreeStore::set_value_impl: Bad column (%d)",column);
129 if(!g_value_type_compatible(G_VALUE_TYPE(value.gobj()),get_column_type_vfunc(column)))
131 g_warning("KeyframeTreeStore::set_value_impl: Bad value type");
135 if(column==model.data.index())
137 Glib::Value<Glib::ustring> x;
138 g_value_init(x.gobj(),model.data.type());
139 g_value_copy(value.gobj(),x.gobj());
141 sinfg::String key((Glib::ustring)(*iter)[model.key]);
142 sinfg::String new_data(x.get());
144 get_canvas_interface()->set_meta_data(key,new_data);
147 Gtk::TreeStore::set_value_impl(iter,column, value);