mirror of
https://github.com/UberGames/GtkRadiant.git
synced 2025-01-19 08:01:23 +00:00
fixed eol-style
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@21 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
parent
a083be01aa
commit
d549cd09c5
5 changed files with 349 additions and 349 deletions
|
@ -1,82 +1,82 @@
|
|||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
// Based on spritemodel source code by hydra
|
||||
//
|
||||
|
||||
#include "plugin.h"
|
||||
|
||||
class CBackgroundImage {
|
||||
private:
|
||||
qtexture_t *m_tex;
|
||||
VIEWTYPE m_vt;
|
||||
|
||||
// which components of a vec3_t correspond to x and y in the image
|
||||
unsigned m_ix,m_iy;
|
||||
|
||||
public:
|
||||
CBackgroundImage(VIEWTYPE vt);
|
||||
// ~CBackgroundImage();
|
||||
|
||||
float m_alpha; // vertex alpha
|
||||
bool m_bActive;
|
||||
|
||||
// x and y axis are in relation to the screen, not world, making rendering
|
||||
// the same for each view type. Whoever sets them is responsible for
|
||||
// shuffling.
|
||||
// units are world units.
|
||||
// TODO should be private
|
||||
float m_xmin,m_ymin,m_xmax,m_ymax;
|
||||
|
||||
// load file, create new tex, cleanup old tex, set new tex
|
||||
bool Load(const char *filename);
|
||||
void Cleanup(); // free texture, free tex, set make tex NULL
|
||||
bool SetExtentsMM(); // set extents by ET mapcoordsmaxs/mapcoordsmins
|
||||
bool SetExtentsSel(); // set extents by selection
|
||||
void Render();
|
||||
bool Valid() { return (m_tex && (m_xmin != m_xmax) && (m_ymin != m_ymax)); }
|
||||
};
|
||||
|
||||
class CBackgroundRender : public IGL2DWindow {
|
||||
public:
|
||||
|
||||
CBackgroundRender();
|
||||
virtual ~CBackgroundRender();
|
||||
|
||||
protected:
|
||||
int refCount;
|
||||
|
||||
public:
|
||||
|
||||
// IGL2DWindow IGL3DWindow interface
|
||||
void IncRef() { refCount++; }
|
||||
void DecRef() { refCount--; if (refCount <= 0) delete this; }
|
||||
void Draw2D( VIEWTYPE vt );
|
||||
void Register();
|
||||
};
|
||||
|
||||
extern CBackgroundImage backgroundXY,backgroundXZ,backgroundYZ;
|
||||
extern CBackgroundRender render;
|
||||
|
||||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
// Based on spritemodel source code by hydra
|
||||
//
|
||||
|
||||
#include "plugin.h"
|
||||
|
||||
class CBackgroundImage {
|
||||
private:
|
||||
qtexture_t *m_tex;
|
||||
VIEWTYPE m_vt;
|
||||
|
||||
// which components of a vec3_t correspond to x and y in the image
|
||||
unsigned m_ix,m_iy;
|
||||
|
||||
public:
|
||||
CBackgroundImage(VIEWTYPE vt);
|
||||
// ~CBackgroundImage();
|
||||
|
||||
float m_alpha; // vertex alpha
|
||||
bool m_bActive;
|
||||
|
||||
// x and y axis are in relation to the screen, not world, making rendering
|
||||
// the same for each view type. Whoever sets them is responsible for
|
||||
// shuffling.
|
||||
// units are world units.
|
||||
// TODO should be private
|
||||
float m_xmin,m_ymin,m_xmax,m_ymax;
|
||||
|
||||
// load file, create new tex, cleanup old tex, set new tex
|
||||
bool Load(const char *filename);
|
||||
void Cleanup(); // free texture, free tex, set make tex NULL
|
||||
bool SetExtentsMM(); // set extents by ET mapcoordsmaxs/mapcoordsmins
|
||||
bool SetExtentsSel(); // set extents by selection
|
||||
void Render();
|
||||
bool Valid() { return (m_tex && (m_xmin != m_xmax) && (m_ymin != m_ymax)); }
|
||||
};
|
||||
|
||||
class CBackgroundRender : public IGL2DWindow {
|
||||
public:
|
||||
|
||||
CBackgroundRender();
|
||||
virtual ~CBackgroundRender();
|
||||
|
||||
protected:
|
||||
int refCount;
|
||||
|
||||
public:
|
||||
|
||||
// IGL2DWindow IGL3DWindow interface
|
||||
void IncRef() { refCount++; }
|
||||
void DecRef() { refCount--; if (refCount <= 0) delete this; }
|
||||
void Draw2D( VIEWTYPE vt );
|
||||
void Register();
|
||||
};
|
||||
|
||||
extern CBackgroundImage backgroundXY,backgroundXZ,backgroundYZ;
|
||||
extern CBackgroundRender render;
|
||||
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin dialog box
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
//
|
||||
|
||||
#ifndef _BKGRND2D_DIALOG_H_
|
||||
#define _BKGRND2D_DIALOG_H_
|
||||
|
||||
void InitBackgroundDialog();
|
||||
void ShowBackgroundDialog();
|
||||
void ShowBackgroundDialogPG(int page);
|
||||
|
||||
#endif // _BKGRND2D_DIALOG_H_
|
||||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin dialog box
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
//
|
||||
|
||||
#ifndef _BKGRND2D_DIALOG_H_
|
||||
#define _BKGRND2D_DIALOG_H_
|
||||
|
||||
void InitBackgroundDialog();
|
||||
void ShowBackgroundDialog();
|
||||
void ShowBackgroundDialogPG(int page);
|
||||
|
||||
#endif // _BKGRND2D_DIALOG_H_
|
||||
|
|
|
@ -1,79 +1,79 @@
|
|||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
// Based on spritemodel source code by hydra
|
||||
//
|
||||
|
||||
#ifndef _PLUGIN_H_
|
||||
#define _PLUGIN_H_
|
||||
|
||||
/*!
|
||||
\todo need general notice about lib purpose etc.
|
||||
and the external dependencies (such as GLib, STL, mathlib etc.)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
// for CPtrArray for idata.h
|
||||
#include "missing.h"
|
||||
|
||||
#include "synapse.h"
|
||||
#include "iplugin.h"
|
||||
#include "itoolbar.h"
|
||||
#define USE_QERTABLE_DEFINE
|
||||
#include "qerplugin.h"
|
||||
#include "igl.h"
|
||||
#include "ifilesystem.h"
|
||||
#include "ientity.h"
|
||||
#include "idata.h"
|
||||
|
||||
// verbose messages
|
||||
#define BKGRND2D_DEBUG
|
||||
|
||||
extern _QERFuncTable_1 g_FuncTable;
|
||||
extern _QERQglTable g_QglTable;
|
||||
extern _QERFileSystemTable g_FileSystemTable;
|
||||
extern _QEREntityTable g_EntityTable;
|
||||
extern _QERAppDataTable g_DataTable;
|
||||
extern void *g_pMainWidget;
|
||||
|
||||
extern CSynapseServer* g_pSynapseServer;
|
||||
|
||||
class CSynapseClientBkgrnd2d : public CSynapseClient
|
||||
{
|
||||
public:
|
||||
// CSynapseClient API
|
||||
bool RequestAPI(APIDescriptor_t *pAPI);
|
||||
const char* GetInfo();
|
||||
const char* GetName();
|
||||
|
||||
CSynapseClientBkgrnd2d() { }
|
||||
virtual ~CSynapseClientBkgrnd2d() { }
|
||||
};
|
||||
#define MSG_PREFIX "bkgrnd2d: "
|
||||
#define MSG_WARN "bkgrnd2d WARNING: "
|
||||
#define BKGRND2D_MINOR "bkgrnd2d"
|
||||
#define FILETYPE_KEY "bkgrnd2d"
|
||||
|
||||
#endif // _PLUGIN_H_
|
||||
/*
|
||||
Copyright (C) 2003 Reed Mideke.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
//
|
||||
// bkgrnd2d Plugin
|
||||
//
|
||||
// Code by reyalP aka Reed Mideke
|
||||
//
|
||||
// Based on spritemodel source code by hydra
|
||||
//
|
||||
|
||||
#ifndef _PLUGIN_H_
|
||||
#define _PLUGIN_H_
|
||||
|
||||
/*!
|
||||
\todo need general notice about lib purpose etc.
|
||||
and the external dependencies (such as GLib, STL, mathlib etc.)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
// for CPtrArray for idata.h
|
||||
#include "missing.h"
|
||||
|
||||
#include "synapse.h"
|
||||
#include "iplugin.h"
|
||||
#include "itoolbar.h"
|
||||
#define USE_QERTABLE_DEFINE
|
||||
#include "qerplugin.h"
|
||||
#include "igl.h"
|
||||
#include "ifilesystem.h"
|
||||
#include "ientity.h"
|
||||
#include "idata.h"
|
||||
|
||||
// verbose messages
|
||||
#define BKGRND2D_DEBUG
|
||||
|
||||
extern _QERFuncTable_1 g_FuncTable;
|
||||
extern _QERQglTable g_QglTable;
|
||||
extern _QERFileSystemTable g_FileSystemTable;
|
||||
extern _QEREntityTable g_EntityTable;
|
||||
extern _QERAppDataTable g_DataTable;
|
||||
extern void *g_pMainWidget;
|
||||
|
||||
extern CSynapseServer* g_pSynapseServer;
|
||||
|
||||
class CSynapseClientBkgrnd2d : public CSynapseClient
|
||||
{
|
||||
public:
|
||||
// CSynapseClient API
|
||||
bool RequestAPI(APIDescriptor_t *pAPI);
|
||||
const char* GetInfo();
|
||||
const char* GetName();
|
||||
|
||||
CSynapseClientBkgrnd2d() { }
|
||||
virtual ~CSynapseClientBkgrnd2d() { }
|
||||
};
|
||||
#define MSG_PREFIX "bkgrnd2d: "
|
||||
#define MSG_WARN "bkgrnd2d WARNING: "
|
||||
#define BKGRND2D_MINOR "bkgrnd2d"
|
||||
#define FILETYPE_KEY "bkgrnd2d"
|
||||
|
||||
#endif // _PLUGIN_H_
|
||||
|
|
|
@ -236,4 +236,4 @@ namespace std
|
|||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -1,152 +1,152 @@
|
|||
/*
|
||||
Copyright (C) 2001-2006, William Joseph.
|
||||
All Rights Reserved.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined(INCLUDED_MODULESYSTEM_MODULESMAP_H)
|
||||
#define INCLUDED_MODULESYSTEM_MODULESMAP_H
|
||||
|
||||
#include "modulesystem.h"
|
||||
#include "string/string.h"
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
template<typename Type>
|
||||
class ModulesMap : public Modules<Type>
|
||||
{
|
||||
typedef std::map<CopiedString, Module*> modules_t;
|
||||
modules_t m_modules;
|
||||
public:
|
||||
~ModulesMap()
|
||||
{
|
||||
for(modules_t::iterator i = m_modules.begin(); i != m_modules.end(); ++i)
|
||||
{
|
||||
(*i).second->release();
|
||||
}
|
||||
}
|
||||
|
||||
typedef modules_t::const_iterator iterator;
|
||||
|
||||
iterator begin() const
|
||||
{
|
||||
return m_modules.begin();
|
||||
}
|
||||
iterator end() const
|
||||
{
|
||||
return m_modules.end();
|
||||
}
|
||||
|
||||
void insert(const char* name, Module& module)
|
||||
{
|
||||
module.capture();
|
||||
if(globalModuleServer().getError())
|
||||
{
|
||||
module.release();
|
||||
globalModuleServer().setError(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_modules.insert(modules_t::value_type(name, &module));
|
||||
}
|
||||
}
|
||||
|
||||
Type* find(const char* name)
|
||||
{
|
||||
modules_t::iterator i = m_modules.find(name);
|
||||
if(i != m_modules.end())
|
||||
{
|
||||
return static_cast<Type*>(Module_getTable(*(*i).second));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Type* findModule(const char* name)
|
||||
{
|
||||
return find(name);
|
||||
}
|
||||
void foreachModule(typename Modules<Type>::Visitor& visitor)
|
||||
{
|
||||
for(modules_t::iterator i = m_modules.begin(); i != m_modules.end(); ++i)
|
||||
{
|
||||
visitor.visit((*i).first.c_str(), *static_cast<const Type*>(Module_getTable(*(*i).second)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
class InsertModules : public ModuleServer::Visitor
|
||||
{
|
||||
ModulesMap<Type>& m_modules;
|
||||
public:
|
||||
InsertModules(ModulesMap<Type>& modules)
|
||||
: m_modules(modules)
|
||||
{
|
||||
}
|
||||
void visit(const char* name, Module& module)
|
||||
{
|
||||
m_modules.insert(name, module);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
class ModulesRef
|
||||
{
|
||||
ModulesMap<Type> m_modules;
|
||||
public:
|
||||
ModulesRef(const char* names)
|
||||
{
|
||||
if(!globalModuleServer().getError())
|
||||
{
|
||||
if(string_equal(names, "*"))
|
||||
{
|
||||
InsertModules<Type> visitor(m_modules);
|
||||
globalModuleServer().foreachModule(typename Type::Name(), typename Type::Version(), visitor);
|
||||
}
|
||||
else
|
||||
{
|
||||
StringTokeniser tokeniser(names);
|
||||
for(;;)
|
||||
{
|
||||
const char* name = tokeniser.getToken();
|
||||
if(string_empty(name))
|
||||
{
|
||||
break;
|
||||
}
|
||||
Module* module = globalModuleServer().findModule(typename Type::Name(), typename Type::Version(), name);
|
||||
if(module == 0)
|
||||
{
|
||||
globalModuleServer().setError(true);
|
||||
globalErrorStream() << "ModulesRef::initialise: type=" << makeQuoted(typename Type::Name()) << " version=" << makeQuoted(typename Type::Version()) << " name=" << makeQuoted(name) << " - not found\n";
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_modules.insert(name, *module);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ModulesMap<Type>& get()
|
||||
{
|
||||
return m_modules;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
/*
|
||||
Copyright (C) 2001-2006, William Joseph.
|
||||
All Rights Reserved.
|
||||
|
||||
This file is part of GtkRadiant.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
GtkRadiant 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GtkRadiant; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#if !defined(INCLUDED_MODULESYSTEM_MODULESMAP_H)
|
||||
#define INCLUDED_MODULESYSTEM_MODULESMAP_H
|
||||
|
||||
#include "modulesystem.h"
|
||||
#include "string/string.h"
|
||||
#include <map>
|
||||
#include <set>
|
||||
|
||||
template<typename Type>
|
||||
class ModulesMap : public Modules<Type>
|
||||
{
|
||||
typedef std::map<CopiedString, Module*> modules_t;
|
||||
modules_t m_modules;
|
||||
public:
|
||||
~ModulesMap()
|
||||
{
|
||||
for(modules_t::iterator i = m_modules.begin(); i != m_modules.end(); ++i)
|
||||
{
|
||||
(*i).second->release();
|
||||
}
|
||||
}
|
||||
|
||||
typedef modules_t::const_iterator iterator;
|
||||
|
||||
iterator begin() const
|
||||
{
|
||||
return m_modules.begin();
|
||||
}
|
||||
iterator end() const
|
||||
{
|
||||
return m_modules.end();
|
||||
}
|
||||
|
||||
void insert(const char* name, Module& module)
|
||||
{
|
||||
module.capture();
|
||||
if(globalModuleServer().getError())
|
||||
{
|
||||
module.release();
|
||||
globalModuleServer().setError(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_modules.insert(modules_t::value_type(name, &module));
|
||||
}
|
||||
}
|
||||
|
||||
Type* find(const char* name)
|
||||
{
|
||||
modules_t::iterator i = m_modules.find(name);
|
||||
if(i != m_modules.end())
|
||||
{
|
||||
return static_cast<Type*>(Module_getTable(*(*i).second));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Type* findModule(const char* name)
|
||||
{
|
||||
return find(name);
|
||||
}
|
||||
void foreachModule(typename Modules<Type>::Visitor& visitor)
|
||||
{
|
||||
for(modules_t::iterator i = m_modules.begin(); i != m_modules.end(); ++i)
|
||||
{
|
||||
visitor.visit((*i).first.c_str(), *static_cast<const Type*>(Module_getTable(*(*i).second)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
class InsertModules : public ModuleServer::Visitor
|
||||
{
|
||||
ModulesMap<Type>& m_modules;
|
||||
public:
|
||||
InsertModules(ModulesMap<Type>& modules)
|
||||
: m_modules(modules)
|
||||
{
|
||||
}
|
||||
void visit(const char* name, Module& module)
|
||||
{
|
||||
m_modules.insert(name, module);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Type>
|
||||
class ModulesRef
|
||||
{
|
||||
ModulesMap<Type> m_modules;
|
||||
public:
|
||||
ModulesRef(const char* names)
|
||||
{
|
||||
if(!globalModuleServer().getError())
|
||||
{
|
||||
if(string_equal(names, "*"))
|
||||
{
|
||||
InsertModules<Type> visitor(m_modules);
|
||||
globalModuleServer().foreachModule(typename Type::Name(), typename Type::Version(), visitor);
|
||||
}
|
||||
else
|
||||
{
|
||||
StringTokeniser tokeniser(names);
|
||||
for(;;)
|
||||
{
|
||||
const char* name = tokeniser.getToken();
|
||||
if(string_empty(name))
|
||||
{
|
||||
break;
|
||||
}
|
||||
Module* module = globalModuleServer().findModule(typename Type::Name(), typename Type::Version(), name);
|
||||
if(module == 0)
|
||||
{
|
||||
globalModuleServer().setError(true);
|
||||
globalErrorStream() << "ModulesRef::initialise: type=" << makeQuoted(typename Type::Name()) << " version=" << makeQuoted(typename Type::Version()) << " name=" << makeQuoted(name) << " - not found\n";
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_modules.insert(name, *module);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
ModulesMap<Type>& get()
|
||||
{
|
||||
return m_modules;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue