my log
[synfig.git] / synfig-studio / trunk / src / gtkmm / dock_metadata.cpp
1 /* === S Y N F I G ========================================================= */
2 /*!     \file dock_metadata.cpp
3 **      \brief Template File
4 **
5 **      $Id: dock_metadata.cpp,v 1.1.1.1 2005/01/07 03:34:36 darco Exp $
6 **
7 **      \legal
8 **      Copyright (c) 2002 Robert B. Quattlebaum Jr.
9 **
10 **      This software and associated documentation
11 **      are CONFIDENTIAL and PROPRIETARY property of
12 **      the above-mentioned copyright holder.
13 **
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.
18 **      \endlegal
19 */
20 /* ========================================================================= */
21
22 /* === H E A D E R S ======================================================= */
23
24 #ifdef USING_PCH
25 #       include "pch.h"
26 #else
27 #ifdef HAVE_CONFIG_H
28 #       include <config.h>
29 #endif
30
31 #include "dock_metadata.h"
32 #include "app.h"
33
34 #include <gtkmm/scrolledwindow.h>
35 #include <cassert>
36 #include "instance.h"
37 #include <sigc++/signal.h>
38 #include <sigc++/hide.h>
39 #include <sigc++/slot.h>
40 #include "metadatatreestore.h"
41 #include "canvasview.h"
42
43 #endif
44
45 /* === U S I N G =========================================================== */
46
47 using namespace std;
48 using namespace etl;
49 using namespace synfig;
50 using namespace studio;
51
52 /* === M A C R O S ========================================================= */
53
54 /* === G L O B A L S ======================================================= */
55
56 /* === P R O C E D U R E S ================================================= */
57
58 /* === M E T H O D S ======================================================= */
59
60 Dock_MetaData::Dock_MetaData():
61         Dock_CanvasSpecific("meta_data",_("Canvas MetaData"),Gtk::StockID("synfig-meta_data")),
62         tree_view(manage(new Gtk::TreeView()))
63 {
64         MetaDataTreeStore::Model model;
65         
66         tree_view->append_column(_("Key"),model.key);
67         tree_view->append_column_editable(_("Data"),model.data);
68         tree_view->set_rules_hint();
69         
70         Gtk::ScrolledWindow *scrolledwindow = manage(new class Gtk::ScrolledWindow());
71         scrolledwindow->set_flags(Gtk::CAN_FOCUS);
72         scrolledwindow->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
73         scrolledwindow->add(*tree_view);
74         scrolledwindow->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
75         scrolledwindow->show();
76
77         add(*scrolledwindow);
78
79         add_button(
80                 Gtk::StockID("gtk-add"),
81                 _("Add new MetaData entry")
82         )->signal_clicked().connect(
83                 sigc::mem_fun(
84                         *this,
85                         &Dock_MetaData::on_add_pressed
86                 )
87         );
88
89         add_button(
90                 Gtk::StockID("gtk-delete"),
91                 _("Remove selected MetaData entry")
92         )->signal_clicked().connect(
93                 sigc::mem_fun(
94                         *this,
95                         &Dock_MetaData::on_delete_pressed
96                 )
97         );
98 }
99
100 Dock_MetaData::~Dock_MetaData()
101 {
102 }
103
104 void
105 Dock_MetaData::init_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
106 {
107         canvas_view->set_tree_model(get_name(),MetaDataTreeStore::create(canvas_view->canvas_interface()));
108 }
109
110 void
111 Dock_MetaData::changed_canvas_view_vfunc(etl::loose_handle<CanvasView> canvas_view)
112 {
113         if(canvas_view)
114         {
115                 tree_view->set_model(canvas_view->get_tree_model(get_name()));
116                 tree_view->show();
117         }
118         else
119         {
120                 tree_view->set_model(Glib::RefPtr<Gtk::TreeModel>());
121                 tree_view->hide();
122         }
123 }
124
125 void
126 Dock_MetaData::on_add_pressed()
127 {
128         if(get_canvas_interface())
129         {
130                 synfig::String key;
131                 if(App::dialog_entry("New MetaData Entry", "Please enter the name of the key",key) && !key.empty())
132                 {
133                         get_canvas_interface()->set_meta_data(key," ");
134                 }
135         }
136 }
137
138 void
139 Dock_MetaData::on_delete_pressed()
140 {
141 }