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