merge from default

--HG--
branch : gsoc2011-worldeditorqt
This commit is contained in:
dnk-88 2011-09-26 02:40:30 +03:00
commit 67a114e766
185 changed files with 5279 additions and 1508 deletions

View file

@ -95,12 +95,6 @@ public:
@endcode
*/
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

View file

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

View file

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

View file

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

View file

@ -16,12 +16,15 @@
// 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/>.
// Project includes
#include "plugin_spec.h"
#include "iplugin.h"
#include "iplugin_manager.h"
#include "nel/misc/app_context.h"
#include "nel/misc/debug.h"
// Qt includes
#include <QtCore/QList>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
@ -30,8 +33,17 @@
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_filePath(""),
m_fileName(""),
@ -39,6 +51,8 @@ CPluginSpec::CPluginSpec()
m_version(""),
m_vendor(""),
m_description(""),
m_nameSpecFile(""),
m_suffix(""),
m_state(State::Invalid),
m_enabled(true),
m_enabledStartup(true),
@ -47,104 +61,195 @@ CPluginSpec::CPluginSpec()
m_plugin(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;
}
QString CPluginSpec::version() const
QString PluginSpec::version() const
{
return m_version;
}
QString CPluginSpec::vendor() const
QString PluginSpec::vendor() const
{
return m_vendor;
}
QString CPluginSpec::description() const
QString PluginSpec::description() const
{
return m_description;
}
QString CPluginSpec::location() const
QString PluginSpec::location() const
{
return m_location;
}
QString CPluginSpec::filePath() const
QString PluginSpec::filePath() const
{
return m_filePath;
}
QString CPluginSpec::fileName() const
QString PluginSpec::fileName() const
{
return m_fileName;
}
IPlugin *CPluginSpec::plugin() const
IPlugin *PluginSpec::plugin() const
{
return m_plugin;
}
int CPluginSpec::state() const
int PluginSpec::state() const
{
return m_state;
}
bool CPluginSpec::hasError() const
bool PluginSpec::hasError() const
{
return m_hasError;
}
QString CPluginSpec::errorString() const
QString PluginSpec::errorString() const
{
return m_errorString;
}
QList<CPluginSpec *> CPluginSpec::dependencySpecs() const
QList<PluginSpec *> PluginSpec::dependencySpecs() const
{
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())
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))
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);
m_location = fileInfo.absolutePath();
m_filePath = fileInfo.absoluteFilePath();
m_fileName = fileInfo.fileName();
readSpec();
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;
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;
}
bool CPluginSpec::isEnabled() const
bool PluginSpec::isEnabled() const
{
return m_enabled;
}
bool CPluginSpec::loadLibrary()
bool PluginSpec::loadLibrary()
{
if (m_hasError)
return false;
if (m_state != State::Read)
if (m_state != State::Resolved)
{
if (m_state == State::Loaded)
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);
@ -155,38 +260,32 @@ bool CPluginSpec::loadLibrary()
if (!pluginObject)
{
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());
m_name = pluginObject->name();
m_version = pluginObject->version();
m_vendor = pluginObject->vendor();
m_description = pluginObject->description();
m_state = State::Loaded;
m_plugin = pluginObject;
return true;
}
bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs)
bool PluginSpec::resolveDependencies(const QList<PluginSpec *> &specs)
{
if (m_hasError)
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;
return false;
}
QList<CPluginSpec *> resolvedDependencies;
QStringList dependencies = m_plugin->dependencies();
Q_FOREACH(const QString &dependency, dependencies)
QList<PluginSpec *> resolvedDependencies;
Q_FOREACH(const QString &dependency, m_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)
{
@ -199,7 +298,7 @@ bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs)
m_hasError = true;
if (!m_errorString.isEmpty())
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));
continue;
}
@ -209,34 +308,32 @@ bool CPluginSpec::resolveDependencies(const QList<CPluginSpec *> &specs)
return false;
m_dependencySpecs = resolvedDependencies;
m_state = State::Resolved;
return true;
}
bool CPluginSpec::initializePlugin()
bool PluginSpec::initializePlugin()
{
if (m_hasError)
return false;
if (m_state != State::Resolved)
if (m_state != State::Loaded)
{
if (m_state == State::Initialized)
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)
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;
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;
return true;
}
bool CPluginSpec::initializeExtensions()
bool PluginSpec::initializeExtensions()
{
if (m_hasError)
return false;
@ -244,17 +341,17 @@ bool CPluginSpec::initializeExtensions()
{
if (m_state == State::Running)
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)
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_state = State::Running;
return true;
}
void CPluginSpec::stop()
void PluginSpec::stop()
{
if (!m_plugin)
return;
@ -262,7 +359,7 @@ void CPluginSpec::stop()
m_state = State::Stopped;
}
void CPluginSpec::kill()
void PluginSpec::kill()
{
if (!m_plugin)
return;
@ -271,17 +368,17 @@ void CPluginSpec::kill()
m_state = State::Deleted;
}
void CPluginSpec::setEnabledStartup(bool enabled)
void PluginSpec::setEnabledStartup(bool enabled)
{
m_enabledStartup = enabled;
}
bool CPluginSpec::isEnabledStartup() const
bool PluginSpec::isEnabledStartup() const
{
return m_enabledStartup;
}
bool CPluginSpec::reportError(const QString &err)
bool PluginSpec::reportError(const QString &err)
{
m_errorString = err;
m_hasError = true;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -64,8 +64,8 @@ bool CorePlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QStr
bool success = m_mainWindow->initialize(errorString);
GeneralSettingsPage *generalSettings = new GeneralSettingsPage(this);
CSearchPathsSettingsPage *searchPathPage = new CSearchPathsSettingsPage(false, this);
CSearchPathsSettingsPage *recureseSearchPathPage = new CSearchPathsSettingsPage(true, this);
SearchPathsSettingsPage *searchPathPage = new SearchPathsSettingsPage(false, this);
SearchPathsSettingsPage *recureseSearchPathPage = new SearchPathsSettingsPage(true, this);
generalSettings->applyGeneralSettings();
searchPathPage->applySearchPaths();
@ -95,31 +95,6 @@ void CorePlugin::setNelContext(NLMISC::INelContext *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)
{
m_plugMan->addObject(obj);

View file

@ -53,12 +53,6 @@ public:
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
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"),
m_ui.primitivesPathLineEdit->text());
if (!newPath.isEmpty())
{
m_ui.primitivesPathLineEdit->setText(newPath);
}
}
void GeneralSettingsPage::setLigoConfigFile()
{
QString newFile = QFileDialog::getOpenFileName(0, tr("Set the ligo config file"),
m_ui.ligoConfigFileLineEdit->text());
}
}
void GeneralSettingsPage::setLigoConfigFile()
{
QString newFile = QFileDialog::getOpenFileName(0, tr("Set the ligo config file"),
m_ui.ligoConfigFileLineEdit->text());
if (!newFile.isEmpty())
{
m_ui.ligoConfigFileLineEdit->setText(newFile);
}
}
}
}
void GeneralSettingsPage::setAssetsPath()

View file

@ -35,7 +35,7 @@ class IPluginManager;
namespace Core
{
class IMenuManager;
class MenuManager;
class ContextManager;
class CORE_EXPORT ICore : public QObject
@ -52,7 +52,7 @@ public:
const QString &page = QString(),
QWidget *parent = 0) = 0;
virtual IMenuManager *menuManager() const = 0;
virtual MenuManager *menuManager() const = 0;
virtual ContextManager *contextManager() 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);
#endif
m_menuManager = new MenuManager(this);
m_menuManager->setMenuBar(m_menuBar);
m_menuManager = new MenuManager(m_menuBar, this);
m_tabWidget = new QTabWidget(this);
m_tabWidget->setTabPosition(QTabWidget::South);
@ -114,7 +113,7 @@ void MainWindow::extensionsInitialized()
show();
}
IMenuManager *MainWindow::menuManager() const
MenuManager *MainWindow::menuManager() const
{
return m_menuManager;
}
@ -205,7 +204,7 @@ bool MainWindow::showOptionsDialog(const QString &group,
{
if (!parent)
parent = this;
CSettingsDialog settingsDialog(m_pluginManager, group, page, parent);
SettingsDialog settingsDialog(m_pluginManager, group, page, parent);
settingsDialog.show();
bool ok = settingsDialog.execDialog();
if (ok)

View file

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

View file

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

View file

@ -19,39 +19,47 @@
#define MENU_MANAGER_H
// Project includes
#include "imenu_manager.h"
#include "core_global.h"
// Qt includes
#include <QtCore/QHash>
#include <QtCore/QObject>
#include <QtCore/QList>
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
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
public:
MenuManager(QObject *parent = 0);
explicit MenuManager(QMenuBar *menuBar, QObject *parent = 0);
virtual ~MenuManager();
virtual void registerMenu(QMenu *menu, const QString &id);
virtual void registerAction(QAction *action, const QString &id);
void registerMenu(QMenu *menu, const QString &id);
void registerAction(QAction *action, const QString &id);
virtual QMenu *menu(const QString &id) const;
virtual QAction *action(const QString &id) const;
QMenu *menu(const QString &id) const;
QAction *action(const QString &id) const;
virtual void unregisterMenu(const QString &id);
virtual void unregisterAction(const QString &id);
void unregisterMenu(const QString &id);
void unregisterAction(const QString &id);
virtual QMenuBar *menuBar() const;
void setMenuBar(QMenuBar *menuBar);
QMenuBar *menuBar() const;
private:
QMenuBar *_menuBar;
typedef QHash<QString, QMenu *> IdMenuMap;
IdMenuMap _menuMap;
typedef QHash<QString, QAction *> IdActionMap;
IdActionMap _actionMap;
MenuManagerPrivate *d;
};
} // 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>
</widget>
<resources>
<include location="../object_viewer_qt.qrc"/>
<include location="../../object_viewer_qt.qrc"/>
</resources>
<connections>
<connection>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CSettingsDialog</class>
<widget class="QDialog" name="CSettingsDialog">
<class>SettingsDialog</class>
<widget class="QDialog" name="SettingsDialog">
<property name="geometry">
<rect>
<x>0</x>
@ -93,7 +93,7 @@
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>CSettingsDialog</receiver>
<receiver>SettingsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
@ -109,7 +109,7 @@
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>CSettingsDialog</receiver>
<receiver>SettingsDialog</receiver>
<slot>reject()</slot>
<hints>
<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})
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)
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 "sheet_id_view.h"
#include "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
// Qt includes
@ -37,13 +37,13 @@ using namespace SheetIdViewPlugin;
bool DispSheetIdPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
_plugMan = pluginManager;
m_plugMan = pluginManager;
return true;
}
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);
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.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
_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;
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
Q_EXPORT_PLUGIN(DispSheetIdPlugin)

View file

@ -28,11 +28,6 @@ namespace NLMISC
class CLibraryContext;
}
namespace NLQT
{
class IPluginSpec;
}
namespace SheetIdViewPlugin
{
@ -44,23 +39,16 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
private Q_SLOTS:
void execMessageBox();
protected:
NLMISC::CLibraryContext *_LibContext;
NLMISC::CLibraryContext *m_LibContext;
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);
for (size_t i = 0; i < m_sheetList.size(); i++)
{
QTableWidgetItem* item1 = new QTableWidgetItem(QString(m_sheetList[i].toString().c_str()));
QTableWidgetItem* item2 = new QTableWidgetItem(QString("%1").arg(m_sheetList[i].asInt()));
QTableWidgetItem *item1 = new QTableWidgetItem(QString(m_sheetList[i].toString().c_str()));
QTableWidgetItem *item2 = new QTableWidgetItem(QString("%1").arg(m_sheetList[i].asInt()));
m_ui.table->setItem(i,1,item1);
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_spec.h)
SET(OVQT_PLUG_EXAMPLE_HDR plugin1.h
qnel_widget.h
simple_viewer.h
example_settings_page.h)
SET(OVQT_PLUG_EXAMPLE_HDR example_plugin.h
qnel_widget.h
simple_viewer.h
example_settings_page.h)
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;
}
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace Plugin
{
class MyPlugin : public QObject, public ExtensionSystem::IPlugin
class ExamplePlugin : public QObject, public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_INTERFACES(ExtensionSystem::IPlugin)
public:
virtual ~MyPlugin();
ExamplePlugin();
virtual ~ExamplePlugin();
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
protected:
NLMISC::CLibraryContext *_LibContext;
NLMISC::CLibraryContext *m_LibContext;
private:
ExtensionSystem::IPluginManager *_plugMan;
QList<QObject *> _autoReleaseObjects;
ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> m_autoReleaseObjects;
};
class CExampleContext: public Core::IContext
class ExampleContext: public Core::IContext
{
Q_OBJECT
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
{
@ -95,7 +80,7 @@ public:
{
}
CSimpleViewer *m_simpleViewer;
SimpleViewer *m_simpleViewer;
};
} // namespace Plugin

View file

@ -27,45 +27,45 @@
namespace Plugin
{
CExampleSettingsPage::CExampleSettingsPage(QObject *parent)
ExampleSettingsPage::ExampleSettingsPage(QObject *parent)
: IOptionsPage(parent),
_currentPage(NULL)
m_currentPage(0)
{
}
QString CExampleSettingsPage::id() const
QString ExampleSettingsPage::id() const
{
return QLatin1String("ExamplePage");
}
QString CExampleSettingsPage::trName() const
QString ExampleSettingsPage::trName() const
{
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();
}
QWidget *CExampleSettingsPage::createPage(QWidget *parent)
QWidget *ExampleSettingsPage::createPage(QWidget *parent)
{
_currentPage = new QWidget(parent);
_ui.setupUi(_currentPage);
return _currentPage;
m_currentPage = new QWidget(parent);
m_ui.setupUi(m_currentPage);
return m_currentPage;
}
void CExampleSettingsPage::apply()
void ExampleSettingsPage::apply()
{
}

View file

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

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CExampleSettingsPage</class>
<widget class="QWidget" name="CExampleSettingsPage">
<class>ExampleSettingsPage</class>
<widget class="QWidget" name="ExampleSettingsPage">
<property name="geometry">
<rect>
<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;
}
virtual QPaintEngine* paintEngine() const
virtual QPaintEngine *paintEngine() const
{
return NULL;
}

View file

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

View file

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

View file

@ -21,7 +21,7 @@
#include "georges_treeview_dialog.h"
#include "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
// NeL includes
@ -63,7 +63,7 @@ namespace Plugin
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_newAction = new QAction(tr("&New..."), this);

View file

@ -67,35 +67,6 @@ void GeorgesEditorPlugin::setNelContext(NLMISC::INelContext *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)
{
m_plugMan->addObject(obj);

View file

@ -52,15 +52,8 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void shutdown();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
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 "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
#include <nel/misc/common.h>

View file

@ -2,7 +2,7 @@
#include "mission_compiler_plugin.h"
#include "../core/icore.h"
#include "../core/core_constants.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../../extension_system/iplugin_spec.h"
// NeL includes
@ -24,18 +24,18 @@ namespace MissionCompiler
MissionCompilerPlugin::~MissionCompilerPlugin()
{
Q_FOREACH(QObject *obj, _autoReleaseObjects)
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{
_plugMan->removeObject(obj);
m_plugMan->removeObject(obj);
}
qDeleteAll(_autoReleaseObjects);
_autoReleaseObjects.clear();
qDeleteAll(m_autoReleaseObjects);
m_autoReleaseObjects.clear();
}
bool MissionCompilerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
_plugMan = pluginManager;
m_plugMan = pluginManager;
addAutoReleasedObject(new MissionCompilerSettingsPage(this));
addAutoReleasedObject(new CMissionCompilerContext(this));
@ -47,18 +47,7 @@ void MissionCompilerPlugin::extensionsInitialized()
{
Core::ICore *core = Core::ICore::instance();
QSettings *settings = Core::ICore::instance()->settings();
Core::IMenuManager *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);
Core::MenuManager *menuManager = core->menuManager();
// Initialize Ligo.
//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.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
_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;
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
void MissionCompilerPlugin::addAutoReleasedObject(QObject *obj)
{
_plugMan->addObject(obj);
_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;
m_plugMan->addObject(obj);
m_autoReleaseObjects.prepend(obj);
}
}

View file

@ -37,26 +37,16 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
protected:
NLMISC::CLibraryContext *_LibContext;
NLMISC::CLibraryContext *m_LibContext;
private:
ExtensionSystem::IPluginManager *_plugMan;
QList<QObject *> _autoReleaseObjects;
ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> m_autoReleaseObjects;
};
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 "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
using namespace std;
@ -259,7 +259,7 @@ void CMainWindow::createActions()
void CMainWindow::createMenus()
{
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager();
Core::MenuManager *menuManager = Core::ICore::instance()->menuManager();
_openAction = menuManager->action(Core::Constants::OPEN);

View file

@ -22,76 +22,76 @@ namespace NLQT
{
namespace Constants
{
const char * const OBJECT_VIEWER_PLUGIN = "ObjectViewer";
const char *const OBJECT_VIEWER_PLUGIN = "ObjectViewer";
//mainwindow
const char * const MAIN_WINDOW = "ObjectViewer.MainWindow";
const char *const MAIN_WINDOW = "ObjectViewer.MainWindow";
//settings
const char * const OBJECT_VIEWER_SECTION = "ObjectViewer";
const char * const GRAPHICS_DRIVER = "GraphicsDriver";
const char * const ENABLE_BLOOM = "EnableBloom";
const char * const ENABLE_SQUARE_BLOOM = "EnableSquareBloom";
const char * const BLOOM_DENSITY = "BloomDensity";
const char * const QT_STYLE = "QtStyle";
const char * const QT_PALETTE = "QtPalette";
const char * const FONT = "Font";
const char *const OBJECT_VIEWER_SECTION = "ObjectViewer";
const char *const GRAPHICS_DRIVER = "GraphicsDriver";
const char *const ENABLE_BLOOM = "EnableBloom";
const char *const ENABLE_SQUARE_BLOOM = "EnableSquareBloom";
const char *const BLOOM_DENSITY = "BloomDensity";
const char *const QT_STYLE = "QtStyle";
const char *const QT_PALETTE = "QtPalette";
const char *const FONT = "Font";
const char * const SOUND_ENABLE = "SoundEnable";
const char * const SOUND_DRIVER = "SoundDriver";
const char * const SOUND_DEVICE = "SoundDevice";
const char * const SOUND_AUTO_LOAD_SAMPLE = "SoundAutoLoadSample";
const char * const SOUND_ENABLE_OCCLUDE_OBSTRUCT = "SoundEnableOccludeObstruct";
const char * const SOUND_ENABLE_REVERB = "SoundEnableReverb";
const char * const SOUND_MANUAL_ROLL_OFF = "SoundManualRolloff";
const char * const SOUND_FORCE_SOFTWARE = "SoundForceSoftware";
const char * const SOUND_USE_ADCPM = "SoundUseADPCM";
const char * const SOUND_MAX_TRACK = "SoundMaxTrack";
const char * const SOUND_PACKED_SHEET_PATH = "SoundPackedSheetPath";
const char * const SOUND_SAMPLE_PATH = "SoundSamplePath";
const char *const SOUND_ENABLE = "SoundEnable";
const char *const SOUND_DRIVER = "SoundDriver";
const char *const SOUND_DEVICE = "SoundDevice";
const char *const SOUND_AUTO_LOAD_SAMPLE = "SoundAutoLoadSample";
const char *const SOUND_ENABLE_OCCLUDE_OBSTRUCT = "SoundEnableOccludeObstruct";
const char *const SOUND_ENABLE_REVERB = "SoundEnableReverb";
const char *const SOUND_MANUAL_ROLL_OFF = "SoundManualRolloff";
const char *const SOUND_FORCE_SOFTWARE = "SoundForceSoftware";
const char *const SOUND_USE_ADCPM = "SoundUseADPCM";
const char *const SOUND_MAX_TRACK = "SoundMaxTrack";
const char *const SOUND_PACKED_SHEET_PATH = "SoundPackedSheetPath";
const char *const SOUND_SAMPLE_PATH = "SoundSamplePath";
const char * const VEGET_TILE_BANK = "VegetTileBank";
const char * const VEGET_TILE_FAR_BANK = "VegetTileFarBank";
const char * const VEGET_TEXTURE = "VegetTexture";
const char * const VEGET_LANDSCAPE_ZONES = "VegetLandscapeZones";
const char * const COARSE_MESH_TEXTURE = "CoarseMeshTexture";
const char *const VEGET_TILE_BANK = "VegetTileBank";
const char *const VEGET_TILE_FAR_BANK = "VegetTileFarBank";
const char *const VEGET_TEXTURE = "VegetTexture";
const char *const VEGET_LANDSCAPE_ZONES = "VegetLandscapeZones";
const char *const COARSE_MESH_TEXTURE = "CoarseMeshTexture";
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_DELETE_ITEM = ":/icons/ic_nel_delete_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_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_3DEDIT = ":/icons/ic_nel_camera_3dedit.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_ANIM = ":/icons/ic_nel_anim.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_DAYNIGHT = ":/icons/ic_nel_daynight.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_MRM_MESH = ":/icons/ic_nel_mrm_mesh.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_VEGET = ":/icons/ic_nel_veget.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_WIND = ":/icons/ic_nel_wind.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_DELETE_ITEM = ":/icons/ic_nel_delete_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_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_3DEDIT = ":/icons/ic_nel_camera_3dedit.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_ANIM = ":/icons/ic_nel_anim.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_DAYNIGHT = ":/icons/ic_nel_daynight.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_MRM_MESH = ":/icons/ic_nel_mrm_mesh.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_VEGET = ":/icons/ic_nel_veget.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_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_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_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_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_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_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_WORKSPACE_ITEM_SMALL = ":/icons/particles_system_24/ic_nel_workspace_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_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_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_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_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_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";
} // namespace Constants
} // namespace NLQT

View file

@ -56,33 +56,6 @@ void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *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)
{
_plugMan->addObject(obj);

View file

@ -36,15 +36,8 @@ public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void shutdown();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
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
{
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) {}
void setUserData(NL3D::CPSLocated *loc)

View file

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

View file

@ -44,7 +44,7 @@ namespace NLQT
class CLocatedBindableItem: public QListWidgetItem
{
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) {}
void setUserData(NL3D::CPSLocatedBindable *loc)

View file

@ -190,7 +190,7 @@ NLSOUND::USource *CSoundSystem::create(const std::string &soundName)
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)
{

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 "sheetbuilderconfgdialog.h"
#include "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
// NeL includes
@ -38,14 +38,14 @@ using namespace Plugin;
bool SheetBuilderPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
_plugMan = pluginManager;
m_plugMan = pluginManager;
return true;
}
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);
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.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
_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;
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
Q_EXPORT_PLUGIN(SheetBuilderPlugin)

View file

@ -28,11 +28,6 @@ namespace NLMISC
class CLibraryContext;
}
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace Plugin
{
@ -43,25 +38,18 @@ class SheetBuilderPlugin : public QObject, public ExtensionSystem::IPlugin
public:
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void buildSheet(bool clean);
private Q_SLOTS:
void execBuilderDialog();
protected:
NLMISC::CLibraryContext *_LibContext;
NLMISC::CLibraryContext *m_LibContext;
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;
}
@ -82,7 +82,7 @@ uint32 NbFilesDiscarded = 0;
void addId( string fileName );
// getFileType
bool getFileType( string& fileName, string& fileType );
bool getFileType( string &fileName, string &fileType );
//-----------------------------------------------
// getFirstFreeFileTypeId
@ -107,7 +107,7 @@ sint16 getFirstFreeFileTypeId()
// readFormId
//
//-----------------------------------------------
void readFormId( string& outputFileName )
void readFormId( string &outputFileName )
{
CIFile f;
if( f.open( outputFileName ) )
@ -315,7 +315,7 @@ void addId( string fileName )
// getFileType
//
//-----------------------------------------------
bool getFileType( string& fileName, string& fileType )
bool getFileType( string &fileName, string &fileType )
{
fileType = CFile::getExtension(CFile::getFilename(fileName));
return !fileType.empty();

View file

@ -195,7 +195,7 @@ void SheetBuilderDialog::buildSheet()
for( it1 = IdToForm.begin(); it1 != IdToForm.end(); ++it1 )
{
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 ----------------"));

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 "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../core/core_constants.h"
ZonePainterMainWindow::ZonePainterMainWindow(QWidget *parent) :
@ -145,6 +145,7 @@ void ZonePainterMainWindow::loadConfig() {
QColor color;
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()));
}

View file

@ -3,7 +3,7 @@
#include "zone_painter_settings_page.h"
#include "../core/icore.h"
#include "../core/core_constants.h"
#include "../core/imenu_manager.h"
#include "../core/menu_manager.h"
#include "../../extension_system/iplugin_spec.h"
// NeL includes
@ -19,22 +19,22 @@
namespace Plugin
{
NLMISC_SAFE_SINGLETON_IMPL(CZoneManager)
// NLMISC_SAFE_SINGLETON_IMPL(CZoneManager)
ZonePainterPlugin::~ZonePainterPlugin()
{
Q_FOREACH(QObject *obj, _autoReleaseObjects)
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{
_plugMan->removeObject(obj);
m_plugMan->removeObject(obj);
}
qDeleteAll(_autoReleaseObjects);
_autoReleaseObjects.clear();
qDeleteAll(m_autoReleaseObjects);
m_autoReleaseObjects.clear();
}
bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
_plugMan = pluginManager;
m_plugMan = pluginManager;
addAutoReleasedObject(new CZonePainterSettingsPage(this));
addAutoReleasedObject(new CZonePainterContext(this));
@ -45,19 +45,7 @@ bool ZonePainterPlugin::initialize(ExtensionSystem::IPluginManager *pluginManage
void ZonePainterPlugin::extensionsInitialized()
{
Core::ICore *core = Core::ICore::instance();
Core::IMenuManager *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);
Core::MenuManager *menuManager = core->menuManager();
}
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.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
_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;
m_LibContext = new NLMISC::CLibraryContext(*nelContext);
}
void ZonePainterPlugin::addAutoReleasedObject(QObject *obj)
{
_plugMan->addObject(obj);
_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;
m_plugMan->addObject(obj);
m_autoReleaseObjects.prepend(obj);
}
}

View file

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

View file

@ -281,13 +281,21 @@ void SLightBuild::convertFromMaxLight (INode *node,TimeValue tvTime)
}
#if (MAX_RELEASE < 4000)
// Convert exclusion list
NameTab& ntExclu = maxLight->GetExclusionList();
for( sint i = 0; i < ntExclu.Count(); ++i )
{
string tmp = *ntExclu.Addr(i);
this->setExclusion.insert( tmp );
}
// Convert exclusion list
NameTab& ntExclu = maxLight->GetExclusionList();
for (sint i = 0; i < ntExclu.Count(); ++i)
{
string tmp = *ntExclu.Addr(i);
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)
// Get Soft Shadow informations
@ -1999,11 +2007,12 @@ void CExportNel::deleteLM(INode& ZeNode)
sprintf( tmp, "%d", i );
sSaveName += tmp;
sSaveName += ".tga";
FILE *file;
if( file = fopen(sSaveName.c_str(),"rb") )
if (CFile::fileExists(sSaveName))
{
fclose( file );
DeleteFile( sSaveName.c_str() );
if (!CFile::deleteFile(sSaveName))
{
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)
{
string sLMName = sBaseName + NLMISC::toString(i) + ".tga";
CIFile ifi;
if (ifi.open(sLMName))
if (CFile::fileExists(sLMName))
{
ifi.close ();
DeleteFile (sLMName.c_str());
nlinfo("DELETE %s", 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 );
try
{
nlinfo("SAVE %s", sSaveName.c_str());
if (lmcEnabled)
{
// 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
shapeName = CExportNel::getNelObjectName(node);
if (shapeName.empty()) return NULL;
shapeName = NLMISC::CPath::lookup("shapeName", false);
shapeName = NLMISC::CPath::lookup(shapeName, false);
if (shapeName.empty()) return NULL;
}

View file

@ -24,6 +24,7 @@
#include "../nel_patch_lib/rpo.h"
#include "../../ig_lighter_lib/ig_lighter_lib.h"
#include "nel/misc/path.h"
#include "nel/3d/scene_group.h"
#include "nel/3d/scene.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)
{
// build the shape from the file name
std::string objName = CExportNel::getNelObjectName(*pNode);
if (!objName.empty())
// std::string objName = CExportNel::getNelObjectName(*pNode);
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;
NLMISC::CIFile iF;
if (iF.open(objName.c_str()))
if (iF.open(psFilePath.c_str()))
{
try
{

View file

@ -24,9 +24,27 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -35,221 +53,225 @@ try:
from buildsite import *
except ImportError:
printLog(log, "*** FIRST RUN ***")
if args.noconf:
printLog(log, "ERROR --noconf is invalid on first run, exit.")
exit()
from tools import *
try:
BuildQuality
except NameError:
BuildQuality = 1
try:
ToolDirectories
except NameError:
ToolDirectories = [ 'R:/code/nel', 'R:/code/ryzom/tools' ]
try:
ToolSuffix
except NameError:
ToolSuffix = "_r.exe"
try:
ScriptDirectory
except NameError:
ScriptDirectory = "R:/code/nel/tools/build_gamedata"
try:
WorkspaceDirectory
except NameError:
WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace"
try:
DatabaseDirectory
except NameError:
DatabaseDirectory = "W:/database"
try:
ExportBuildDirectory
except NameError:
ExportBuildDirectory = "W:/export"
try:
InstallDirectory
except NameError:
InstallDirectory = "W:/install"
try:
DataShardDirectory
except NameError:
DataShardDirectory = "R:/code/ryzom/server/data_shard"
try:
ClientDevDirectory
except NameError:
ClientDevDirectory = "W:/client_dev"
try:
ClientPatchDirectory
except NameError:
ClientPatchDirectory = "W:/client_patch"
try:
ClientInstallDirectory
except NameError:
ClientInstallDirectory = "W:/client_install"
try:
LeveldesignDirectory
except NameError:
LeveldesignDirectory = "L:/leveldesign"
try:
LeveldesignDfnDirectory
except NameError:
LeveldesignDfnDirectory = "L:/leveldesign/dfn"
try:
LeveldesignWorldDirectory
except NameError:
LeveldesignWorldDirectory = "L:/leveldesign/world"
try:
PrimitivesDirectory
except NameError:
PrimitivesDirectory = "L:/primitives"
try:
GamedevDirectory
except NameError:
GamedevDirectory = "R:/code/ryzom/client/data/gamedev"
try:
DataCommonDirectory
except NameError:
DataCommonDirectory = "R:/code/ryzom/common/data_common"
try:
WindowsExeDllCfgDirectories
except NameError:
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' ]
try:
MaxAvailable
except NameError:
MaxAvailable = 1
try:
MaxDirectory
except NameError:
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
try:
MaxUserDirectory
except NameError:
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
try:
MaxExecutable
except NameError:
MaxExecutable = "3dsmax.exe"
if not args.noconf:
try:
BuildQuality
except NameError:
BuildQuality = 1
try:
ToolDirectories
except NameError:
ToolDirectories = [ 'R:/build/dev/bin/Release', 'D:/libraries/external/bin' ]
try:
ToolSuffix
except NameError:
ToolSuffix = ".exe"
try:
ScriptDirectory
except NameError:
ScriptDirectory = "R:/code/nel/tools/build_gamedata"
try:
WorkspaceDirectory
except NameError:
WorkspaceDirectory = "R:/code/ryzom/tools/build_gamedata/workspace"
try:
DatabaseDirectory
except NameError:
DatabaseDirectory = "W:/database"
try:
ExportBuildDirectory
except NameError:
ExportBuildDirectory = "W:/export"
try:
InstallDirectory
except NameError:
InstallDirectory = "W:/install"
try:
DataShardDirectory
except NameError:
DataShardDirectory = "R:/code/ryzom/server/data_shard"
try:
ClientDevDirectory
except NameError:
ClientDevDirectory = "W:/client_dev"
try:
ClientPatchDirectory
except NameError:
ClientPatchDirectory = "W:/client_patch"
try:
ClientInstallDirectory
except NameError:
ClientInstallDirectory = "W:/client_install"
try:
LeveldesignDirectory
except NameError:
LeveldesignDirectory = "L:/leveldesign"
try:
LeveldesignDfnDirectory
except NameError:
LeveldesignDfnDirectory = "L:/leveldesign/dfn"
try:
LeveldesignWorldDirectory
except NameError:
LeveldesignWorldDirectory = "L:/leveldesign/world"
try:
PrimitivesDirectory
except NameError:
PrimitivesDirectory = "L:/primitives"
try:
GamedevDirectory
except NameError:
GamedevDirectory = "R:/code/ryzom/client/data/gamedev"
try:
DataCommonDirectory
except NameError:
DataCommonDirectory = "R:/code/ryzom/common/data_common"
try:
WindowsExeDllCfgDirectories
except NameError:
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' ]
try:
MaxAvailable
except NameError:
MaxAvailable = 1
try:
MaxDirectory
except NameError:
MaxDirectory = "C:/Program Files (x86)/Autodesk/3ds Max 2010"
try:
MaxUserDirectory
except NameError:
MaxUserDirectory = "C:/Users/Kaetemi/AppData/Local/Autodesk/3dsMax/2010 - 32bit/enu"
try:
MaxExecutable
except NameError:
MaxExecutable = "3dsmax.exe"
printLog(log, "")
printLog(log, "-------")
printLog(log, "--- Setup build site")
printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
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, "Use -- if you need to insert an empty value.")
printLog(log, "")
BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/")
DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/")
ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/")
InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/")
DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/")
ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/")
ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/")
LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/")
GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/")
DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).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[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[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[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
if MaxAvailable:
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
if os.path.isfile("configuration/buildsite.py"):
os.remove("configuration/buildsite.py")
sf = open("configuration/buildsite.py", "w")
sf.write("#!/usr/bin/python\n")
sf.write("# \n")
sf.write("# \\file site.py\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("# \\author Jan Boon (Kaetemi)\n")
sf.write("# Python port of game data build pipeline.\n")
sf.write("# Site configuration.\n")
sf.write("# \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("# \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("# 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("# \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("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
sf.write("# GNU Affero General Public License for more details.\n")
sf.write("# \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("# \n")
sf.write("\n")
sf.write("\n")
sf.write("# *** SITE INSTALLATION ***\n")
sf.write("\n")
sf.write("# Use '/' in path name, not '\'\n")
sf.write("# Don't put '/' at the end of a directory name\n")
sf.write("\n")
sf.write("\n")
sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
sf.write("BuildQuality = " + str(BuildQuality) + "\n")
sf.write("\n")
sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
sf.write("\n")
sf.write("# Build script directory\n")
sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
sf.write("\n")
sf.write("# Data build directories\n")
sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
sf.write("\n")
sf.write("# Install directories\n")
sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
sf.write("\n")
sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n")
sf.write("\n")
sf.write("# Leveldesign directories\n")
sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
sf.write("\n")
sf.write("# Misc data directories\n")
sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
sf.write("\n")
sf.write("# 3dsMax directives\n")
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
sf.write("\n")
sf.write("\n")
sf.write("# end of file\n")
sf.close()
printLog(log, "")
printLog(log, "-------")
printLog(log, "--- Setup build site")
printLog(log, "-------")
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
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, "Use -- if you need to insert an empty value.")
printLog(log, "")
BuildQuality = int(askVar(log, "Build Quality", str(BuildQuality)))
ToolDirectories[0] = askVar(log, "Primary Tool Directory", ToolDirectories[0]).replace("\\", "/")
ToolDirectories[1] = askVar(log, "Secondary Tool Directory", ToolDirectories[1]).replace("\\", "/")
ToolSuffix = askVar(log, "Tool Suffix", ToolSuffix)
ScriptDirectory = askVar(log, "Script Directory", os.getcwd().replace("\\", "/")).replace("\\", "/")
WorkspaceDirectory = askVar(log, "Workspace Directory", WorkspaceDirectory).replace("\\", "/")
DatabaseDirectory = askVar(log, "Database Directory", DatabaseDirectory).replace("\\", "/")
ExportBuildDirectory = askVar(log, "Export Build Directory", ExportBuildDirectory).replace("\\", "/")
InstallDirectory = askVar(log, "Install Directory", InstallDirectory).replace("\\", "/")
DataShardDirectory = askVar(log, "Data Shard Directory", DataShardDirectory).replace("\\", "/")
ClientDevDirectory = askVar(log, "Client Dev Directory", ClientDevDirectory).replace("\\", "/")
ClientPatchDirectory = askVar(log, "Client Patch Directory", ClientPatchDirectory).replace("\\", "/")
ClientInstallDirectory = askVar(log, "Client Install Directory", ClientInstallDirectory).replace("\\", "/")
LeveldesignDirectory = askVar(log, "Leveldesign Directory", LeveldesignDirectory).replace("\\", "/")
LeveldesignDfnDirectory = askVar(log, "Leveldesign DFN Directory", LeveldesignDfnDirectory).replace("\\", "/")
LeveldesignWorldDirectory = askVar(log, "Leveldesign World Directory", LeveldesignWorldDirectory).replace("\\", "/")
PrimitivesDirectory = askVar(log, "Primitives Directory", PrimitivesDirectory).replace("\\", "/")
GamedevDirectory = askVar(log, "Gamedev Directory", GamedevDirectory).replace("\\", "/")
DataCommonDirectory = askVar(log, "Data Common Directory", DataCommonDirectory).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[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[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[6] = askVar(log, "Septenary Windows exe/dll/cfg Directory", WindowsExeDllCfgDirectories[6]).replace("\\", "/")
MaxAvailable = int(askVar(log, "3dsMax Available", str(MaxAvailable)))
if MaxAvailable:
MaxDirectory = askVar(log, "3dsMax Directory", MaxDirectory).replace("\\", "/")
MaxUserDirectory = askVar(log, "3dsMax User Directory", MaxUserDirectory).replace("\\", "/")
MaxExecutable = askVar(log, "3dsMax Executable", MaxExecutable)
if os.path.isfile("configuration/buildsite.py"):
os.remove("configuration/buildsite.py")
sf = open("configuration/buildsite.py", "w")
sf.write("#!/usr/bin/python\n")
sf.write("# \n")
sf.write("# \\file site.py\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("# \\author Jan Boon (Kaetemi)\n")
sf.write("# Python port of game data build pipeline.\n")
sf.write("# Site configuration.\n")
sf.write("# \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("# \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("# 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("# \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("# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
sf.write("# GNU Affero General Public License for more details.\n")
sf.write("# \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("# \n")
sf.write("\n")
sf.write("\n")
sf.write("# *** SITE INSTALLATION ***\n")
sf.write("\n")
sf.write("# Use '/' in path name, not '\'\n")
sf.write("# Don't put '/' at the end of a directory name\n")
sf.write("\n")
sf.write("\n")
sf.write("# Quality option for this site (1 for BEST, 0 for DRAFT)\n")
sf.write("BuildQuality = " + str(BuildQuality) + "\n")
sf.write("\n")
sf.write("ToolDirectories = " + str(ToolDirectories) + "\n")
sf.write("ToolSuffix = \"" + str(ToolSuffix) + "\"\n")
sf.write("\n")
sf.write("# Build script directory\n")
sf.write("ScriptDirectory = \"" + str(ScriptDirectory) + "\"\n")
sf.write("WorkspaceDirectory = \"" + str(WorkspaceDirectory) + "\"\n")
sf.write("\n")
sf.write("# Data build directories\n")
sf.write("DatabaseDirectory = \"" + str(DatabaseDirectory) + "\"\n")
sf.write("ExportBuildDirectory = \"" + str(ExportBuildDirectory) + "\"\n")
sf.write("\n")
sf.write("# Install directories\n")
sf.write("InstallDirectory = \"" + str(InstallDirectory) + "\"\n")
sf.write("DataShardDirectory = \"" + str(DataShardDirectory) + "\"\n")
sf.write("ClientDevDirectory = \"" + str(ClientDevDirectory) + "\"\n")
sf.write("ClientPatchDirectory = \"" + str(ClientPatchDirectory) + "\"\n")
sf.write("ClientInstallDirectory = \"" + str(ClientInstallDirectory) + "\"\n")
sf.write("\n")
sf.write("# TODO: NETWORK RECONNECT NOT IMPLEMENTED :)\n")
sf.write("\n")
sf.write("# Leveldesign directories\n")
sf.write("LeveldesignDirectory = \"" + str(LeveldesignDirectory) + "\"\n")
sf.write("LeveldesignDfnDirectory = \"" + str(LeveldesignDfnDirectory) + "\"\n")
sf.write("LeveldesignWorldDirectory = \"" + str(LeveldesignWorldDirectory) + "\"\n")
sf.write("PrimitivesDirectory = \"" + str(PrimitivesDirectory) + "\"\n")
sf.write("\n")
sf.write("# Misc data directories\n")
sf.write("GamedevDirectory = \"" + str(GamedevDirectory) + "\"\n")
sf.write("DataCommonDirectory = \"" + str(DataCommonDirectory) + "\"\n")
sf.write("WindowsExeDllCfgDirectories = " + str(WindowsExeDllCfgDirectories) + "\n")
sf.write("\n")
sf.write("# 3dsMax directives\n")
sf.write("MaxAvailable = " + str(MaxAvailable) + "\n")
sf.write("MaxDirectory = \"" + str(MaxDirectory) + "\"\n")
sf.write("MaxUserDirectory = \"" + str(MaxUserDirectory) + "\"\n")
sf.write("MaxExecutable = \"" + str(MaxExecutable) + "\"\n")
sf.write("\n")
sf.write("\n")
sf.write("# end of file\n")
sf.close()
sys.path.append(WorkspaceDirectory)
from projects import *
@ -262,22 +284,83 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each project
for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
subprocess.call([ "python", "0_setup.py" ])
except Exception, 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))
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
printLog(log, "PROJECT " + projectName)
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
if not args.includeprocess == None:
subprocess.call([ "python", "0_setup.py", "--includeprocess" ] + args.includeprocess)
elif not args.excludeprocess == None:
subprocess.call([ "python", "0_setup.py", "--excludeprocess" ] + args.excludeprocess)
else:
subprocess.call([ "python", "0_setup.py" ])
except Exception, 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, "")
# 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()
if os.path.isfile("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/>.
#
import time, sys, os, shutil, subprocess, distutils.dir_util
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each project
for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
subprocess.call([ "python", "1_export.py" ])
except Exception, 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))
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
printLog(log, "PROJECT " + projectName)
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
if not args.includeprocess == None:
subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess)
elif not args.excludeprocess == None:
subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess)
else:
subprocess.call([ "python", "1_export.py" ])
except Exception, 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, "")
log.close()

View file

@ -24,9 +24,25 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each project
for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
subprocess.call([ "python", "2_build.py" ])
except Exception, 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))
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
printLog(log, "PROJECT " + projectName)
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
if not args.includeprocess == None:
subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess)
elif not args.excludeprocess == None:
subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess)
else:
subprocess.call([ "python", "2_build.py" ])
except Exception, 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, "")
log.close()

View file

@ -24,9 +24,25 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -46,20 +62,29 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each project
for projectName in ProjectsToProcess:
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
subprocess.call([ "python", "3_install.py" ])
except Exception, 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))
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
printLog(log, "PROJECT " + projectName)
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
os.chdir("processes")
try:
if not args.includeprocess == None:
subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess)
elif not args.excludeprocess == None:
subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess)
else:
subprocess.call([ "python", "3_install.py" ])
except Exception, 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, "")
log.close()

View file

@ -24,9 +24,13 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -59,56 +63,57 @@ printLog(log, "")
if BnpMake == "":
toolLogFail(log, BnpMakeTool, ToolSuffix)
elif PatchGen == "":
elif PatchGen == "" and not args.bnponly:
toolLogFail(log, PatchGenTool, ToolSuffix)
elif Lzma == "":
elif Lzma == "" and not args.bnponly:
toolLogFail(log, "LZMA", ToolSuffix)
elif XDelta == "":
elif XDelta == "" and not args.bnponly:
toolLogFail(log, "XDELTA", ToolSuffix)
elif os.path.dirname(Lzma) != os.path.dirname(XDelta):
printLog(log, "FAIL lzma.exe and xdelta.exe must be in the same directory")
else:
mkPath(log, ClientPatchDirectory)
productXml = ClientPatchDirectory + "/" + ProductName + ".xml"
if not os.path.isfile(productXml):
printLog(log, ">>> Create new product <<<")
subprocess.call([ PatchGen, "createNewProduct", productXml ])
printLog(log, "")
printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better.
shutil.move(productXml, productXml + ".old")
oldCfg = open(productXml + ".old", "r")
cfg = open(productXml, "w")
inCategories = 0
for line in oldCfg:
if not inCategories:
if line.strip() == "<_Categories>":
inCategories = 1
cfg.write("\t<_Categories>\n")
for category in InstallClientData:
cfg.write("\t\t<_Category>\n")
cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n")
if category["UnpackTo"] != None:
if category["UnpackTo"] != "":
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n")
else:
cfg.write("\t\t\t<_UnpackTo type=\"SINT32\" value=\"./\"/>\n")
cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n")
cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n")
for package in category["Packages"]:
if (len(package[1]) > 0):
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n")
else:
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + ".bnp\"/>\n")
cfg.write("\t\t</_Category>\n")
cfg.write("\t</_Categories>\n")
if not args.bnponly:
productXml = ClientPatchDirectory + "/" + ProductName + ".xml"
if not os.path.isfile(productXml):
printLog(log, ">>> Create new product <<<")
subprocess.call([ PatchGen, "createNewProduct", productXml ])
printLog(log, "")
printLog(log, ">>> Rewrite " + ProductName + ".xml <<<") # because we know better.
shutil.move(productXml, productXml + ".old")
oldCfg = open(productXml + ".old", "r")
cfg = open(productXml, "w")
inCategories = 0
for line in oldCfg:
if not inCategories:
if line.strip() == "<_Categories>":
inCategories = 1
cfg.write("\t<_Categories>\n")
for category in InstallClientData:
cfg.write("\t\t<_Category>\n")
cfg.write("\t\t\t<_Name type=\"STRING\" value=\"" + category["Name"] + "\"/>\n")
if category["UnpackTo"] != None:
if category["UnpackTo"] != "":
cfg.write("\t\t\t<_UnpackTo type=\"STRING\" value=\"./" + category["UnpackTo"] + "/\"/>\n")
else:
cfg.write("\t\t\t<_UnpackTo type=\"SINT32\" value=\"./\"/>\n")
cfg.write("\t\t\t<_IsOptional type=\"SINT32\" value=\"" + str(category["IsOptional"]) + "\"/>\n")
cfg.write("\t\t\t<_IsIncremental type=\"SINT32\" value=\"" + str(category["IsIncremental"]) + "\"/>\n")
for package in category["Packages"]:
if (len(package[1]) > 0):
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[1][0] + "\"/>\n")
else:
cfg.write("\t\t\t<_Files type=\"STRING\" value=\"" + package[0] + ".bnp\"/>\n")
cfg.write("\t\t</_Category>\n")
cfg.write("\t</_Categories>\n")
else:
cfg.write(line)
else:
cfg.write(line)
else:
if line.strip() == "</_Categories>":
inCategories = 0
oldCfg.close()
cfg.close()
os.remove(productXml + ".old")
if line.strip() == "</_Categories>":
inCategories = 0
oldCfg.close()
cfg.close()
os.remove(productXml + ".old")
printLog(log, "")
printLog(log, ">>> Make bnp <<<")
targetPath = ClientPatchDirectory + "/bnp"
@ -133,13 +138,14 @@ else:
else:
printLog(log, "SKIP " + targetBnp)
printLog(log, "")
printLog(log, ">>> Update product <<<")
cwDir = os.getcwd().replace("\\", "/")
toolDir = os.path.dirname(Lzma).replace("\\", "/")
os.chdir(toolDir)
subprocess.call([ PatchGen, "updateProduct", productXml ])
os.chdir(cwDir)
printLog(log, "")
if not args.bnponly:
printLog(log, ">>> Update product <<<")
cwDir = os.getcwd().replace("\\", "/")
toolDir = os.path.dirname(Lzma).replace("\\", "/")
os.chdir(toolDir)
subprocess.call([ PatchGen, "updateProduct", productXml ])
os.chdir(cwDir)
printLog(log, "")
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, "")
# Find tools
BnpMake = findTool(log, ToolDirectories, BnpMakeTool, ToolSuffix)
printLog(log, "")
if BnpMake == "":
toolLogFail(log, BnpMakeTool, ToolSuffix)
else:
for category in InstallClientData:
printLog(log, "CATEGORY " + category["Name"])
if (category["UnpackTo"] != None):
targetPath = ClientInstallDirectory
if (category["UnpackTo"] != ""):
targetPath += "/" + category["UnpackTo"]
mkPath(log, targetPath)
for package in category["Packages"]:
printLog(log, "PACKAGE " + package[0])
mkPath(log, InstallDirectory + "/" + package[0])
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
else:
targetPath = ClientInstallDirectory + "/data"
mkPath(log, targetPath)
for package in category["Packages"]:
printLog(log, "PACKAGE " + package[0])
sourcePath = InstallDirectory + "/" + package[0]
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)
for category in InstallClientData:
printLog(log, "CATEGORY " + category["Name"])
if (category["UnpackTo"] != None):
targetPath = ClientInstallDirectory
if (category["UnpackTo"] != ""):
targetPath += "/" + category["UnpackTo"]
mkPath(log, targetPath)
for package in category["Packages"]:
printLog(log, "PACKAGE " + package[0])
mkPath(log, InstallDirectory + "/" + package[0])
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + package[0], targetPath)
else:
sourcePath = ClientPatchDirectory + "/bnp"
targetPath = ClientInstallDirectory + "/data"
mkPath(log, targetPath)
for package in category["Packages"]:
printLog(log, "PACKAGE " + package[0])
sourceBnp = sourcePath + "/" + package[0] + ".bnp"
targetBnp = targetPath + "/" + package[0] + ".bnp"
if (len(package[1]) > 0):
sourceBnp = sourcePath + "/" + package[1][0]
targetBnp = targetPath + "/" + package[1][0]
printLog(log, "TARGET " + package[1][0])
copyFileIfNeeded(log, sourceBnp, targetBnp)
printLog(log, "")
log.close()

View file

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

View file

@ -187,7 +187,7 @@ fn haveCoarseMesh node =
return false
)
fn runNelMaxExport inputMaxFile =
fn runNelMaxExportSub inputMaxFile retryCount =
(
tagThisFile = false
@ -354,8 +354,39 @@ fn runNelMaxExport inputMaxFile =
(
-- Error
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
)
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)

View file

@ -90,7 +90,9 @@ try
catch
(
-- 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
)

View file

@ -24,8 +24,14 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -60,20 +66,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each process
for processName in ProcessToComplete:
os.chdir(processName)
try:
subprocess.call([ "python", "0_setup.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
printLog(log, "PROCESS " + processName)
os.chdir(processName)
try:
subprocess.call([ "python", "0_setup.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "")
log.close()

View file

@ -24,9 +24,14 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each process
for processName in ProcessToComplete:
os.chdir(processName)
try:
subprocess.call([ "python", "1_export.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
printLog(log, "PROCESS " + processName)
os.chdir(processName)
try:
subprocess.call([ "python", "1_export.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "")
log.close()

View file

@ -24,9 +24,14 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -45,20 +50,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each process
for processName in ProcessToComplete:
os.chdir(processName)
try:
subprocess.call([ "python", "2_build.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
printLog(log, "PROCESS " + processName)
os.chdir(processName)
try:
subprocess.call([ "python", "2_build.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "")
log.close()

View file

@ -24,9 +24,14 @@
# 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")
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"):
os.remove("log.log")
log = open("log.log", "w")
@ -44,20 +49,24 @@ printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
printLog(log, "")
# For each process
for processName in ProcessToComplete:
os.chdir(processName)
try:
subprocess.call([ "python", "3_install.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
if ((args.includeprocess == None or processName in args.includeprocess) and (args.excludeprocess == None or not processName in args.excludeprocess)):
printLog(log, "PROCESS " + processName)
os.chdir(processName)
try:
subprocess.call([ "python", "3_install.py" ])
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
os.chdir("..")
try:
processLog = open(processName + "/log.log", "r")
processLogData = processLog.read()
processLog.close()
log.write(processLogData)
except Exception, e:
printLog(log, "<" + processName + "> " + str(e))
# subprocess.call("idle.bat")
else:
printLog(log, "IGNORE PROCESS " + processName)
printLog(log, "")
log.close()

View file

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

View file

@ -224,7 +224,9 @@ try
catch
(
-- 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
)

View file

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

View file

@ -279,7 +279,9 @@ try
catch
(
-- 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
)

View file

@ -328,7 +328,9 @@ try
catch
(
-- 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
)

View file

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

View file

@ -215,7 +215,9 @@ try
catch
(
-- 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
)

View file

@ -253,7 +253,7 @@ fn haveCoarseMesh node =
return false
)
fn runNelMaxExport inputMaxFile =
fn runNelMaxExportSub inputMaxFile retryCount =
(
tagThisFile = false
@ -420,11 +420,42 @@ fn runNelMaxExport inputMaxFile =
(
-- Error
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
)
fn runNelMaxExport inputMaxFile =
(
return runNelMaxExportSub inputMaxFile 0
)
removeRunningTag = true
@ -517,7 +548,9 @@ try
catch
(
-- 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
)

View file

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

View file

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

View file

@ -269,7 +269,9 @@ try
catch
(
-- 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
)

View file

@ -68,6 +68,8 @@ public:
/// Get the ContextHelp for this control. Default is to return _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"
virtual std::string getContextHelpWindowName() const;
/// Get the ContextHelp ActionHandler. If "", noop

View file

@ -2975,32 +2975,9 @@ void CDBCtrlSheet::getContextHelp(ucstring &help) const
}
else 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);
}
else
help= getItemActualName();
}
const CItemSheet *item = asItemSheet();
if (item)
help = getItemActualName();
else
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
{

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