Blame synfig-studio/src/gui/instance.h

Carlos Lopez a09598
/* === S Y N F I G ========================================================= */
Carlos Lopez a09598
/*!	\file gtkmm/instance.h
Carlos Lopez a09598
**	\brief writeme
Carlos Lopez a09598
**
Carlos Lopez a09598
**	$Id$
Carlos Lopez a09598
**
Carlos Lopez a09598
**	\legal
Carlos Lopez a09598
**	Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
Carlos Lopez a09598
**	Copyright (c) 2007 Chris Moore
f084ff
**	Copyright (c) 2012 Konstantin Dmitriev
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is free software; you can redistribute it and/or
Carlos Lopez a09598
**	modify it under the terms of the GNU General Public License as
Carlos Lopez a09598
**	published by the Free Software Foundation; either version 2 of
Carlos Lopez a09598
**	the License, or (at your option) any later version.
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is distributed in the hope that it will be useful,
Carlos Lopez a09598
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
Carlos Lopez a09598
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Carlos Lopez a09598
**	General Public License for more details.
Carlos Lopez a09598
**	\endlegal
Carlos Lopez a09598
*/
Carlos Lopez a09598
/* ========================================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
/* === S T A R T =========================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
#ifndef __SYNFIG_STUDIO_INSTANCE_H
Carlos Lopez a09598
#define __SYNFIG_STUDIO_INSTANCE_H
Carlos Lopez a09598
Carlos Lopez a09598
/* === H E A D E R S ======================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
#include <etl handle=""></etl>
Carlos Lopez a09598
#include <gtkmm treeview.h=""></gtkmm>
Carlos Lopez a09598
#include <gtkmm treestore.h=""></gtkmm>
Carlos Lopez a09598
#include <synfigapp instance.h=""></synfigapp>
[d.j.a.y] Jerome Blanchi f8d04e
#include <sigc++ sigc++.h=""></sigc++>
Carlos Lopez a09598
#include <synfigapp value_desc.h=""></synfigapp>
Nikita Kitaev 27b5a5
#include "trees/historytreestore.h"
fd0f71
#include <synfig layer_switch.h="" layers=""></synfig>
Carlos Lopez a09598
#include <synfig canvas.h=""></synfig>
Carlos Lopez a09598
Carlos Lopez a09598
/* === M A C R O S ========================================================= */
Carlos Lopez a09598
#define DEFAULT_FILENAME_PREFIX _("Synfig Animation ") // will be followed by a different number for each document
Carlos Lopez a09598
Carlos Lopez a09598
/* === T Y P E D E F S ===================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
/* === C L A S S E S & S T R U C T S ======================================= */
Carlos Lopez a09598
Carlos Lopez a09598
namespace Gtk { class Menu; class ActionGroup; };
Carlos Lopez a09598
Carlos Lopez a09598
namespace studio {
Carlos Lopez a09598
Carlos Lopez a09598
class CanvasView;
Carlos Lopez a09598
Carlos Lopez a09598
Carlos Lopez a09598
class Instance : public synfigapp::Instance
Carlos Lopez a09598
{
Carlos Lopez a09598
public:
Carlos Lopez a09598
	typedef std::list< etl::handle<canvasview> > CanvasViewList;</canvasview>
Carlos Lopez a09598
Carlos Lopez a09598
	enum Status
Carlos Lopez a09598
	{
Carlos Lopez a09598
		STATUS_OK,
Carlos Lopez a09598
		STATUS_ERROR,
Carlos Lopez a09598
		STATUS_CANCEL
Carlos Lopez a09598
	};
Carlos Lopez a09598
Carlos Lopez a09598
	class CanvasTreeModel : public Gtk::TreeModel::ColumnRecord
Carlos Lopez a09598
	{
Carlos Lopez a09598
	public:
Carlos Lopez a09598
		Gtk::TreeModelColumn<glib::refptr<gdk::pixbuf> > icon;</glib::refptr<gdk::pixbuf>
Carlos Lopez a09598
		Gtk::TreeModelColumn<glib::ustring> label;</glib::ustring>
Carlos Lopez a09598
		Gtk::TreeModelColumn<glib::ustring> name;</glib::ustring>
Carlos Lopez a09598
		Gtk::TreeModelColumn<glib::ustring> id;</glib::ustring>
Carlos Lopez a09598
Carlos Lopez a09598
		Gtk::TreeModelColumn<synfig::canvas::handle> canvas;</synfig::canvas::handle>
Carlos Lopez a09598
		Gtk::TreeModelColumn<bool> is_canvas;</bool>
Carlos Lopez a09598
Carlos Lopez a09598
		Gtk::TreeModelColumn<synfig::valuenode::handle> value_node;</synfig::valuenode::handle>
Carlos Lopez a09598
		Gtk::TreeModelColumn<bool> is_value_node;</bool>
Carlos Lopez a09598
		Gtk::TreeModelColumn<synfig::valuebase> value;</synfig::valuebase>
Carlos Lopez a09598
		Gtk::TreeModelColumn<glib::ustring> type;</glib::ustring>
Carlos Lopez a09598
		Gtk::TreeModelColumn<int> link_id;</int>
Carlos Lopez a09598
		Gtk::TreeModelColumn<int> link_count;</int>
Carlos Lopez a09598
Carlos Lopez a09598
		Gtk::TreeModelColumn<bool> is_editable;</bool>
Carlos Lopez a09598
Carlos Lopez a09598
		Gtk::TreeModelColumn<synfigapp::valuedesc> value_desc;</synfigapp::valuedesc>
Carlos Lopez a09598
Carlos Lopez a09598
		CanvasTreeModel()
Carlos Lopez a09598
		{
Carlos Lopez a09598
			add(value);
Carlos Lopez a09598
			add(name);
Carlos Lopez a09598
			add(label);
Carlos Lopez a09598
			add(icon);
Carlos Lopez a09598
			add(type);
Carlos Lopez a09598
			add(id);
Carlos Lopez a09598
			add(canvas);
Carlos Lopez a09598
			add(value_node);
Carlos Lopez a09598
			add(is_canvas);
Carlos Lopez a09598
			add(is_value_node);
Carlos Lopez a09598
Carlos Lopez a09598
			add(is_editable);
Carlos Lopez a09598
			add(value_desc);
Carlos Lopez a09598
			add(link_count);
Carlos Lopez a09598
			add(link_id);
Carlos Lopez a09598
		}
Carlos Lopez a09598
	} canvas_tree_model;
Carlos Lopez a09598
Carlos Lopez a09598
private:
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void,canvasview*> signal_canvas_view_created_;</void,canvasview*>
Carlos Lopez a09598
	sigc::signal<void,canvasview*> signal_canvas_view_deleted_;</void,canvasview*>
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void> signal_undo_redo_status_changed_;</void>
Carlos Lopez a09598
Carlos Lopez a09598
	//! Tree containing the canvases -- used for the "canvas browser"
Carlos Lopez a09598
	Glib::RefPtr<gtk::treestore> canvas_tree_store_;</gtk::treestore>
Carlos Lopez a09598
Carlos Lopez a09598
	//! Tree containing the actions -- used for the "canvas browser"
Carlos Lopez a09598
	Glib::RefPtr<historytreestore> history_tree_store_;</historytreestore>
Carlos Lopez a09598
Carlos Lopez a09598
	//! Instance number
Carlos Lopez a09598
	int	id_;
Carlos Lopez a09598
Carlos Lopez a09598
	//! Used to calculate instance ID
Carlos Lopez a09598
	static int instance_count_;
Carlos Lopez a09598
Carlos Lopez a09598
	//! List of canvas view windows
Carlos Lopez a09598
	CanvasViewList canvas_view_list_;
Carlos Lopez a09598
Carlos Lopez a09598
	bool undo_status_;
Carlos Lopez a09598
	bool redo_status_;
Carlos Lopez a09598
Carlos Lopez a09598
	void set_undo_status(bool x);
Carlos Lopez a09598
	void set_redo_status(bool x);
Carlos Lopez a09598
Carlos Lopez a09598
protected:
Carlos Lopez a09598
0dde72
	Instance(synfig::Canvas::Handle, synfig::FileSystem::Handle);
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void>& signal_undo_redo_status_changed() { return signal_undo_redo_status_changed_; }</void>
Carlos Lopez a09598
Carlos Lopez a09598
	~Instance();
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void,canvasview*>& signal_canvas_view_created() { return signal_canvas_view_created_; }</void,canvasview*>
Carlos Lopez a09598
	sigc::signal<void,canvasview*>& signal_canvas_view_deleted() { return signal_canvas_view_deleted_; }</void,canvasview*>
Carlos Lopez a09598
Ankit Kumar Dwivedi ecdee9
	bool is_img(synfig::String ext) const;
Ankit Kumar Dwivedi ecdee9
fd0f71
	synfig::Layer::Handle layer_inside_switch(synfig::Layer_Switch::Handle paste) const;
ankit-kumar-dwivedi 16a7cf
Carlos Lopez a09598
	bool get_undo_status()const { return undo_status_; }
Carlos Lopez a09598
Carlos Lopez a09598
	bool get_redo_status()const { return redo_status_; }
Carlos Lopez a09598
Carlos Lopez a09598
	int get_visible_canvases()const;
Carlos Lopez a09598
Carlos Lopez a09598
	Glib::RefPtr<gtk::treestore> canvas_tree_store() { return canvas_tree_store_; }</gtk::treestore>
Carlos Lopez a09598
Carlos Lopez a09598
	Glib::RefPtr<const gtk::treestore=""> canvas_tree_store()const { return canvas_tree_store_; }</const>
Carlos Lopez a09598
Carlos Lopez a09598
	Glib::RefPtr<historytreestore> history_tree_store() { return history_tree_store_; }</historytreestore>
Carlos Lopez a09598
Carlos Lopez a09598
	Glib::RefPtr<const historytreestore=""> history_tree_store()const { return history_tree_store_; }</const>
Carlos Lopez a09598
Carlos Lopez a09598
	//! Returns the number of instances that are currently open in the program
Carlos Lopez a09598
	static int get_count() { return instance_count_; }
Carlos Lopez a09598
Carlos Lopez a09598
	//etl::handle<synfig::canvas> get_canvas()const { return synfigapp::Instance::get_canvas(); }</synfig::canvas>
Carlos Lopez a09598
Carlos Lopez a09598
	etl::handle<canvasview>	find_canvas_view(etl::handle<synfig::canvas> canvas);</synfig::canvas></canvasview>
Carlos Lopez a09598
Carlos Lopez a09598
	//! Sets the focus to a specific canvas
Carlos Lopez a09598
	void focus(etl::handle<synfig::canvas> canvas);</synfig::canvas>
Carlos Lopez a09598
Carlos Lopez a09598
	CanvasViewList & canvas_view_list() { return canvas_view_list_; }
Carlos Lopez a09598
Carlos Lopez a09598
	const CanvasViewList & canvas_view_list()const { return canvas_view_list_; }
[d.j.a.y] Jerome Blanchi db9e08
29f8f3
	void run_plugin(std::string plugin_path);
Carlos Lopez a09598
Carlos Lopez a09598
	bool save_as(const synfig::String &filename);
Carlos Lopez a09598
Carlos Lopez a09598
	//! returns true if the instance has a real filename associated with it, rather than the made up "synfig animation 1" or some such
Carlos Lopez a09598
	bool has_real_filename();
Carlos Lopez a09598
Carlos Lopez a09598
	//! Opens a "Save As" dialog, and then saves the composition to that file
Carlos Lopez a09598
	//! returns true if the save was successful
Carlos Lopez a09598
	bool dialog_save_as();
Carlos Lopez a09598
Carlos Lopez a09598
	void open();
Carlos Lopez a09598
Carlos Lopez a09598
	Status save();
Carlos Lopez a09598
Carlos Lopez a09598
	void dialog_cvs_commit();
Carlos Lopez a09598
Carlos Lopez a09598
	void dialog_cvs_add();
Carlos Lopez a09598
Carlos Lopez a09598
	void dialog_cvs_update();
Carlos Lopez a09598
Carlos Lopez a09598
	void dialog_cvs_revert();
Carlos Lopez a09598
Carlos Lopez a09598
	//! Closes the instance of this composition
Carlos Lopez a09598
	void close();
Carlos Lopez a09598
Carlos Lopez a09598
	void revert();
Carlos Lopez a09598
Carlos Lopez a09598
	void update_all_titles();
Carlos Lopez a09598
Carlos Lopez a09598
	void refresh_canvas_tree();
Carlos Lopez a09598
Carlos Lopez a09598
	bool safe_revert();
[d.j.a.y] Jerome Blanchi db9e08
	//! Perform necessary tests before close an instance
[d.j.a.y] Jerome Blanchi db9e08
	//! returns true if it's safe to close the instance
Carlos Lopez a09598
	bool safe_close();
Carlos Lopez a09598
de146d
	void gather_uri(std::set<synfig::string> &x, const synfig::ValueNode::Handle &value_node) const;</synfig::string>
de146d
	void gather_uri(std::set<synfig::string> &x, const synfig::Layer::Handle &layer) const;</synfig::string>
de146d
	void gather_uri(std::set<synfig::string> &x, const synfig::Canvas::Handle &canvas) const;</synfig::string>
de146d
	void gather_uri(std::set<synfig::string> &x, const synfigapp::SelectionManager::LayerList &layers) const;</synfig::string>
de146d
	void gather_uri(std::map<synfig::string, synfig::string=""> &x, const synfigapp::SelectionManager::LayerList &layers) const;</synfig::string,>
de146d
de146d
	void add_actions_to_menu(Gtk::Menu *menu, const synfigapp::Action::ParamList ¶m_list, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const;
Carlos Lopez a09598
	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;
Carlos Lopez a09598
Carlos Lopez a09598
	void add_actions_to_group(const Glib::RefPtr<gtk::actiongroup>& action_group, synfig::String& ui_info,   const synfigapp::Action::ParamList ¶m_list, synfigapp::Action::Category category=synfigapp::Action::CATEGORY_ALL)const;</gtk::actiongroup>
Carlos Lopez a09598
de146d
	void add_special_layer_actions_to_menu(Gtk::Menu *menu, const synfig::Layer::Handle &layer) const;
de146d
	void add_special_layer_actions_to_group(const Glib::RefPtr<gtk::actiongroup>& action_group, synfig::String& ui_info, const synfig::Layer::Handle &layer) const;</gtk::actiongroup>
de146d
	void add_special_layer_actions_to_menu(Gtk::Menu *menu, const synfigapp::SelectionManager::LayerList &layers) const;
de146d
	void add_special_layer_actions_to_group(const Glib::RefPtr<gtk::actiongroup>& action_group, synfig::String& ui_info, const synfigapp::SelectionManager::LayerList &layers) const;</gtk::actiongroup>
de146d
Carlos Lopez a09598
	void process_action(synfig::String name, synfigapp::Action::ParamList param_list);
Carlos Lopez a09598
Carlos Lopez a09598
	void make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas, synfigapp::ValueDesc value_desc, float location=0.5f, bool bezier=false);
Carlos Lopez a09598
0ee033
	void make_param_menu(Gtk::Menu *menu,synfig::Canvas::Handle canvas,const std::list<synfigapp::valuedesc>& value_desc_list, const synfigapp::ValueDesc &value_desc = synfigapp::ValueDesc());</synfigapp::valuedesc>
Carlos Lopez a09598
Carlos Lopez a09598
Carlos Lopez a09598
	static void edit_waypoint(synfigapp::ValueDesc value_desc,synfig::Waypoint waypoint);
Carlos Lopez a09598
Carlos Lopez a09598
private:
Carlos Lopez a09598
	void insert_canvas(Gtk::TreeRow row,synfig::Canvas::Handle canvas);
Carlos Lopez a09598
Carlos Lopez a09598
public:
0dde72
	static etl::handle<instance> create(synfig::Canvas::Handle canvas, synfig::FileSystem::Handle container);</instance>
Carlos Lopez a09598
}; // END class Instance
Carlos Lopez a09598
Carlos Lopez a09598
}; // END namespace studio
Carlos Lopez a09598
Carlos Lopez a09598
/* === E N D =============================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
#endif