X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Fsrc%2Fgtkmm%2Flayertree.h;fp=synfig-studio%2Fsrc%2Fgtkmm%2Flayertree.h;h=97b2d27f993971c9265b607608635aa1abc83138;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-studio/src/gtkmm/layertree.h b/synfig-studio/src/gtkmm/layertree.h new file mode 100644 index 0000000..97b2d27 --- /dev/null +++ b/synfig-studio/src/gtkmm/layertree.h @@ -0,0 +1,261 @@ +/* === S Y N F I G ========================================================= */ +/*! \file layertree.h +** \brief Template Header +** +** $Id$ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2008 Chris Moore +** +** 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_LAYERTREE_H +#define __SYNFIG_STUDIO_LAYERTREE_H + +/* === H E A D E R S ======================================================= */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "layertreestore.h" +#include "layerparamtreestore.h" +#include + +#include "widget_value.h" + +/* === M A C R O S ========================================================= */ + +// comment this out if you don't want the params dialog to have a 'timetrack' column +// (alternatively, export SYNFIG_DISABLE_PARAMS_PANEL_TIMETRACK=1 in environment at runtime) +#define TIMETRACK_IN_PARAMS_PANEL + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace Gtk { class TreeModelSort; }; + +namespace studio { + +class CellRenderer_TimeTrack; +class CellRenderer_ValueBase; + +class LayerTree : public Gtk::Table +{ + /* + -- ** -- P U B L I C T Y P E S --------------------------------------------- + */ + +public: + + typedef studio::ColumnID ColumnID; +/* enum ColumnID + { + COLUMNID_NAME, + COLUMNID_VALUE, + COLUMNID_TIME_TRACK, + + COLUMNID_END //!< \internal + }; +*/ + typedef std::list LayerList; + + /* + -- ** -- P U B L I C D A T A ------------------------------------------------ + */ + +public: + + //LayerTreeStore::Model model; + + LayerTreeStore::Model layer_model; + LayerParamTreeStore::Model param_model; + + synfig::Layer::Handle last_top_selected_layer; + Gtk::TreePath last_top_selected_path; + + /* + -- ** -- P R I V A T E D A T A --------------------------------------------- + */ + +private: + + Gtk::Tooltips tooltips_; + Gtk::TreePath last_tooltip_path; + + Gtk::TreeView* layer_tree_view_; + + Gtk::TreeView* param_tree_view_; + + Gtk::HBox *hbox; + + Gtk::Adjustment layer_amount_adjustment_; + + Gtk::HScale *layer_amount_hscale; + + synfig::Layer::Handle quick_layer; + + Glib::RefPtr layer_tree_store_; + + Glib::RefPtr param_tree_store_; + + Glib::RefPtr sorted_layer_tree_store_; + +#ifdef TIMETRACK_IN_PARAMS_PANEL + CellRenderer_TimeTrack *cellrenderer_time_track; +#endif // TIMETRACK_IN_PARAMS_PANEL + + Gtk::TreeView::Column* column_time_track; + + Gtk::TreeView::Column* column_z_depth; + + CellRenderer_ValueBase *cellrenderer_value; + + sigc::signal signal_layer_toggle_; + + sigc::signal signal_edited_value_; + + sigc::signal signal_layer_user_click_; + + sigc::signal signal_param_user_click_; + + sigc::signal >,int> signal_waypoint_clicked_layertree_; + + bool disable_amount_changed_signal; + + Gtk::Button *button_raise; + Gtk::Button *button_lower; + Gtk::Button *button_duplicate; + Gtk::Button *button_encapsulate; + Gtk::Button *button_delete; + + Widget_ValueBase blend_method_widget; + + /* + -- ** -- P R I V A T E M E T H O D S --------------------------------------- + */ + +private: + + Gtk::Widget* create_layer_tree(); + Gtk::Widget* create_param_tree(); + + /* + -- ** -- S I G N A L T E R M I N A L S ------------------------------------- + */ + +private: + + void on_edited_value(const Glib::ustring&path_string,synfig::ValueBase value); + + void on_layer_renamed(const Glib::ustring&path_string,const Glib::ustring& value); + + void on_layer_toggle(const Glib::ustring& path_string); + + void on_waypoint_clicked_layertree(const etl::handle& node, const synfig::Time&, const synfig::Time&, int button); + + void on_waypoint_changed( synfig::Waypoint waypoint , synfig::ValueNode::Handle value_node); + + bool on_layer_tree_event(GdkEvent *event); + + bool on_param_tree_event(GdkEvent *event); + + void on_selection_changed(); + + void on_dirty_preview(); + + void on_amount_value_changed(); + + void on_blend_method_changed(); + +public: + + // void on_raise_pressed(); + + // void on_lower_pressed(); + + // void on_duplicate_pressed(); + + // void on_encapsulate_pressed(); + + // void on_delete_pressed(); + + /* + -- ** -- P U B L I C M E T H O D S ----------------------------------------- + */ + +public: + + //Gtk::TreeView* get_param_tree_view() { return param_tree_view_; } + //Gtk::TreeView& param_tree_view() { return *param_tree_view_; } + Gtk::HBox& get_hbox() { return *hbox; } + + Gtk::TreeView& get_layer_tree_view() { return *layer_tree_view_; } + Gtk::TreeView& get_param_tree_view() { return *param_tree_view_; } + + const Gtk::TreeView& get_layer_tree_view()const { return *layer_tree_view_; } + const Gtk::TreeView& get_param_tree_view()const { return *param_tree_view_; } + + Glib::RefPtr get_selection() { return get_layer_tree_view().get_selection(); } + Glib::SignalProxy1< bool,GdkEvent* > signal_event () { return get_layer_tree_view().signal_event(); } + + LayerTree(); + ~LayerTree(); + + void set_model(Glib::RefPtr layer_tree_store_); + + void set_time_adjustment(Gtk::Adjustment &adjustment); + + void set_show_timetrack(bool x=true); + + //! Signal called when layer is toggled. + sigc::signal& signal_layer_toggle() { return signal_layer_toggle_; } + + //! Signal called with a value has been edited. + sigc::signal& signal_edited_value() { return signal_edited_value_; } + + sigc::signal& signal_layer_user_click() { return signal_layer_user_click_; } + + sigc::signal& signal_param_user_click() { return signal_param_user_click_; } + + sigc::signal >,int>& signal_waypoint_clicked_layertree() { return signal_waypoint_clicked_layertree_; } + + etl::handle get_selection_manager() { return layer_tree_store_->canvas_interface()->get_selection_manager(); } + + void select_layer(synfig::Layer::Handle layer); + void select_layers(const LayerList& layer_list); + void select_all_children_layers(synfig::Layer::Handle layer); + void select_all_children(Gtk::TreeModel::Children::iterator iter); + LayerList get_selected_layers()const; + synfig::Layer::Handle get_selected_layer()const; + void clear_selected_layers(); + +}; // END of LayerTree + +}; // END of namespace studio + +/* === E N D =============================================================== */ + +#endif