1 /* === S Y N F I G ========================================================= */
2 /*! \file metadatatree.cpp
3 ** \brief Template File
4 **
5 ** $Id$
6 **
7 ** \legal
8 ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
9 ** Copyright (c) 2011 Carlos López
10 **
11 ** This package is free software; you can redistribute it and/or
12 ** modify it under the terms of the GNU General Public License as
13 ** published by the Free Software Foundation; either version 2 of
14 ** the License, or (at your option) any later version.
15 **
16 ** This package is distributed in the hope that it will be useful,
17 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 ** General Public License for more details.
20 ** \endlegal
21 */
22 /* ========================================================================= */
23
24 /* === H E A D E R S ======================================================= */
25
26 #ifdef USING_PCH
27 # include "pch.h"
28 #else
29 #ifdef HAVE_CONFIG_H
30 # include <config.h>
31 #endif
32
33 #include <synfig/general.h>
34
35 #include "trees/metadatatree.h"
36 #include <ETL/misc>
37
38 #include <gui/localization.h>
39
40 #endif
41
42 /* === U S I N G =========================================================== */
43
44 using namespace std;
45 using namespace etl;
46 using namespace synfig;
47 using namespace studio;
48
49 /* === M A C R O S ========================================================= */
50
51 /* === G L O B A L S ======================================================= */
52
53 /* === P R O C E D U R E S ================================================= */
54
55 /* === M E T H O D S ======================================================= */
56
MetaDataTree()57 MetaDataTree::MetaDataTree()
58 {
59 {
60 Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Key")) );
61
62 cell_renderer_key = Gtk::manage( new Gtk::CellRendererText() );
63 column->pack_start(*cell_renderer_key,true);
64 column->add_attribute(cell_renderer_key->property_text(), model.key);
65 cell_renderer_key->signal_edited().connect(sigc::mem_fun(*this,&studio::MetaDataTree::on_edited_key));
66 column->set_reorderable();
67 column->set_resizable();
68 column->set_clickable();
69 column->set_sort_column(model.key);
70 append_column(*column);
71 }
72 {
73 Gtk::TreeView::Column* column = Gtk::manage( new Gtk::TreeView::Column(_("Data")) );
74
75 cell_renderer_data = Gtk::manage( new Gtk::CellRendererText() );
76 column->pack_start(*cell_renderer_data,true);
77 column->add_attribute(cell_renderer_data->property_text(), model.data);
78 cell_renderer_data->signal_edited().connect(sigc::mem_fun(*this,&studio::MetaDataTree::on_edited_data));
79 column->set_reorderable();
80 column->set_resizable();
81 column->set_clickable(false);
82 append_column(*column);
83 }
84 set_rules_hint();
85 add_events(Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK);
86 }
87
~MetaDataTree()88 MetaDataTree::~MetaDataTree()
89 {
90 }
91
92 void
set_model(Glib::RefPtr<MetaDataTreeStore> metadata_tree_store)93 MetaDataTree::set_model(Glib::RefPtr<MetaDataTreeStore> metadata_tree_store)
94 {
95 metadata_tree_store_=metadata_tree_store;
96 Gtk::TreeView::set_model(metadata_tree_store);
97 }
98
99 void
set_editable(bool x)100 MetaDataTree::set_editable(bool x)
101 {
102 editable_=x;
103
104 if(editable_)
105 cell_renderer_data->property_editable()=true;
106 else
107 cell_renderer_data->property_editable()=false;
108 }
109
110 void
on_edited_key(const Glib::ustring & path_string,synfig::String key)111 MetaDataTree::on_edited_key(const Glib::ustring&path_string,synfig::String key)
112 {
113 Gtk::TreePath path(path_string);
114 const Gtk::TreeRow row(*(get_model()->get_iter(path)));
115 if(row) row[model.key]=key;
116 }
117
118 void
on_edited_data(const Glib::ustring & path_string,synfig::String data)119 MetaDataTree::on_edited_data(const Glib::ustring&path_string,synfig::String data)
120 {
121 Gtk::TreePath path(path_string);
122 const Gtk::TreeRow row(*(get_model()->get_iter(path)));
123 if(row)row[model.data]=data;
124 }
125
126