/* === S Y N F I G ========================================================= */ /*! \file gtkmm/instance.h ** \brief writeme ** ** $Id: instance.h 336 2007-03-16 00:39:42Z dooglus $ ** ** \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_INSTANCE_H #define __SYNFIG_STUDIO_INSTANCE_H /* === H E A D E R S ======================================================= */ #include #include #include #include #include #include #include "historytreestore.h" #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 Gtk { class Menu; class ActionGroup; }; namespace studio { class CanvasView; class Instance : public synfigapp::Instance { public: typedef std::list< etl::handle > CanvasViewList; 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); static void _revert(Instance *); protected: Instance(synfig::Canvas::Handle); 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_; } bool save_as(const synfig::String &filename)const; bool save_as(const synfig::String &filename); //! Opens a "Save As" dialog, and then saves the composition to that file void dialog_save_as(); bool 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); void make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas,const std::list& value_desc_list); 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); }; // END class Instance }; // END namespace studio /* === E N D =============================================================== */ #endif