|
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
|