synfig-studio  1.0.3
historytreestore.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
22 /* ========================================================================= */
23 
24 /* === S T A R T =========================================================== */
25 
26 #ifndef __SYNFIG_STUDIO_HISTORYTREESTORE_H
27 #define __SYNFIG_STUDIO_HISTORYTREESTORE_H
28 
29 /* === H E A D E R S ======================================================= */
30 
31 #include <gtkmm/treestore.h>
33 #include <gdkmm/pixbuf.h>
34 #include <synfigapp/action.h>
35 
36 /* === M A C R O S ========================================================= */
37 
38 /* === T Y P E D E F S ===================================================== */
39 
40 /* === C L A S S E S & S T R U C T S ======================================= */
41 
42 namespace studio {
43 
44 class Instance;
45 
46 class HistoryTreeStore : virtual public Gtk::TreeStore
47 {
48  /*
49  -- ** -- P U B L I C T Y P E S ---------------------------------------------
50  */
51 
52 public:
53 
54  class Model : public Gtk::TreeModel::ColumnRecord
55  {
56  public:
57  public:
58  Gtk::TreeModelColumn<etl::handle<synfigapp::Action::Undoable> > action;
59  Gtk::TreeModelColumn<Glib::ustring> name;
60  Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > icon;
61  Gtk::TreeModelColumn<bool> is_active;
62  Gtk::TreeModelColumn<bool> is_undo;
63  Gtk::TreeModelColumn<bool> is_redo;
64 
65  Gtk::TreeModelColumn<Glib::ustring> canvas_id;
66  Gtk::TreeModelColumn<synfig::Canvas::Handle> canvas;
67 
69  {
70  add(action);
71  add(name);
72  add(icon);
73  add(is_active);
74  add(is_undo);
75  add(is_redo);
76  add(canvas_id);
77  add(canvas);
78  }
79  };
80 
81  /*
82  -- ** -- P U B L I C D A T A ------------------------------------------------
83  */
84 
85 public:
86 
87  const Model model;
88 
89  /*
90  -- ** -- P R I V A T E D A T A ---------------------------------------------
91  */
92 
93 private:
94 
95  etl::loose_handle<studio::Instance> instance_;
96  Gtk::TreeIter curr_row;
97 
98  /*
99  -- ** -- P R I V A T E M E T H O D S ---------------------------------------
100  */
101 
102 private:
103 
104  /*
105  -- ** -- P R I V A T E D A T A ---------------------------------------------
106  */
107 
108 private:
109 
110  sigc::signal<void> signal_undo_tree_changed_;
111 
112  /*
113  -- ** -- S I G N A L I N T E R F A C E S -----------------------------------
114  */
115 
116 public:
117 
118  sigc::signal<void>& signal_undo_tree_changed() { return signal_undo_tree_changed_; }
119 
120  /*
121  -- ** -- S I G N A L T E R M I N A L S -------------------------------------
122  */
123 
124 private:
125 
126  void on_undo();
127 
128  void on_redo();
129 
130  void on_undo_stack_cleared();
131 
132  void on_redo_stack_cleared();
133 
134  void on_new_action(etl::handle<synfigapp::Action::Undoable> action);
135 
136  void on_action_status_changed(etl::handle<synfigapp::Action::Undoable> action);
137 
138  /*
139  -- ** -- P U B L I C M E T H O D S -----------------------------------------
140  */
141 
142 public:
143 
144  HistoryTreeStore(etl::loose_handle<studio::Instance> instance_);
146 
147  etl::loose_handle<studio::Instance> instance() { return instance_; }
148  etl::loose_handle<const studio::Instance> instance()const { return instance_; }
149 
150  void rebuild();
151 
152  void refresh() { rebuild(); }
153 
154  void insert_action(Gtk::TreeRow row,etl::handle<synfigapp::Action::Undoable> action, bool is_active=true, bool is_undo=true, bool is_redo=false);
155 
156  static bool search_func(const Glib::RefPtr<TreeModel>&,int,const Glib::ustring&,const TreeModel::iterator&);
157 
158  /*
159  -- ** -- P R O T E C T E D M E T H O D S -----------------------------------
160  */
161 
162 public:
163 
164  static Glib::RefPtr<HistoryTreeStore> create(etl::loose_handle<studio::Instance> instance);
165 
166 }; // END of class HistoryTreeStore
167 
168 }; // END of namespace studio
169 
170 /* === E N D =============================================================== */
171 
172 #endif