/* === S Y N F I G ========================================================= */ /*! \file gtkmm/instance.h ** \brief writeme ** ** $Id$ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley ** Copyright (c) 2007 Chris Moore ** Copyright (c) 2012 Konstantin Dmitriev ** ** 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_INSTANCE_H #define __SYNFIG_STUDIO_INSTANCE_H /* === H E A D E R S ======================================================= */ #include #include #include #include #include #include #include "trees/historytreestore.h" #include /* === M A C R O S ========================================================= */ #define DEFAULT_FILENAME_PREFIX _("Synfig Animation ") // will be followed by a different number for each document /* === 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 Menu; class ActionGroup; }; namespace studio { class CanvasView; class Instance : public synfigapp::Instance { public: typedef std::list< etl::handle > CanvasViewList; enum Status { STATUS_OK, STATUS_ERROR, STATUS_CANCEL }; class CanvasTreeModel : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn > icon; Gtk::TreeModelColumn label; Gtk::TreeModelColumn name; Gtk::TreeModelColumn id; Gtk::TreeModelColumn canvas; Gtk::TreeModelColumn is_canvas; Gtk::TreeModelColumn value_node; Gtk::TreeModelColumn is_value_node; Gtk::TreeModelColumn value; Gtk::TreeModelColumn type; Gtk::TreeModelColumn link_id; Gtk::TreeModelColumn link_count; Gtk::TreeModelColumn is_editable; Gtk::TreeModelColumn value_desc; CanvasTreeModel() { add(value); add(name); add(label); add(icon); add(type); add(id); add(canvas); add(value_node); add(is_canvas); add(is_value_node); add(is_editable); add(value_desc); add(link_count); add(link_id); } } canvas_tree_model; private: sigc::signal signal_canvas_view_created_; sigc::signal signal_canvas_view_deleted_; sigc::signal signal_undo_redo_status_changed_; //! Tree containing the canvases -- used for the "canvas browser" Glib::RefPtr canvas_tree_store_; //! Tree containing the actions -- used for the "canvas browser" Glib::RefPtr history_tree_store_; //! Instance number int id_; //! Used to calculate instance ID static int instance_count_; //! List of canvas view windows CanvasViewList canvas_view_list_; bool undo_status_; bool redo_status_; void set_undo_status(bool x); void set_redo_status(bool x); protected: Instance(synfig::Canvas::Handle, etl::handle< synfig::FileContainerTemporary >); public: sigc::signal& signal_undo_redo_status_changed() { return signal_undo_redo_status_changed_; } ~Instance(); sigc::signal& signal_canvas_view_created() { return signal_canvas_view_created_; } sigc::signal& signal_canvas_view_deleted() { return signal_canvas_view_deleted_; } bool get_undo_status()const { return undo_status_; } bool get_redo_status()const { return redo_status_; } int get_visible_canvases()const; Glib::RefPtr canvas_tree_store() { return canvas_tree_store_; } Glib::RefPtr canvas_tree_store()const { return canvas_tree_store_; } Glib::RefPtr history_tree_store() { return history_tree_store_; } Glib::RefPtr history_tree_store()const { return history_tree_store_; } //! Returns the number of instances that are currently open in the program static int get_count() { return instance_count_; } //etl::handle get_canvas()const { return synfigapp::Instance::get_canvas(); } etl::handle find_canvas_view(etl::handle canvas); //! Sets the focus to a specific canvas void focus(etl::handle canvas); CanvasViewList & canvas_view_list() { return canvas_view_list_; } const CanvasViewList & canvas_view_list()const { return canvas_view_list_; } void run_plugin(std::string plugin_path); bool save_as(const synfig::String &filename); //! returns true if the instance has a real filename associated with it, rather than the made up "synfig animation 1" or some such bool has_real_filename(); //! Opens a "Save As" dialog, and then saves the composition to that file //! returns true if the save was successful bool dialog_save_as(); void open(); Status save(); void dialog_cvs_commit(); void dialog_cvs_add(); void dialog_cvs_update(); void dialog_cvs_revert(); //! Closes the instance of this composition void close(); void revert(); void update_all_titles(); void refresh_canvas_tree(); bool safe_revert(); bool safe_close(); void add_actions_to_menu(Gtk::Menu *menu, const synfigapp::Action::ParamList ¶m_list, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const; void add_actions_to_menu(Gtk::Menu *menu, const synfigapp::Action::ParamList ¶m_list1,const synfigapp::Action::ParamList ¶m_list2, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const; void add_actions_to_group(const Glib::RefPtr& action_group, synfig::String& ui_info, const synfigapp::Action::ParamList ¶m_list, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const; void process_action(synfig::String name, synfigapp::Action::ParamList param_list); void make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas, synfigapp::ValueDesc value_desc, float location=0.5f, bool bezier=false); void make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas,const std::list& value_desc_list, const synfigapp::ValueDesc &value_desc = synfigapp::ValueDesc()); static void edit_waypoint(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint); private: void insert_canvas(Gtk::TreeRow row,synfig::Canvas::Handle canvas); public: static etl::handle create(synfig::Canvas::Handle canvas, etl::handle< synfig::FileContainerTemporary > container); }; // END class Instance }; // END namespace studio /* === E N D =============================================================== */ #endif