merge from default

This commit is contained in:
dnk-88 2011-09-26 02:40:30 +03:00
parent d5aba92b5a
commit f07731ad20
185 changed files with 5279 additions and 1508 deletions

View file

@ -95,12 +95,6 @@ public:
@endcode @endcode
*/ */
virtual void setNelContext(NLMISC::INelContext *nelContext) = 0; virtual void setNelContext(NLMISC::INelContext *nelContext) = 0;
virtual QString name() const = 0;
virtual QString version() const = 0;
virtual QString vendor() const = 0;
virtual QString description() const = 0;
virtual QStringList dependencies() const = 0;
}; };
}; //namespace ExtensionSystem }; //namespace ExtensionSystem

View file

@ -37,8 +37,8 @@ struct State
{ {
Invalid = 1, Invalid = 1,
Read, Read,
Loaded,
Resolved, Resolved,
Loaded,
Initialized, Initialized,
Running, Running,
Stopped, Stopped,

View file

@ -26,13 +26,14 @@
namespace ExtensionSystem namespace ExtensionSystem
{ {
CPluginManager::CPluginManager(QObject *parent) PluginManager::PluginManager(QObject *parent)
:IPluginManager(parent), :IPluginManager(parent),
m_settings(0) m_settings(0),
m_extension("xml")
{ {
} }
CPluginManager::~CPluginManager() PluginManager::~PluginManager()
{ {
writeSettings(); writeSettings();
stopAll(); stopAll();
@ -40,7 +41,7 @@ CPluginManager::~CPluginManager()
qDeleteAll(m_pluginSpecs); qDeleteAll(m_pluginSpecs);
} }
void CPluginManager::addObject(QObject *obj) void PluginManager::addObject(QObject *obj)
{ {
QWriteLocker lock(&m_lock); QWriteLocker lock(&m_lock);
if (obj == 0) if (obj == 0)
@ -60,7 +61,7 @@ void CPluginManager::addObject(QObject *obj)
Q_EMIT objectAdded(obj); Q_EMIT objectAdded(obj);
} }
void CPluginManager::removeObject(QObject *obj) void PluginManager::removeObject(QObject *obj)
{ {
if (obj == 0) if (obj == 0)
{ {
@ -80,25 +81,25 @@ void CPluginManager::removeObject(QObject *obj)
m_allObjects.removeAll(obj); m_allObjects.removeAll(obj);
} }
QList<QObject *> CPluginManager::allObjects() const QList<QObject *> PluginManager::allObjects() const
{ {
return m_allObjects; return m_allObjects;
} }
void CPluginManager::loadPlugins() void PluginManager::loadPlugins()
{ {
Q_FOREACH (CPluginSpec *spec, m_pluginSpecs) Q_FOREACH (PluginSpec *spec, m_pluginSpecs)
setPluginState(spec, State::Loaded);
Q_FOREACH (CPluginSpec *spec, m_pluginSpecs)
setPluginState(spec, State::Resolved); setPluginState(spec, State::Resolved);
QList<CPluginSpec *> queue = loadQueue(); QList<PluginSpec *> queue = loadQueue();
Q_FOREACH (CPluginSpec *spec, queue) Q_FOREACH (PluginSpec *spec, queue)
setPluginState(spec, State::Loaded);
Q_FOREACH (PluginSpec *spec, queue)
setPluginState(spec, State::Initialized); setPluginState(spec, State::Initialized);
QListIterator<CPluginSpec *> it(queue); QListIterator<PluginSpec *> it(queue);
it.toBack(); it.toBack();
while (it.hasPrevious()) while (it.hasPrevious())
setPluginState(it.previous(), State::Running); setPluginState(it.previous(), State::Running);
@ -106,34 +107,34 @@ void CPluginManager::loadPlugins()
Q_EMIT pluginsChanged(); Q_EMIT pluginsChanged();
} }
QStringList CPluginManager::getPluginPaths() const QStringList PluginManager::getPluginPaths() const
{ {
return m_pluginPaths; return m_pluginPaths;
} }
void CPluginManager::setPluginPaths(const QStringList &paths) void PluginManager::setPluginPaths(const QStringList &paths)
{ {
m_pluginPaths = paths; m_pluginPaths = paths;
readPluginPaths(); readPluginPaths();
readSettings(); readSettings();
} }
QList<IPluginSpec *> CPluginManager::plugins() const QList<IPluginSpec *> PluginManager::plugins() const
{ {
return m_ipluginSpecs; return m_ipluginSpecs;
} }
void CPluginManager::setSettings(QSettings *settings) void PluginManager::setSettings(QSettings *settings)
{ {
m_settings = settings; m_settings = settings;
} }
QSettings *CPluginManager::settings() const QSettings *PluginManager::settings() const
{ {
return m_settings; return m_settings;
} }
void CPluginManager::readSettings() void PluginManager::readSettings()
{ {
if (m_settings) if (m_settings)
{ {
@ -141,7 +142,7 @@ void CPluginManager::readSettings()
m_settings->beginGroup("PluginManager"); m_settings->beginGroup("PluginManager");
blackList = m_settings->value("BlackList").toStringList(); blackList = m_settings->value("BlackList").toStringList();
m_settings->endGroup(); m_settings->endGroup();
Q_FOREACH (CPluginSpec *spec, m_pluginSpecs) Q_FOREACH (PluginSpec *spec, m_pluginSpecs)
{ {
QString pluginName = spec->fileName(); QString pluginName = spec->fileName();
@ -154,14 +155,13 @@ void CPluginManager::readSettings()
} }
} }
void CPluginManager::writeSettings() void PluginManager::writeSettings()
{ {
if (m_settings) if (m_settings)
{ {
QStringList blackList; QStringList blackList;
Q_FOREACH(CPluginSpec *spec, m_pluginSpecs) Q_FOREACH(PluginSpec *spec, m_pluginSpecs)
{ {
nlinfo(spec->fileName().toStdString().c_str());
if (!spec->isEnabled()) if (!spec->isEnabled())
blackList.push_back(spec->fileName()); blackList.push_back(spec->fileName());
} }
@ -172,7 +172,7 @@ void CPluginManager::writeSettings()
} }
} }
void CPluginManager::readPluginPaths() void PluginManager::readPluginPaths()
{ {
qDeleteAll(m_pluginSpecs); qDeleteAll(m_pluginSpecs);
m_pluginSpecs.clear(); m_pluginSpecs.clear();
@ -183,11 +183,7 @@ void CPluginManager::readPluginPaths()
while (!searchPaths.isEmpty()) while (!searchPaths.isEmpty())
{ {
const QDir dir(searchPaths.takeFirst()); const QDir dir(searchPaths.takeFirst());
#ifdef Q_OS_WIN const QFileInfoList files = dir.entryInfoList(QStringList() << QString("ovqt_plugin_*.%1").arg(m_extension), QDir::Files);
const QFileInfoList files = dir.entryInfoList(QStringList() << QString("ovqt_plugin_*.dll"), QDir::Files);
#else
const QFileInfoList files = dir.entryInfoList(QStringList() << QString("libovqt_plugin_*.so"), QDir::Files);
#endif
Q_FOREACH (const QFileInfo &file, files) Q_FOREACH (const QFileInfo &file, files)
pluginsList << file.absoluteFilePath(); pluginsList << file.absoluteFilePath();
const QFileInfoList dirs = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot); const QFileInfoList dirs = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot);
@ -197,9 +193,9 @@ void CPluginManager::readPluginPaths()
Q_FOREACH (const QString &pluginFile, pluginsList) Q_FOREACH (const QString &pluginFile, pluginsList)
{ {
CPluginSpec *spec = new CPluginSpec; PluginSpec *spec = new PluginSpec;
spec->setFileName(pluginFile);
spec->m_pluginManager = this; spec->m_pluginManager = this;
spec->setSpecFileName(pluginFile);
m_pluginSpecs.append(spec); m_pluginSpecs.append(spec);
m_ipluginSpecs.append(spec); m_ipluginSpecs.append(spec);
} }
@ -207,7 +203,7 @@ void CPluginManager::readPluginPaths()
Q_EMIT pluginsChanged(); Q_EMIT pluginsChanged();
} }
void CPluginManager::setPluginState(CPluginSpec *spec, int destState) void PluginManager::setPluginState(PluginSpec *spec, int destState)
{ {
if (spec->hasError() || spec->state() != destState-1) if (spec->hasError() || spec->state() != destState-1)
return; return;
@ -233,7 +229,7 @@ void CPluginManager::setPluginState(CPluginSpec *spec, int destState)
default: default:
break; break;
} }
Q_FOREACH (const CPluginSpec *depSpec, spec->dependencySpecs()) Q_FOREACH (const PluginSpec *depSpec, spec->dependencySpecs())
{ {
if (depSpec->state() != destState) if (depSpec->state() != destState)
{ {
@ -256,19 +252,19 @@ void CPluginManager::setPluginState(CPluginSpec *spec, int destState)
} }
} }
QList<CPluginSpec *> CPluginManager::loadQueue() QList<PluginSpec *> PluginManager::loadQueue()
{ {
QList<CPluginSpec *> queue; QList<PluginSpec *> queue;
Q_FOREACH(CPluginSpec *spec, m_pluginSpecs) Q_FOREACH(PluginSpec *spec, m_pluginSpecs)
{ {
QList<CPluginSpec *> circularityCheckQueue; QList<PluginSpec *> circularityCheckQueue;
loadQueue(spec, queue, circularityCheckQueue); loadQueue(spec, queue, circularityCheckQueue);
} }
return queue; return queue;
} }
bool CPluginManager::loadQueue(CPluginSpec *spec, QList<CPluginSpec *> &queue, bool PluginManager::loadQueue(PluginSpec *spec, QList<PluginSpec *> &queue,
QList<CPluginSpec *> &circularityCheckQueue) QList<PluginSpec *> &circularityCheckQueue)
{ {
if (queue.contains(spec)) if (queue.contains(spec))
return true; return true;
@ -295,7 +291,7 @@ bool CPluginManager::loadQueue(CPluginSpec *spec, QList<CPluginSpec *> &queue,
} }
// add dependencies // add dependencies
Q_FOREACH (CPluginSpec *depSpec, spec->dependencySpecs()) Q_FOREACH (PluginSpec *depSpec, spec->dependencySpecs())
{ {
if (!loadQueue(depSpec, queue, circularityCheckQueue)) if (!loadQueue(depSpec, queue, circularityCheckQueue))
{ {
@ -311,17 +307,17 @@ bool CPluginManager::loadQueue(CPluginSpec *spec, QList<CPluginSpec *> &queue,
return true; return true;
} }
void CPluginManager::stopAll() void PluginManager::stopAll()
{ {
QList<CPluginSpec *> queue = loadQueue(); QList<PluginSpec *> queue = loadQueue();
Q_FOREACH (CPluginSpec *spec, queue) Q_FOREACH (PluginSpec *spec, queue)
setPluginState(spec, State::Stopped); setPluginState(spec, State::Stopped);
} }
void CPluginManager::deleteAll() void PluginManager::deleteAll()
{ {
QList<CPluginSpec *> queue = loadQueue(); QList<PluginSpec *> queue = loadQueue();
QListIterator<CPluginSpec *> it(queue); QListIterator<PluginSpec *> it(queue);
it.toBack(); it.toBack();
while (it.hasPrevious()) while (it.hasPrevious())
{ {

View file

@ -29,15 +29,15 @@ namespace ExtensionSystem
{ {
class IPlugin; class IPlugin;
class CPluginSpec; class PluginSpec;
class CPluginManager : public IPluginManager class PluginManager : public IPluginManager
{ {
Q_OBJECT Q_OBJECT
public: public:
CPluginManager(QObject *parent = 0); PluginManager(QObject *parent = 0);
~CPluginManager(); ~PluginManager();
// Object pool operations // Object pool operations
virtual void addObject(QObject *obj); virtual void addObject(QObject *obj);
@ -49,7 +49,7 @@ public:
virtual QStringList getPluginPaths() const; virtual QStringList getPluginPaths() const;
virtual void setPluginPaths(const QStringList &paths); virtual void setPluginPaths(const QStringList &paths);
virtual QList<IPluginSpec *> plugins() const; virtual QList<IPluginSpec *> plugins() const;
QList<CPluginSpec *> loadQueue(); QList<PluginSpec *> loadQueue();
// Settings // Settings
virtual void setSettings(QSettings *settings); virtual void setSettings(QSettings *settings);
@ -58,21 +58,22 @@ public:
void writeSettings(); void writeSettings();
private: private:
void setPluginState(CPluginSpec *spec, int destState); void setPluginState(PluginSpec *spec, int destState);
void readPluginPaths(); void readPluginPaths();
bool loadQueue(CPluginSpec *spec, QList<CPluginSpec *> &queue, QList<CPluginSpec *> &circularityCheckQueue); bool loadQueue(PluginSpec *spec, QList<PluginSpec *> &queue, QList<PluginSpec *> &circularityCheckQueue);
void stopAll(); void stopAll();
void deleteAll(); void deleteAll();
mutable QReadWriteLock m_lock; mutable QReadWriteLock m_lock;
QSettings *m_settings; QSettings *m_settings;
QList<CPluginSpec *> m_pluginSpecs; QString m_extension;
QList<PluginSpec *> m_pluginSpecs;
QList<IPluginSpec *> m_ipluginSpecs; QList<IPluginSpec *> m_ipluginSpecs;
QStringList m_pluginPaths; QStringList m_pluginPaths;
QList<QObject *> m_allObjects; QList<QObject *> m_allObjects;
}; // class CPluginManager }; // class PluginManager
} // namespace ExtensionSystem } // namespace ExtensionSystem

View file

@ -16,12 +16,15 @@
// You should have received a copy of the GNU Affero General Public License // You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// Project includes
#include "plugin_spec.h" #include "plugin_spec.h"
#include "iplugin.h" #include "iplugin.h"
#include "iplugin_manager.h" #include "iplugin_manager.h"
#include "nel/misc/app_context.h" #include "nel/misc/app_context.h"
#include "nel/misc/debug.h"
// Qt includes
#include <QtCore/QList> #include <QtCore/QList>
#include <QtCore/QFile> #include <QtCore/QFile>
#include <QtCore/QFileInfo> #include <QtCore/QFileInfo>
@ -30,8 +33,17 @@
namespace ExtensionSystem namespace ExtensionSystem
{ {
const char *const PLUGIN_SPEC_NAME = "name";
const char *const PLUGIN_SPEC_VENDOR = "vendor";
const char *const PLUGIN_SPEC_VERSION = "version";
const char *const PLUGIN_SPEC_LIBRARY_NAME = "library-name";
const char *const PLUGIN_SPEC_DESCRIPTION = "description";
const char *const PLUGIN_SPEC_DEPENDENCIES = "dependencies";
const char *const PLUGIN_SPEC_DEPENDENCY = "dependency";
const char *const PLUGIN_SPEC_DEPENDENCY_NAME = "plugin-name";
const char *const PLUGIN_SPEC_DEPENDENCY_VERSION = "version";
CPluginSpec::CPluginSpec() PluginSpec::PluginSpec()
: m_location(""), : m_location(""),
m_filePath(""), m_filePath(""),
m_fileName(""), m_fileName(""),
@ -39,6 +51,8 @@ CPluginSpec::CPluginSpec()
m_version(""), m_version(""),
m_vendor(""), m_vendor(""),
m_description(""), m_description(""),
m_nameSpecFile(""),
m_suffix(""),
m_state(State::Invalid), m_state(State::Invalid),
m_enabled(true), m_enabled(true),
m_enabledStartup(true), m_enabledStartup(true),
@ -47,104 +61,195 @@ CPluginSpec::CPluginSpec()
m_plugin(0), m_plugin(0),
m_pluginManager(0) m_pluginManager(0)
{ {
#ifdef Q_OS_WIN
# ifdef DEBUG
m_suffix = "_d.dll";
# else
m_suffix = "_r.dll";
# endif
#else
m_suffix = ".so";
#endif
} }
QString CPluginSpec::name() const QString PluginSpec::name() const
{ {
return m_name; return m_name;
} }
QString CPluginSpec::version() const QString PluginSpec::version() const
{ {
return m_version; return m_version;
} }
QString CPluginSpec::vendor() const QString PluginSpec::vendor() const
{ {
return m_vendor; return m_vendor;
} }
QString CPluginSpec::description() const QString PluginSpec::description() const
{ {
return m_description; return m_description;
} }
QString CPluginSpec::location() const QString PluginSpec::location() const
{ {
return m_location; return m_location;
} }
QString CPluginSpec::filePath() const QString PluginSpec::filePath() const
{ {
return m_filePath; return m_filePath;
} }
QString CPluginSpec::fileName() const QString PluginSpec::fileName() const
{ {
return m_fileName; return m_fileName;
} }
IPlugin *CPluginSpec::plugin() const IPlugin *PluginSpec::plugin() const
{ {
return m_plugin; return m_plugin;
} }
int CPluginSpec::state() const int PluginSpec::state() const
{ {
return m_state; return m_state;
} }
bool CPluginSpec::hasError() const bool PluginSpec::hasError() const
{ {
return m_hasError; return m_hasError;
} }
QString CPluginSpec::errorString() const QString PluginSpec::errorString() const
{ {
return m_errorString; return m_errorString;
} }
QList<CPluginSpec *> CPluginSpec::dependencySpecs() const QList<PluginSpec *> PluginSpec::dependencySpecs() const
{ {
return m_dependencySpecs; return m_dependencySpecs;
} }
bool CPluginSpec::setFileName(const QString &fileName) bool PluginSpec::setFileName(const QString &fileName)
{ {
QFile file(fileName); m_fileName = fileName + m_suffix;
m_filePath = m_location + "/" + m_fileName;
nlinfo(m_filePath.toStdString().c_str());
QFile file(m_filePath);
if (!file.exists()) if (!file.exists())
return reportError(QCoreApplication::translate("CPluginSpec", "File does not exist: %1").arg(file.fileName())); return reportError(QCoreApplication::translate("PluginSpec", "File does not exist: %1").arg(file.fileName()));
if (!file.open(QIODevice::ReadOnly)) if (!file.open(QIODevice::ReadOnly))
return reportError(QCoreApplication::translate("CPluginSpec", "Could not open file for read: %1").arg(file.fileName())); return reportError(QCoreApplication::translate("PluginSpec", "Could not open file for read: %1").arg(file.fileName()));
return true;
}
bool PluginSpec::setSpecFileName(const QString &specFileName)
{
m_nameSpecFile = specFileName;
QFile file(specFileName);
if (!file.exists())
return reportError(QCoreApplication::translate("PluginSpec", "Spec file does not exist: %1").arg(file.fileName()));
QFileInfo fileInfo(file); QFileInfo fileInfo(file);
m_location = fileInfo.absolutePath(); m_location = fileInfo.absolutePath();
m_filePath = fileInfo.absoluteFilePath(); readSpec();
m_fileName = fileInfo.fileName(); return true;
}
bool PluginSpec::readSpec()
{
QFile file(m_nameSpecFile);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return reportError(QCoreApplication::translate("PluginSpec", "Could not open spec file for read: %1").arg(file.fileName()));
QXmlStreamReader reader(&file);
while (!reader.atEnd())
{
if (reader.isStartElement())
parseSpec(reader);
reader.readNext();
}
if (reader.hasError())
return reportError(QCoreApplication::translate("PluginSpec", "Error parsing file %1: %2, at line %3, column %4")
.arg(file.fileName())
.arg(reader.errorString())
.arg(reader.lineNumber())
.arg(reader.columnNumber()));
m_state = State::Read; m_state = State::Read;
return true; return true;
} }
void CPluginSpec::setEnabled(bool enabled) void PluginSpec::parseSpec(QXmlStreamReader &reader)
{
QString elemName = reader.name().toString();
reader.readNext();
if (reader.isCharacters())
{
QString elemText = reader.text().toString();
if (elemName == PLUGIN_SPEC_LIBRARY_NAME)
setFileName(elemText);
if (elemName == PLUGIN_SPEC_NAME)
m_name = elemText;
if (elemName == PLUGIN_SPEC_VERSION)
m_version = elemText;
if (elemName == PLUGIN_SPEC_VENDOR)
m_vendor = elemText;
if (elemName == PLUGIN_SPEC_DESCRIPTION)
m_description = elemText;
if (elemName == PLUGIN_SPEC_DEPENDENCIES)
parseDependency(reader);
}
}
void PluginSpec::parseDependency(QXmlStreamReader &reader)
{
QString elemName;
while (!reader.atEnd() && (elemName != PLUGIN_SPEC_DEPENDENCIES))
{
reader.readNext();
elemName = reader.name().toString();
if (reader.isStartElement() && (elemName == PLUGIN_SPEC_DEPENDENCY))
{
// Read name dependency plugin
QString dependencyName = reader.attributes().value(PLUGIN_SPEC_DEPENDENCY_NAME).toString();
if (dependencyName.isEmpty())
{
reader.raiseError(QCoreApplication::translate("CPluginSpec", "'%1' misses attribute '%2'")
.arg(PLUGIN_SPEC_DEPENDENCY)
.arg(PLUGIN_SPEC_DEPENDENCY_NAME));
return;
}
// TODO: Read version dependency plugin
QString dependencyVersion = reader.attributes().value(PLUGIN_SPEC_DEPENDENCY_VERSION).toString();
m_dependencies.push_back(dependencyName);
}
}
}
void PluginSpec::setEnabled(bool enabled)
{ {
m_enabled = enabled; m_enabled = enabled;
} }
bool CPluginSpec::isEnabled() const bool PluginSpec::isEnabled() const
{ {
return m_enabled; return m_enabled;
} }
bool CPluginSpec::loadLibrary() bool PluginSpec::loadLibrary()
{ {
if (m_hasError) if (m_hasError)
return false; return false;
if (m_state != State::Read) if (m_state != State::Resolved)
{ {
if (m_state == State::Loaded) if (m_state == State::Loaded)
return true; return true;
return reportError(QCoreApplication::translate("CPluginSpec", "Loading the library failed because state != Resolved")); return reportError(QCoreApplication::translate("PluginSpec", "Loading the library failed because state != Resolved"));
} }
QPluginLoader loader(m_filePath); QPluginLoader loader(m_filePath);
@ -155,38 +260,32 @@ bool CPluginSpec::loadLibrary()
if (!pluginObject) if (!pluginObject)
{ {
loader.unload(); loader.unload();
return reportError(QCoreApplication::translate("CPluginSpec", "Plugin is not valid (does not derive from IPlugin)")); return reportError(QCoreApplication::translate("PluginSpec", "Plugin is not valid (does not derive from IPlugin)"));
} }
pluginObject->setNelContext(&NLMISC::INelContext::getInstance()); pluginObject->setNelContext(&NLMISC::INelContext::getInstance());
m_name = pluginObject->name();
m_version = pluginObject->version();
m_vendor = pluginObject->vendor();
m_description = pluginObject->description();
m_state = State::Loaded; m_state = State::Loaded;
m_plugin = pluginObject; m_plugin = pluginObject;
return true; return true;
} }
bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs) bool PluginSpec::resolveDependencies(const QList<PluginSpec *> &specs)
{ {
if (m_hasError) if (m_hasError)
return false; return false;
if (m_state != State::Loaded) if (m_state != State::Read)
{ {
m_errorString = QCoreApplication::translate("CPluginSpec", "Resolving dependencies failed because state != Read"); m_errorString = QCoreApplication::translate("PluginSpec", "Resolving dependencies failed because state != Read");
m_hasError = true; m_hasError = true;
return false; return false;
} }
QList<CPluginSpec *> resolvedDependencies; QList<PluginSpec *> resolvedDependencies;
QStringList dependencies = m_plugin->dependencies(); Q_FOREACH(const QString &dependency, m_dependencies)
Q_FOREACH(const QString &dependency, dependencies)
{ {
CPluginSpec *found = 0; PluginSpec *found = 0;
Q_FOREACH(CPluginSpec *spec, specs) Q_FOREACH(PluginSpec *spec, specs)
{ {
if (QString::compare(dependency, spec->name(), Qt::CaseInsensitive) == 0) if (QString::compare(dependency, spec->name(), Qt::CaseInsensitive) == 0)
{ {
@ -199,7 +298,7 @@ bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs)
m_hasError = true; m_hasError = true;
if (!m_errorString.isEmpty()) if (!m_errorString.isEmpty())
m_errorString.append(QLatin1Char('\n')); m_errorString.append(QLatin1Char('\n'));
m_errorString.append(QCoreApplication::translate("CPluginSpec", "Could not resolve dependency '%1'") m_errorString.append(QCoreApplication::translate("PluginSpec", "Could not resolve dependency '%1'")
.arg(dependency)); .arg(dependency));
continue; continue;
} }
@ -209,34 +308,32 @@ bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs)
return false; return false;
m_dependencySpecs = resolvedDependencies; m_dependencySpecs = resolvedDependencies;
m_state = State::Resolved; m_state = State::Resolved;
return true; return true;
} }
bool CPluginSpec::initializePlugin() bool PluginSpec::initializePlugin()
{ {
if (m_hasError) if (m_hasError)
return false; return false;
if (m_state != State::Resolved) if (m_state != State::Loaded)
{ {
if (m_state == State::Initialized) if (m_state == State::Initialized)
return true; return true;
return reportError(QCoreApplication::translate("CPluginSpec", "Initializing the plugin failed because state != Resolved)")); return reportError(QCoreApplication::translate("PluginSpec", "Initializing the plugin failed because state != Loaded)"));
} }
if (!m_plugin) if (!m_plugin)
return reportError(QCoreApplication::translate("CPluginSpec", "Internal error: have no plugin instance to initialize")); return reportError(QCoreApplication::translate("PluginSpec", "Internal error: have no plugin instance to initialize"));
QString err; QString err;
if (!m_plugin->initialize(m_pluginManager, &err)) if (!m_plugin->initialize(m_pluginManager, &err))
return reportError(QCoreApplication::translate("CPluginSpec", "Plugin initialization failed: %1").arg(err)); return reportError(QCoreApplication::translate("PluginSpec", "Plugin initialization failed: %1").arg(err));
m_state = State::Initialized; m_state = State::Initialized;
return true; return true;
} }
bool CPluginSpec::initializeExtensions() bool PluginSpec::initializeExtensions()
{ {
if (m_hasError) if (m_hasError)
return false; return false;
@ -244,17 +341,17 @@ bool CPluginSpec::initializeExtensions()
{ {
if (m_state == State::Running) if (m_state == State::Running)
return true; return true;
return reportError(QCoreApplication::translate("CPluginSpec", "Cannot perform extensionsInitialized because state != Initialized")); return reportError(QCoreApplication::translate("PluginSpec", "Cannot perform extensionsInitialized because state != Initialized"));
} }
if (!m_plugin) if (!m_plugin)
return reportError(QCoreApplication::translate("CPluginSpec", "Internal error: have no plugin instance to perform extensionsInitialized")); return reportError(QCoreApplication::translate("PluginSpec", "Internal error: have no plugin instance to perform extensionsInitialized"));
m_plugin->extensionsInitialized(); m_plugin->extensionsInitialized();
m_state = State::Running; m_state = State::Running;
return true; return true;
} }
void CPluginSpec::stop() void PluginSpec::stop()
{ {
if (!m_plugin) if (!m_plugin)
return; return;
@ -262,7 +359,7 @@ void CPluginSpec::stop()
m_state = State::Stopped; m_state = State::Stopped;
} }
void CPluginSpec::kill() void PluginSpec::kill()
{ {
if (!m_plugin) if (!m_plugin)
return; return;
@ -271,17 +368,17 @@ void CPluginSpec::kill()
m_state = State::Deleted; m_state = State::Deleted;
} }
void CPluginSpec::setEnabledStartup(bool enabled) void PluginSpec::setEnabledStartup(bool enabled)
{ {
m_enabledStartup = enabled; m_enabledStartup = enabled;
} }
bool CPluginSpec::isEnabledStartup() const bool PluginSpec::isEnabledStartup() const
{ {
return m_enabledStartup; return m_enabledStartup;
} }
bool CPluginSpec::reportError(const QString &err) bool PluginSpec::reportError(const QString &err)
{ {
m_errorString = err; m_errorString = err;
m_hasError = true; m_hasError = true;

View file

@ -21,12 +21,14 @@
#include "iplugin_spec.h" #include "iplugin_spec.h"
#include "QtCore/QList" #include <QtCore/QList>
#include <QtCore/QStringList>
#include <QtCore/QXmlStreamReader>
namespace ExtensionSystem namespace ExtensionSystem
{ {
class CPluginSpec: public IPluginSpec class PluginSpec: public IPluginSpec
{ {
public: public:
virtual QString name() const; virtual QString name() const;
@ -44,18 +46,22 @@ public:
virtual int state() const; virtual int state() const;
virtual bool hasError() const; virtual bool hasError() const;
virtual QString errorString() const; virtual QString errorString() const;
QList<CPluginSpec *> dependencySpecs() const; QList<PluginSpec *> dependencySpecs() const;
/// Enables/disables load this plugin after restart the program /// Enables/disables load this plugin after restart the program
virtual void setEnabled(bool enabled); virtual void setEnabled(bool enabled);
virtual bool isEnabled() const; virtual bool isEnabled() const;
private: private:
CPluginSpec(); PluginSpec();
bool setFileName(const QString &fileName); bool setFileName(const QString &fileName);
bool setSpecFileName(const QString &specFileName);
bool readSpec();
void parseSpec(QXmlStreamReader &reader);
void parseDependency(QXmlStreamReader &reader);
bool loadLibrary(); bool loadLibrary();
bool resolveDependencies(const QList<CPluginSpec *> &specs); bool resolveDependencies(const QList<PluginSpec *> &specs);
bool initializePlugin(); bool initializePlugin();
bool initializeExtensions(); bool initializeExtensions();
void stop(); void stop();
@ -77,16 +83,19 @@ private:
QString m_vendor; QString m_vendor;
QString m_description; QString m_description;
QString m_nameSpecFile;
QString m_suffix;
int m_state; int m_state;
bool m_enabled, m_enabledStartup; bool m_enabled, m_enabledStartup;
bool m_hasError; bool m_hasError;
QString m_errorString; QString m_errorString;
QStringList m_dependencies;
IPlugin *m_plugin; IPlugin *m_plugin;
IPluginManager *m_pluginManager; IPluginManager *m_pluginManager;
QList<CPluginSpec *> m_dependencySpecs; QList<PluginSpec *> m_dependencySpecs;
friend class CPluginManager; friend class PluginManager;
}; };
} // namespace ExtensionSystem } // namespace ExtensionSystem

View file

@ -148,7 +148,7 @@ sint main(int argc, char **argv)
NLMISC::CLibrary::addLibPath((qApp->applicationDirPath() + QString("/../PlugIns/nel")).toStdString()); NLMISC::CLibrary::addLibPath((qApp->applicationDirPath() + QString("/../PlugIns/nel")).toStdString());
#endif #endif
ExtensionSystem::CPluginManager pluginManager; ExtensionSystem::PluginManager pluginManager;
pluginManager.setSettings(settings); pluginManager.setSettings(settings);
QStringList pluginPaths; QStringList pluginPaths;
#if !defined(NL_OS_MAC) #if !defined(NL_OS_MAC)

View file

@ -17,7 +17,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "core.h" #include "core.h"
#include "imenu_manager.h"
#include "context_manager.h" #include "context_manager.h"
#include "main_window.h" #include "main_window.h"
#include "../../extension_system/iplugin_manager.h" #include "../../extension_system/iplugin_manager.h"
@ -50,7 +49,7 @@ bool CoreImpl::showOptionsDialog(const QString &group,
return m_mainWindow->showOptionsDialog(group, page, parent); return m_mainWindow->showOptionsDialog(group, page, parent);
} }
IMenuManager *CoreImpl::menuManager() const MenuManager *CoreImpl::menuManager() const
{ {
return m_mainWindow->menuManager(); return m_mainWindow->menuManager();
} }

View file

@ -37,7 +37,7 @@ public:
const QString &page = QString(), const QString &page = QString(),
QWidget *parent = 0); QWidget *parent = 0);
virtual IMenuManager *menuManager() const; virtual MenuManager *menuManager() const;
virtual ContextManager *contextManager() const; virtual ContextManager *contextManager() const;
virtual QSettings *settings() const; virtual QSettings *settings() const;

View file

@ -23,97 +23,97 @@ namespace Core
namespace Constants namespace Constants
{ {
const char * const OVQT_VERSION_LONG = "0.1"; const char *const OVQT_VERSION_LONG = "0.8";
const char * const OVQT_VENDOR = "Ryzom Core"; const char *const OVQT_VENDOR = "Ryzom Core";
const char * const OVQT_YEAR = "2010, 2011"; const char *const OVQT_YEAR = "2010, 2011";
const char * const OVQT_CORE_PLUGIN = "Core"; const char *const OVQT_CORE_PLUGIN = "Core";
//mainwindow //mainwindow
const char * const MAIN_WINDOW = "ObjectViewerQt.MainWindow"; const char *const MAIN_WINDOW = "ObjectViewerQt.MainWindow";
//menubar //menubar
const char * const MENU_BAR = "ObjectViewerQt.MenuBar"; const char *const MENU_BAR = "ObjectViewerQt.MenuBar";
//menus //menus
const char * const M_FILE = "ObjectViewerQt.Menu.File"; const char *const M_FILE = "ObjectViewerQt.Menu.File";
const char * const M_EDIT = "ObjectViewerQt.Menu.Edit"; const char *const M_EDIT = "ObjectViewerQt.Menu.Edit";
const char * const M_VIEW = "ObjectViewerQt.Menu.View"; const char *const M_VIEW = "ObjectViewerQt.Menu.View";
const char * const M_SCENE = "ObjectViewerQt.Menu.Scene"; const char *const M_SCENE = "ObjectViewerQt.Menu.Scene";
const char * const M_TOOLS = "ObjectViewerQt.Menu.Tools"; const char *const M_TOOLS = "ObjectViewerQt.Menu.Tools";
const char * const M_WINDOW = "ObjectViewerQt.Menu.Window"; const char *const M_WINDOW = "ObjectViewerQt.Menu.Window";
const char * const M_HELP = "ObjectViewerQt.Menu.Help"; const char *const M_HELP = "ObjectViewerQt.Menu.Help";
const char * const M_FILE_RECENTFILES = "ObjectViewerQt.Menu.File.RecentFiles"; const char *const M_FILE_RECENTFILES = "ObjectViewerQt.Menu.File.RecentFiles";
const char * const M_SHEET = "ObjectViewerQt.Menu.Sheet"; const char *const M_SHEET = "ObjectViewerQt.Menu.Sheet";
//actions //actions
const char * const NEW = "ObjectViewerQt.New"; const char *const NEW = "ObjectViewerQt.New";
const char * const OPEN = "ObjectViewerQt.Open"; const char *const OPEN = "ObjectViewerQt.Open";
const char * const SAVE = "ObjectViewerQt.Save"; const char *const SAVE = "ObjectViewerQt.Save";
const char * const SAVE_AS = "ObjectViewerQt.SaveAs"; const char *const SAVE_AS = "ObjectViewerQt.SaveAs";
const char * const SAVE_ALL = "ObjectViewerQt.SaveAll"; const char *const SAVE_ALL = "ObjectViewerQt.SaveAll";
const char * const EXIT = "ObjectViewerQt.Exit"; const char *const EXIT = "ObjectViewerQt.Exit";
const char * const UNDO = "ObjectViewerQt.Undo"; const char *const UNDO = "ObjectViewerQt.Undo";
const char * const REDO = "ObjectViewerQt.Redo"; const char *const REDO = "ObjectViewerQt.Redo";
const char * const CUT = "ObjectViewerQt.Cut"; const char *const CUT = "ObjectViewerQt.Cut";
const char * const COPY = "ObjectViewerQt.Copy"; const char *const COPY = "ObjectViewerQt.Copy";
const char * const PASTE = "ObjectViewerQt.Paste"; const char *const PASTE = "ObjectViewerQt.Paste";
const char * const DEL = "ObjectViewerQt.Del"; const char *const DEL = "ObjectViewerQt.Del";
const char * const FIND = "ObjectViewerQt.Find"; const char *const FIND = "ObjectViewerQt.Find";
const char * const SELECT_ALL = "ObjectViewerQt.SelectAll"; const char *const SELECT_ALL = "ObjectViewerQt.SelectAll";
const char * const GOTO_POS = "ObjectViewerQt.Goto"; const char *const GOTO_POS = "ObjectViewerQt.Goto";
const char * const SETTINGS = "ObjectViewerQt.Settings"; const char *const SETTINGS = "ObjectViewerQt.Settings";
const char * const TOGGLE_FULLSCREEN = "ObjectViewerQt.ToggleFullScreen"; const char *const TOGGLE_FULLSCREEN = "ObjectViewerQt.ToggleFullScreen";
const char * const CLOSE = "ObjectViewerQt.Close"; const char *const CLOSE = "ObjectViewerQt.Close";
const char * const CLOSEALL = "ObjectViewerQt.CloseAll"; const char *const CLOSEALL = "ObjectViewerQt.CloseAll";
const char * const CLOSEOTHERS = "ObjectViewerQt.CloseOthers"; const char *const CLOSEOTHERS = "ObjectViewerQt.CloseOthers";
const char * const ABOUT = "ObjectViewerQt.About"; const char *const ABOUT = "ObjectViewerQt.About";
const char * const ABOUT_PLUGINS = "ObjectViewerQt.AboutPlugins"; const char *const ABOUT_PLUGINS = "ObjectViewerQt.AboutPlugins";
const char * const ABOUT_QT = "ObjectViewerQt.AboutQt"; const char *const ABOUT_QT = "ObjectViewerQt.AboutQt";
//settings //settings
const char * const SETTINGS_CATEGORY_GENERAL = "general"; const char *const SETTINGS_CATEGORY_GENERAL = "general";
const char * const SETTINGS_CATEGORY_GENERAL_ICON = ":/icons/ic_nel_generic_settings.png"; const char *const SETTINGS_CATEGORY_GENERAL_ICON = ":/icons/ic_nel_generic_settings.png";
const char * const SETTINGS_TR_CATEGORY_GENERAL = QT_TR_NOOP("General"); const char *const SETTINGS_TR_CATEGORY_GENERAL = QT_TR_NOOP("General");
const char * const MAIN_WINDOW_SECTION = "MainWindow"; const char *const MAIN_WINDOW_SECTION = "MainWindow";
const char * const MAIN_WINDOW_STATE = "WindowState"; const char *const MAIN_WINDOW_STATE = "WindowState";
const char * const MAIN_WINDOW_GEOMETRY = "WindowGeometry"; const char *const MAIN_WINDOW_GEOMETRY = "WindowGeometry";
const char * const QT_STYLE = "QtStyle"; const char *const QT_STYLE = "QtStyle";
const char * const QT_PALETTE = "QtPalette"; const char *const QT_PALETTE = "QtPalette";
const char * const LANGUAGE = "Language"; const char *const LANGUAGE = "Language";
const char * const PLUGINS_PATH = "PluginPath"; const char *const PLUGINS_PATH = "PluginPath";
const char * const DATA_PATH_SECTION = "DataPath"; const char *const DATA_PATH_SECTION = "DataPath";
const char * const SEARCH_PATHS = "SearchPaths"; const char *const SEARCH_PATHS = "SearchPaths";
const char * const RECURSIVE_SEARCH_PATHS = "RecursiveSearchPathes"; const char *const RECURSIVE_SEARCH_PATHS = "RecursiveSearchPathes";
const char * const LEVELDESIGN_PATH = "LevelDesignPath"; const char *const LEVELDESIGN_PATH = "LevelDesignPath";
const char * const ASSETS_PATH = "AssetsPath"; const char *const ASSETS_PATH = "AssetsPath";
const char * const PRIMITIVES_PATH = "PrimitivesPath"; const char *const PRIMITIVES_PATH = "PrimitivesPath";
const char * const LIGOCONFIG_FILE = "LigoConfigFile"; const char *const LIGOCONFIG_FILE = "LigoConfigFile";
const char * const REMAP_EXTENSIONS = "RemapExtensions"; const char *const REMAP_EXTENSIONS = "RemapExtensions";
const char * const LOG_SECTION = "LogSettings"; const char *const LOG_SECTION = "LogSettings";
const char * const LOG_ERROR = "LogError"; const char *const LOG_ERROR = "LogError";
const char * const LOG_WARNING = "LogWarning"; const char *const LOG_WARNING = "LogWarning";
const char * const LOG_DEBUG = "LogDebug"; const char *const LOG_DEBUG = "LogDebug";
const char * const LOG_ASSERT = "LogAssert"; const char *const LOG_ASSERT = "LogAssert";
const char * const LOG_INFO = "LogInfo"; const char *const LOG_INFO = "LogInfo";
//resources //resources
const char * const ICON_NEL = ":/core/images/nel.png"; const char *const ICON_NEL = ":/core/images/nel.png";
const char * const ICON_SETTINGS = ":/core/images/preferences.png"; const char *const ICON_SETTINGS = ":/core/images/preferences.png";
const char * const ICON_PILL = ":/core/icons/ic_nel_pill.png"; const char *const ICON_PILL = ":/core/icons/ic_nel_pill.png";
const char * const ICON_OPEN = ":/core/icons/ic_nel_open.png"; const char *const ICON_OPEN = ":/core/icons/ic_nel_open.png";
const char * const ICON_NEW = ":/core/icons/ic_nel_new.png"; const char *const ICON_NEW = ":/core/icons/ic_nel_new.png";
const char * const ICON_SAVE = ":/core/icons/ic_nel_save.png"; const char *const ICON_SAVE = ":/core/icons/ic_nel_save.png";
const char * const ICON_SAVE_AS = ":/core/icons/ic_nel_save_as.png"; const char *const ICON_SAVE_AS = ":/core/icons/ic_nel_save_as.png";
const char * const ICON_CRASH = ":/core/icons/ic_nel_crash.png"; const char *const ICON_CRASH = ":/core/icons/ic_nel_crash.png";
const char * const ICON_UNDO = ":/core/icons/ic_nel_undo.png"; const char *const ICON_UNDO = ":/core/icons/ic_nel_undo.png";
const char * const ICON_REDO = ":/core/icons/ic_nel_redo.png"; const char *const ICON_REDO = ":/core/icons/ic_nel_redo.png";
} // namespace Constants } // namespace Constants
} // namespace Core } // namespace Core

View file

@ -64,8 +64,8 @@ bool CorePlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QStr
bool success = m_mainWindow->initialize(errorString); bool success = m_mainWindow->initialize(errorString);
GeneralSettingsPage *generalSettings = new GeneralSettingsPage(this); GeneralSettingsPage *generalSettings = new GeneralSettingsPage(this);
CSearchPathsSettingsPage *searchPathPage = new CSearchPathsSettingsPage(false, this); SearchPathsSettingsPage *searchPathPage = new SearchPathsSettingsPage(false, this);
CSearchPathsSettingsPage *recureseSearchPathPage = new CSearchPathsSettingsPage(true, this); SearchPathsSettingsPage *recureseSearchPathPage = new SearchPathsSettingsPage(true, this);
generalSettings->applyGeneralSettings(); generalSettings->applyGeneralSettings();
searchPathPage->applySearchPaths(); searchPathPage->applySearchPaths();
@ -95,31 +95,6 @@ void CorePlugin::setNelContext(NLMISC::INelContext *nelContext)
m_libContext = new NLMISC::CLibraryContext(*nelContext); m_libContext = new NLMISC::CLibraryContext(*nelContext);
} }
QString CorePlugin::name() const
{
return QLatin1String(Constants::OVQT_CORE_PLUGIN);
}
QString CorePlugin::version() const
{
return Constants::OVQT_VERSION_LONG;
}
QString CorePlugin::vendor() const
{
return Constants::OVQT_VENDOR;
}
QString CorePlugin::description() const
{
return "Core plugin.";
}
QStringList CorePlugin::dependencies() const
{
return QStringList();
}
void CorePlugin::addAutoReleasedObject(QObject *obj) void CorePlugin::addAutoReleasedObject(QObject *obj)
{ {
m_plugMan->addObject(obj); m_plugMan->addObject(obj);

View file

@ -53,12 +53,6 @@ public:
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
ExtensionSystem::IPluginManager *pluginManager() const ExtensionSystem::IPluginManager *pluginManager() const

View file

@ -148,25 +148,25 @@ void GeneralSettingsPage::setLevelDesignPath()
} }
} }
void GeneralSettingsPage::setPrimitivesPath() void GeneralSettingsPage::setPrimitivesPath()
{ {
QString newPath = QFileDialog::getExistingDirectory(0, tr("Set the primitives path"), QString newPath = QFileDialog::getExistingDirectory(0, tr("Set the primitives path"),
m_ui.primitivesPathLineEdit->text()); m_ui.primitivesPathLineEdit->text());
if (!newPath.isEmpty()) if (!newPath.isEmpty())
{ {
m_ui.primitivesPathLineEdit->setText(newPath); m_ui.primitivesPathLineEdit->setText(newPath);
} }
} }
void GeneralSettingsPage::setLigoConfigFile() void GeneralSettingsPage::setLigoConfigFile()
{ {
QString newFile = QFileDialog::getOpenFileName(0, tr("Set the ligo config file"), QString newFile = QFileDialog::getOpenFileName(0, tr("Set the ligo config file"),
m_ui.ligoConfigFileLineEdit->text()); m_ui.ligoConfigFileLineEdit->text());
if (!newFile.isEmpty()) if (!newFile.isEmpty())
{ {
m_ui.ligoConfigFileLineEdit->setText(newFile); m_ui.ligoConfigFileLineEdit->setText(newFile);
} }
} }
void GeneralSettingsPage::setAssetsPath() void GeneralSettingsPage::setAssetsPath()

View file

@ -35,7 +35,7 @@ class IPluginManager;
namespace Core namespace Core
{ {
class IMenuManager; class MenuManager;
class ContextManager; class ContextManager;
class CORE_EXPORT ICore : public QObject class CORE_EXPORT ICore : public QObject
@ -52,7 +52,7 @@ public:
const QString &page = QString(), const QString &page = QString(),
QWidget *parent = 0) = 0; QWidget *parent = 0) = 0;
virtual IMenuManager *menuManager() const = 0; virtual MenuManager *menuManager() const = 0;
virtual ContextManager *contextManager() const = 0; virtual ContextManager *contextManager() const = 0;
virtual QSettings *settings() const = 0; virtual QSettings *settings() const = 0;

View file

@ -1,62 +0,0 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef IMENU_MANAGER_H
#define IMENU_MANAGER_H
#include "core_global.h"
#include <QtCore/QObject>
#include <QtCore/QList>
QT_BEGIN_NAMESPACE
class QMenu;
class QAction;
class QString;
class QMenuBar;
QT_END_NAMESPACE
namespace Core
{
/*
@interface IMenuManager
@brief The IMenuManager is an interface for providing a registration of menus and menu item.
@details The IMenuManager provides centralized access to menus and menu items.
All menus and menu items should be registered in the IMenuManager.
*/
class CORE_EXPORT IMenuManager : public QObject
{
Q_OBJECT
public:
IMenuManager(QObject *parent = 0): QObject(parent) {}
virtual ~IMenuManager() {}
virtual void registerMenu(QMenu *menu, const QString &id) = 0;
virtual void registerAction(QAction *action, const QString &id) = 0;
virtual QMenu *menu(const QString &id) const = 0;
virtual QAction *action(const QString &id) const = 0;
virtual void unregisterMenu(const QString &id) = 0;
virtual void unregisterAction(const QString &id) = 0;
virtual QMenuBar *menuBar() const = 0;
};
} // namespace Core
#endif // IMENU_MANAGER_H

View file

@ -65,8 +65,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
setMenuBar(m_menuBar); setMenuBar(m_menuBar);
#endif #endif
m_menuManager = new MenuManager(this); m_menuManager = new MenuManager(m_menuBar, this);
m_menuManager->setMenuBar(m_menuBar);
m_tabWidget = new QTabWidget(this); m_tabWidget = new QTabWidget(this);
m_tabWidget->setTabPosition(QTabWidget::South); m_tabWidget->setTabPosition(QTabWidget::South);
@ -114,7 +113,7 @@ void MainWindow::extensionsInitialized()
show(); show();
} }
IMenuManager *MainWindow::menuManager() const MenuManager *MainWindow::menuManager() const
{ {
return m_menuManager; return m_menuManager;
} }
@ -205,7 +204,7 @@ bool MainWindow::showOptionsDialog(const QString &group,
{ {
if (!parent) if (!parent)
parent = this; parent = this;
CSettingsDialog settingsDialog(m_pluginManager, group, page, parent); SettingsDialog settingsDialog(m_pluginManager, group, page, parent);
settingsDialog.show(); settingsDialog.show();
bool ok = settingsDialog.execDialog(); bool ok = settingsDialog.execDialog();
if (ok) if (ok)

View file

@ -34,7 +34,6 @@ namespace Core
class CSettingsDialog; class CSettingsDialog;
class CorePlugin; class CorePlugin;
class IContext; class IContext;
class IMenuManager;
class MenuManager; class MenuManager;
class ContextManager; class ContextManager;
class CoreImpl; class CoreImpl;
@ -50,7 +49,7 @@ public:
bool initialize(QString *errorString); bool initialize(QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
IMenuManager *menuManager() const; MenuManager *menuManager() const;
ContextManager *contextManager() const; ContextManager *contextManager() const;
QSettings *settings() const; QSettings *settings() const;

View file

@ -21,74 +21,76 @@
// NeL includes // NeL includes
#include <nel/misc/debug.h> #include <nel/misc/debug.h>
// Qt includes
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
namespace Core namespace Core
{ {
MenuManager::MenuManager(QObject *parent) struct MenuManagerPrivate
: IMenuManager(parent),
_menuBar(0)
{ {
MenuManagerPrivate(): m_menuBar(0) {}
QMenuBar *m_menuBar;
typedef QHash<QString, QMenu *> IdMenuMap;
IdMenuMap m_menuMap;
typedef QHash<QString, QAction *> IdActionMap;
IdActionMap m_actionMap;
};
MenuManager::MenuManager(QMenuBar *menuBar, QObject *parent)
: QObject(parent),
d(new MenuManagerPrivate())
{
d->m_menuBar = menuBar;
} }
MenuManager::~MenuManager() MenuManager::~MenuManager()
{ {
_menuMap.clear(); d->m_menuMap.clear();
delete d;
} }
void MenuManager::registerMenu(QMenu *menu, const QString &id) void MenuManager::registerMenu(QMenu *menu, const QString &id)
{ {
menu->setObjectName(id); menu->setObjectName(id);
_menuMap.insert(id, menu); d->m_menuMap.insert(id, menu);
} }
void MenuManager::registerAction(QAction *action, const QString &id) void MenuManager::registerAction(QAction *action, const QString &id)
{ {
action->setObjectName(id); action->setObjectName(id);
_actionMap.insert(id, action); d->m_actionMap.insert(id, action);
} }
QMenu *MenuManager::menu(const QString &id) const QMenu *MenuManager::menu(const QString &id) const
{ {
QMenu *result = 0; QMenu *result = 0;
if (!_menuMap.contains(id)) if (!d->m_menuMap.contains(id))
nlwarning("QMenu %s not found", id.toStdString().c_str()); nlwarning("QMenu %s not found", id.toStdString().c_str());
else else
result = _menuMap.value(id); result = d->m_menuMap.value(id);
return result; return result;
} }
QAction *MenuManager::action(const QString &id) const QAction *MenuManager::action(const QString &id) const
{ {
QAction *result = 0; QAction *result = 0;
if (!_actionMap.contains(id)) if (!d->m_actionMap.contains(id))
nlwarning("QAction %s not found", id.toStdString().c_str()); nlwarning("QAction %s not found", id.toStdString().c_str());
else else
result = _actionMap.value(id); result = d->m_actionMap.value(id);
return result; return result;
} }
void MenuManager::unregisterMenu(const QString &id) void MenuManager::unregisterMenu(const QString &id)
{ {
_menuMap.remove(id); d->m_menuMap.remove(id);
} }
void MenuManager::unregisterAction(const QString &id) void MenuManager::unregisterAction(const QString &id)
{ {
_actionMap.remove(id); d->m_actionMap.remove(id);
} }
QMenuBar *MenuManager::menuBar() const QMenuBar *MenuManager::menuBar() const
{ {
return _menuBar; return d->m_menuBar;
}
void MenuManager::setMenuBar(QMenuBar *menuBar)
{
_menuBar = menuBar;
} }
} /* namespace Core */ } /* namespace Core */

View file

@ -19,39 +19,47 @@
#define MENU_MANAGER_H #define MENU_MANAGER_H
// Project includes // Project includes
#include "imenu_manager.h" #include "core_global.h"
// Qt includes // Qt includes
#include <QtCore/QHash> #include <QtCore/QHash>
#include <QtCore/QObject>
#include <QtCore/QList>
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
namespace Core namespace Core
{ {
struct MenuManagerPrivate;
class MenuManager : public IMenuManager /*
@interface MenuManager
@brief The MenuManager provide the interface for registration of menus and menu item.
@details The MenuManager provides centralized access to menus and menu items.
All menus and menu items should be registered in the MenuManager.
*/
class CORE_EXPORT MenuManager: public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
MenuManager(QObject *parent = 0); explicit MenuManager(QMenuBar *menuBar, QObject *parent = 0);
virtual ~MenuManager(); virtual ~MenuManager();
virtual void registerMenu(QMenu *menu, const QString &id); void registerMenu(QMenu *menu, const QString &id);
virtual void registerAction(QAction *action, const QString &id); void registerAction(QAction *action, const QString &id);
virtual QMenu *menu(const QString &id) const; QMenu *menu(const QString &id) const;
virtual QAction *action(const QString &id) const; QAction *action(const QString &id) const;
virtual void unregisterMenu(const QString &id); void unregisterMenu(const QString &id);
virtual void unregisterAction(const QString &id); void unregisterAction(const QString &id);
virtual QMenuBar *menuBar() const; QMenuBar *menuBar() const;
void setMenuBar(QMenuBar *menuBar);
private: private:
QMenuBar *_menuBar;
typedef QHash<QString, QMenu *> IdMenuMap; MenuManagerPrivate *d;
IdMenuMap _menuMap;
typedef QHash<QString, QAction *> IdActionMap;
IdActionMap _actionMap;
}; };
} // namespace Core } // namespace Core

View file

@ -0,0 +1,7 @@
<plugin-spec>
<library-name>ovqt_plugin_core</library-name>
<name>Core</name>
<version>0.8</version>
<vendor>Ryzom Core</vendor>
<description>Core plugin.</description>
</plugin-spec>

View file

@ -112,7 +112,7 @@
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="../object_viewer_qt.qrc"/> <include location="../../object_viewer_qt.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>

View file

@ -40,9 +40,9 @@ typedef struct _MARGINS
int cyBottomHeight; int cyBottomHeight;
} MARGINS, *PMARGINS; } MARGINS, *PMARGINS;
typedef HRESULT (WINAPI *PtrDwmIsCompositionEnabled)(BOOL* pfEnabled); typedef HRESULT (WINAPI *PtrDwmIsCompositionEnabled)(BOOL *pfEnabled);
typedef HRESULT (WINAPI *PtrDwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS* pMarInset); typedef HRESULT (WINAPI *PtrDwmExtendFrameIntoClientArea)(HWND hWnd, const MARGINS *pMarInset);
typedef HRESULT (WINAPI *PtrDwmEnableBlurBehindWindow)(HWND hWnd, const DWM_BLURBEHIND* pBlurBehind); typedef HRESULT (WINAPI *PtrDwmEnableBlurBehindWindow)(HWND hWnd, const DWM_BLURBEHIND *pBlurBehind);
typedef HRESULT (WINAPI *PtrDwmGetColorizationColor)(DWORD *pcrColorization, BOOL *pfOpaqueBlend); typedef HRESULT (WINAPI *PtrDwmGetColorizationColor)(DWORD *pcrColorization, BOOL *pfOpaqueBlend);
static PtrDwmIsCompositionEnabled pDwmIsCompositionEnabled= 0; static PtrDwmIsCompositionEnabled pDwmIsCompositionEnabled= 0;

View file

@ -33,18 +33,18 @@ namespace Core
QString lastDir = "."; QString lastDir = ".";
CSearchPathsSettingsPage::CSearchPathsSettingsPage(bool recurse, QObject *parent) SearchPathsSettingsPage::SearchPathsSettingsPage(bool recurse, QObject *parent)
: IOptionsPage(parent), : IOptionsPage(parent),
m_recurse(recurse), m_recurse(recurse),
m_page(0) m_page(0)
{ {
} }
CSearchPathsSettingsPage::~CSearchPathsSettingsPage() SearchPathsSettingsPage::~SearchPathsSettingsPage()
{ {
} }
QString CSearchPathsSettingsPage::id() const QString SearchPathsSettingsPage::id() const
{ {
if (m_recurse) if (m_recurse)
return QLatin1String("search_recurse_paths"); return QLatin1String("search_recurse_paths");
@ -52,7 +52,7 @@ QString CSearchPathsSettingsPage::id() const
return QLatin1String("search_paths"); return QLatin1String("search_paths");
} }
QString CSearchPathsSettingsPage::trName() const QString SearchPathsSettingsPage::trName() const
{ {
if (m_recurse) if (m_recurse)
return tr("Search Recurse Paths"); return tr("Search Recurse Paths");
@ -60,22 +60,22 @@ QString CSearchPathsSettingsPage::trName() const
return tr("Search Paths"); return tr("Search Paths");
} }
QString CSearchPathsSettingsPage::category() const QString SearchPathsSettingsPage::category() const
{ {
return QLatin1String(Constants::SETTINGS_CATEGORY_GENERAL); return QLatin1String(Constants::SETTINGS_CATEGORY_GENERAL);
} }
QString CSearchPathsSettingsPage::trCategory() const QString SearchPathsSettingsPage::trCategory() const
{ {
return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL); return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL);
} }
QIcon CSearchPathsSettingsPage::categoryIcon() const QIcon SearchPathsSettingsPage::categoryIcon() const
{ {
return QIcon(); return QIcon();
} }
QWidget *CSearchPathsSettingsPage::createPage(QWidget *parent) QWidget *SearchPathsSettingsPage::createPage(QWidget *parent)
{ {
m_page = new QWidget(parent); m_page = new QWidget(parent);
m_ui.setupUi(m_page); m_ui.setupUi(m_page);
@ -90,19 +90,19 @@ QWidget *CSearchPathsSettingsPage::createPage(QWidget *parent)
return m_page; return m_page;
} }
void CSearchPathsSettingsPage::apply() void SearchPathsSettingsPage::apply()
{ {
writeSettings(); writeSettings();
applySearchPaths(); applySearchPaths();
} }
void CSearchPathsSettingsPage::finish() void SearchPathsSettingsPage::finish()
{ {
delete m_page; delete m_page;
m_page = 0; m_page = 0;
} }
void CSearchPathsSettingsPage::applySearchPaths() void SearchPathsSettingsPage::applySearchPaths()
{ {
QStringList paths, remapExt; QStringList paths, remapExt;
QSettings *settings = Core::ICore::instance()->settings(); QSettings *settings = Core::ICore::instance()->settings();
@ -124,7 +124,7 @@ void CSearchPathsSettingsPage::applySearchPaths()
} }
} }
void CSearchPathsSettingsPage::addPath() void SearchPathsSettingsPage::addPath()
{ {
QString newPath = QFileDialog::getExistingDirectory(m_page, "", lastDir); QString newPath = QFileDialog::getExistingDirectory(m_page, "", lastDir);
if (!newPath.isEmpty()) if (!newPath.isEmpty())
@ -139,7 +139,7 @@ void CSearchPathsSettingsPage::addPath()
checkEnabledButton(); checkEnabledButton();
} }
void CSearchPathsSettingsPage::delPath() void SearchPathsSettingsPage::delPath()
{ {
QListWidgetItem *removeItem = m_ui.pathsListWidget->takeItem(m_ui.pathsListWidget->currentRow()); QListWidgetItem *removeItem = m_ui.pathsListWidget->takeItem(m_ui.pathsListWidget->currentRow());
if (!removeItem) if (!removeItem)
@ -148,7 +148,7 @@ void CSearchPathsSettingsPage::delPath()
checkEnabledButton(); checkEnabledButton();
} }
void CSearchPathsSettingsPage::upPath() void SearchPathsSettingsPage::upPath()
{ {
int currentRow = m_ui.pathsListWidget->currentRow(); int currentRow = m_ui.pathsListWidget->currentRow();
if (!(currentRow == 0)) if (!(currentRow == 0))
@ -159,7 +159,7 @@ void CSearchPathsSettingsPage::upPath()
} }
} }
void CSearchPathsSettingsPage::downPath() void SearchPathsSettingsPage::downPath()
{ {
int currentRow = m_ui.pathsListWidget->currentRow(); int currentRow = m_ui.pathsListWidget->currentRow();
if (!(currentRow == m_ui.pathsListWidget->count()-1)) if (!(currentRow == m_ui.pathsListWidget->count()-1))
@ -170,7 +170,7 @@ void CSearchPathsSettingsPage::downPath()
} }
} }
void CSearchPathsSettingsPage::readSettings() void SearchPathsSettingsPage::readSettings()
{ {
QStringList paths; QStringList paths;
QSettings *settings = Core::ICore::instance()->settings(); QSettings *settings = Core::ICore::instance()->settings();
@ -189,7 +189,7 @@ void CSearchPathsSettingsPage::readSettings()
} }
} }
void CSearchPathsSettingsPage::writeSettings() void SearchPathsSettingsPage::writeSettings()
{ {
QStringList paths; QStringList paths;
for (int i = 0; i < m_ui.pathsListWidget->count(); ++i) for (int i = 0; i < m_ui.pathsListWidget->count(); ++i)
@ -205,7 +205,7 @@ void CSearchPathsSettingsPage::writeSettings()
settings->sync(); settings->sync();
} }
void CSearchPathsSettingsPage::checkEnabledButton() void SearchPathsSettingsPage::checkEnabledButton()
{ {
bool bEnabled = true; bool bEnabled = true;
if (m_ui.pathsListWidget->count() == 0) if (m_ui.pathsListWidget->count() == 0)

View file

@ -30,15 +30,15 @@ class QWidget;
namespace Core namespace Core
{ {
/** /**
@class CSearchPathsSettingsPage @class SearchPathsSettingsPage
*/ */
class CSearchPathsSettingsPage : public Core::IOptionsPage class SearchPathsSettingsPage : public Core::IOptionsPage
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CSearchPathsSettingsPage(bool recurse, QObject *parent = 0); explicit SearchPathsSettingsPage(bool recurse, QObject *parent = 0);
~CSearchPathsSettingsPage(); ~SearchPathsSettingsPage();
QString id() const; QString id() const;
QString trName() const; QString trName() const;
@ -66,7 +66,7 @@ private:
bool m_recurse; bool m_recurse;
QWidget *m_page; QWidget *m_page;
Ui::CSearchPathsSettingsPage m_ui; Ui::SearchPathsSettingsPage m_ui;
}; };
} // namespace Core } // namespace Core

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>CSearchPathsSettingsPage</class> <class>SearchPathsSettingsPage</class>
<widget class="QWidget" name="CSearchPathsSettingsPage"> <widget class="QWidget" name="SearchPathsSettingsPage">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>

View file

@ -35,33 +35,33 @@ Q_DECLARE_METATYPE(PageData);
namespace Core namespace Core
{ {
CSettingsDialog::CSettingsDialog(ExtensionSystem::IPluginManager *pluginManager, SettingsDialog::SettingsDialog(ExtensionSystem::IPluginManager *pluginManager,
const QString &categoryId, const QString &categoryId,
const QString &pageId, const QString &pageId,
QWidget *parent) QWidget *parent)
: QDialog(parent), : QDialog(parent),
_applied(false) m_applied(false)
{ {
_ui.setupUi(this); m_ui.setupUi(this);
_plugMan = pluginManager; m_plugMan = pluginManager;
QString initialCategory = categoryId; QString initialCategory = categoryId;
QString initialPage = pageId; QString initialPage = pageId;
_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true); m_ui.buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
connect(_ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); connect(m_ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply()));
_ui.splitter->setCollapsible(1, false); m_ui.splitter->setCollapsible(1, false);
_ui.pageTree->header()->setVisible(false); m_ui.pageTree->header()->setVisible(false);
connect(_ui.pageTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), connect(m_ui.pageTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
this, SLOT(pageSelected())); this, SLOT(pageSelected()));
QMap<QString, QTreeWidgetItem *> categories; QMap<QString, QTreeWidgetItem *> categories;
QList<IOptionsPage *> pages = _plugMan->getObjects<IOptionsPage>(); QList<IOptionsPage *> pages = m_plugMan->getObjects<IOptionsPage>();
int index = 0; int index = 0;
Q_FOREACH(IOptionsPage *page, pages) Q_FOREACH(IOptionsPage *page, pages)
@ -82,7 +82,7 @@ CSettingsDialog::CSettingsDialog(ExtensionSystem::IPluginManager *pluginManager,
QTreeWidgetItem *treeitem; QTreeWidgetItem *treeitem;
if (!categories.contains(currentCategory)) if (!categories.contains(currentCategory))
{ {
treeitem = new QTreeWidgetItem(_ui.pageTree); treeitem = new QTreeWidgetItem(m_ui.pageTree);
treeitem->setText(0, trCategories.at(0)); treeitem->setText(0, trCategories.at(0));
treeitem->setData(0, Qt::UserRole, qVariantFromValue(pageData)); treeitem->setData(0, Qt::UserRole, qVariantFromValue(pageData));
categories.insert(currentCategory, treeitem); categories.insert(currentCategory, treeitem);
@ -108,13 +108,13 @@ CSettingsDialog::CSettingsDialog(ExtensionSystem::IPluginManager *pluginManager,
categories.value(currentCategory)->addChild(item); categories.value(currentCategory)->addChild(item);
_pages.append(page); m_pages.append(page);
_ui.stackedPages->addWidget(page->createPage(_ui.stackedPages)); m_ui.stackedPages->addWidget(page->createPage(m_ui.stackedPages));
if (page->id() == initialPage && currentCategory == initialCategory) if (page->id() == initialPage && currentCategory == initialCategory)
{ {
_ui.stackedPages->setCurrentIndex(_ui.stackedPages->count()); m_ui.stackedPages->setCurrentIndex(m_ui.stackedPages->count());
_ui.pageTree->setCurrentItem(item); m_ui.pageTree->setCurrentItem(item);
} }
index++; index++;
@ -122,30 +122,30 @@ CSettingsDialog::CSettingsDialog(ExtensionSystem::IPluginManager *pluginManager,
QList<int> sizes; QList<int> sizes;
sizes << 150 << 300; sizes << 150 << 300;
_ui.splitter->setSizes(sizes); m_ui.splitter->setSizes(sizes);
_ui.splitter->setStretchFactor(_ui.splitter->indexOf(_ui.pageTree), 0); m_ui.splitter->setStretchFactor(m_ui.splitter->indexOf(m_ui.pageTree), 0);
_ui.splitter->setStretchFactor(_ui.splitter->indexOf(_ui.layoutWidget), 1); m_ui.splitter->setStretchFactor(m_ui.splitter->indexOf(m_ui.layoutWidget), 1);
} }
CSettingsDialog::~CSettingsDialog() SettingsDialog::~SettingsDialog()
{ {
} }
void CSettingsDialog::pageSelected() void SettingsDialog::pageSelected()
{ {
QTreeWidgetItem *item = _ui.pageTree->currentItem(); QTreeWidgetItem *item = m_ui.pageTree->currentItem();
PageData data = item->data(0, Qt::UserRole).value<PageData>(); PageData data = item->data(0, Qt::UserRole).value<PageData>();
int index = data.index; int index = data.index;
_currentCategory = data.category; m_currentCategory = data.category;
_currentPage = data.id; m_currentPage = data.id;
_ui.stackedPages->setCurrentIndex(index); m_ui.stackedPages->setCurrentIndex(index);
} }
void CSettingsDialog::accept() void SettingsDialog::accept()
{ {
_applied = true; m_applied = true;
Q_FOREACH(IOptionsPage *page, _pages) Q_FOREACH(IOptionsPage *page, m_pages)
{ {
page->apply(); page->apply();
page->finish(); page->finish();
@ -153,28 +153,28 @@ void CSettingsDialog::accept()
done(QDialog::Accepted); done(QDialog::Accepted);
} }
void CSettingsDialog::reject() void SettingsDialog::reject()
{ {
Q_FOREACH(IOptionsPage *page, _pages) Q_FOREACH(IOptionsPage *page, m_pages)
page->finish(); page->finish();
done(QDialog::Rejected); done(QDialog::Rejected);
} }
void CSettingsDialog::apply() void SettingsDialog::apply()
{ {
Q_FOREACH(IOptionsPage *page, _pages) Q_FOREACH(IOptionsPage *page, m_pages)
page->apply(); page->apply();
_applied = true; m_applied = true;
} }
bool CSettingsDialog::execDialog() bool SettingsDialog::execDialog()
{ {
_applied = false; m_applied = false;
exec(); exec();
return _applied; return m_applied;
} }
void CSettingsDialog::done(int val) void SettingsDialog::done(int val)
{ {
QDialog::done(val); QDialog::done(val);
} }

View file

@ -35,17 +35,17 @@ class IOptionsPage;
@class CSettingsDialog @class CSettingsDialog
@brief Settings dialog @brief Settings dialog
*/ */
class CSettingsDialog: public QDialog class SettingsDialog: public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
CSettingsDialog(ExtensionSystem::IPluginManager *pluginManager, SettingsDialog(ExtensionSystem::IPluginManager *pluginManager,
const QString &initialCategory = QString(), const QString &initialCategory = QString(),
const QString &initialPage = QString(), const QString &initialPage = QString(),
QWidget *parent = 0); QWidget *parent = 0);
~CSettingsDialog(); ~SettingsDialog();
/// Run the dialog and return true if 'Ok' was choosen or 'Apply' was invoked at least once /// Run the dialog and return true if 'Ok' was choosen or 'Apply' was invoked at least once
bool execDialog(); bool execDialog();
@ -60,14 +60,14 @@ private Q_SLOTS:
void apply(); void apply();
private: private:
QList<IOptionsPage *> _pages; QList<IOptionsPage *> m_pages;
bool _applied; bool m_applied;
QString _currentCategory; QString m_currentCategory;
QString _currentPage; QString m_currentPage;
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
Ui::CSettingsDialog _ui; Ui::SettingsDialog m_ui;
}; /* class CSettingsDialog */ }; /* class CSettingsDialog */
} /* namespace Core */ } /* namespace Core */

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>CSettingsDialog</class> <class>SettingsDialog</class>
<widget class="QDialog" name="CSettingsDialog"> <widget class="QDialog" name="SettingsDialog">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
@ -93,7 +93,7 @@
<connection> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>
<signal>accepted()</signal> <signal>accepted()</signal>
<receiver>CSettingsDialog</receiver> <receiver>SettingsDialog</receiver>
<slot>accept()</slot> <slot>accept()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
@ -109,7 +109,7 @@
<connection> <connection>
<sender>buttonBox</sender> <sender>buttonBox</sender>
<signal>rejected()</signal> <signal>rejected()</signal>
<receiver>CSettingsDialog</receiver> <receiver>SettingsDialog</receiver>
<slot>reject()</slot> <slot>reject()</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">

View file

@ -28,7 +28,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_disp_sheet_id MODULE ${SRC} ${OVQT_DISP_SHEET_ID_PLUGIN_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_DISP_SHEET_ID_PLUGIN_UI_HDRS}) ADD_LIBRARY(ovqt_plugin_disp_sheet_id MODULE ${SRC} ${OVQT_DISP_SHEET_ID_PLUGIN_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_DISP_SHEET_ID_PLUGIN_UI_HDRS})
TARGET_LINK_LIBRARIES(ovqt_plugin_disp_sheet_id ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES}) TARGET_LINK_LIBRARIES(ovqt_plugin_disp_sheet_id ovqt_plugin_core nelmisc ${QT_LIBRARIES})
IF(WITH_STLPORT) IF(WITH_STLPORT)
TARGET_LINK_LIBRARIES(ovqt_plugin_disp_sheet_id ${CMAKE_THREAD_LIBS_INIT}) TARGET_LINK_LIBRARIES(ovqt_plugin_disp_sheet_id ${CMAKE_THREAD_LIBS_INIT})

View file

@ -18,7 +18,7 @@
#include "disp_sheet_id_plugin.h" #include "disp_sheet_id_plugin.h"
#include "sheet_id_view.h" #include "sheet_id_view.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
// Qt includes // Qt includes
@ -37,13 +37,13 @@ using namespace SheetIdViewPlugin;
bool DispSheetIdPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) bool DispSheetIdPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{ {
Q_UNUSED(errorString); Q_UNUSED(errorString);
_plugMan = pluginManager; m_plugMan = pluginManager;
return true; return true;
} }
void DispSheetIdPlugin::extensionsInitialized() void DispSheetIdPlugin::extensionsInitialized()
{ {
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
QMenu *sheetMenu = menuManager->menu(Core::Constants::M_SHEET); QMenu *sheetMenu = menuManager->menu(Core::Constants::M_SHEET);
QAction *sheetIdViewAction = sheetMenu->addAction(tr("Sheet id view")); QAction *sheetIdViewAction = sheetMenu->addAction(tr("Sheet id view"));
@ -67,34 +67,7 @@ void DispSheetIdPlugin::setNelContext(NLMISC::INelContext *nelContext)
// This only applies to platforms without PIC, e.g. Windows. // This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised()); nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS #endif // NL_OS_WINDOWS
_LibContext = new NLMISC::CLibraryContext(*nelContext); m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
QString DispSheetIdPlugin::name() const
{
return "Display sheet id";
}
QString DispSheetIdPlugin::version() const
{
return "1.0";
}
QString DispSheetIdPlugin::vendor() const
{
return "pemeon";
}
QString DispSheetIdPlugin::description() const
{
return "Display sheet id";
}
QStringList DispSheetIdPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
return list;
} }
Q_EXPORT_PLUGIN(DispSheetIdPlugin) Q_EXPORT_PLUGIN(DispSheetIdPlugin)

View file

@ -28,11 +28,6 @@ namespace NLMISC
class CLibraryContext; class CLibraryContext;
} }
namespace NLQT
{
class IPluginSpec;
}
namespace SheetIdViewPlugin namespace SheetIdViewPlugin
{ {
@ -44,23 +39,16 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
private Q_SLOTS: private Q_SLOTS:
void execMessageBox(); void execMessageBox();
protected: protected:
NLMISC::CLibraryContext *_LibContext; NLMISC::CLibraryContext *m_LibContext;
private: private:
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
}; };

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_disp_sheet_id</library-name>
<name>DisplaySheetId</name>
<version>1.0</version>
<vendor>pemeon</vendor>
<description>Display sheet id.</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -65,8 +65,8 @@ void SheetIdView::pushToTable()
m_ui.table->setColumnCount(2); m_ui.table->setColumnCount(2);
for (size_t i = 0; i < m_sheetList.size(); i++) for (size_t i = 0; i < m_sheetList.size(); i++)
{ {
QTableWidgetItem* item1 = new QTableWidgetItem(QString(m_sheetList[i].toString().c_str())); QTableWidgetItem *item1 = new QTableWidgetItem(QString(m_sheetList[i].toString().c_str()));
QTableWidgetItem* item2 = new QTableWidgetItem(QString("%1").arg(m_sheetList[i].asInt())); QTableWidgetItem *item2 = new QTableWidgetItem(QString("%1").arg(m_sheetList[i].asInt()));
m_ui.table->setItem(i,1,item1); m_ui.table->setItem(i,1,item1);
m_ui.table->setItem(i,2,item2); m_ui.table->setItem(i,2,item2);
} }

View file

@ -9,10 +9,10 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h) ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_PLUG_EXAMPLE_HDR plugin1.h SET(OVQT_PLUG_EXAMPLE_HDR example_plugin.h
qnel_widget.h qnel_widget.h
simple_viewer.h simple_viewer.h
example_settings_page.h) example_settings_page.h)
SET(OVQT_PLUG_EXAMPLE_UIS example_settings_page.ui) SET(OVQT_PLUG_EXAMPLE_UIS example_settings_page.ui)

View file

@ -0,0 +1,83 @@
// Project includes
#include "example_plugin.h"
#include "example_settings_page.h"
#include "simple_viewer.h"
#include "../core/icore.h"
#include "../core/core_constants.h"
#include "../core/menu_manager.h"
#include "../../extension_system/iplugin_spec.h"
// NeL includes
#include "nel/misc/debug.h"
// Qt includes
#include <QtCore/QObject>
#include <QtGui/QMessageBox>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
namespace Plugin
{
ExamplePlugin::ExamplePlugin()
{
}
ExamplePlugin::~ExamplePlugin()
{
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{
m_plugMan->removeObject(obj);
}
qDeleteAll(m_autoReleaseObjects);
m_autoReleaseObjects.clear();
}
bool ExamplePlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
m_plugMan = pluginManager;
addAutoReleasedObject(new ExampleSettingsPage(this));
addAutoReleasedObject(new ExampleContext(this));
addAutoReleasedObject(new ExampleCoreListener(this));
return true;
}
void ExamplePlugin::extensionsInitialized()
{
Core::ICore *core = Core::ICore::instance();
Core::MenuManager *menuManager = core->menuManager();
QAction *exampleAction1 = new QAction("Example1", this);
QAction *exampleAction2 = new QAction("Example2", this);
QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT);
QMenu *helpMenu = menuManager->menu(Core::Constants::M_HELP);
helpMenu->insertAction(aboutQtAction, exampleAction1);
helpMenu->addSeparator();
helpMenu->addAction(exampleAction2);
menuManager->menuBar()->addMenu("ExampleMenu");
}
void ExamplePlugin::setNelContext(NLMISC::INelContext *nelContext)
{
#ifdef NL_OS_WINDOWS
// Ensure that a context doesn't exist yet.
// This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
void ExamplePlugin::addAutoReleasedObject(QObject *obj)
{
m_plugMan->addObject(obj);
m_autoReleaseObjects.prepend(obj);
}
}
Q_EXPORT_PLUGIN(Plugin::ExamplePlugin)

View file

@ -18,56 +18,41 @@ namespace NLMISC
class CLibraryContext; class CLibraryContext;
} }
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace Plugin namespace Plugin
{ {
class MyPlugin : public QObject, public ExtensionSystem::IPlugin class ExamplePlugin : public QObject, public ExtensionSystem::IPlugin
{ {
Q_OBJECT Q_OBJECT
Q_INTERFACES(ExtensionSystem::IPlugin) Q_INTERFACES(ExtensionSystem::IPlugin)
public: public:
ExamplePlugin();
virtual ~MyPlugin(); virtual ~ExamplePlugin();
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
protected: protected:
NLMISC::CLibraryContext *_LibContext; NLMISC::CLibraryContext *m_LibContext;
private: private:
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> _autoReleaseObjects; QList<QObject *> m_autoReleaseObjects;
}; };
class CExampleContext: public Core::IContext class ExampleContext: public Core::IContext
{ {
Q_OBJECT Q_OBJECT
public: public:
CExampleContext(QObject *parent = 0): IContext(parent) ExampleContext(QObject *parent = 0): IContext(parent)
{ {
m_simpleViewer = new CSimpleViewer(); m_simpleViewer = new SimpleViewer();
} }
virtual ~CExampleContext() {} virtual ~ExampleContext() {}
virtual QString id() const virtual QString id() const
{ {
@ -95,7 +80,7 @@ public:
{ {
} }
CSimpleViewer *m_simpleViewer; SimpleViewer *m_simpleViewer;
}; };
} // namespace Plugin } // namespace Plugin

View file

@ -27,45 +27,45 @@
namespace Plugin namespace Plugin
{ {
CExampleSettingsPage::CExampleSettingsPage(QObject *parent) ExampleSettingsPage::ExampleSettingsPage(QObject *parent)
: IOptionsPage(parent), : IOptionsPage(parent),
_currentPage(NULL) m_currentPage(0)
{ {
} }
QString CExampleSettingsPage::id() const QString ExampleSettingsPage::id() const
{ {
return QLatin1String("ExamplePage"); return QLatin1String("ExamplePage");
} }
QString CExampleSettingsPage::trName() const QString ExampleSettingsPage::trName() const
{ {
return tr("Example page"); return tr("Example page");
} }
QString CExampleSettingsPage::category() const QString ExampleSettingsPage::category() const
{ {
return QLatin1String("General"); return QLatin1String("Example");
} }
QString CExampleSettingsPage::trCategory() const QString ExampleSettingsPage::trCategory() const
{ {
return tr("General"); return tr("Example");
} }
QIcon CExampleSettingsPage::categoryIcon() const QIcon ExampleSettingsPage::categoryIcon() const
{ {
return QIcon(); return QIcon();
} }
QWidget *CExampleSettingsPage::createPage(QWidget *parent) QWidget *ExampleSettingsPage::createPage(QWidget *parent)
{ {
_currentPage = new QWidget(parent); m_currentPage = new QWidget(parent);
_ui.setupUi(_currentPage); m_ui.setupUi(m_currentPage);
return _currentPage; return m_currentPage;
} }
void CExampleSettingsPage::apply() void ExampleSettingsPage::apply()
{ {
} }

View file

@ -29,15 +29,13 @@ class QWidget;
namespace Plugin namespace Plugin
{ {
/**
@class CExampleSettingsPage class ExampleSettingsPage : public Core::IOptionsPage
*/
class CExampleSettingsPage : public Core::IOptionsPage
{ {
Q_OBJECT Q_OBJECT
public: public:
CExampleSettingsPage(QObject *parent = 0); ExampleSettingsPage(QObject *parent = 0);
virtual ~CExampleSettingsPage() {} virtual ~ExampleSettingsPage() {}
virtual QString id() const; virtual QString id() const;
virtual QString trName() const; virtual QString trName() const;
@ -50,8 +48,8 @@ public:
virtual void finish() {} virtual void finish() {}
private: private:
QWidget *_currentPage; QWidget *m_currentPage;
Ui::CExampleSettingsPage _ui; Ui::ExampleSettingsPage m_ui;
}; };
} // namespace Plugin } // namespace Plugin

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>CExampleSettingsPage</class> <class>ExampleSettingsPage</class>
<widget class="QWidget" name="CExampleSettingsPage"> <widget class="QWidget" name="ExampleSettingsPage">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_example</library-name>
<name>ExamplePlugin</name>
<version>0.2</version>
<vendor>dnk-88</vendor>
<description>Example ovqt plugin.</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -1,120 +0,0 @@
// Project includes
#include "plugin1.h"
#include "example_settings_page.h"
#include "simple_viewer.h"
#include "../core/icore.h"
#include "../core/core_constants.h"
#include "../core/imenu_manager.h"
#include "../../extension_system/iplugin_spec.h"
// NeL includes
#include "nel/misc/debug.h"
// Qt includes
#include <QtCore/QObject>
#include <QtGui/QMessageBox>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
namespace Plugin
{
MyPlugin::~MyPlugin()
{
Q_FOREACH(QObject *obj, _autoReleaseObjects)
{
_plugMan->removeObject(obj);
}
qDeleteAll(_autoReleaseObjects);
_autoReleaseObjects.clear();
}
bool MyPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
_plugMan = pluginManager;
addAutoReleasedObject(new CExampleSettingsPage(this));
addAutoReleasedObject(new CExampleContext(this));
addAutoReleasedObject(new CCoreListener(this));
return true;
}
void MyPlugin::extensionsInitialized()
{
Core::ICore *core = Core::ICore::instance();
Core::IMenuManager *menuManager = core->menuManager();
//menuManager = _plugMan->getObject<Core::IMenuManager>();
QAction *exampleAction1 = new QAction("Example1", this);
QAction *exampleAction2 = new QAction("Example2", this);
QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT);
QMenu *helpMenu = menuManager->menu(Core::Constants::M_HELP);
helpMenu->insertAction(aboutQtAction, exampleAction1);
helpMenu->addSeparator();
helpMenu->addAction(exampleAction2);
menuManager->menuBar()->addMenu("ExampleMenu");
}
void MyPlugin::setNelContext(NLMISC::INelContext *nelContext)
{
#ifdef NL_OS_WINDOWS
// Ensure that a context doesn't exist yet.
// This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
QString MyPlugin::name() const
{
return "ExamplePlugin";
}
QString MyPlugin::version() const
{
return "0.2";
}
QString MyPlugin::vendor() const
{
return "dnk-88";
}
QString MyPlugin::description() const
{
return "Example ovqt plugin.";
}
QStringList MyPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
return list;
}
void MyPlugin::addAutoReleasedObject(QObject *obj)
{
_plugMan->addObject(obj);
_autoReleaseObjects.prepend(obj);
}
QObject* MyPlugin::objectByName(const QString &name) const
{
Q_FOREACH (QObject *qobj, _plugMan->allObjects())
if (qobj->objectName() == name)
return qobj;
return 0;
}
ExtensionSystem::IPluginSpec *MyPlugin::pluginByName(const QString &name) const
{
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins())
if (spec->name() == name)
return spec;
return 0;
}
}
Q_EXPORT_PLUGIN(Plugin::MyPlugin)

View file

@ -82,7 +82,7 @@ public:
return m_driver; return m_driver;
} }
virtual QPaintEngine* paintEngine() const virtual QPaintEngine *paintEngine() const
{ {
return NULL; return NULL;
} }

View file

@ -29,19 +29,19 @@
namespace Plugin namespace Plugin
{ {
CSimpleViewer::CSimpleViewer(QWidget *parent) SimpleViewer::SimpleViewer(QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {
QGridLayout *gridLayout = new QGridLayout(this); QGridLayout *gridLayout = new QGridLayout(this);
gridLayout->setObjectName(QString::fromUtf8("gridLayoutSimpleViewer")); gridLayout->setObjectName(QString::fromUtf8("gridLayoutSimpleViewer"));
gridLayout->setContentsMargins(0, 0, 0, 0); gridLayout->setContentsMargins(0, 0, 0, 0);
NLQT::QNLWidget *_nelWidget = new NLQT::QNLWidget(this); NLQT::QNLWidget *m_nelWidget = new NLQT::QNLWidget(this);
gridLayout->addWidget(_nelWidget, 0, 0, 1, 1); gridLayout->addWidget(m_nelWidget, 0, 0, 1, 1);
m_undoStack = new QUndoStack(this); m_undoStack = new QUndoStack(this);
} }
bool CCoreListener::closeMainWindow() const bool ExampleCoreListener::closeMainWindow() const
{ {
int ret = QMessageBox::question(0, tr("Example close event hook"), int ret = QMessageBox::question(0, tr("Example close event hook"),
tr("Do you want to close window?"), tr("Do you want to close window?"),

View file

@ -31,22 +31,22 @@ class QWidget;
namespace Plugin namespace Plugin
{ {
class CSimpleViewer : public QWidget class SimpleViewer : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
CSimpleViewer(QWidget *parent = 0); SimpleViewer(QWidget *parent = 0);
virtual ~CSimpleViewer() {} virtual ~SimpleViewer() {}
QUndoStack *m_undoStack; QUndoStack *m_undoStack;
}; };
class CCoreListener : public Core::ICoreListener class ExampleCoreListener : public Core::ICoreListener
{ {
Q_OBJECT Q_OBJECT
public: public:
CCoreListener(QObject *parent = 0): ICoreListener(parent) {} ExampleCoreListener(QObject *parent = 0): ICoreListener(parent) {}
virtual ~CCoreListener() {} virtual ~ExampleCoreListener() {}
virtual bool closeMainWindow() const; virtual bool closeMainWindow() const;
}; };

View file

@ -21,7 +21,7 @@
#include "georges_treeview_dialog.h" #include "georges_treeview_dialog.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
// NeL includes // NeL includes
@ -63,7 +63,7 @@ namespace Plugin
m_undoStack = new QUndoStack(this); m_undoStack = new QUndoStack(this);
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
m_openAction = menuManager->action(Core::Constants::OPEN); m_openAction = menuManager->action(Core::Constants::OPEN);
m_newAction = new QAction(tr("&New..."), this); m_newAction = new QAction(tr("&New..."), this);

View file

@ -67,35 +67,6 @@ void GeorgesEditorPlugin::setNelContext(NLMISC::INelContext *nelContext)
m_libContext = new NLMISC::CLibraryContext(*nelContext); m_libContext = new NLMISC::CLibraryContext(*nelContext);
} }
QString GeorgesEditorPlugin::name() const
{
return tr("Georges Editor");
}
QString GeorgesEditorPlugin::version() const
{
return "0.4";
}
QString GeorgesEditorPlugin::vendor() const
{
return "aquiles";
}
QString GeorgesEditorPlugin::description() const
{
return tr("Tool to create & edit sheets or forms.");
}
QStringList GeorgesEditorPlugin::dependencies() const
{
QStringList list;
// TODO
//list.append(Core::Constants::OVQT_CORE_PLUGIN);
//list.append("ObjectViewer");
return list;
}
void GeorgesEditorPlugin::addAutoReleasedObject(QObject *obj) void GeorgesEditorPlugin::addAutoReleasedObject(QObject *obj)
{ {
m_plugMan->addObject(obj); m_plugMan->addObject(obj);

View file

@ -52,15 +52,8 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void shutdown(); void shutdown();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
protected: protected:

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_georges_editor</library-name>
<name>GeorgesEditor</name>
<version>0.4</version>
<vendor>aquiles</vendor>
<description>Tool to create and edit sheets or forms.</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_log</library-name>
<name>LogPlugin</name>
<version>1.1</version>
<vendor>aquiles</vendor>
<description>DockWidget to display all log messages from NeL.</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -16,7 +16,7 @@
#include <QTableWidgetItem> #include <QTableWidgetItem>
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
#include <nel/misc/common.h> #include <nel/misc/common.h>

View file

@ -2,7 +2,7 @@
#include "mission_compiler_plugin.h" #include "mission_compiler_plugin.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../../extension_system/iplugin_spec.h" #include "../../extension_system/iplugin_spec.h"
// NeL includes // NeL includes
@ -24,18 +24,18 @@ namespace MissionCompiler
MissionCompilerPlugin::~MissionCompilerPlugin() MissionCompilerPlugin::~MissionCompilerPlugin()
{ {
Q_FOREACH(QObject *obj, _autoReleaseObjects) Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{ {
_plugMan->removeObject(obj); m_plugMan->removeObject(obj);
} }
qDeleteAll(_autoReleaseObjects); qDeleteAll(m_autoReleaseObjects);
_autoReleaseObjects.clear(); m_autoReleaseObjects.clear();
} }
bool MissionCompilerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) bool MissionCompilerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{ {
Q_UNUSED(errorString); Q_UNUSED(errorString);
_plugMan = pluginManager; m_plugMan = pluginManager;
addAutoReleasedObject(new MissionCompilerSettingsPage(this)); addAutoReleasedObject(new MissionCompilerSettingsPage(this));
addAutoReleasedObject(new CMissionCompilerContext(this)); addAutoReleasedObject(new CMissionCompilerContext(this));
@ -47,18 +47,7 @@ void MissionCompilerPlugin::extensionsInitialized()
{ {
Core::ICore *core = Core::ICore::instance(); Core::ICore *core = Core::ICore::instance();
QSettings *settings = Core::ICore::instance()->settings(); QSettings *settings = Core::ICore::instance()->settings();
Core::IMenuManager *menuManager = core->menuManager(); Core::MenuManager *menuManager = core->menuManager();
//menuManager = _plugMan->getObject<Core::IMenuManager>();
//QAction *exampleAction1 = new QAction("Zone1", this);
//QAction *exampleAction2 = new QAction("Zone2", this);
//QMenu *toolsMenu = menuManager->menu(Core::Constants::M_TOOLS);
//helpMenu->insertAction(aboutQtAction, exampleAction1);
//helpMenu->addSeparator();
//helpMenu->addAction(exampleAction2);
//QMenu *zoneMenu = menuManager->menuBar()->addMenu("ZoneMenu");
//zoneMenu->insertAction(aboutQtAction, exampleAction1);
//zoneMenu->addSeparator();
//zoneMenu->addAction(exampleAction2);
// Initialize Ligo. // Initialize Ligo.
//settings->beginGroup(Core::Constants::DATA_PATH_SECTION); //settings->beginGroup(Core::Constants::DATA_PATH_SECTION);
@ -73,57 +62,13 @@ void MissionCompilerPlugin::setNelContext(NLMISC::INelContext *nelContext)
// This only applies to platforms without PIC, e.g. Windows. // This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised()); nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS #endif // NL_OS_WINDOWS
_LibContext = new NLMISC::CLibraryContext(*nelContext); m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
QString MissionCompilerPlugin::name() const
{
return "MissionCompilerPlugin";
}
QString MissionCompilerPlugin::version() const
{
return "0.1";
}
QString MissionCompilerPlugin::vendor() const
{
return "Ryzom Core";
}
QString MissionCompilerPlugin::description() const
{
return "Mission Compiler Plugin";
}
QStringList MissionCompilerPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
//list.append("ObjectViewer");
return list;
} }
void MissionCompilerPlugin::addAutoReleasedObject(QObject *obj) void MissionCompilerPlugin::addAutoReleasedObject(QObject *obj)
{ {
_plugMan->addObject(obj); m_plugMan->addObject(obj);
_autoReleaseObjects.prepend(obj); m_autoReleaseObjects.prepend(obj);
}
QObject* MissionCompilerPlugin::objectByName(const QString &name) const
{
Q_FOREACH (QObject *qobj, _plugMan->allObjects())
if (qobj->objectName() == name)
return qobj;
return 0;
}
ExtensionSystem::IPluginSpec *MissionCompilerPlugin::pluginByName(const QString &name) const
{
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins())
if (spec->name() == name)
return spec;
return 0;
} }
} }

View file

@ -37,26 +37,16 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
protected: protected:
NLMISC::CLibraryContext *_LibContext; NLMISC::CLibraryContext *m_LibContext;
private: private:
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> _autoReleaseObjects; QList<QObject *> m_autoReleaseObjects;
}; };
class CMissionCompilerContext: public Core::IContext class CMissionCompilerContext: public Core::IContext

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_mission_compiler</library-name>
<name>MissionCompiler</name>
<version>0.1</version>
<vendor>Ryzom Core</vendor>
<description>Mission Compiler Plugin</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -52,7 +52,7 @@
#include "object_viewer_constants.h" #include "object_viewer_constants.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
using namespace std; using namespace std;
@ -259,7 +259,7 @@ void CMainWindow::createActions()
void CMainWindow::createMenus() void CMainWindow::createMenus()
{ {
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
_openAction = menuManager->action(Core::Constants::OPEN); _openAction = menuManager->action(Core::Constants::OPEN);

View file

@ -22,76 +22,76 @@ namespace NLQT
{ {
namespace Constants namespace Constants
{ {
const char * const OBJECT_VIEWER_PLUGIN = "ObjectViewer"; const char *const OBJECT_VIEWER_PLUGIN = "ObjectViewer";
//mainwindow //mainwindow
const char * const MAIN_WINDOW = "ObjectViewer.MainWindow"; const char *const MAIN_WINDOW = "ObjectViewer.MainWindow";
//settings //settings
const char * const OBJECT_VIEWER_SECTION = "ObjectViewer"; const char *const OBJECT_VIEWER_SECTION = "ObjectViewer";
const char * const GRAPHICS_DRIVER = "GraphicsDriver"; const char *const GRAPHICS_DRIVER = "GraphicsDriver";
const char * const ENABLE_BLOOM = "EnableBloom"; const char *const ENABLE_BLOOM = "EnableBloom";
const char * const ENABLE_SQUARE_BLOOM = "EnableSquareBloom"; const char *const ENABLE_SQUARE_BLOOM = "EnableSquareBloom";
const char * const BLOOM_DENSITY = "BloomDensity"; const char *const BLOOM_DENSITY = "BloomDensity";
const char * const QT_STYLE = "QtStyle"; const char *const QT_STYLE = "QtStyle";
const char * const QT_PALETTE = "QtPalette"; const char *const QT_PALETTE = "QtPalette";
const char * const FONT = "Font"; const char *const FONT = "Font";
const char * const SOUND_ENABLE = "SoundEnable"; const char *const SOUND_ENABLE = "SoundEnable";
const char * const SOUND_DRIVER = "SoundDriver"; const char *const SOUND_DRIVER = "SoundDriver";
const char * const SOUND_DEVICE = "SoundDevice"; const char *const SOUND_DEVICE = "SoundDevice";
const char * const SOUND_AUTO_LOAD_SAMPLE = "SoundAutoLoadSample"; const char *const SOUND_AUTO_LOAD_SAMPLE = "SoundAutoLoadSample";
const char * const SOUND_ENABLE_OCCLUDE_OBSTRUCT = "SoundEnableOccludeObstruct"; const char *const SOUND_ENABLE_OCCLUDE_OBSTRUCT = "SoundEnableOccludeObstruct";
const char * const SOUND_ENABLE_REVERB = "SoundEnableReverb"; const char *const SOUND_ENABLE_REVERB = "SoundEnableReverb";
const char * const SOUND_MANUAL_ROLL_OFF = "SoundManualRolloff"; const char *const SOUND_MANUAL_ROLL_OFF = "SoundManualRolloff";
const char * const SOUND_FORCE_SOFTWARE = "SoundForceSoftware"; const char *const SOUND_FORCE_SOFTWARE = "SoundForceSoftware";
const char * const SOUND_USE_ADCPM = "SoundUseADPCM"; const char *const SOUND_USE_ADCPM = "SoundUseADPCM";
const char * const SOUND_MAX_TRACK = "SoundMaxTrack"; const char *const SOUND_MAX_TRACK = "SoundMaxTrack";
const char * const SOUND_PACKED_SHEET_PATH = "SoundPackedSheetPath"; const char *const SOUND_PACKED_SHEET_PATH = "SoundPackedSheetPath";
const char * const SOUND_SAMPLE_PATH = "SoundSamplePath"; const char *const SOUND_SAMPLE_PATH = "SoundSamplePath";
const char * const VEGET_TILE_BANK = "VegetTileBank"; const char *const VEGET_TILE_BANK = "VegetTileBank";
const char * const VEGET_TILE_FAR_BANK = "VegetTileFarBank"; const char *const VEGET_TILE_FAR_BANK = "VegetTileFarBank";
const char * const VEGET_TEXTURE = "VegetTexture"; const char *const VEGET_TEXTURE = "VegetTexture";
const char * const VEGET_LANDSCAPE_ZONES = "VegetLandscapeZones"; const char *const VEGET_LANDSCAPE_ZONES = "VegetLandscapeZones";
const char * const COARSE_MESH_TEXTURE = "CoarseMeshTexture"; const char *const COARSE_MESH_TEXTURE = "CoarseMeshTexture";
const char * const ICON_ADD_ITEM = ":/icons/ic_nel_add_item.png"; const char *const ICON_ADD_ITEM = ":/icons/ic_nel_add_item.png";
const char * const ICON_INSERT_ITEM = ":/icons/ic_nel_insert_item.png"; const char *const ICON_INSERT_ITEM = ":/icons/ic_nel_insert_item.png";
const char * const ICON_DELETE_ITEM = ":/icons/ic_nel_delete_item.png"; const char *const ICON_DELETE_ITEM = ":/icons/ic_nel_delete_item.png";
const char * const ICON_DOWN_ITEM = ":/icons/ic_nel_down_item.png"; const char *const ICON_DOWN_ITEM = ":/icons/ic_nel_down_item.png";
const char * const ICON_UP_ITEM = ":/icons/ic_nel_up_item.png"; const char *const ICON_UP_ITEM = ":/icons/ic_nel_up_item.png";
const char * const ICON_CAMERA_ADD = ":/icons/ic_nel_camera_add.png"; const char *const ICON_CAMERA_ADD = ":/icons/ic_nel_camera_add.png";
const char * const ICON_CAMERA_DEL = ":/icons/ic_nel_camera_del.png"; const char *const ICON_CAMERA_DEL = ":/icons/ic_nel_camera_del.png";
const char * const ICON_CAMERA_3DEDIT = ":/icons/ic_nel_camera_3dedit.png"; const char *const ICON_CAMERA_3DEDIT = ":/icons/ic_nel_camera_3dedit.png";
const char * const ICON_CAMERA_FPS = ":/icons/ic_nel_camera_fps.png"; const char *const ICON_CAMERA_FPS = ":/icons/ic_nel_camera_fps.png";
const char * const ICON_RESET_CAMERA = ":/icons/ic_nel_reset_camera.png"; const char *const ICON_RESET_CAMERA = ":/icons/ic_nel_reset_camera.png";
const char * const ICON_ANIM = ":/icons/ic_nel_anim.png"; const char *const ICON_ANIM = ":/icons/ic_nel_anim.png";
const char * const ICON_ANIMSET = ":/icons/ic_nel_animset.png"; const char *const ICON_ANIMSET = ":/icons/ic_nel_animset.png";
const char * const ICON_BGCOLOR = ":/icons/ic_nel_bgcolor.png"; const char *const ICON_BGCOLOR = ":/icons/ic_nel_bgcolor.png";
const char * const ICON_DAYNIGHT = ":/icons/ic_nel_daynight.png"; const char *const ICON_DAYNIGHT = ":/icons/ic_nel_daynight.png";
const char * const ICON_FRAMEDELAY = ":/icons/ic_nel_framedelay.png"; const char *const ICON_FRAMEDELAY = ":/icons/ic_nel_framedelay.png";
const char * const ICON_MIXER = ":/icons/ic_nel_mixer.png"; const char *const ICON_MIXER = ":/icons/ic_nel_mixer.png";
const char * const ICON_MRM_MESH = ":/icons/ic_nel_mrm_mesh.png"; const char *const ICON_MRM_MESH = ":/icons/ic_nel_mrm_mesh.png";
const char * const ICON_PARTICLES = ":/icons/ic_nel_particles.png"; const char *const ICON_PARTICLES = ":/icons/ic_nel_particles.png";
const char * const ICON_SKELSCALE = ":/icons/ic_nel_skelscale.png"; const char *const ICON_SKELSCALE = ":/icons/ic_nel_skelscale.png";
const char * const ICON_VEGET = ":/icons/ic_nel_veget.png"; const char *const ICON_VEGET = ":/icons/ic_nel_veget.png";
const char * const ICON_VEGETSET = ":/icons/ic_nel_vegetset.png"; const char *const ICON_VEGETSET = ":/icons/ic_nel_vegetset.png";
const char * const ICON_WATER = ":/icons/ic_nel_water.png"; const char *const ICON_WATER = ":/icons/ic_nel_water.png";
const char * const ICON_WIND = ":/icons/ic_nel_wind.png"; const char *const ICON_WIND = ":/icons/ic_nel_wind.png";
const char * const ICON_COLLISION_ZONE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_collision_zone_item_24.png"; const char *const ICON_COLLISION_ZONE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_collision_zone_item_24.png";
const char * const ICON_EMITTER_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_emitter_item_24.png"; const char *const ICON_EMITTER_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_emitter_item_24.png";
const char * const ICON_FORCE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_force_item_24.png"; const char *const ICON_FORCE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_force_item_24.png";
const char * const ICON_INSTANCE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_instance_item_24.png"; const char *const ICON_INSTANCE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_instance_item_24.png";
const char * const ICON_LIGHT_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_light_item_24.png"; const char *const ICON_LIGHT_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_light_item_24.png";
const char * const ICON_LOCATED_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_located_item_24.png"; const char *const ICON_LOCATED_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_located_item_24.png";
const char * const ICON_PARTICLE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_particle_item_24.png"; const char *const ICON_PARTICLE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_particle_item_24.png";
const char * const ICON_PARTICLE_SYSTEM_SMALL = ":/icons/particles_system_24/ic_nel_particle_system_24.png"; const char *const ICON_PARTICLE_SYSTEM_SMALL = ":/icons/particles_system_24/ic_nel_particle_system_24.png";
const char * const ICON_PARTICLE_SYSTEM_CLOSE_SMALL = ":/icons/particles_system_24/ic_nel_particle_system_close_24.png"; const char *const ICON_PARTICLE_SYSTEM_CLOSE_SMALL = ":/icons/particles_system_24/ic_nel_particle_system_close_24.png";
const char * const ICON_PARTICLES_SMALL = ":/icons/particles_system_24/ic_nel_particles_24.png"; const char *const ICON_PARTICLES_SMALL = ":/icons/particles_system_24/ic_nel_particles_24.png";
const char * const ICON_SOUND_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_sound_item_24.png"; const char *const ICON_SOUND_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_sound_item_24.png";
const char * const ICON_WORKSPACE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_workspace_item_24.png"; const char *const ICON_WORKSPACE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_workspace_item_24.png";
} // namespace Constants } // namespace Constants
} // namespace NLQT } // namespace NLQT

View file

@ -56,33 +56,6 @@ void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext)
_LibContext = new NLMISC::CLibraryContext(*nelContext); _LibContext = new NLMISC::CLibraryContext(*nelContext);
} }
QString ObjectViewerPlugin::name() const
{
return "ObjectViewer";
}
QString ObjectViewerPlugin::version() const
{
return "0.8";
}
QString ObjectViewerPlugin::vendor() const
{
return "GSoC2010_dnk-88";
}
QString ObjectViewerPlugin::description() const
{
return "Object Viewer plugin.";
}
QStringList ObjectViewerPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
return list;
}
void ObjectViewerPlugin::addAutoReleasedObject(QObject *obj) void ObjectViewerPlugin::addAutoReleasedObject(QObject *obj)
{ {
_plugMan->addObject(obj); _plugMan->addObject(obj);

View file

@ -36,15 +36,8 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void shutdown(); void shutdown();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
protected: protected:

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_object_viewer</library-name>
<name>ObjectViewer</name>
<version>0.8</version>
<vendor>Ryzom Core</vendor>
<description>Object Viewer plugin.</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -43,7 +43,7 @@ namespace NLQT
class CLocatedItem: public QListWidgetItem class CLocatedItem: public QListWidgetItem
{ {
public: public:
CLocatedItem ( const QString & text, QListWidget *parent = 0, int type = UserType ): CLocatedItem ( const QString &text, QListWidget *parent = 0, int type = UserType ):
QListWidgetItem(text, parent, type), _loc(NULL) {} QListWidgetItem(text, parent, type), _loc(NULL) {}
void setUserData(NL3D::CPSLocated *loc) void setUserData(NL3D::CPSLocated *loc)

View file

@ -332,7 +332,7 @@ public:
/// Restick all objects, useful after loading /// Restick all objects, useful after loading
void restickAllObjects(); void restickAllObjects();
TNodeVect& getNodeList() TNodeVect &getNodeList()
{ {
return _Nodes; return _Nodes;
} }

View file

@ -44,7 +44,7 @@ namespace NLQT
class CLocatedBindableItem: public QListWidgetItem class CLocatedBindableItem: public QListWidgetItem
{ {
public: public:
CLocatedBindableItem ( const QString & text, QListWidget * parent = 0, int type = UserType ): CLocatedBindableItem ( const QString &text, QListWidget *parent = 0, int type = UserType ):
QListWidgetItem(text, parent, type), _lb(NULL) {} QListWidgetItem(text, parent, type), _lb(NULL) {}
void setUserData(NL3D::CPSLocatedBindable *loc) void setUserData(NL3D::CPSLocatedBindable *loc)

View file

@ -190,7 +190,7 @@ NLSOUND::USource *CSoundSystem::create(const std::string &soundName)
return NULL; return NULL;
} }
void CSoundSystem::playAnimation(std::string& name, float lastTime, float curTime, NLSOUND::CSoundContext &context) void CSoundSystem::playAnimation(std::string &name, float lastTime, float curTime, NLSOUND::CSoundContext &context)
{ {
if (_AnimManager == NULL) if (_AnimManager == NULL)
{ {

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_sheet_builder</library-name>
<name>SheetBuilder</name>
<version>1.0</version>
<vendor>kharvd</vendor>
<description>make_sheet_id equivalent</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -19,7 +19,7 @@
#include "sheetbuilderdialog.h" #include "sheetbuilderdialog.h"
#include "sheetbuilderconfgdialog.h" #include "sheetbuilderconfgdialog.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
// NeL includes // NeL includes
@ -38,14 +38,14 @@ using namespace Plugin;
bool SheetBuilderPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) bool SheetBuilderPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{ {
Q_UNUSED(errorString); Q_UNUSED(errorString);
_plugMan = pluginManager; m_plugMan = pluginManager;
return true; return true;
} }
void SheetBuilderPlugin::extensionsInitialized() void SheetBuilderPlugin::extensionsInitialized()
{ {
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
QMenu *sheetMenu = menuManager->menu(Core::Constants::M_SHEET); QMenu *sheetMenu = menuManager->menu(Core::Constants::M_SHEET);
QAction *sheetBuilderAction = sheetMenu->addAction(tr("Sheet builder")); QAction *sheetBuilderAction = sheetMenu->addAction(tr("Sheet builder"));
@ -69,34 +69,7 @@ void SheetBuilderPlugin::setNelContext(NLMISC::INelContext *nelContext)
// This only applies to platforms without PIC, e.g. Windows. // This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised()); nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS #endif // NL_OS_WINDOWS
_LibContext = new NLMISC::CLibraryContext(*nelContext); m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
QString SheetBuilderPlugin::name() const
{
return "Sheet builder";
}
QString SheetBuilderPlugin::version() const
{
return "1.0";
}
QString SheetBuilderPlugin::vendor() const
{
return "kharvd";
}
QString SheetBuilderPlugin::description() const
{
return "make_sheet_id equivalent";
}
QStringList SheetBuilderPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
return list;
} }
Q_EXPORT_PLUGIN(SheetBuilderPlugin) Q_EXPORT_PLUGIN(SheetBuilderPlugin)

View file

@ -28,11 +28,6 @@ namespace NLMISC
class CLibraryContext; class CLibraryContext;
} }
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace Plugin namespace Plugin
{ {
@ -43,25 +38,18 @@ class SheetBuilderPlugin : public QObject, public ExtensionSystem::IPlugin
public: public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void buildSheet(bool clean); void buildSheet(bool clean);
private Q_SLOTS: private Q_SLOTS:
void execBuilderDialog(); void execBuilderDialog();
protected: protected:
NLMISC::CLibraryContext *_LibContext; NLMISC::CLibraryContext *m_LibContext;
private: private:
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
}; };

View file

@ -54,7 +54,7 @@ union TFormId
} }
}; };
bool operator<(const TFormId& fid1, const TFormId& fid2) bool operator<(const TFormId &fid1, const TFormId &fid2)
{ {
return fid1.Id<fid2.Id; return fid1.Id<fid2.Id;
} }
@ -82,7 +82,7 @@ uint32 NbFilesDiscarded = 0;
void addId( string fileName ); void addId( string fileName );
// getFileType // getFileType
bool getFileType( string& fileName, string& fileType ); bool getFileType( string &fileName, string &fileType );
//----------------------------------------------- //-----------------------------------------------
// getFirstFreeFileTypeId // getFirstFreeFileTypeId
@ -107,7 +107,7 @@ sint16 getFirstFreeFileTypeId()
// readFormId // readFormId
// //
//----------------------------------------------- //-----------------------------------------------
void readFormId( string& outputFileName ) void readFormId( string &outputFileName )
{ {
CIFile f; CIFile f;
if( f.open( outputFileName ) ) if( f.open( outputFileName ) )
@ -315,7 +315,7 @@ void addId( string fileName )
// getFileType // getFileType
// //
//----------------------------------------------- //-----------------------------------------------
bool getFileType( string& fileName, string& fileType ) bool getFileType( string &fileName, string &fileType )
{ {
fileType = CFile::getExtension(CFile::getFilename(fileName)); fileType = CFile::getExtension(CFile::getFilename(fileName));
return !fileType.empty(); return !fileType.empty();

View file

@ -195,7 +195,7 @@ void SheetBuilderDialog::buildSheet()
for( it1 = IdToForm.begin(); it1 != IdToForm.end(); ++it1 ) for( it1 = IdToForm.begin(); it1 != IdToForm.end(); ++it1 )
{ {
string outputLine = " id: " + toString((*it1).first.Id) + " file: " + (*it1).second +"\n"; string outputLine = " id: " + toString((*it1).first.Id) + " file: " + (*it1).second +"\n";
output.serialBuffer((uint8*)(const_cast<char*>(outputLine.data())),(uint)outputLine.size()); output.serialBuffer((uint8 *)(const_cast<char *>(outputLine.data())),(uint)outputLine.size());
} }
displayInfo (tr("------------- results ----------------")); displayInfo (tr("------------- results ----------------"));

View file

@ -0,0 +1,10 @@
<plugin-spec>
<library-name>ovqt_plugin_zone_painter</library-name>
<name>ZonePainter</name>
<version>0.0</version>
<vendor>Ryzom Core</vendor>
<description>Zone Painter Plugin</description>
<dependencies>
<dependency plugin-name="Core" version="0.8"/>
</dependencies>
</plugin-spec>

View file

@ -11,7 +11,7 @@
#include "painter_dock_widget.h" #include "painter_dock_widget.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
ZonePainterMainWindow::ZonePainterMainWindow(QWidget *parent) : ZonePainterMainWindow::ZonePainterMainWindow(QWidget *parent) :
@ -145,6 +145,7 @@ void ZonePainterMainWindow::loadConfig() {
QColor color; QColor color;
color = settings->value("BackgroundColor", QColor(80, 80, 80)).value<QColor>(); color = settings->value("BackgroundColor", QColor(80, 80, 80)).value<QColor>();
settings->endGroup();
m_nelWidget->setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha())); m_nelWidget->setBackgroundColor(NLMISC::CRGBA(color.red(), color.green(), color.blue(), color.alpha()));
} }

View file

@ -3,7 +3,7 @@
#include "zone_painter_settings_page.h" #include "zone_painter_settings_page.h"
#include "../core/icore.h" #include "../core/icore.h"
#include "../core/core_constants.h" #include "../core/core_constants.h"
#include "../core/imenu_manager.h" #include "../core/menu_manager.h"
#include "../../extension_system/iplugin_spec.h" #include "../../extension_system/iplugin_spec.h"
// NeL includes // NeL includes
@ -19,22 +19,22 @@
namespace Plugin namespace Plugin
{ {
NLMISC_SAFE_SINGLETON_IMPL(CZoneManager) // NLMISC_SAFE_SINGLETON_IMPL(CZoneManager)
ZonePainterPlugin::~ZonePainterPlugin() ZonePainterPlugin::~ZonePainterPlugin()
{ {
Q_FOREACH(QObject *obj, _autoReleaseObjects) Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{ {
_plugMan->removeObject(obj); m_plugMan->removeObject(obj);
} }
qDeleteAll(_autoReleaseObjects); qDeleteAll(m_autoReleaseObjects);
_autoReleaseObjects.clear(); m_autoReleaseObjects.clear();
} }
bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{ {
Q_UNUSED(errorString); Q_UNUSED(errorString);
_plugMan = pluginManager; m_plugMan = pluginManager;
addAutoReleasedObject(new CZonePainterSettingsPage(this)); addAutoReleasedObject(new CZonePainterSettingsPage(this));
addAutoReleasedObject(new CZonePainterContext(this)); addAutoReleasedObject(new CZonePainterContext(this));
@ -45,19 +45,7 @@ bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManage
void ZonePainterPlugin::extensionsInitialized() void ZonePainterPlugin::extensionsInitialized()
{ {
Core::ICore *core = Core::ICore::instance(); Core::ICore *core = Core::ICore::instance();
Core::IMenuManager *menuManager = core->menuManager(); Core::MenuManager *menuManager = core->menuManager();
//menuManager = _plugMan->getObject<Core::IMenuManager>();
QAction *exampleAction1 = new QAction("Zone1", this);
QAction *exampleAction2 = new QAction("Zone2", this);
QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT);
QMenu *helpMenu = menuManager->menu(Core::Constants::M_HELP);
helpMenu->insertAction(aboutQtAction, exampleAction1);
helpMenu->addSeparator();
helpMenu->addAction(exampleAction2);
QMenu *zoneMenu = menuManager->menuBar()->addMenu("ZoneMenu");
zoneMenu->insertAction(aboutQtAction, exampleAction1);
zoneMenu->addSeparator();
zoneMenu->addAction(exampleAction2);
} }
void ZonePainterPlugin::setNelContext(NLMISC::INelContext *nelContext) void ZonePainterPlugin::setNelContext(NLMISC::INelContext *nelContext)
@ -67,57 +55,13 @@ void ZonePainterPlugin::setNelContext(NLMISC::INelContext *nelContext)
// This only applies to platforms without PIC, e.g. Windows. // This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised()); nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS #endif // NL_OS_WINDOWS
_LibContext = new NLMISC::CLibraryContext(*nelContext); m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
QString ZonePainterPlugin::name() const
{
return "ZonePainterPlugin";
}
QString ZonePainterPlugin::version() const
{
return "0.2";
}
QString ZonePainterPlugin::vendor() const
{
return "Ryzom Core";
}
QString ZonePainterPlugin::description() const
{
return "Zone Painter Plugin";
}
QStringList ZonePainterPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
//list.append("ObjectViewer");
return list;
} }
void ZonePainterPlugin::addAutoReleasedObject(QObject *obj) void ZonePainterPlugin::addAutoReleasedObject(QObject *obj)
{ {
_plugMan->addObject(obj); m_plugMan->addObject(obj);
_autoReleaseObjects.prepend(obj); m_autoReleaseObjects.prepend(obj);
}
QObject* ZonePainterPlugin::objectByName(const QString &name) const
{
Q_FOREACH (QObject *qobj, _plugMan->allObjects())
if (qobj->objectName() == name)
return qobj;
return 0;
}
ExtensionSystem::IPluginSpec *ZonePainterPlugin::pluginByName(const QString &name) const
{
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins())
if (spec->name() == name)
return spec;
return 0;
} }
} }

View file

@ -31,7 +31,7 @@ class IPluginSpec;
namespace Plugin namespace Plugin
{ {
class CZoneManager /* class CZoneManager
{ {
NLMISC_SAFE_SINGLETON_DECL(CZoneManager) NLMISC_SAFE_SINGLETON_DECL(CZoneManager)
public: public:
@ -41,7 +41,7 @@ namespace Plugin
NL3D::CLandscapeModel *m_painterLandscape; NL3D::CLandscapeModel *m_painterLandscape;
NL3D::CZone *m_currentZone; NL3D::CZone *m_currentZone;
}; };
*/
class ZonePainterPlugin : public QObject, public ExtensionSystem::IPlugin class ZonePainterPlugin : public QObject, public ExtensionSystem::IPlugin
{ {
Q_OBJECT Q_OBJECT
@ -52,28 +52,16 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized(); void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext); void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj); void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
protected: protected:
NLMISC::CLibraryContext *_LibContext; NLMISC::CLibraryContext *m_LibContext;
private: private:
ExtensionSystem::IPluginManager *_plugMan; ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> _autoReleaseObjects; QList<QObject *> m_autoReleaseObjects;
}; };
class CZonePainterContext: public Core::IContext class CZonePainterContext: public Core::IContext

View file

@ -281,13 +281,21 @@ void SLightBuild::convertFromMaxLight (INode *node,TimeValue tvTime)
} }
#if (MAX_RELEASE < 4000) #if (MAX_RELEASE < 4000)
// Convert exclusion list // Convert exclusion list
NameTab& ntExclu = maxLight->GetExclusionList(); NameTab& ntExclu = maxLight->GetExclusionList();
for( sint i = 0; i < ntExclu.Count(); ++i ) for (sint i = 0; i < ntExclu.Count(); ++i)
{ {
string tmp = *ntExclu.Addr(i); string tmp = *ntExclu.Addr(i);
this->setExclusion.insert( tmp ); this->setExclusion.insert(tmp);
} }
#else // (MAX_RELEASE < 4000)
ExclList& exclusionList = maxLight->GetExclusionList();
for (sint i = 0; i < exclusionList.Count(); ++i)
{
INode *exclNode = exclusionList[i];
string tmp = exclNode->GetName();
this->setExclusion.insert(tmp);
}
#endif // (MAX_RELEASE < 4000) #endif // (MAX_RELEASE < 4000)
// Get Soft Shadow informations // Get Soft Shadow informations
@ -1999,11 +2007,12 @@ void CExportNel::deleteLM(INode& ZeNode)
sprintf( tmp, "%d", i ); sprintf( tmp, "%d", i );
sSaveName += tmp; sSaveName += tmp;
sSaveName += ".tga"; sSaveName += ".tga";
FILE *file; if (CFile::fileExists(sSaveName))
if( file = fopen(sSaveName.c_str(),"rb") )
{ {
fclose( file ); if (!CFile::deleteFile(sSaveName))
DeleteFile( sSaveName.c_str() ); {
nlwarning("Failed to delete file %s.", sSaveName.c_str());
}
} }
} }
} }
@ -2576,11 +2585,13 @@ bool CExportNel::calculateLM( CMesh::CMeshBuild *pZeMeshBuild, CMeshBase::CMeshB
for (i = 0; i < 256; ++i) for (i = 0; i < 256; ++i)
{ {
string sLMName = sBaseName + NLMISC::toString(i) + ".tga"; string sLMName = sBaseName + NLMISC::toString(i) + ".tga";
CIFile ifi; if (CFile::fileExists(sLMName))
if (ifi.open(sLMName))
{ {
ifi.close (); nlinfo("DELETE %s", sLMName.c_str());
DeleteFile (sLMName.c_str()); if (!CFile::deleteFile(sLMName))
{
nlwarning("Failed to delete file %s", sLMName.c_str());
}
} }
} }
} }
@ -2598,6 +2609,7 @@ bool CExportNel::calculateLM( CMesh::CMeshBuild *pZeMeshBuild, CMeshBase::CMeshB
COFile f( sSaveName ); COFile f( sSaveName );
try try
{ {
nlinfo("SAVE %s", sSaveName.c_str());
if (lmcEnabled) if (lmcEnabled)
{ {
// In fact the output is 32 bits because we need the alpha channel // In fact the output is 32 bits because we need the alpha channel

View file

@ -36,7 +36,7 @@ IShape* CExportNel::buildParticleSystem(INode& node, TimeValue time)
// if not found, get from the APP_DATAS // if not found, get from the APP_DATAS
shapeName = CExportNel::getNelObjectName(node); shapeName = CExportNel::getNelObjectName(node);
if (shapeName.empty()) return NULL; if (shapeName.empty()) return NULL;
shapeName = NLMISC::CPath::lookup("shapeName", false); shapeName = NLMISC::CPath::lookup(shapeName, false);
if (shapeName.empty()) return NULL; if (shapeName.empty()) return NULL;
} }

View file

@ -24,6 +24,7 @@
#include "../nel_patch_lib/rpo.h" #include "../nel_patch_lib/rpo.h"
#include "../../ig_lighter_lib/ig_lighter_lib.h" #include "../../ig_lighter_lib/ig_lighter_lib.h"
#include "nel/misc/path.h"
#include "nel/3d/scene_group.h" #include "nel/3d/scene_group.h"
#include "nel/3d/scene.h" #include "nel/3d/scene.h"
#include "nel/3d/shape_bank.h" #include "nel/3d/shape_bank.h"
@ -418,12 +419,21 @@ CInstanceGroup* CExportNel::buildInstanceGroup(const vector<INode*>& vectNode, v
if (clid.PartA() == NEL_PARTICLE_SYSTEM_CLASS_ID) if (clid.PartA() == NEL_PARTICLE_SYSTEM_CLASS_ID)
{ {
// build the shape from the file name // build the shape from the file name
std::string objName = CExportNel::getNelObjectName(*pNode); // std::string objName = CExportNel::getNelObjectName(*pNode);
if (!objName.empty()) std::string psFilePath;
// try to get the complete path
if (!CExportNel::getValueByNameUsingParamBlock2(*pNode, "ps_file_name", (ParamType2) TYPE_STRING, &psFilePath, 0))
{
// if not found, get from the APP_DATAS
psFilePath = CExportNel::getNelObjectName(*pNode);
if (!psFilePath.empty())
psFilePath = CPath::lookup(psFilePath, false);
}
if (!psFilePath.empty())
{ {
NL3D::CShapeStream ss; NL3D::CShapeStream ss;
NLMISC::CIFile iF; NLMISC::CIFile iF;
if (iF.open(objName.c_str())) if (iF.open(psFilePath.c_str()))
{ {
try try
{ {

View file

@ -24,9 +24,27 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("configuration") sys.path.append("configuration")
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Setup')
parser.add_argument('--noconf', '-nc', action='store_true')
parser.add_argument('--noverify', '-nv', action='store_true')
# parser.add_argument('--haltonerror', '-eh', action='store_true')
parser.add_argument('--includeproject', '-ipj', nargs='+')
parser.add_argument('--excludeproject', '-epj', nargs='+')
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if not args.includeproject == None and not args.excludeproject == None:
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
exit()
if not args.includeprocess == None and not args.excludeprocess == None:
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
exit()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -35,221 +53,225 @@ try:
from buildsite import * from buildsite import *
except ImportError: except ImportError:
printLog(log, "*** FIRST RUN ***") printLog(log, "*** FIRST RUN ***")
if args.noconf:
printLog(log, "ERROR --noconf is invalid on first run, exit.")
exit()
from tools import * from tools import *
try: if not args.noconf:
BuildQuality try:
except NameError: BuildQuality
BuildQuality = 1 except NameError:
try: BuildQuality = 1
ToolDirectories try:
except NameError: ToolDirectories
ToolDirectories = [ 'R:/code/nel', 'R:/code/ryzom/tools' ] except NameError:
try: ToolDirectories = [ 'R:/build/dev/bin/Release', 'D:/libraries/external/bin' ]
ToolSuffix try:
except NameError: ToolSuffix
ToolSuffix = "_r.exe" except NameError:
try: ToolSuffix = ".exe"
ScriptDirectory try:
except NameError: ScriptDirectory
ScriptDirectory = "R:/code/nel/tools/build_gamedata" except NameError:
try: ScriptDirectory = "R:/code/nel/tools/build_gamedata"
WorkspaceDirectory try:
except NameError: WorkspaceDirectory
WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace" except NameError:
try: WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace"
DatabaseDirectory try:
except NameError: DatabaseDirectory
DatabaseDirectory = "W:/database" except NameError:
try: DatabaseDirectory = "W:/database"
ExportBuildDirectory try:
except NameError: ExportBuildDirectory
ExportBuildDirectory = "W:/export" except NameError:
try: ExportBuildDirectory = "W:/export"
InstallDirectory try:
except NameError: InstallDirectory
InstallDirectory = "W:/install" except NameError:
try: InstallDirectory = "W:/install"
DataShardDirectory try:
except NameError: DataShardDirectory
DataShardDirectory = "R:/code/ryzom/server/data_shard" except NameError:
try: DataShardDirectory = "R:/code/ryzom/server/data_shard"
ClientDevDirectory try:
except NameError: ClientDevDirectory
ClientDevDirectory = "W:/client_dev" except NameError:
try: ClientDevDirectory = "W:/client_dev"
ClientPatchDirectory try:
except NameError: ClientPatchDirectory
ClientPatchDirectory = "W:/client_patch" except NameError:
try: ClientPatchDirectory = "W:/client_patch"
ClientInstallDirectory try:
except NameError: ClientInstallDirectory
ClientInstallDirectory = "W:/client_install" except NameError:
try: ClientInstallDirectory = "W:/client_install"
LeveldesignDirectory try:
except NameError: LeveldesignDirectory
LeveldesignDirectory = "L:/leveldesign" except NameError:
try: LeveldesignDirectory = "L:/leveldesign"
LeveldesignDfnDirectory try:
except NameError: LeveldesignDfnDirectory
LeveldesignDfnDirectory = "L:/leveldesign/dfn" except NameError:
try: LeveldesignDfnDirectory = "L:/leveldesign/dfn"
LeveldesignWorldDirectory try:
except NameError: LeveldesignWorldDirectory
LeveldesignWorldDirectory = "L:/leveldesign/world" except NameError:
try: LeveldesignWorldDirectory = "L:/leveldesign/world"
PrimitivesDirectory try:
except NameError: PrimitivesDirectory
PrimitivesDirectory = "L:/primitives" except NameError:
try: PrimitivesDirectory = "L:/primitives"
GamedevDirectory try:
except NameError: GamedevDirectory
GamedevDirectory = "R:/code/ryzom/client/data/gamedev" except NameError:
try: GamedevDirectory = "R:/code/ryzom/client/data/gamedev"
DataCommonDirectory try:
except NameError: DataCommonDirectory
DataCommonDirectory = "R:/code/ryzom/common/data_common" except NameError:
try: DataCommonDirectory = "R:/code/ryzom/common/data_common"
WindowsExeDllCfgDirectories try:
except NameError: WindowsExeDllCfgDirectories
WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/source/external_local/bin/x86', 'D:/source/external_shared/bin/x86', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/client', 'R:/code/ryzom/tools/client/client_config/bin' ] except NameError:
try: WindowsExeDllCfgDirectories = [ 'C:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/redist/x86', 'D:/libraries/external/bin', 'R:/build/dev/bin/Release', 'R:/code/ryzom/client', 'R:/code/nel/lib', 'R:/code/ryzom/bin', 'R:/code/ryzom/tools/client/client_config/bin' ]
MaxAvailable try:
except NameError: MaxAvailable
MaxAvailable = 1 except NameError:
try: MaxAvailable = 1
MaxDirectory try:
except NameError: MaxDirectory
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010" except NameError:
try: MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
MaxUserDirectory try:
except NameError: MaxUserDirectory
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu" except NameError:
try: MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
MaxExecutable try:
except NameError: MaxExecutable
MaxExecutable = "3dsmax.exe" except NameError:
MaxExecutable = "3dsmax.exe"
printLog(log, "") printLog(log, "")
printLog(log, "-------") printLog(log, "-------")
printLog(log, "--- Setup build site") printLog(log, "--- Setup build site")
printLog(log, "-------") printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
printLog(log, "This script will set up the buildsite configuration, and create needed directories.") printLog(log, "This script will set up the buildsite configuration, and create needed directories.")
printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.") printLog(log, "To use the defaults, simply hit ENTER, else type in the new value.")
printLog(log, "Use -- if you need to insert an empty value.") printLog(log, "Use -- if you need to insert an empty value.")
printLog(log, "") printLog(log, "")
BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality))) BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/") ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/") ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix) ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/") ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/") WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/")
DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/") DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/")
ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/") ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/")
InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/") InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/")
DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/") DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/")
ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/") ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/")
ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/") ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/") ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/")
LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/") LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/") LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/") LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/") PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/")
GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/") GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/")
DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).replace("\\", "/") DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).replace("\\", "/")
WindowsExeDllCfgDirectories[0] = askVar(log, "Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/") WindowsExeDllCfgDirectories[0] = askVar(log, "Primary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[0]).replace("\\", "/")
WindowsExeDllCfgDirectories[1] = askVar(log, "Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/") WindowsExeDllCfgDirectories[1] = askVar(log, "Secondary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[1]).replace("\\", "/")
WindowsExeDllCfgDirectories[2] = askVar(log, "Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/") WindowsExeDllCfgDirectories[2] = askVar(log, "Tertiary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[2]).replace("\\", "/")
WindowsExeDllCfgDirectories[3] = askVar(log, "Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/") WindowsExeDllCfgDirectories[3] = askVar(log, "Quaternary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[3]).replace("\\", "/")
WindowsExeDllCfgDirectories[4] = askVar(log, "Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/") WindowsExeDllCfgDirectories[4] = askVar(log, "Quinary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[4]).replace("\\", "/")
WindowsExeDllCfgDirectories[5] = askVar(log, "Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/") WindowsExeDllCfgDirectories[5] = askVar(log, "Senary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[5]).replace("\\", "/")
WindowsExeDllCfgDirectories[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/") WindowsExeDllCfgDirectories[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable))) MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
if MaxAvailable: if MaxAvailable:
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/") MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/") MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable) MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
if os.path.isfile("configuration/buildsite.py"): if os.path.isfile("configuration/buildsite.py"):
os.remove("configuration/buildsite.py") os.remove("configuration/buildsite.py")
sf = open("configuration/buildsite.py", "w") sf = open("configuration/buildsite.py", "w")
sf.write("#!/usr/bin/python\n") sf.write("#!/usr/bin/python\n")
sf.write("# \n") sf.write("# \n")
sf.write("# \\file site.py\n") sf.write("# \\file site.py\n")
sf.write("# \\brief Site configuration\n") sf.write("# \\brief Site configuration\n")
sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n") sf.write("# \\date " + time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "\n")
sf.write("# \\author Jan Boon (Kaetemi)\n") sf.write("# \\author Jan Boon (Kaetemi)\n")
sf.write("# Python port of game data build pipeline.\n") sf.write("# Python port of game data build pipeline.\n")
sf.write("# Site configuration.\n") sf.write("# Site configuration.\n")
sf.write("# \n") sf.write("# \n")
sf.write("# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>\n") sf.write("# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>\n")
sf.write("# Copyright (C) 2010 Winch Gate Property Limited\n") sf.write("# Copyright (C) 2010 Winch Gate Property Limited\n")
sf.write("# \n") sf.write("# \n")
sf.write("# This program is free software: you can redistribute it and/or modify\n") sf.write("# This program is free software: you can redistribute it and/or modify\n")
sf.write("# it under the terms of the GNU Affero General Public License as\n") sf.write("# it under the terms of the GNU Affero General Public License as\n")
sf.write("# published by the Free Software Foundation, either version 3 of the\n") sf.write("# published by the Free Software Foundation, either version 3 of the\n")
sf.write("# License, or (at your option) any later version.\n") sf.write("# License, or (at your option) any later version.\n")
sf.write("# \n") sf.write("# \n")
sf.write("# This program is distributed in the hope that it will be useful,\n") sf.write("# This program is distributed in the hope that it will be useful,\n")
sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n") sf.write("# but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n") sf.write("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
sf.write("# GNU Affero General Public License for more details.\n") sf.write("# GNU Affero General Public License for more details.\n")
sf.write("# \n") sf.write("# \n")
sf.write("# You should have received a copy of the GNU Affero General Public License\n") sf.write("# You should have received a copy of the GNU Affero General Public License\n")
sf.write("# along with this program. If not, see <http://www.gnu.org/licenses/>.\n") sf.write("# along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
sf.write("# \n") sf.write("# \n")
sf.write("\n") sf.write("\n")
sf.write("\n") sf.write("\n")
sf.write("# *** SITE INSTALLATION ***\n") sf.write("# *** SITE INSTALLATION ***\n")
sf.write("\n") sf.write("\n")
sf.write("# Use '/' in path name, not '\'\n") sf.write("# Use '/' in path name, not '\'\n")
sf.write("# Don't put '/' at the end of a directory name\n") sf.write("# Don't put '/' at the end of a directory name\n")
sf.write("\n") sf.write("\n")
sf.write("\n") sf.write("\n")
sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n") sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
sf.write("BuildQuality = " + str(BuildQuality) + "\n") sf.write("BuildQuality = " + str(BuildQuality) + "\n")
sf.write("\n") sf.write("\n")
sf.write("ToolDirectories = " + str(ToolDirectories) + "\n") sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n") sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("# Build script directory\n") sf.write("# Build script directory\n")
sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n") sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n") sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("# Data build directories\n") sf.write("# Data build directories\n")
sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n") sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n") sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("# Install directories\n") sf.write("# Install directories\n")
sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n") sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n") sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n") sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n") sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n") sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n") sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n")
sf.write("\n") sf.write("\n")
sf.write("# Leveldesign directories\n") sf.write("# Leveldesign directories\n")
sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n") sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n") sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n") sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n") sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("# Misc data directories\n") sf.write("# Misc data directories\n")
sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n") sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n") sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n") sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
sf.write("\n") sf.write("\n")
sf.write("# 3dsMax directives\n") sf.write("# 3dsMax directives\n")
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n") sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n") sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n") sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n") sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
sf.write("\n") sf.write("\n")
sf.write("\n") sf.write("\n")
sf.write("# end of file\n") sf.write("# end of file\n")
sf.close() sf.close()
sys.path.append(WorkspaceDirectory) sys.path.append(WorkspaceDirectory)
from projects import * from projects import *
@ -262,22 +284,83 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each project # For each project
for projectName in ProjectsToProcess: for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
os.chdir("processes") printLog(log, "PROJECT " + projectName)
try: os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
subprocess.call([ "python", "0_setup.py" ]) os.chdir("processes")
except Exception, e: try:
printLog(log, "<" + projectName + "> " + str(e)) if not args.includeprocess == None:
os.chdir("..") subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess)
try: elif not args.excludeprocess == None:
projectLog = open("processes/log.log", "r") subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
projectLogData = projectLog.read() else:
projectLog.close() subprocess.call([ "python", "0_setup.py" ])
log.write(projectLogData) except Exception, e:
except Exception, e: printLog(log, "<" + projectName + "> " + str(e))
printLog(log, "<" + projectName + "> " + str(e)) os.chdir("..")
try:
projectLog = open("processes/log.log", "r")
projectLogData = projectLog.read()
projectLog.close()
log.write(projectLogData)
except Exception, e:
printLog(log, "<" + projectName + "> " + str(e))
else:
printLog(log, "IGNORE PROJECT " + projectName)
printLog(log, "") printLog(log, "")
# Additional directories
printLog(log, ">>> Setup additional directories <<<")
mkPath(log, ClientDevDirectory)
mkPath(log, ClientPatchDirectory)
mkPath(log, ClientInstallDirectory)
if not args.noverify:
printLog(log, "")
printLog(log, "-------")
printLog(log, "--- Verify tool paths")
printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
if MaxAvailable:
findMax(log, MaxDirectory, MaxExecutable)
findTool(log, ToolDirectories, TgaToDdsTool, ToolSuffix)
findTool(log, ToolDirectories, BuildInterfaceTool, ToolSuffix)
findTool(log, ToolDirectories, ExecTimeoutTool, ToolSuffix)
findTool(log, ToolDirectories, BuildSmallbankTool, ToolSuffix)
findTool(log, ToolDirectories, BuildFarbankTool, ToolSuffix)
findTool(log, ToolDirectories, ZoneDependenciesTool, ToolSuffix)
findTool(log, ToolDirectories, ZoneWelderTool, ToolSuffix)
findTool(log, ToolDirectories, BuildRbankTool, ToolSuffix)
findTool(log, ToolDirectories, BuildIndoorRbankTool, ToolSuffix)
findTool(log, ToolDirectories, BuildIgBoxesTool, ToolSuffix)
findTool(log, ToolDirectories, GetNeighborsTool, ToolSuffix)
findTool(log, ToolDirectories, ZoneLighterTool, ToolSuffix)
findTool(log, ToolDirectories, ZoneIgLighterTool, ToolSuffix)
findTool(log, ToolDirectories, IgLighterTool, ToolSuffix)
findTool(log, ToolDirectories, AnimBuilderTool, ToolSuffix)
findTool(log, ToolDirectories, TileEditTool, ToolSuffix)
# findTool(log, ToolDirectories, BuildImagesetTool, ToolSuffix) # kaetemi stuff, ignore this
findTool(log, ToolDirectories, MakeSheetIdTool, ToolSuffix)
# findTool(log, ToolDirectories, BuildSheetsTool, ToolSuffix) # kaetemi stuff, ignore this
# findTool(log, ToolDirectories, BuildSoundTool, ToolSuffix) # kaetemi stuff, ignore this
findTool(log, ToolDirectories, BuildCoarseMeshTool, ToolSuffix)
findTool(log, ToolDirectories, LightmapOptimizerTool, ToolSuffix)
findTool(log, ToolDirectories, BuildClodtexTool, ToolSuffix)
findTool(log, ToolDirectories, BuildShadowSkinTool, ToolSuffix)
findTool(log, ToolDirectories, PanoplyMakerTool, ToolSuffix)
findTool(log, ToolDirectories, HlsBankMakerTool, ToolSuffix)
findTool(log, ToolDirectories, LandExportTool, ToolSuffix)
findTool(log, ToolDirectories, PrimExportTool, ToolSuffix)
findTool(log, ToolDirectories, IgElevationTool, ToolSuffix)
findTool(log, ToolDirectories, IgAddTool, ToolSuffix)
findTool(log, ToolDirectories, BuildClodBankTool, ToolSuffix)
findTool(log, ToolDirectories, SheetsPackerTool, ToolSuffix)
findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
findTool(log, ToolDirectories, AiBuildWmapTool, ToolSuffix)
findTool(log, ToolDirectories, TgaCutTool, ToolSuffix)
findTool(log, ToolDirectories, PatchGenTool, ToolSuffix)
log.close() log.close()
if os.path.isfile("0_setup.log"): if os.path.isfile("0_setup.log"):
os.remove("0_setup.log") os.remove("0_setup.log")

View file

@ -24,9 +24,25 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("configuration") sys.path.append("configuration")
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Export')
# parser.add_argument('--haltonerror', '-eh', action='store_true')
parser.add_argument('--includeproject', '-ipj', nargs='+')
parser.add_argument('--excludeproject', '-epj', nargs='+')
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if not args.includeproject == None and not args.excludeproject == None:
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
exit()
if not args.includeprocess == None and not args.excludeprocess == None:
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
exit()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each project # For each project
for projectName in ProjectsToProcess: for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
os.chdir("processes") printLog(log, "PROJECT " + projectName)
try: os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
subprocess.call([ "python", "1_export.py" ]) os.chdir("processes")
except Exception, e: try:
printLog(log, "<" + projectName + "> " + str(e)) if not args.includeprocess == None:
os.chdir("..") subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess)
try: elif not args.excludeprocess == None:
projectLog = open("processes/log.log", "r") subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess)
projectLogData = projectLog.read() else:
projectLog.close() subprocess.call([ "python", "1_export.py" ])
log.write(projectLogData) except Exception, e:
except Exception, e: printLog(log, "<" + projectName + "> " + str(e))
printLog(log, "<" + projectName + "> " + str(e)) os.chdir("..")
try:
projectLog = open("processes/log.log", "r")
projectLogData = projectLog.read()
projectLog.close()
log.write(projectLogData)
except Exception, e:
printLog(log, "<" + projectName + "> " + str(e))
else:
printLog(log, "IGNORE PROJECT " + projectName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,25 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("configuration") sys.path.append("configuration")
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Build')
# parser.add_argument('--haltonerror', '-eh', action='store_true')
parser.add_argument('--includeproject', '-ipj', nargs='+')
parser.add_argument('--excludeproject', '-epj', nargs='+')
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if not args.includeproject == None and not args.excludeproject == None:
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
exit()
if not args.includeprocess == None and not args.excludeprocess == None:
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
exit()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each project # For each project
for projectName in ProjectsToProcess: for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
os.chdir("processes") printLog(log, "PROJECT " + projectName)
try: os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
subprocess.call([ "python", "2_build.py" ]) os.chdir("processes")
except Exception, e: try:
printLog(log, "<" + projectName + "> " + str(e)) if not args.includeprocess == None:
os.chdir("..") subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess)
try: elif not args.excludeprocess == None:
projectLog = open("processes/log.log", "r") subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess)
projectLogData = projectLog.read() else:
projectLog.close() subprocess.call([ "python", "2_build.py" ])
log.write(projectLogData) except Exception, e:
except Exception, e: printLog(log, "<" + projectName + "> " + str(e))
printLog(log, "<" + projectName + "> " + str(e)) os.chdir("..")
try:
projectLog = open("processes/log.log", "r")
projectLogData = projectLog.read()
projectLog.close()
log.write(projectLogData)
except Exception, e:
printLog(log, "<" + projectName + "> " + str(e))
else:
printLog(log, "IGNORE PROJECT " + projectName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,25 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("configuration") sys.path.append("configuration")
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Install')
# parser.add_argument('--haltonerror', '-eh', action='store_true')
parser.add_argument('--includeproject', '-ipj', nargs='+')
parser.add_argument('--excludeproject', '-epj', nargs='+')
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if not args.includeproject == None and not args.excludeproject == None:
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
exit()
if not args.includeprocess == None and not args.excludeprocess == None:
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
exit()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each project # For each project
for projectName in ProjectsToProcess: for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName)) if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
os.chdir("processes") printLog(log, "PROJECT " + projectName)
try: os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
subprocess.call([ "python", "3_install.py" ]) os.chdir("processes")
except Exception, e: try:
printLog(log, "<" + projectName + "> " + str(e)) if not args.includeprocess == None:
os.chdir("..") subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess)
try: elif not args.excludeprocess == None:
projectLog = open("processes/log.log", "r") subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess)
projectLogData = projectLog.read() else:
projectLog.close() subprocess.call([ "python", "3_install.py" ])
log.write(projectLogData) except Exception, e:
except Exception, e: printLog(log, "<" + projectName + "> " + str(e))
printLog(log, "<" + projectName + "> " + str(e)) os.chdir("..")
try:
projectLog = open("processes/log.log", "r")
projectLogData = projectLog.read()
projectLog.close()
log.write(projectLogData)
except Exception, e:
printLog(log, "<" + projectName + "> " + str(e))
else:
printLog(log, "IGNORE PROJECT " + projectName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,13 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("configuration") sys.path.append("configuration")
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Client Patch')
parser.add_argument('--bnponly', '-bo', action='store_true')
args = parser.parse_args()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -59,56 +63,57 @@ printLog(log, "")
if BnpMake == "": if BnpMake == "":
toolLogFail(log, BnpMakeTool, ToolSuffix) toolLogFail(log, BnpMakeTool, ToolSuffix)
elif PatchGen == "": elif PatchGen == "" and not args.bnponly:
toolLogFail(log, PatchGenTool, ToolSuffix) toolLogFail(log, PatchGenTool, ToolSuffix)
elif Lzma == "": elif Lzma == "" and not args.bnponly:
toolLogFail(log, "LZMA", ToolSuffix) toolLogFail(log, "LZMA", ToolSuffix)
elif XDelta == "": elif XDelta == "" and not args.bnponly:
toolLogFail(log, "XDELTA", ToolSuffix) toolLogFail(log, "XDELTA", ToolSuffix)
elif os.path.dirname(Lzma) != os.path.dirname(XDelta): elif os.path.dirname(Lzma) != os.path.dirname(XDelta):
printLog(log, "FAIL lzma.exe and xdelta.exe must be in the same directory") printLog(log, "FAIL lzma.exe and xdelta.exe must be in the same directory")
else: else:
mkPath(log, ClientPatchDirectory) mkPath(log, ClientPatchDirectory)
productXml = ClientPatchDirectory + "/" + ProductName + ".xml" if not args.bnponly:
if not os.path.isfile(productXml): productXml = ClientPatchDirectory + "/" + ProductName + ".xml"
printLog(log, ">>> Create new product <<<") if not os.path.isfile(productXml):
subprocess.call([ PatchGen, "createNewProduct", productXml ]) printLog(log, ">>> Create new product <<<")
printLog(log, "") subprocess.call([ PatchGen, "createNewProduct", productXml ])
printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better. printLog(log, "")
shutil.move(productXml, productXml + ".old") printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better.
oldCfg = open(productXml + ".old", "r") shutil.move(productXml, productXml + ".old")
cfg = open(productXml, "w") oldCfg = open(productXml + ".old", "r")
inCategories = 0 cfg = open(productXml, "w")
for line in oldCfg: inCategories = 0
if not inCategories: for line in oldCfg:
if line.strip() == "<_Categories>": if not inCategories:
inCategories = 1 if line.strip() == "<_Categories>":
cfg.write("\t<_Categories>\n") inCategories = 1
for category in InstallClientData: cfg.write("\t<_Categories>\n")
cfg.write("\t\t<_Category>\n") for category in InstallClientData:
cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n") cfg.write("\t\t<_Category>\n")
if category["UnpackTo"] != None: cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n")
if category["UnpackTo"] != "": if category["UnpackTo"] != None:
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n") if category["UnpackTo"] != "":
else: cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n")
cfg.write("\t\t\t<_UnpackTo type=\"SINT32\" value=\"./\"/>\n") else:
cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n") cfg.write("\t\t\t<_UnpackTo type=\"SINT32\" value=\"./\"/>\n")
cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n") cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n")
for package in category["Packages"]: cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n")
if (len(package[1]) > 0): for package in category["Packages"]:
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n") if (len(package[1]) > 0):
else: cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n")
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + ".bnp\"/>\n") else:
cfg.write("\t\t</_Category>\n") cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + ".bnp\"/>\n")
cfg.write("\t</_Categories>\n") cfg.write("\t\t</_Category>\n")
cfg.write("\t</_Categories>\n")
else:
cfg.write(line)
else: else:
cfg.write(line) if line.strip() == "</_Categories>":
else: inCategories = 0
if line.strip() == "</_Categories>": oldCfg.close()
inCategories = 0 cfg.close()
oldCfg.close() os.remove(productXml + ".old")
cfg.close()
os.remove(productXml + ".old")
printLog(log, "") printLog(log, "")
printLog(log, ">>> Make bnp <<<") printLog(log, ">>> Make bnp <<<")
targetPath = ClientPatchDirectory + "/bnp" targetPath = ClientPatchDirectory + "/bnp"
@ -133,13 +138,14 @@ else:
else: else:
printLog(log, "SKIP " + targetBnp) printLog(log, "SKIP " + targetBnp)
printLog(log, "") printLog(log, "")
printLog(log, ">>> Update product <<<") if not args.bnponly:
cwDir = os.getcwd().replace("\\", "/") printLog(log, ">>> Update product <<<")
toolDir = os.path.dirname(Lzma).replace("\\", "/") cwDir = os.getcwd().replace("\\", "/")
os.chdir(toolDir) toolDir = os.path.dirname(Lzma).replace("\\", "/")
subprocess.call([ PatchGen, "updateProduct", productXml ]) os.chdir(toolDir)
os.chdir(cwDir) subprocess.call([ PatchGen, "updateProduct", productXml ])
printLog(log, "") os.chdir(cwDir)
printLog(log, "")
log.close() log.close()

View file

@ -45,45 +45,30 @@ printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time()))) printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# Find tools for category in InstallClientData:
BnpMake = findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix) printLog(log, "CATEGORY " + category["Name"])
printLog(log, "") if (category["UnpackTo"] != None):
targetPath = ClientInstallDirectory
if BnpMake == "": if (category["UnpackTo"] != ""):
toolLogFail(log, BnpMakeTool, ToolSuffix) targetPath += "/" + category["UnpackTo"]
else: mkPath(log, targetPath)
for category in InstallClientData: for package in category["Packages"]:
printLog(log, "CATEGORY " + category["Name"]) printLog(log, "PACKAGE " + package[0])
if (category["UnpackTo"] != None): mkPath(log, InstallDirectory + "/" + package[0])
targetPath = ClientInstallDirectory copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
if (category["UnpackTo"] != ""): else:
targetPath += "/" + category["UnpackTo"] sourcePath = ClientPatchDirectory + "/bnp"
mkPath(log, targetPath) targetPath = ClientInstallDirectory + "/data"
for package in category["Packages"]: mkPath(log, targetPath)
printLog(log, "PACKAGE " + package[0]) for package in category["Packages"]:
mkPath(log, InstallDirectory + "/" + package[0]) printLog(log, "PACKAGE " + package[0])
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath) sourceBnp = sourcePath + "/" + package[0] + ".bnp"
else: targetBnp = targetPath + "/" + package[0] + ".bnp"
targetPath = ClientInstallDirectory + "/data" if (len(package[1]) > 0):
mkPath(log, targetPath) sourceBnp = sourcePath + "/" + package[1][0]
for package in category["Packages"]: targetBnp = targetPath + "/" + package[1][0]
printLog(log, "PACKAGE " + package[0]) printLog(log, "TARGET " + package[1][0])
sourcePath = InstallDirectory + "/" + package[0] copyFileIfNeeded(log, sourceBnp, targetBnp)
mkPath(log, sourcePath)
targetBnp = targetPath + "/" + package[0] + ".bnp"
if (len(package[1]) > 0):
targetBnp = targetPath + "/" + package[1][0]
printLog(log, "TARGET " + package[1][0])
needUpdateBnp = 1
if (len(package) > 2):
needUpdateBnp = needUpdate(log, sourcePath + "/" + package[2], targetBnp)
else:
needUpdateBnp = needUpdateDirNoSubdirFile(log, sourcePath, targetBnp)
if (needUpdateBnp):
printLog(log, "BNP " + targetBnp)
subprocess.call([ BnpMake, "/p", sourcePath, targetPath ] + package[1])
else:
printLog(log, "SKIP " + targetBnp)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -69,10 +69,10 @@ ZoneIgLighterTool = "zone_ig_lighter"
IgLighterTool = "ig_lighter" IgLighterTool = "ig_lighter"
AnimBuilderTool = "anim_builder" AnimBuilderTool = "anim_builder"
TileEditTool = "tile_edit" TileEditTool = "tile_edit"
BuildImagesetTool = "th_build_imageset" # BuildImagesetTool = "th_build_imageset" # kaetemi stuff, ignore this
MakeSheetIdTool = "make_sheet_id" MakeSheetIdTool = "make_sheet_id"
BuildSheetsTool = "th_build_sheets" # BuildSheetsTool = "th_build_sheets" # kaetemi stuff, ignore this
BuildSoundTool = "th_build_sound" # BuildSoundTool = "th_build_sound" # kaetemi stuff, ignore this
BuildCoarseMeshTool = "build_coarse_mesh" BuildCoarseMeshTool = "build_coarse_mesh"
LightmapOptimizerTool = "lightmap_optimizer" LightmapOptimizerTool = "lightmap_optimizer"
BuildClodtexTool = "build_clodtex" BuildClodtexTool = "build_clodtex"

View file

@ -187,7 +187,7 @@ fn haveCoarseMesh node =
return false return false
) )
fn runNelMaxExport inputMaxFile = fn runNelMaxExportSub inputMaxFile retryCount =
( (
tagThisFile = false tagThisFile = false
@ -354,8 +354,39 @@ fn runNelMaxExport inputMaxFile =
( (
-- Error -- Error
nlerror("WARNING no shape exported from the file " + inputMaxFile) nlerror("WARNING no shape exported from the file " + inputMaxFile)
if tagThisFile then
(
if retryCount < 2 then
(
nlerror("INFO retry this file")
-- Free memory and file handles
gc()
heapfree
-- Reset 3dsmax
resetMAXFile #noprompt
if (loadMaxFile inputMaxFile quiet:true) == true then
(
tagThisFile = runNelMaxExportSub inputMaxFile (retryCount + 1)
)
else
(
-- Error
nlerror("ERROR exporting '%PreGenFileExtension%': can't open the file " + inputMaxFile)
nlerror("FAIL Mysterious error occured")
NelForceQuitRightNow()
)
)
)
) )
return tagThisFile return tagThisFile
) )
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)

View file

@ -90,7 +90,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting '%PreGenFileExtension%' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting '%PreGenFileExtension%' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -24,8 +24,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("../configuration") sys.path.append("../configuration")
parser = argparse.ArgumentParser()
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -60,20 +66,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each process # For each process
for processName in ProcessToComplete: for processName in ProcessToComplete:
os.chdir(processName) if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
try: printLog(log, "PROCESS " + processName)
subprocess.call([ "python", "0_setup.py" ]) os.chdir(processName)
except Exception, e: try:
printLog(log, "<" + processName + "> " + str(e)) subprocess.call([ "python", "0_setup.py" ])
os.chdir("..") except Exception, e:
try: printLog(log, "<" + processName + "> " + str(e))
processLog = open(processName + "/log.log", "r") os.chdir("..")
processLogData = processLog.read() try:
processLog.close() processLog = open(processName + "/log.log", "r")
log.write(processLogData) processLogData = processLog.read()
except Exception, e: processLog.close()
printLog(log, "<" + processName + "> " + str(e)) log.write(processLogData)
# subprocess.call("idle.bat") except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("../configuration") sys.path.append("../configuration")
parser = argparse.ArgumentParser()
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each process # For each process
for processName in ProcessToComplete: for processName in ProcessToComplete:
os.chdir(processName) if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
try: printLog(log, "PROCESS " + processName)
subprocess.call([ "python", "1_export.py" ]) os.chdir(processName)
except Exception, e: try:
printLog(log, "<" + processName + "> " + str(e)) subprocess.call([ "python", "1_export.py" ])
os.chdir("..") except Exception, e:
try: printLog(log, "<" + processName + "> " + str(e))
processLog = open(processName + "/log.log", "r") os.chdir("..")
processLogData = processLog.read() try:
processLog.close() processLog = open(processName + "/log.log", "r")
log.write(processLogData) processLogData = processLog.read()
except Exception, e: processLog.close()
printLog(log, "<" + processName + "> " + str(e)) log.write(processLogData)
# subprocess.call("idle.bat") except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("../configuration") sys.path.append("../configuration")
parser = argparse.ArgumentParser()
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each process # For each process
for processName in ProcessToComplete: for processName in ProcessToComplete:
os.chdir(processName) if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
try: printLog(log, "PROCESS " + processName)
subprocess.call([ "python", "2_build.py" ]) os.chdir(processName)
except Exception, e: try:
printLog(log, "<" + processName + "> " + str(e)) subprocess.call([ "python", "2_build.py" ])
os.chdir("..") except Exception, e:
try: printLog(log, "<" + processName + "> " + str(e))
processLog = open(processName + "/log.log", "r") os.chdir("..")
processLogData = processLog.read() try:
processLog.close() processLog = open(processName + "/log.log", "r")
log.write(processLogData) processLogData = processLog.read()
except Exception, e: processLog.close()
printLog(log, "<" + processName + "> " + str(e)) log.write(processLogData)
# subprocess.call("idle.bat") except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -24,9 +24,14 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import time, sys, os, shutil, subprocess, distutils.dir_util import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
sys.path.append("../configuration") sys.path.append("../configuration")
parser = argparse.ArgumentParser()
parser.add_argument('--includeprocess', '-ipc', nargs='+')
parser.add_argument('--excludeprocess', '-epc', nargs='+')
args = parser.parse_args()
if os.path.isfile("log.log"): if os.path.isfile("log.log"):
os.remove("log.log") os.remove("log.log")
log = open("log.log", "w") log = open("log.log", "w")
@ -44,20 +49,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "") printLog(log, "")
# For each process # For each process
for processName in ProcessToComplete: for processName in ProcessToComplete:
os.chdir(processName) if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
try: printLog(log, "PROCESS " + processName)
subprocess.call([ "python", "3_install.py" ]) os.chdir(processName)
except Exception, e: try:
printLog(log, "<" + processName + "> " + str(e)) subprocess.call([ "python", "3_install.py" ])
os.chdir("..") except Exception, e:
try: printLog(log, "<" + processName + "> " + str(e))
processLog = open(processName + "/log.log", "r") os.chdir("..")
processLogData = processLog.read() try:
processLog.close() processLog = open(processName + "/log.log", "r")
log.write(processLogData) processLogData = processLog.read()
except Exception, e: processLog.close()
printLog(log, "<" + processName + "> " + str(e)) log.write(processLogData)
# subprocess.call("idle.bat") except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -6,7 +6,7 @@
# #
# \file 1_export.py # \file 1_export.py
# \brief Export anim # \brief Export anim
# \date 2010-09-26-08-38-GMT # \date 2011-09-21-20-51-GMT
# \author Jan Boon (Kaetemi) # \author Jan Boon (Kaetemi)
# Python port of game data build pipeline. # Python port of game data build pipeline.
# Export anim # Export anim

View file

@ -224,7 +224,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'anim' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'anim' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -6,7 +6,7 @@
# #
# \file 1_export.py # \file 1_export.py
# \brief Export clodbank # \brief Export clodbank
# \date 2010-09-26-08-38-GMT # \date 2011-09-21-20-51-GMT
# \author Jan Boon (Kaetemi) # \author Jan Boon (Kaetemi)
# Python port of game data build pipeline. # Python port of game data build pipeline.
# Export clodbank # Export clodbank

View file

@ -279,7 +279,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'clod' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'clod' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -328,7 +328,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'ig' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'ig' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -6,7 +6,7 @@
# #
# \file 1_export.py # \file 1_export.py
# \brief Export rbank # \brief Export rbank
# \date 2010-09-26-08-38-GMT # \date 2011-09-21-20-51-GMT
# \author Jan Boon (Kaetemi) # \author Jan Boon (Kaetemi)
# Python port of game data build pipeline. # Python port of game data build pipeline.
# Export rbank # Export rbank

View file

@ -215,7 +215,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'cmb' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'cmb' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -253,7 +253,7 @@ fn haveCoarseMesh node =
return false return false
) )
fn runNelMaxExport inputMaxFile = fn runNelMaxExportSub inputMaxFile retryCount =
( (
tagThisFile = false tagThisFile = false
@ -420,11 +420,42 @@ fn runNelMaxExport inputMaxFile =
( (
-- Error -- Error
nlerror("WARNING no shape exported from the file " + inputMaxFile) nlerror("WARNING no shape exported from the file " + inputMaxFile)
if tagThisFile then
(
if retryCount < 2 then
(
nlerror("INFO retry this file")
-- Free memory and file handles
gc()
heapfree
-- Reset 3dsmax
resetMAXFile #noprompt
if (loadMaxFile inputMaxFile quiet:true) == true then
(
tagThisFile = runNelMaxExportSub inputMaxFile (retryCount + 1)
)
else
(
-- Error
nlerror("ERROR exporting 'shape': can't open the file " + inputMaxFile)
nlerror("FAIL Mysterious error occured")
NelForceQuitRightNow()
)
)
)
) )
return tagThisFile return tagThisFile
) )
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)
removeRunningTag = true removeRunningTag = true
@ -517,7 +548,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'shape' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'shape' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -49,6 +49,7 @@ mkPath(log, installPath)
printLog(log, ">>> Install sheets <<<") printLog(log, ">>> Install sheets <<<")
mkPath(log, ExportBuildDirectory + "/" + SheetsBuildDirectory) mkPath(log, ExportBuildDirectory + "/" + SheetsBuildDirectory)
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + SheetsBuildDirectory, installPath, ".packed_sheets") copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + SheetsBuildDirectory, installPath, ".packed_sheets")
copyFilesExtNoTreeIfNeeded(log, ExportBuildDirectory + "/" + SheetsBuildDirectory, installPath, ".packed")
printLog(log, "") printLog(log, "")
log.close() log.close()

View file

@ -6,7 +6,7 @@
# #
# \file 1_export.py # \file 1_export.py
# \brief Export veget # \brief Export veget
# \date 2010-09-26-08-38-GMT # \date 2011-09-21-20-51-GMT
# \author Jan Boon (Kaetemi) # \author Jan Boon (Kaetemi)
# Python port of game data build pipeline. # Python port of game data build pipeline.
# Export veget # Export veget

View file

@ -269,7 +269,9 @@ try
catch catch
( (
-- Error -- Error
nlerror("ERROR fatal error exporting 'veget' in folder %MaxSourceDirectory%") nlerror("ERROR Fatal error exporting 'veget' in folder %MaxSourceDirectory%")
nlerror("FAIL Fatal error occured")
NelForceQuitRightNow()
removeRunningTag = false removeRunningTag = false
) )

View file

@ -68,6 +68,8 @@ public:
/// Get the ContextHelp for this control. Default is to return _ContextHelp /// Get the ContextHelp for this control. Default is to return _ContextHelp
virtual void getContextHelp(ucstring &help) const {help= _ContextHelp;} virtual void getContextHelp(ucstring &help) const {help= _ContextHelp;}
/// Get the ContextHelp for this control, with tooltip specific code. Default behaviour is identical to getContextHelp.
virtual void getContextHelpToolTip(ucstring &help) const { getContextHelp(help); }
// Get the name of the context help window. Default to "context_help" // Get the name of the context help window. Default to "context_help"
virtual std::string getContextHelpWindowName() const; virtual std::string getContextHelpWindowName() const;
/// Get the ContextHelp ActionHandler. If "", noop /// Get the ContextHelp ActionHandler. If "", noop

View file

@ -2975,32 +2975,9 @@ void CDBCtrlSheet::getContextHelp(ucstring &help) const
} }
else if(getType() == CCtrlSheetInfo::SheetType_Item) else if(getType() == CCtrlSheetInfo::SheetType_Item)
{ {
const CItemSheet *item= asItemSheet(); const CItemSheet *item = asItemSheet();
if(item) if (item)
{ help = getItemActualName();
if (item->Family == ITEMFAMILY::CRYSTALLIZED_SPELL || item->Family == ITEMFAMILY::JEWELRY || item->Family == ITEMFAMILY::ARMOR)
{
string luaMethodName = ( (item->Family == ITEMFAMILY::CRYSTALLIZED_SPELL) ? "updateCrystallizedSpellTooltip" : "updateBuffItemTooltip");
CDBCtrlSheet *ctrlSheet = const_cast<CDBCtrlSheet*>(this);
if ( ! getInventory().isItemInfoUpToDate(getInventory().getItemSlotId(ctrlSheet)))
{
// Prepare the waiter
ControlSheetTooltipUpdater.ItemSheet= ctrlSheet->getSheetId();
ControlSheetTooltipUpdater.LuaMethodName = luaMethodName;
ControlSheetTooltipUpdater.ItemSlotId= getInventory().getItemSlotId(ctrlSheet);
ControlSheetTooltipUpdater.CtrlSheet = ctrlSheet;
// Add the waiter
getInventory().addItemInfoWaiter(&ControlSheetTooltipUpdater);
}
help = ControlSheetTooltipUpdater.infoValidated(ctrlSheet, luaMethodName);
}
else
help= getItemActualName();
}
else else
help= _ContextHelp; help= _ContextHelp;
} }
@ -3106,6 +3083,42 @@ void CDBCtrlSheet::getContextHelp(ucstring &help) const
} }
} }
// ***************************************************************************
void CDBCtrlSheet::getContextHelpToolTip(ucstring &help) const
{
// Special case for buff items and spell crystals, only for tooltips
if (getType() == CCtrlSheetInfo::SheetType_Item)
{
const CItemSheet *item = asItemSheet();
if (item)
{
if (item->Family == ITEMFAMILY::CRYSTALLIZED_SPELL
|| item->Family == ITEMFAMILY::JEWELRY || item->Family == ITEMFAMILY::ARMOR)
{
string luaMethodName = (item->Family == ITEMFAMILY::CRYSTALLIZED_SPELL) ? "updateCrystallizedSpellTooltip" : "updateBuffItemTooltip";
CDBCtrlSheet *ctrlSheet = const_cast<CDBCtrlSheet*>(this);
if ( ! getInventory().isItemInfoUpToDate(getInventory().getItemSlotId(ctrlSheet)))
{
// Prepare the waiter
ControlSheetTooltipUpdater.ItemSheet= ctrlSheet->getSheetId();
ControlSheetTooltipUpdater.LuaMethodName = luaMethodName;
ControlSheetTooltipUpdater.ItemSlotId= getInventory().getItemSlotId(ctrlSheet);
ControlSheetTooltipUpdater.CtrlSheet = ctrlSheet;
// Add the waiter
getInventory().addItemInfoWaiter(&ControlSheetTooltipUpdater);
}
help = ControlSheetTooltipUpdater.infoValidated(ctrlSheet, luaMethodName);
return;
}
}
}
// Default
getContextHelp(help);
}
// *************************************************************************** // ***************************************************************************
bool CDBCtrlSheet::canDropItem(CDBCtrlSheet *src) const bool CDBCtrlSheet::canDropItem(CDBCtrlSheet *src) const
{ {

Some files were not shown because too many files have changed in this diff Show more