X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftags%2Fsynfig_0_61_06%2Fsrc%2Fsynfig%2Fmodule.h;fp=synfig-core%2Ftags%2Fsynfig_0_61_06%2Fsrc%2Fsynfig%2Fmodule.h;h=90fe77c5a51dddbc33b93cdc55af82e77da10f2e;hb=9f067badc4463e2ad6363dfe9b8c4fc28b0ec503;hp=0000000000000000000000000000000000000000;hpb=34168bb24164074ff22eb5bc47a612a738901e0a;p=synfig.git diff --git a/synfig-core/tags/synfig_0_61_06/src/synfig/module.h b/synfig-core/tags/synfig_0_61_06/src/synfig/module.h new file mode 100644 index 0000000..90fe77c --- /dev/null +++ b/synfig-core/tags/synfig_0_61_06/src/synfig/module.h @@ -0,0 +1,172 @@ +/* === S Y N F I G ========================================================= */ +/*! \file synfig/module.h +** \brief writeme +** +** $Id$ +** +** \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_MODULE_H +#define __SYNFIG_MODULE_H + +/* === H E A D E R S ======================================================= */ + +#include "general.h" +#include +#include +#include "string.h" +#include +#include "vector.h" +#include "color.h" +#include "layer.h" +#include "canvas.h" + +//#include "value.h" + +/* === M A C R O S ========================================================= */ + +//! Marks the start of a module description +#define MODULE_DESC_BEGIN(x) struct x##_modclass : public synfig::Module { x##_modclass(synfig::ProgressCallback *callback=NULL); + +//! Sets the localized name of the module +#define MODULE_NAME(x) virtual const char * Name() { return x; } + +//! Sets a localized description of the module +#define MODULE_DESCRIPTION(x) virtual const char * Desc() { return x; } + +//! Sets the name of the module's author +#define MODULE_AUTHOR(x) virtual const char * Author() { return x; } + +//! Sets the version string for the module +#define MODULE_VERSION(x) virtual const char * Version() { return x; } + +//! Sets the copyright string for the module +#define MODULE_COPYRIGHT(x) virtual const char * Copyright() { return x; } + +//! Describes the module's construction function +#define MODULE_CONSTRUCTOR(x) bool constructor_(synfig::ProgressCallback *cb) { return x(cb); } + +//! Describes the module's destruction function +#define MODULE_DESTRUCTOR(x) virtual void destructor_() { return x(); } + +//! Marks the end of a module description +#define MODULE_DESC_END }; + +//#if 0 +#ifdef __APPLE__ +//! Marks the start of a module's inventory +#define MODULE_INVENTORY_BEGIN(x) extern "C" { \ + synfig::Module* _##x##_LTX_new_instance(synfig::ProgressCallback *cb) \ + { if(SYNFIG_CHECK_VERSION()){x##_modclass *mod=new x##_modclass(cb); mod->constructor_(cb); return mod; }\ + if(cb)cb->error(#x": Unable to load module due to version mismatch."); return NULL; } \ + }; x##_modclass::x##_modclass(synfig::ProgressCallback *cb) { +#else +//! Marks the start of a module's inventory +#define MODULE_INVENTORY_BEGIN(x) extern "C" { \ + synfig::Module* x##_LTX_new_instance(synfig::ProgressCallback *cb) \ + { if(SYNFIG_CHECK_VERSION()){x##_modclass *mod=new x##_modclass(cb); mod->constructor_(cb); return mod; }\ + if(cb)cb->error(#x": Unable to load module due to version mismatch."); return NULL; } \ + }; x##_modclass::x##_modclass(synfig::ProgressCallback *cb) { +#endif + +//! Marks the start of the layers in the module's inventory +#define BEGIN_LAYERS { + +//! DEPRECATED - use @INCLUDE_LAYER() +//#define LAYER(x) synfig::Layer::book()[synfig::String(x::name__)]=x::create; +#define LAYER(class) synfig::Layer::register_in_book(synfig::Layer::BookEntry(class::create,class::name__,class::local_name__,class::category__,class::cvs_id__,class::version__)); +#define LAYER_ALIAS(class,alias) synfig::Layer::register_in_book(synfig::Layer::BookEntry(class::create,alias,alias,_("Do Not Use"),class::cvs_id__,class::version__)); + +//! Marks the end of the layers in the module's inventory +#define END_LAYERS } + +//! Marks the start of the targets in the module's inventory +#define BEGIN_TARGETS { + +#define TARGET(x) synfig::Target::book()[synfig::String(x::name__)]=std::pair(x::create,synfig::String(x::ext__));synfig::Target::ext_book()[synfig::String(x::ext__)]=x::name__; + +#define TARGET_EXT(x,y) synfig::Target::ext_book()[synfig::String(y)]=x::name__; + +//! Marks the end of the targets in the module's inventory +#define END_TARGETS } + +//! Marks the start of the importers in the module's inventory +#define BEGIN_IMPORTERS { + +#define IMPORTER(x) synfig::Importer::book()[synfig::String(x::ext__)]=x::create; + +#define IMPORTER_EXT(x,y) synfig::Importer::book()[synfig::String(y)]=x::create; + +//! Marks the end of the importers in the module's inventory +#define END_IMPORTERS } + +//! Marks the end of a module's inventory +#define MODULE_INVENTORY_END } + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace synfig { + +class ProgressCallback; + +/*! \class Module +** \todo writeme +*/ +class Module : public etl::shared_object +{ +public: + bool constructor_(synfig::ProgressCallback *cb) { return true; } + virtual void destructor_() { } + + typedef etl::handle Handle; + typedef etl::loose_handle LooseHandle; + typedef etl::handle ConstHandle; + +public: + typedef Module*(*constructor_type)(ProgressCallback *); + typedef std::map Book; +private: + static Book* book_; +public: + static Book& book(); + + static bool subsys_init(const String &prefix); + static bool subsys_stop(); + static bool register_default_modules(); + + static void Register(Handle mod); + static bool Register(const String &module_name, ProgressCallback *cb=NULL); + static inline void Register(Module *mod) { Register(Handle(mod)); } + + virtual const char * Name() { return " "; } + virtual const char * Desc() { return " "; } + virtual const char * Author() { return " "; } + virtual const char * Version() { return " "; } + virtual const char * Copyright() { return SYNFIG_COPYRIGHT; } + + virtual ~Module() { destructor_(); } +}; + +}; // END of namespace synfig + +/* === E N D =============================================================== */ + +#endif