X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Fsrc%2Fgtkmm%2Flayertreestore.h;fp=synfig-studio%2Fsrc%2Fgtkmm%2Flayertreestore.h;h=5b33309f4e5d9fb67c74f8c1ae20ddc12d4d8369;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-studio/src/gtkmm/layertreestore.h b/synfig-studio/src/gtkmm/layertreestore.h new file mode 100644 index 0000000..5b33309 --- /dev/null +++ b/synfig-studio/src/gtkmm/layertreestore.h @@ -0,0 +1,226 @@ +/* === S Y N F I G ========================================================= */ +/*! \file layertreestore.h +** \brief Template Header +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** \endlegal +*/ +/* ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __SYNFIG_STUDIO_LAYERTREESTORE_H +#define __SYNFIG_STUDIO_LAYERTREESTORE_H + +/* === H E A D E R S ======================================================= */ + +#include +#include +#include +#include +#include + +/* === M A C R O S ========================================================= */ + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace studio { + +class LayerTreeStore : virtual public Gtk::TreeStore +{ + /* + -- ** -- P U B L I C T Y P E S --------------------------------------------- + */ + +public: + + class Model : public Gtk::TreeModel::ColumnRecord + { + public: + Gtk::TreeModelColumn > icon; + Gtk::TreeModelColumn label; + Gtk::TreeModelColumn name; + Gtk::TreeModelColumn id; + + Gtk::TreeModelColumn canvas; + + Gtk::TreeModelColumn tooltip; + + + Gtk::TreeModelColumn active; + Gtk::TreeModelColumn layer; + Gtk::TreeModelColumn contained_canvas; + + Gtk::TreeModelColumn children_lock; + + Gtk::TreeModelColumn z_depth; + Gtk::TreeModelColumn index; + + Model() + { + add(icon); + add(label); + add(name); + add(id); + add(canvas); + add(tooltip); + add(active); + add(layer); + add(contained_canvas); + add(z_depth); + add(index); + add(children_lock); + } + }; + + /* + -- ** -- P U B L I C D A T A ------------------------------------------------ + */ + +public: + + //! TreeModel for the layers + const Model model; + + /* + -- ** -- P R I V A T E D A T A --------------------------------------------- + */ + +private: + + bool queued; + + sigc::connection queue_connection; + + std::map subcanvas_changed_connections; + + etl::loose_handle canvas_interface_; + + Glib::RefPtr layer_icon; + + /* + -- ** -- P R I V A T E M E T H O D S --------------------------------------- + */ + +private: + + /* + -- ** -- P R O T E C T E D M E T H O D S ----------------------------------- + */ + +private: + virtual void set_value_impl (const Gtk::TreeModel::iterator& row, int column, const Glib::ValueBase& value); + virtual void get_value_vfunc (const Gtk::TreeModel::iterator& iter, int column, Glib::ValueBase& value)const; + + virtual bool row_draggable_vfunc (const TreeModel::Path& path)const; + virtual bool drag_data_get_vfunc (const TreeModel::Path& path, Gtk::SelectionData& selection_data)const; + virtual bool drag_data_delete_vfunc (const TreeModel::Path& path); + virtual bool drag_data_received_vfunc (const TreeModel::Path& dest, const Gtk::SelectionData& selection_data); + virtual bool row_drop_possible_vfunc (const TreeModel::Path& dest, const Gtk::SelectionData& selection_data)const; + + /* + -- ** -- S I G N A L T E R M I N A L S ------------------------------------- + */ + +private: + + bool on_layer_tree_event(GdkEvent *event); + + void on_layer_new_description(synfig::Layer::Handle handle,synfig::String desc); + + void on_layer_added(synfig::Layer::Handle handle); + + void on_layer_removed(synfig::Layer::Handle handle); + + void on_layer_inserted(synfig::Layer::Handle handle,int depth); + + void on_layer_moved(synfig::Layer::Handle handle,int depth, synfig::Canvas::Handle canvas); + + void on_layer_status_changed(synfig::Layer::Handle handle,bool); + + void on_layer_lowered(synfig::Layer::Handle handle); + + void on_layer_raised(synfig::Layer::Handle handle); + + void on_layer_param_changed(synfig::Layer::Handle handle,synfig::String param_name); + + //void on_value_node_added(synfig::ValueNode::Handle value_node); + + //void on_value_node_deleted(synfig::ValueNode::Handle value_node); + + //void on_value_node_changed(synfig::ValueNode::Handle value_node); + + //void on_value_node_replaced(synfig::ValueNode::Handle replaced_value_node,synfig::ValueNode::Handle new_value_node); + + bool find_layer_row_(const synfig::Layer::Handle &handle, synfig::Canvas::Handle canvas, Gtk::TreeModel::Children layers, Gtk::TreeModel::Children::iterator &iter, Gtk::TreeModel::Children::iterator &prev); + + bool find_canvas_row_(synfig::Canvas::Handle canvas, synfig::Canvas::Handle parent, Gtk::TreeModel::Children layers, Gtk::TreeModel::Children::iterator &iter); + + /* + -- ** -- P U B L I C M E T H O D S ----------------------------------------- + */ + +public: + + LayerTreeStore(etl::loose_handle canvas_interface_); + ~LayerTreeStore(); + + etl::loose_handle canvas_interface() { return canvas_interface_; } + etl::loose_handle canvas_interface()const { return canvas_interface_; } + etl::loose_handle get_canvas_interface()const { return canvas_interface_; } + + bool find_canvas_row(synfig::Canvas::Handle canvas, Gtk::TreeModel::Children::iterator &iter); + + bool find_layer_row(const synfig::Layer::Handle &handle, Gtk::TreeModel::Children::iterator &iter); + + bool find_prev_layer_row(const synfig::Layer::Handle &handle, Gtk::TreeModel::Children::iterator &iter); + + void queue_rebuild(); + + void rebuild(); + + void refresh(); + + void refresh_row(Gtk::TreeModel::Row &row); + + void set_row_layer(Gtk::TreeRow &row,synfig::Layer::Handle &handle); + + static int z_sorter(const Gtk::TreeModel::iterator &rhs,const Gtk::TreeModel::iterator &lhs); + static int index_sorter(const Gtk::TreeModel::iterator &rhs,const Gtk::TreeModel::iterator &lhs); + + //void set_row_param(Gtk::TreeRow &row,synfig::Layer::Handle &handle,const std::string& name, const std::string& local_name, const synfig::ValueBase &value, etl::handle value_node,synfig::ParamDesc *param_desc); + + //virtual void set_row(Gtk::TreeRow row,synfigapp::ValueDesc value_desc); + static bool search_func(const Glib::RefPtr&,int,const Glib::ustring&,const TreeModel::iterator&); + + /* + -- ** -- S T A T I C P U B L I C M E T H O D S --------------------------- + */ + +public: + + static Glib::RefPtr create(etl::loose_handle canvas_interface_); + + +}; // END of class LayerTreeStore + +}; // END of namespace studio + +/* === E N D =============================================================== */ + +#endif