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

Carlos Lopez a09598
/* === S Y N F I G ========================================================= */
Carlos Lopez a09598
/*!	\file synfigapp/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
**
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_APP_INSTANCE_H
Carlos Lopez a09598
#define __SYNFIG_APP_INSTANCE_H
Carlos Lopez a09598
Carlos Lopez a09598
/* === H E A D E R S ======================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
#include "action.h"
Carlos Lopez a09598
#include <etl handle=""></etl>
Carlos Lopez a09598
#include <synfig canvas.h=""></synfig>
Carlos Lopez a09598
#include <synfig string.h=""></synfig>
eca4bf
#include <synfig filesystemtemporary.h=""></synfig>
d73e28
#include <synfig filesystemgroup.h=""></synfig>
Carlos Lopez a09598
#include <list></list>
b8e8c2
#include <set></set>
[d.j.a.y] Jerome Blanchi f8d04e
#include <sigc++ sigc++.h=""></sigc++>
Carlos Lopez a09598
#include "action_system.h"
Carlos Lopez a09598
#include "selectionmanager.h"
Carlos Lopez a09598
#include "cvs.h"
3bd54c
#include <synfig rendering="" surface.h=""></synfig>
Carlos Lopez a09598
Carlos Lopez a09598
/* === M A C R O S ========================================================= */
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 synfigapp {
Carlos Lopez a09598
Carlos Lopez a09598
class CanvasInterface;
Carlos Lopez a09598
Carlos Lopez a09598
Carlos Lopez a09598
class Instance : public Action::System , public CVSInfo
Carlos Lopez a09598
{
Carlos Lopez a09598
	friend class PassiveGrouper;
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 -- ** -- P U B L I C   T Y P E S ---------------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
	typedef std::list< etl::handle<canvasinterface> > CanvasInterfaceList;</canvasinterface>
Carlos Lopez a09598
bb6da3
	struct FileReference
bb6da3
	{
bb6da3
		synfig::Layer::ConstHandle layer;
bb6da3
		std::string param_name;
bb6da3
		std::string old_filename;
bb6da3
		std::string new_filename;
bb6da3
	};
bb6da3
bb6da3
	typedef std::list< FileReference > FileReferenceList;
bb6da3
Carlos Lopez a09598
	using etl::shared_object::ref;
Carlos Lopez a09598
	using etl::shared_object::unref;
Carlos Lopez a09598
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 -- ** -- P U B L I C  D A T A ------------------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 -- ** -- P R I V A T E   D A T A ---------------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
Carlos Lopez a09598
private:
bb6da3
Carlos Lopez a09598
	//! Handle for root canvas
Carlos Lopez a09598
	synfig::Canvas::Handle canvas_;
Carlos Lopez a09598
0dde72
	synfig::FileSystem::Handle container_;
Carlos Lopez a09598
Carlos Lopez a09598
	CanvasInterfaceList canvas_interface_list_;
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void> signal_filename_changed_;</void>
Carlos Lopez a09598
	sigc::signal<void> signal_saved_;</void>
Carlos Lopez a09598
	etl::handle<selectionmanager> selection_manager_;</selectionmanager>
Carlos Lopez a09598
b8e8c2
	std::list< synfig::Layer::Handle > layers_to_save;
b8e8c2
b37b41
	bool import_external_canvas(synfig::Canvas::Handle canvas, std::map<synfig::canvas*, synfig::canvas::handle=""> &imported);</synfig::canvas*,>
eca4bf
	etl::handle<action::group> import_external_canvases();</action::group>
eca4bf
eca4bf
	struct ProcessFilenamesParams
eca4bf
	{
eca4bf
		synfig::Canvas::Handle canvas;
eca4bf
		synfig::FileSystem::Handle previous_canvas_filesystem;
eca4bf
		synfig::String previous_canvas_filename;
eca4bf
		bool embed_files;
eca4bf
		bool save_files;
eca4bf
eca4bf
		mutable std::set<synfig::nodehandle> processed_nodes;</synfig::nodehandle>
eca4bf
		mutable std::map<synfig::string, synfig::string=""> processed_files;</synfig::string,>
eca4bf
eca4bf
		mutable std::map<std::pair<synfig::layer::handle, synfig::string="">, synfig::String> processed_params;</std::pair<synfig::layer::handle,>
eca4bf
		mutable std::map<synfig::valuenode_const::handle, synfig::string=""> processed_valuenodes;</synfig::valuenode_const::handle,>
eca4bf
eca4bf
		ProcessFilenamesParams(): embed_files(), save_files() { }
eca4bf
		ProcessFilenamesParams(
eca4bf
			const synfig::Canvas::Handle &canvas,
eca4bf
			const synfig::FileSystem::Handle &previous_canvas_filesystem,
eca4bf
			const synfig::String &previous_canvas_filename,
eca4bf
			bool embed_files,
eca4bf
			bool save_files
eca4bf
		):
eca4bf
			canvas(canvas),
eca4bf
			previous_canvas_filesystem(previous_canvas_filesystem),
eca4bf
			previous_canvas_filename(previous_canvas_filename),
eca4bf
			embed_files(embed_files),
eca4bf
			save_files(save_files)
eca4bf
		{ }
eca4bf
	};
eca4bf
0dde72
	// embed and refine filenames used in layers and valuenodes in current instance
eca4bf
	void process_filename(const ProcessFilenamesParams ¶ms, const synfig::String &filename, synfig::String &out_filename);
eca4bf
	void process_filenames(const ProcessFilenamesParams ¶ms, const synfig::NodeHandle &node, bool self = false);
eca4bf
	void process_filenames_undo(const ProcessFilenamesParams ¶ms);
bb6da3
Carlos Lopez a09598
protected:
0dde72
	Instance(etl::handle<synfig::canvas>, synfig::FileSystem::Handle container);</synfig::canvas>
Carlos Lopez a09598
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 -- ** -- P U B L I C   M E T H O D S -----------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
	~Instance();
Carlos Lopez a09598
Carlos Lopez a09598
	void set_selection_manager(const etl::handle<selectionmanager> &sm) { assert(sm); selection_manager_=sm; }</selectionmanager>
Carlos Lopez a09598
	void unset_selection_manager() { selection_manager_=new NullSelectionManager(); }
Carlos Lopez a09598
	const etl::handle<selectionmanager> &get_selection_manager() { return selection_manager_; }</selectionmanager>
Carlos Lopez a09598
0dde72
	synfig::FileSystem::Handle get_container() const { return container_; };
20e596
	bool save_surface(const synfig::rendering::SurfaceResource::Handle &surface, const synfig::String &filename);
0a453e
	bool save_surface(const synfig::Surface &surface, const synfig::String &filename);
0dde72
	bool save_layer(const synfig::Layer::Handle &layer);
0dde72
	void save_all_layers();
0dde72
	void find_unsaved_layers(std::vector<synfig::layer::handle> &out_layers, const synfig::Canvas::Handle canvas);</synfig::layer::handle>
0dde72
	void find_unsaved_layers(std::vector<synfig::layer::handle> &out_layers)</synfig::layer::handle>
0dde72
		{ find_unsaved_layers(out_layers, get_canvas()); }
Carlos Lopez a09598
Carlos Lopez a09598
	etl::handle<canvasinterface> find_canvas_interface(synfig::Canvas::Handle canvas);</canvasinterface>
Carlos Lopez a09598
940e84
	const synfig::Canvas::Handle& get_canvas()const { return canvas_; }
Carlos Lopez a09598
c5850b
	void convert_animated_filenames(const synfig::Canvas::Handle &canvas, const synfig::String &old_path, const synfig::String &new_path);
c5850b
Carlos Lopez a09598
	//! Saves the instance to filename_
bb6da3
	bool save();
Carlos Lopez a09598
Carlos Lopez a09598
	bool save_as(const synfig::String &filename);
Carlos Lopez a09598
0dde72
	//! Saves the instance to current temporary container
6584e9
	bool backup(bool save_even_if_unchanged = false);
0dde72
300bf8
	//! generate layer name (also known in code as 'description')
300bf8
	synfig::String generate_new_description(const synfig::Layer::Handle &layer);
300bf8
[d.j.a.y] Jerome Blanchi cd0d1c
	//! create unique file name for an embedded image layer (if image filename is empty, description layer is used)
300bf8
	void generate_new_name(
300bf8
		const synfig::Layer::Handle &layer,
300bf8
		synfig::String &out_description,
300bf8
		synfig::String &out_filename,
300bf8
		synfig::String &out_filename_param );
[d.j.a.y] Jerome Blanchi ae6cdc
Carlos Lopez a09598
public:	// Interfaces to internal information
Carlos Lopez a09598
	sigc::signal<void>& signal_filename_changed() { return signal_filename_changed_; }</void>
Carlos Lopez a09598
	sigc::signal<void>& signal_saved() { return signal_saved_; }</void>
Carlos Lopez a09598
Carlos Lopez a09598
	CanvasInterfaceList & canvas_interface_list() { return canvas_interface_list_; }
Carlos Lopez a09598
	const CanvasInterfaceList & canvas_interface_list()const { return canvas_interface_list_; }
Carlos Lopez a09598
Carlos Lopez a09598
	synfig::String get_file_name()const;
Carlos Lopez a09598
Carlos Lopez a09598
	void set_file_name(const synfig::String &name);
Carlos Lopez a09598
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
Carlos Lopez a09598
public:	// Constructor interfaces
0dde72
	static etl::handle<instance> create(etl::handle<synfig::canvas> canvas, synfig::FileSystem::Handle container);</synfig::canvas></instance>
Carlos Lopez a09598
}; // END class Instance
Carlos Lopez a09598
Carlos Lopez a09598
etl::handle<instance> find_instance(etl::handle<synfig::canvas> canvas);</synfig::canvas></instance>
Carlos Lopez a09598
Carlos Lopez a09598
bool is_editable(synfig::ValueNode::Handle value_node);
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