mirror of
https://port.numenaute.org/aleajactaest/khanat-code-old.git
synced 2024-12-30 12:20:54 +00:00
merge from default
This commit is contained in:
parent
d5aba92b5a
commit
f07731ad20
185 changed files with 5279 additions and 1508 deletions
|
@ -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
|
||||
|
|
|
@ -37,8 +37,8 @@ struct State
|
|||
{
|
||||
Invalid = 1,
|
||||
Read,
|
||||
Loaded,
|
||||
Resolved,
|
||||
Loaded,
|
||||
Initialized,
|
||||
Running,
|
||||
Stopped,
|
||||
|
|
|
@ -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())
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 */
|
|
@ -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
|
||||
|
|
|
@ -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>
|
|
@ -112,7 +112,7 @@
|
|||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../object_viewer_qt.qrc"/>
|
||||
<include location="../../object_viewer_qt.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
|
@ -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
|
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
|
@ -82,7 +82,7 @@ public:
|
|||
return m_driver;
|
||||
}
|
||||
|
||||
virtual QPaintEngine* paintEngine() const
|
||||
virtual QPaintEngine *paintEngine() const
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -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?"),
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
||||
|
|
|
@ -332,7 +332,7 @@ public:
|
|||
/// Restick all objects, useful after loading
|
||||
void restickAllObjects();
|
||||
|
||||
TNodeVect& getNodeList()
|
||||
TNodeVect &getNodeList()
|
||||
{
|
||||
return _Nodes;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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>
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 ----------------"));
|
||||
|
|
|
@ -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>
|
|
@ -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()));
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue