mirror of
https://github.com/ModOrganizer2/modorganizer-plugin_python.git
synced 2026-07-27 14:03:33 -07:00
Compare commits
16
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f56c605479 | ||
|
|
617c76e9f8 | ||
|
|
96081888f1 | ||
|
|
af5958b0af | ||
|
|
b33293e49a | ||
|
|
dc3b60e578 | ||
|
|
d591bc017a | ||
|
|
aad5864192 | ||
|
|
7deee938d3 | ||
|
|
5d51b2bcc6 | ||
|
|
0566a968e8 | ||
|
|
14fc674d72 | ||
|
|
b7cbdaad1e | ||
|
|
25cdcdd2fe | ||
|
|
f06a6d4e55 | ||
|
|
fee774db45 |
@@ -22,6 +22,9 @@ CONFIG(release, debug|release) {
|
|||||||
|
|
||||||
DEFINES += PROXYPYTHON_LIBRARY
|
DEFINES += PROXYPYTHON_LIBRARY
|
||||||
|
|
||||||
|
# suppress a few warnings caused by boost vs vc++ paranoia
|
||||||
|
DEFINES += _SCL_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
SOURCES += proxypython.cpp
|
SOURCES += proxypython.cpp
|
||||||
HEADERS += proxypython.h \
|
HEADERS += proxypython.h \
|
||||||
resource.h
|
resource.h
|
||||||
@@ -35,15 +38,14 @@ RC_FILE += \
|
|||||||
|
|
||||||
include(../plugin_template.pri)
|
include(../plugin_template.pri)
|
||||||
|
|
||||||
INCLUDEPATH += "../../pythonRunner"
|
INCLUDEPATH += "../../pythonRunner" "$(BOOSTPATH)"
|
||||||
|
|
||||||
WINPWD = $$PWD
|
WINPWD = $$PWD
|
||||||
WINPWD ~= s,/,$$QMAKE_DIR_SEP,g
|
WINPWD ~= s,/,$$QMAKE_DIR_SEP,g
|
||||||
|
|
||||||
|
|
||||||
//QMAKE_POST_LINK += SET VS90COMNTOOLS=%VS100COMNTOOLS% $$escape_expand(\\n)
|
//QMAKE_POST_LINK += SET VS90COMNTOOLS=%VS100COMNTOOLS% $$escape_expand(\\n)
|
||||||
|
|
||||||
|
|
||||||
QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\sip.pyd $$quote($$DSTDIR)\\plugins\\data\\ $$escape_expand(\\n)
|
//QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\sip.pyd $$quote($$DSTDIR)\\plugins\\data\\ $$escape_expand(\\n)
|
||||||
QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtCore.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
|
//QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtCore.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
|
||||||
QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtGui.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
|
//QMAKE_POST_LINK += copy $$(PYTHONPATH)\\lib\\site-packages\\PyQt4\\QtGui.pyd $$quote($$DSTDIR)\\plugins\\data\\PyQt4\\ $$escape_expand(\\n)
|
||||||
|
|||||||
+21
-10
@@ -1,11 +1,24 @@
|
|||||||
#pragma warning( push )
|
/*
|
||||||
#pragma warning( disable : 4100 ) // a lot of unreferenced formal parameters from boost libraries
|
Copyright (C) 2013 Sebastian Herbord. All rights reserved.
|
||||||
#pragma warning( disable : 4996 ) // strncpy claimed to be unsafe
|
|
||||||
|
This file is part of python proxy plugin for MO
|
||||||
|
|
||||||
|
python proxy plugin is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Python proxy plugin is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with python proxy plugin. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "proxypython.h"
|
#include "proxypython.h"
|
||||||
|
|
||||||
#pragma warning( pop )
|
|
||||||
|
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <versioninfo.h>
|
#include <versioninfo.h>
|
||||||
#include <QtPlugin>
|
#include <QtPlugin>
|
||||||
@@ -34,8 +47,6 @@ HMODULE GetOwnModuleHandle()
|
|||||||
|
|
||||||
QString ExtractResource(WORD resourceID, const QString &szFilename)
|
QString ExtractResource(WORD resourceID, const QString &szFilename)
|
||||||
{
|
{
|
||||||
bool success = false;
|
|
||||||
|
|
||||||
HMODULE mod = GetOwnModuleHandle();
|
HMODULE mod = GetOwnModuleHandle();
|
||||||
|
|
||||||
HRSRC hResource = FindResourceW(mod, MAKEINTRESOURCE(resourceID), L"BINARY");
|
HRSRC hResource = FindResourceW(mod, MAKEINTRESOURCE(resourceID), L"BINARY");
|
||||||
@@ -167,7 +178,7 @@ QString ProxyPython::description() const
|
|||||||
|
|
||||||
VersionInfo ProxyPython::version() const
|
VersionInfo ProxyPython::version() const
|
||||||
{
|
{
|
||||||
return VersionInfo(1, 2, 0, VersionInfo::RELEASE_FINAL);
|
return VersionInfo(1, 3, 0, VersionInfo::RELEASE_FINAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProxyPython::isActive() const
|
bool ProxyPython::isActive() const
|
||||||
@@ -294,7 +305,7 @@ QString ProxyPython::fullDescription(unsigned int key) const
|
|||||||
"The only solution I can offer is to remove the semicolon / move MO to a path without a semicolon.").arg(QCoreApplication::applicationDirPath());
|
"The only solution I can offer is to remove the semicolon / move MO to a path without a semicolon.").arg(QCoreApplication::applicationDirPath());
|
||||||
} break;
|
} break;
|
||||||
default:
|
default:
|
||||||
throw MyException(tr("invalid problem key %1").arg(key));
|
throw MyException(QString("invalid problem key %1").arg(key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
Copyright (C) 2013 Sebastian Herbord. All rights reserved.
|
||||||
|
|
||||||
|
This file is part of python proxy plugin for MO
|
||||||
|
|
||||||
|
python proxy plugin is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
Python proxy plugin is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with python proxy plugin. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef PROXYPYTHON_H
|
#ifndef PROXYPYTHON_H
|
||||||
#define PROXYPYTHON_H
|
#define PROXYPYTHON_H
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#include "proxypluginwrappers.h"
|
#include "proxypluginwrappers.h"
|
||||||
#include <boost/python.hpp>
|
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "gilock.h"
|
#include "gilock.h"
|
||||||
@@ -171,7 +170,7 @@ bool IPluginInstallerCustomWrapper::isManualInstaller() const
|
|||||||
} PYCATCH;
|
} PYCATCH;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IPluginInstallerCustomWrapper::isArchiveSupported(const DirectoryTree &tree) const
|
bool IPluginInstallerCustomWrapper::isArchiveSupported(const DirectoryTree &) const
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
//return this->get_override("isArchiveSupported")(tree);
|
//return this->get_override("isArchiveSupported")(tree);
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ CONFIG += warn_on
|
|||||||
|
|
||||||
DEFINES += PYTHONRUNNER_LIBRARY
|
DEFINES += PYTHONRUNNER_LIBRARY
|
||||||
|
|
||||||
|
# suppress a few warnings caused by boost vs vc++ paranoia
|
||||||
|
DEFINES += _SCL_SECURE_NO_WARNINGS
|
||||||
|
|
||||||
SOURCES += pythonrunner.cpp \
|
SOURCES += pythonrunner.cpp \
|
||||||
gilock.cpp \
|
gilock.cpp \
|
||||||
error.cpp \
|
error.cpp \
|
||||||
@@ -28,15 +31,26 @@ HEADERS += pythonrunner.h \
|
|||||||
|
|
||||||
|
|
||||||
CONFIG(debug, debug|release) {
|
CONFIG(debug, debug|release) {
|
||||||
|
SRCDIR = $$OUT_PWD/debug
|
||||||
|
DSTDIR = $$PWD/../../outputd
|
||||||
LIBS += -L$$OUT_PWD/../uibase/debug
|
LIBS += -L$$OUT_PWD/../uibase/debug
|
||||||
} else {
|
} else {
|
||||||
|
SRCDIR = $$OUT_PWD/release
|
||||||
|
DSTDIR = $$PWD/../../output
|
||||||
LIBS += -L$$OUT_PWD/../uibase/release
|
LIBS += -L$$OUT_PWD/../uibase/release
|
||||||
|
QMAKE_CXXFLAGS += /Zi
|
||||||
|
QMAKE_LFLAGS += /DEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SRCDIR ~= s,/,$$QMAKE_DIR_SEP,g
|
||||||
|
DSTDIR ~= s,/,$$QMAKE_DIR_SEP,g
|
||||||
|
|
||||||
INCLUDEPATH += "$(BOOSTPATH)" "$$(PYTHONPATH)/include" "$$(PYTHONPATH)/Lib/site-packages/PyQt4/include"
|
INCLUDEPATH += "$(BOOSTPATH)" "$$(PYTHONPATH)/include" "$$(PYTHONPATH)/Lib/site-packages/PyQt4/include"
|
||||||
LIBS += -L"$$(PYTHONPATH)/libs" -L"$(BOOSTPATH)/stage/lib"
|
LIBS += -L"$$(PYTHONPATH)/libs" -L"$(BOOSTPATH)/stage/lib"
|
||||||
LIBS += -lpython27
|
LIBS += -lpython27
|
||||||
|
|
||||||
INCLUDEPATH += ../uibase
|
INCLUDEPATH += ../uibase
|
||||||
LIBS += -luibase
|
LIBS += -luibase
|
||||||
|
|
||||||
|
QMAKE_POST_LINK += xcopy /y /I $$quote($$SRCDIR\\$${TARGET}*.pdb) $$quote($$DSTDIR)\\plugins $$escape_expand(\\n)
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ QList<MOBase::PluginSetting> PythonPluginWrapper::settings() const
|
|||||||
try {
|
try {
|
||||||
boost::python::object l = m_SettingsFunction();
|
boost::python::object l = m_SettingsFunction();
|
||||||
if (!l.is_none()) {
|
if (!l.is_none()) {
|
||||||
// boost::python::list l = extract<boost::python::list>(temp);
|
|
||||||
for (int i = 0; i < boost::python::len(l); ++i) {
|
for (int i = 0; i < boost::python::len(l); ++i) {
|
||||||
result.append(extract<MOBase::PluginSetting>(l[i]));
|
result.append(extract<MOBase::PluginSetting>(l[i]));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public:
|
|||||||
virtual QList<MOBase::PluginSetting> settings() const;
|
virtual QList<MOBase::PluginSetting> settings() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void reportPythonError() const;
|
void reportPythonError() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
+215
-35
@@ -11,6 +11,7 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#include <utility.h>
|
#include <utility.h>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
// sip and qt slots seems to conflict
|
// sip and qt slots seems to conflict
|
||||||
#include <sip.h>
|
#include <sip.h>
|
||||||
@@ -36,17 +37,18 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void initPath(boost::python::object &moduleNamespace);
|
||||||
|
|
||||||
|
private:
|
||||||
std::map<QString, boost::python::object> m_PythonObjects;
|
std::map<QString, boost::python::object> m_PythonObjects;
|
||||||
const MOBase::IOrganizer *m_MOInfo;
|
const MOBase::IOrganizer *m_MOInfo;
|
||||||
char *m_PythonHome;
|
char *m_PythonHome;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
IPythonRunner *CreatePythonRunner(MOBase::IOrganizer *moInfo, const QString &pythonDir)
|
||||||
|
|
||||||
|
|
||||||
IPythonRunner *CreatePythonRunner(const MOBase::IOrganizer *moInfo, const QString &pythonDir)
|
|
||||||
{
|
{
|
||||||
|
s_Organizer = moInfo;
|
||||||
PythonRunner *result = new PythonRunner(moInfo);
|
PythonRunner *result = new PythonRunner(moInfo);
|
||||||
if (result->initPython(pythonDir)) {
|
if (result->initPython(pythonDir)) {
|
||||||
return result;
|
return result;
|
||||||
@@ -84,6 +86,15 @@ struct QString_to_python_str
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct QFlags_to_int
|
||||||
|
{
|
||||||
|
static PyObject *convert(const QFlags<T> &flags) {
|
||||||
|
return bpy::incref(bpy::object(static_cast<int>(flags)).ptr());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct QString_from_python_str
|
struct QString_from_python_str
|
||||||
{
|
{
|
||||||
QString_from_python_str() {
|
QString_from_python_str() {
|
||||||
@@ -109,7 +120,6 @@ struct QString_from_python_str
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct GuessedValue_converters
|
struct GuessedValue_converters
|
||||||
{
|
{
|
||||||
@@ -139,7 +149,6 @@ struct GuessedValue_converters
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void construct(PyObject *objPtr, bpy::converter::rvalue_from_python_stage1_data* data) {
|
static void construct(PyObject *objPtr, bpy::converter::rvalue_from_python_stage1_data* data) {
|
||||||
void *storage = ((bpy::converter::rvalue_from_python_storage<GuessedValue<T> >*)data)->storage.bytes;
|
void *storage = ((bpy::converter::rvalue_from_python_storage<GuessedValue<T> >*)data)->storage.bytes;
|
||||||
GuessedValue<T> *result = new (storage) GuessedValue<T>();
|
GuessedValue<T> *result = new (storage) GuessedValue<T>();
|
||||||
@@ -256,6 +265,7 @@ struct QVariant_from_python_obj
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct QList_to_python_list
|
struct QList_to_python_list
|
||||||
{
|
{
|
||||||
@@ -379,6 +389,7 @@ PyObject *toPyQt(T *objPtr)
|
|||||||
return bpy::incref(sipObj);
|
return bpy::incref(sipObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct QClass_converters
|
struct QClass_converters
|
||||||
{
|
{
|
||||||
@@ -506,6 +517,101 @@ struct QInterface_converters
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int getArgCount(PyObject *object) {
|
||||||
|
int result = 0;
|
||||||
|
PyObject *funcCode = PyObject_GetAttrString(object, "func_code");
|
||||||
|
if (funcCode) {
|
||||||
|
PyObject *argCount = PyObject_GetAttrString(funcCode, "co_argcount");
|
||||||
|
if(argCount) {
|
||||||
|
result = PyInt_AsLong(argCount);
|
||||||
|
Py_DECREF(argCount);
|
||||||
|
}
|
||||||
|
Py_DECREF(funcCode);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Functor0_converter
|
||||||
|
{
|
||||||
|
|
||||||
|
struct FunctorWrapper
|
||||||
|
{
|
||||||
|
FunctorWrapper(boost::python::object callable) : m_Callable(callable) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator()() {
|
||||||
|
GILock lock;
|
||||||
|
m_Callable();
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::python::object m_Callable;
|
||||||
|
};
|
||||||
|
|
||||||
|
Functor0_converter()
|
||||||
|
{
|
||||||
|
bpy::converter::registry::push_back(&convertible, &construct, bpy::type_id<std::function<void()>>());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *convertible(PyObject *object)
|
||||||
|
{
|
||||||
|
if (!PyCallable_Check(object)
|
||||||
|
|| (getArgCount(object) != 0)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void construct(PyObject *object, bpy::converter::rvalue_from_python_stage1_data *data)
|
||||||
|
{
|
||||||
|
bpy::object callable(bpy::handle<>(bpy::borrowed(object)));
|
||||||
|
void *storage = ((bpy::converter::rvalue_from_python_storage<std::function<void()>>*)data)->storage.bytes;
|
||||||
|
new (storage) std::function<void()>(FunctorWrapper(callable));
|
||||||
|
data->convertible = storage;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename PAR1, typename PAR2>
|
||||||
|
struct Functor2_converter
|
||||||
|
{
|
||||||
|
|
||||||
|
struct FunctorWrapper
|
||||||
|
{
|
||||||
|
FunctorWrapper(boost::python::object callable) : m_Callable(callable) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator()(const PAR1 ¶m1, const PAR2 ¶m2) {
|
||||||
|
GILock lock;
|
||||||
|
m_Callable(param1, param2);
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::python::object m_Callable;
|
||||||
|
};
|
||||||
|
|
||||||
|
Functor2_converter()
|
||||||
|
{
|
||||||
|
bpy::converter::registry::push_back(&convertible, &construct, bpy::type_id<std::function<void(PAR1, PAR2)>>());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *convertible(PyObject *object)
|
||||||
|
{
|
||||||
|
if (!PyCallable_Check(object)
|
||||||
|
|| (getArgCount(object) != 2)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void construct(PyObject *object, bpy::converter::rvalue_from_python_stage1_data *data)
|
||||||
|
{
|
||||||
|
bpy::object callable(bpy::handle<>(bpy::borrowed(object)));
|
||||||
|
void *storage = ((bpy::converter::rvalue_from_python_storage<std::function<void(PAR1, PAR2)>>*)data)->storage.bytes;
|
||||||
|
new (storage) std::function<void(PAR1, PAR2)>(FunctorWrapper(callable));
|
||||||
|
data->convertible = storage;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(updateWithQuality, MOBase::GuessedValue<QString>::update, 2, 2)
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(updateWithQuality, MOBase::GuessedValue<QString>::update, 2, 2)
|
||||||
|
|
||||||
|
|
||||||
@@ -533,32 +639,37 @@ BOOST_PYTHON_MODULE(mobase)
|
|||||||
.value("candidate", MOBase::VersionInfo::RELEASE_CANDIDATE)
|
.value("candidate", MOBase::VersionInfo::RELEASE_CANDIDATE)
|
||||||
.value("beta", MOBase::VersionInfo::RELEASE_BETA)
|
.value("beta", MOBase::VersionInfo::RELEASE_BETA)
|
||||||
.value("alpha", MOBase::VersionInfo::RELEASE_ALPHA)
|
.value("alpha", MOBase::VersionInfo::RELEASE_ALPHA)
|
||||||
.value("prealpha", MOBase::VersionInfo::RELEASE_PREALPHA);
|
.value("prealpha", MOBase::VersionInfo::RELEASE_PREALPHA)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::enum_<MOBase::IPluginInstaller::EInstallResult>("InstallResult")
|
bpy::enum_<MOBase::IPluginInstaller::EInstallResult>("InstallResult")
|
||||||
.value("success", MOBase::IPluginInstaller::RESULT_SUCCESS)
|
.value("success", MOBase::IPluginInstaller::RESULT_SUCCESS)
|
||||||
.value("failed", MOBase::IPluginInstaller::RESULT_FAILED)
|
.value("failed", MOBase::IPluginInstaller::RESULT_FAILED)
|
||||||
.value("canceled", MOBase::IPluginInstaller::RESULT_CANCELED)
|
.value("canceled", MOBase::IPluginInstaller::RESULT_CANCELED)
|
||||||
.value("manualRequested", MOBase::IPluginInstaller::RESULT_MANUALREQUESTED)
|
.value("manualRequested", MOBase::IPluginInstaller::RESULT_MANUALREQUESTED)
|
||||||
.value("notAttempted", MOBase::IPluginInstaller::RESULT_NOTATTEMPTED);
|
.value("notAttempted", MOBase::IPluginInstaller::RESULT_NOTATTEMPTED)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::enum_<MOBase::IGameInfo::Type>("GameType")
|
bpy::enum_<MOBase::IGameInfo::Type>("GameType")
|
||||||
.value("oblivion", MOBase::IGameInfo::TYPE_OBLIVION)
|
.value("oblivion", MOBase::IGameInfo::TYPE_OBLIVION)
|
||||||
.value("fallout3", MOBase::IGameInfo::TYPE_FALLOUT3)
|
.value("fallout3", MOBase::IGameInfo::TYPE_FALLOUT3)
|
||||||
.value("falloutnv", MOBase::IGameInfo::TYPE_FALLOUTNV)
|
.value("falloutnv", MOBase::IGameInfo::TYPE_FALLOUTNV)
|
||||||
.value("skyrim", MOBase::IGameInfo::TYPE_SKYRIM);
|
.value("skyrim", MOBase::IGameInfo::TYPE_SKYRIM)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<MOBase::VersionInfo>("VersionInfo")
|
bpy::class_<MOBase::VersionInfo>("VersionInfo")
|
||||||
.def(bpy::init<int, int, int, MOBase::VersionInfo::ReleaseType>())
|
.def(bpy::init<int, int, int, MOBase::VersionInfo::ReleaseType>())
|
||||||
.def("parse", &MOBase::VersionInfo::parse)
|
.def("parse", &MOBase::VersionInfo::parse)
|
||||||
.def("canonicalString", &MOBase::VersionInfo::canonicalString);
|
.def("canonicalString", &MOBase::VersionInfo::canonicalString)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<MOBase::PluginSetting>("PluginSetting", bpy::init<const QString&, const QString&, const QVariant&>());
|
bpy::class_<MOBase::PluginSetting>("PluginSetting", bpy::init<const QString&, const QString&, const QVariant&>());
|
||||||
|
|
||||||
bpy::class_<IGameInfoWrapper, boost::noncopyable>("GameInfo")
|
bpy::class_<IGameInfoWrapper, boost::noncopyable>("GameInfo")
|
||||||
.def("type", bpy::pure_virtual(&MOBase::IGameInfo::type))
|
.def("type", bpy::pure_virtual(&MOBase::IGameInfo::type))
|
||||||
.def("path", bpy::pure_virtual(&MOBase::IGameInfo::path))
|
.def("path", bpy::pure_virtual(&MOBase::IGameInfo::path))
|
||||||
.def("binaryName", bpy::pure_virtual(&MOBase::IGameInfo::binaryName));
|
.def("binaryName", bpy::pure_virtual(&MOBase::IGameInfo::binaryName))
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<IOrganizerWrapper, boost::noncopyable>("IOrganizer")
|
bpy::class_<IOrganizerWrapper, boost::noncopyable>("IOrganizer")
|
||||||
.def("gameInfo", bpy::pure_virtual(&MOBase::IOrganizer::gameInfo), bpy::return_value_policy<bpy::reference_existing_object>())
|
.def("gameInfo", bpy::pure_virtual(&MOBase::IOrganizer::gameInfo), bpy::return_value_policy<bpy::reference_existing_object>())
|
||||||
@@ -576,8 +687,14 @@ BOOST_PYTHON_MODULE(mobase)
|
|||||||
.def("persistent", bpy::pure_virtual(&IOrganizer::persistent))
|
.def("persistent", bpy::pure_virtual(&IOrganizer::persistent))
|
||||||
.def("setPersistent", bpy::pure_virtual(&IOrganizer::setPersistent))
|
.def("setPersistent", bpy::pure_virtual(&IOrganizer::setPersistent))
|
||||||
.def("pluginDataPath", bpy::pure_virtual(&IOrganizer::pluginDataPath))
|
.def("pluginDataPath", bpy::pure_virtual(&IOrganizer::pluginDataPath))
|
||||||
.def("installMod", bpy::pure_virtual(&IOrganizer::installMod))
|
.def("installMod", bpy::pure_virtual(&IOrganizer::installMod), bpy::return_value_policy<bpy::reference_existing_object>())
|
||||||
.def("downloadManager", bpy::pure_virtual(&IOrganizer::downloadManager), bpy::return_value_policy<bpy::reference_existing_object>());
|
.def("downloadManager", bpy::pure_virtual(&IOrganizer::downloadManager), bpy::return_value_policy<bpy::reference_existing_object>())
|
||||||
|
.def("pluginList", bpy::pure_virtual(&IOrganizer::pluginList), bpy::return_value_policy<bpy::reference_existing_object>())
|
||||||
|
.def("modList", bpy::pure_virtual(&IOrganizer::modList), bpy::return_value_policy<bpy::reference_existing_object>())
|
||||||
|
.def("startApplication", bpy::pure_virtual(&IOrganizer::startApplication), bpy::return_value_policy<bpy::return_by_value>())
|
||||||
|
.def("onAboutToRun", bpy::pure_virtual(&IOrganizer::onAboutToRun))
|
||||||
|
.def("refreshModList", bpy::pure_virtual(&IOrganizer::refreshModList))
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<ModRepositoryBridgeWrapper, boost::noncopyable>("ModRepositoryBridge")
|
bpy::class_<ModRepositoryBridgeWrapper, boost::noncopyable>("ModRepositoryBridge")
|
||||||
.def("requestDescription", &ModRepositoryBridgeWrapper::requestDescription)
|
.def("requestDescription", &ModRepositoryBridgeWrapper::requestDescription)
|
||||||
@@ -586,12 +703,32 @@ BOOST_PYTHON_MODULE(mobase)
|
|||||||
.def("requestDownloadURL", &ModRepositoryBridgeWrapper::requestDownloadURL)
|
.def("requestDownloadURL", &ModRepositoryBridgeWrapper::requestDownloadURL)
|
||||||
.def("requestToggleEndorsement", &ModRepositoryBridgeWrapper::requestToggleEndorsement)
|
.def("requestToggleEndorsement", &ModRepositoryBridgeWrapper::requestToggleEndorsement)
|
||||||
.def("onFilesAvailable", &ModRepositoryBridgeWrapper::onFilesAvailable)
|
.def("onFilesAvailable", &ModRepositoryBridgeWrapper::onFilesAvailable)
|
||||||
.def("onRequestFailed", &ModRepositoryBridgeWrapper::onRequestFailed);
|
.def("onRequestFailed", &ModRepositoryBridgeWrapper::onRequestFailed)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<IDownloadManagerWrapper, boost::noncopyable>("IDownloadManager")
|
bpy::class_<IDownloadManagerWrapper, boost::noncopyable>("IDownloadManager")
|
||||||
.def("startDownloadURLs", bpy::pure_virtual(&IDownloadManager::startDownloadURLs))
|
.def("startDownloadURLs", bpy::pure_virtual(&IDownloadManager::startDownloadURLs))
|
||||||
.def("startDownloadNexusFile", bpy::pure_virtual(&IDownloadManager::startDownloadNexusFile))
|
.def("startDownloadNexusFile", bpy::pure_virtual(&IDownloadManager::startDownloadNexusFile))
|
||||||
.def("downloadPath", bpy::pure_virtual(&IDownloadManager::downloadPath));
|
.def("downloadPath", bpy::pure_virtual(&IDownloadManager::downloadPath))
|
||||||
|
;
|
||||||
|
|
||||||
|
bpy::class_<IInstallationManagerWrapper, boost::noncopyable>("IInstallationManager")
|
||||||
|
.def("extractFile", bpy::pure_virtual(&IInstallationManager::extractFile))
|
||||||
|
.def("extractFiles", bpy::pure_virtual(&IInstallationManager::extractFiles))
|
||||||
|
.def("installArchive", bpy::pure_virtual(&IInstallationManager::installArchive))
|
||||||
|
;
|
||||||
|
|
||||||
|
bpy::class_<IModInterfaceWrapper, boost::noncopyable>("IModInterface")
|
||||||
|
.def("name", bpy::pure_virtual(&IModInterface::name))
|
||||||
|
.def("absolutePath", bpy::pure_virtual(&IModInterface::absolutePath))
|
||||||
|
.def("setVersion", bpy::pure_virtual(&IModInterface::setVersion))
|
||||||
|
.def("setNewestVersion", bpy::pure_virtual(&IModInterface::setNewestVersion))
|
||||||
|
.def("setIsEndorsed", bpy::pure_virtual(&IModInterface::setIsEndorsed))
|
||||||
|
.def("setNexusID", bpy::pure_virtual(&IModInterface::setNexusID))
|
||||||
|
.def("addNexusCategory", bpy::pure_virtual(&IModInterface::addNexusCategory))
|
||||||
|
.def("setName", bpy::pure_virtual(&IModInterface::setName))
|
||||||
|
.def("remove", bpy::pure_virtual(&IModInterface::remove))
|
||||||
|
;
|
||||||
|
|
||||||
bpy::enum_<MOBase::EGuessQuality>("GuessQuality")
|
bpy::enum_<MOBase::EGuessQuality>("GuessQuality")
|
||||||
.value("invalid", MOBase::GUESS_INVALID)
|
.value("invalid", MOBase::GUESS_INVALID)
|
||||||
@@ -599,18 +736,41 @@ BOOST_PYTHON_MODULE(mobase)
|
|||||||
.value("good", MOBase::GUESS_GOOD)
|
.value("good", MOBase::GUESS_GOOD)
|
||||||
.value("meta", MOBase::GUESS_META)
|
.value("meta", MOBase::GUESS_META)
|
||||||
.value("preset", MOBase::GUESS_PRESET)
|
.value("preset", MOBase::GUESS_PRESET)
|
||||||
.value("user", MOBase::GUESS_USER);
|
.value("user", MOBase::GUESS_USER)
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<MOBase::GuessedValue<QString>, boost::noncopyable>("GuessedString")
|
bpy::class_<MOBase::GuessedValue<QString>, boost::noncopyable>("GuessedString")
|
||||||
.def("update",
|
.def("update",
|
||||||
static_cast<GuessedValue<QString> &(GuessedValue<QString>::*)(const QString&, EGuessQuality)>(&GuessedValue<QString>::update),
|
static_cast<GuessedValue<QString> &(GuessedValue<QString>::*)(const QString&, EGuessQuality)>(&GuessedValue<QString>::update),
|
||||||
bpy::return_value_policy<bpy::reference_existing_object>(), updateWithQuality())
|
bpy::return_value_policy<bpy::reference_existing_object>(), updateWithQuality())
|
||||||
.def("variants", &MOBase::GuessedValue<QString>::variants, bpy::return_value_policy<bpy::copy_const_reference>());
|
.def("variants", &MOBase::GuessedValue<QString>::variants, bpy::return_value_policy<bpy::copy_const_reference>())
|
||||||
|
;
|
||||||
|
|
||||||
bpy::class_<IPluginToolWrapper, boost::noncopyable>("IPluginTool")
|
bpy::class_<IPluginToolWrapper, boost::noncopyable>("IPluginTool")
|
||||||
.def("setParentWidget", bpy::pure_virtual(&MOBase::IPluginTool::setParentWidget));
|
.def("setParentWidget", bpy::pure_virtual(&MOBase::IPluginTool::setParentWidget))
|
||||||
|
;
|
||||||
bpy::class_<IPluginInstallerCustomWrapper, boost::noncopyable>("IPluginInstallerCustom")
|
bpy::class_<IPluginInstallerCustomWrapper, boost::noncopyable>("IPluginInstallerCustom")
|
||||||
.def("setParentWidget", bpy::pure_virtual(&MOBase::IPluginInstallerCustom::setParentWidget));
|
.def("setParentWidget", bpy::pure_virtual(&MOBase::IPluginInstallerCustom::setParentWidget))
|
||||||
|
;
|
||||||
|
|
||||||
|
Functor0_converter(); // converter for the onRefreshed-callback
|
||||||
|
bpy::class_<IPluginListWrapper, boost::noncopyable>("IPluginList")
|
||||||
|
.def("state", bpy::pure_virtual(&MOBase::IPluginList::state))
|
||||||
|
.def("priority", bpy::pure_virtual(&MOBase::IPluginList::priority))
|
||||||
|
.def("loadOrder", bpy::pure_virtual(&MOBase::IPluginList::loadOrder))
|
||||||
|
.def("isMaster", bpy::pure_virtual(&MOBase::IPluginList::isMaster))
|
||||||
|
.def("origin", bpy::pure_virtual(&MOBase::IPluginList::origin))
|
||||||
|
.def("onRefreshed", bpy::pure_virtual(&MOBase::IPluginList::onRefreshed))
|
||||||
|
;
|
||||||
|
|
||||||
|
bpy::to_python_converter<IModList::ModStates, QFlags_to_int<IModList::ModState>>();
|
||||||
|
Functor2_converter<const QString&, IModList::ModStates>(); // converter for the onModStateChanged-callback
|
||||||
|
bpy::class_<IModListWrapper, boost::noncopyable>("IModList")
|
||||||
|
.def("state", bpy::pure_virtual(&MOBase::IModList::state))
|
||||||
|
.def("priority", bpy::pure_virtual(&MOBase::IModList::priority))
|
||||||
|
.def("setPriority", bpy::pure_virtual(&MOBase::IModList::setPriority))
|
||||||
|
.def("onModStateChanged", bpy::pure_virtual(&MOBase::IModList::onModStateChanged))
|
||||||
|
;
|
||||||
|
|
||||||
GuessedValue_converters<QString>();
|
GuessedValue_converters<QString>();
|
||||||
|
|
||||||
@@ -632,6 +792,7 @@ PythonRunner::PythonRunner(const MOBase::IOrganizer *moInfo)
|
|||||||
|
|
||||||
static char* argv0 = "ModOrganizer.exe";
|
static char* argv0 = "ModOrganizer.exe";
|
||||||
|
|
||||||
|
|
||||||
bool PythonRunner::initPython(const QString &pythonPath)
|
bool PythonRunner::initPython(const QString &pythonPath)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@@ -645,21 +806,25 @@ bool PythonRunner::initPython(const QString &pythonPath)
|
|||||||
|
|
||||||
Py_SetProgramName(argv0);
|
Py_SetProgramName(argv0);
|
||||||
PyImport_AppendInittab("mobase", &initmobase);
|
PyImport_AppendInittab("mobase", &initmobase);
|
||||||
|
Py_OptimizeFlag = 2;
|
||||||
|
Py_NoSiteFlag = 1;
|
||||||
Py_InitializeEx(0);
|
Py_InitializeEx(0);
|
||||||
|
|
||||||
if (!Py_IsInitialized()) {
|
if (!Py_IsInitialized()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PySys_SetArgv(0, &argv0);
|
PySys_SetArgv(0, &argv0);
|
||||||
|
|
||||||
bpy::object main_module = bpy::import("__main__");
|
bpy::object mainModule = bpy::import("__main__");
|
||||||
bpy::object main_namespace = main_module.attr("__dict__");
|
bpy::object mainNamespace = mainModule.attr("__dict__");
|
||||||
main_namespace["cStringIO"] = bpy::import("cStringIO");
|
mainNamespace["sys"] = bpy::import("sys");
|
||||||
main_namespace["sys"] = bpy::import("sys");
|
initPath(mainNamespace);
|
||||||
|
bpy::import("site");
|
||||||
|
mainNamespace["cStringIO"] = bpy::import("cStringIO");
|
||||||
bpy::exec("s_ErrIO = cStringIO.StringIO()\n"
|
bpy::exec("s_ErrIO = cStringIO.StringIO()\n"
|
||||||
"sys.stderr = s_ErrIO",
|
"sys.stderr = s_ErrIO",
|
||||||
main_namespace);
|
mainNamespace);
|
||||||
return true;
|
return true;
|
||||||
} catch (const bpy::error_already_set&) {
|
} catch (const bpy::error_already_set&) {
|
||||||
qDebug("failed to init python");
|
qDebug("failed to init python");
|
||||||
@@ -689,26 +854,41 @@ bool handled_exec_file(bpy::str filename, bpy::object globals = bpy::object(), b
|
|||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
|
|
||||||
|
void PythonRunner::initPath(bpy::object &moduleNamespace)
|
||||||
|
{
|
||||||
|
static QString paths[] = {
|
||||||
|
m_MOInfo->pluginDataPath(),
|
||||||
|
QCoreApplication::applicationDirPath(),
|
||||||
|
QCoreApplication::applicationDirPath() + "/python27.zip",
|
||||||
|
QCoreApplication::applicationDirPath() + "/python27.zip/Lib",
|
||||||
|
QCoreApplication::applicationDirPath() + "/python27.zip/DLLs",
|
||||||
|
QCoreApplication::applicationDirPath() + "/python27.zip/Lib/site-packages",
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(paths) / sizeof(QString); ++i) {
|
||||||
|
QString expr = QString("sys.path.insert(%1, \"%2\")").arg(i).arg(paths[i]);
|
||||||
|
bpy::eval(expr.toUtf8().constData(), moduleNamespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QObject *PythonRunner::instantiate(const QString &pluginName)
|
QObject *PythonRunner::instantiate(const QString &pluginName)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
GILock lock;
|
GILock lock;
|
||||||
bpy::object main_module = bpy::import("__main__");
|
bpy::object mainModule = bpy::import("__main__");
|
||||||
bpy::object main_namespace = main_module.attr("__dict__");
|
bpy::object moduleNamespace = mainModule.attr("__dict__");
|
||||||
|
|
||||||
bpy::object mobase_module((bpy::handle<>(PyImport_ImportModule("mobase"))));
|
bpy::object sys = bpy::import("sys");
|
||||||
main_namespace["sys"] = bpy::import("sys");
|
moduleNamespace["sys"] = sys;
|
||||||
main_namespace["mobase"] = mobase_module;
|
moduleNamespace["mobase"] = bpy::import("mobase");
|
||||||
QString appendDataPath = QString("sys.path.insert(0, \"%1\")").arg(m_MOInfo->pluginDataPath());
|
|
||||||
|
|
||||||
bpy::eval(appendDataPath.toUtf8().constData(), main_namespace);
|
|
||||||
|
|
||||||
std::string temp = ToString(pluginName);
|
std::string temp = ToString(pluginName);
|
||||||
if (handled_exec_file(temp.c_str(), main_namespace)) {
|
if (handled_exec_file(temp.c_str(), moduleNamespace)) {
|
||||||
reportPythonError();
|
reportPythonError();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
m_PythonObjects[pluginName] = main_namespace["createPlugin"]();
|
m_PythonObjects[pluginName] = moduleNamespace["createPlugin"]();
|
||||||
|
|
||||||
bpy::object pluginObj = m_PythonObjects[pluginName];
|
bpy::object pluginObj = m_PythonObjects[pluginName];
|
||||||
TRY_PLUGIN_TYPE(IPluginInstallerCustom, pluginObj);
|
TRY_PLUGIN_TYPE(IPluginInstallerCustom, pluginObj);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public:
|
|||||||
#define PYDLLEXPORT Q_DECL_IMPORT
|
#define PYDLLEXPORT Q_DECL_IMPORT
|
||||||
#endif // PYTHONRUNNER_LIBRARY
|
#endif // PYTHONRUNNER_LIBRARY
|
||||||
|
|
||||||
extern "C" PYDLLEXPORT IPythonRunner *CreatePythonRunner(const MOBase::IOrganizer *moInfo, const QString &pythonDir);
|
extern "C" PYDLLEXPORT IPythonRunner *CreatePythonRunner(MOBase::IOrganizer *moInfo, const QString &pythonDir);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
#ifndef PYTHONRUNNER_GLOBAL_H
|
|
||||||
#define PYTHONRUNNER_GLOBAL_H
|
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
|
|
||||||
#if defined(PYTHONRUNNER_LIBRARY)
|
|
||||||
# define PYTHONRUNNERSHARED_EXPORT Q_DECL_EXPORT
|
|
||||||
#else
|
|
||||||
# define PYTHONRUNNERSHARED_EXPORT Q_DECL_IMPORT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // PYTHONRUNNER_GLOBAL_H
|
|
||||||
+58
-13
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef Q_MOC_RUN
|
#ifndef Q_MOC_RUN
|
||||||
|
#pragma warning (push, 0)
|
||||||
#include <boost/python.hpp>
|
#include <boost/python.hpp>
|
||||||
|
#pragma warning (pop)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@@ -11,6 +13,8 @@
|
|||||||
#include <imoinfo.h>
|
#include <imoinfo.h>
|
||||||
#include <igameinfo.h>
|
#include <igameinfo.h>
|
||||||
#include <imodrepositorybridge.h>
|
#include <imodrepositorybridge.h>
|
||||||
|
#include <imodinterface.h>
|
||||||
|
#include <iinstallationmanager.h>
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "gilock.h"
|
#include "gilock.h"
|
||||||
|
|
||||||
@@ -65,8 +69,8 @@ public:
|
|||||||
|
|
||||||
void onRequestFailed(boost::python::object callback) {
|
void onRequestFailed(boost::python::object callback) {
|
||||||
m_FailedHandler = callback;
|
m_FailedHandler = callback;
|
||||||
connect(m_Wrapped, SIGNAL(requestFailed(int,QVariant,QString)),
|
connect(m_Wrapped, SIGNAL(requestFailed(int,int,QVariant,QString)),
|
||||||
this, SLOT(requestFailed(int,QVariant,QString)),
|
this, SLOT(requestFailed(int,int,QVariant,QString)),
|
||||||
Qt::UniqueConnection);
|
Qt::UniqueConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,20 +86,20 @@ private slots:
|
|||||||
qCritical("no handler connected");
|
qCritical("no handler connected");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// try {
|
try {
|
||||||
GILock lock;
|
GILock lock;
|
||||||
m_FilesAvailableHandler(modID, userData, resultData);
|
m_FilesAvailableHandler(modID, userData, resultData);
|
||||||
// } catch (const boost::python::error_already_set&) {
|
} catch (const boost::python::error_already_set&) {
|
||||||
// qDebug("error");
|
// qDebug("error");
|
||||||
//reportPythonError();
|
reportPythonError();
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void requestFailed(int modID, QVariant userData, const QString &errorMessage)
|
void requestFailed(int modID, int fileID, QVariant userData, const QString &errorMessage)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
GILock lock;
|
GILock lock;
|
||||||
m_FailedHandler(modID, userData, errorMessage);
|
m_FailedHandler(modID, fileID, userData, errorMessage);
|
||||||
} catch (const boost::python::error_already_set&) {
|
} catch (const boost::python::error_already_set&) {
|
||||||
reportPythonError();
|
reportPythonError();
|
||||||
}
|
}
|
||||||
@@ -119,10 +123,6 @@ struct IOrganizerWrapper: MOBase::IOrganizer, boost::python::wrapper<MOBase::IOr
|
|||||||
virtual MOBase::IModRepositoryBridge *createNexusBridge() const {
|
virtual MOBase::IModRepositoryBridge *createNexusBridge() const {
|
||||||
return this->get_override("createNexusBridge")();
|
return this->get_override("createNexusBridge")();
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
static ModRepositoryBridgeWrapper newNexusBridge(IOrganizerWrapper *self) {
|
|
||||||
return ModRepositoryBridgeWrapper(self->createNexusBridge());
|
|
||||||
}*/
|
|
||||||
|
|
||||||
virtual QString profileName() const { return this->get_override("profileName")(); }
|
virtual QString profileName() const { return this->get_override("profileName")(); }
|
||||||
virtual QString profilePath() const { return this->get_override("profilePath")(); }
|
virtual QString profilePath() const { return this->get_override("profilePath")(); }
|
||||||
@@ -137,9 +137,17 @@ struct IOrganizerWrapper: MOBase::IOrganizer, boost::python::wrapper<MOBase::IOr
|
|||||||
virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const { return this->get_override("persistent")(pluginName, key, def); }
|
virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const { return this->get_override("persistent")(pluginName, key, def); }
|
||||||
virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true) { this->get_override("setPersistent")(pluginName, key, value, sync); }
|
virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true) { this->get_override("setPersistent")(pluginName, key, value, sync); }
|
||||||
virtual QString pluginDataPath() const { return this->get_override("pluginDataPath")(); }
|
virtual QString pluginDataPath() const { return this->get_override("pluginDataPath")(); }
|
||||||
virtual void installMod(const QString &fileName) { this->get_override("installMod")(fileName); }
|
virtual MOBase::IModInterface *installMod(const QString &fileName) { return this->get_override("installMod")(fileName); }
|
||||||
virtual MOBase::IDownloadManager *downloadManager() { return this->get_override("downloadManager")(); }
|
virtual MOBase::IDownloadManager *downloadManager() { return this->get_override("downloadManager")(); }
|
||||||
|
virtual MOBase::IPluginList *pluginList() { return this->get_override("pluginList")(); }
|
||||||
|
virtual MOBase::IModList *modList() { return this->get_override("modList")(); }
|
||||||
virtual QString resolvePath(const QString &fileName) const { return this->get_override("resolvePath")(fileName); }
|
virtual QString resolvePath(const QString &fileName) const { return this->get_override("resolvePath")(fileName); }
|
||||||
|
virtual QStringList listDirectories(const QString &directoryName) const { return this->get_override("listDirectories")(directoryName); }
|
||||||
|
virtual QStringList findFiles(const QString &path, const std::function<bool(const QString&)> &filter) const { return this->get_override("findFiles")(path, filter); }
|
||||||
|
virtual QList<FileInfo> findFileInfos(const QString &path, const std::function<bool(const FileInfo&)> &filter) const { return this->get_override("findFileInfos")(path, filter); }
|
||||||
|
virtual HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", const QString &profile = "") { return this->get_override("startApplication")(executable, args, cwd, profile); }
|
||||||
|
virtual bool onAboutToRun(const std::function<bool(const QString&)> &func) { return this->get_override("onAboutToRun")(func); }
|
||||||
|
virtual void refreshModList(bool saveChanges = true) { this->get_override("refreshModList")(saveChanges); }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDownloadManagerWrapper: MOBase::IDownloadManager, boost::python::wrapper<MOBase::IDownloadManager>
|
struct IDownloadManagerWrapper: MOBase::IDownloadManager, boost::python::wrapper<MOBase::IDownloadManager>
|
||||||
@@ -151,6 +159,13 @@ private:
|
|||||||
boost::python::object m_DownloadCompleteHandler;
|
boost::python::object m_DownloadCompleteHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IInstallationManagerWrapper: MOBase::IInstallationManager, boost::python::wrapper<MOBase::IInstallationManager>
|
||||||
|
{
|
||||||
|
virtual QString extractFile(const QString &fileName) { return this->get_override("extractFile")(fileName); }
|
||||||
|
virtual QStringList extractFiles(const QStringList &files, bool flatten) { return this->get_override("extractFiles")(files, flatten); }
|
||||||
|
virtual MOBase::IPluginInstaller::EInstallResult installArchive(MOBase::GuessedValue<QString> &modName, const QString &archiveFile) { return this->get_override("installArchive")(modName, archiveFile); }
|
||||||
|
};
|
||||||
|
|
||||||
struct IGameInfoWrapper: MOBase::IGameInfo, boost::python::wrapper<MOBase::IGameInfo>
|
struct IGameInfoWrapper: MOBase::IGameInfo, boost::python::wrapper<MOBase::IGameInfo>
|
||||||
{
|
{
|
||||||
virtual Type type() const { return this->get_override("type")(); }
|
virtual Type type() const { return this->get_override("type")(); }
|
||||||
@@ -158,5 +173,35 @@ struct IGameInfoWrapper: MOBase::IGameInfo, boost::python::wrapper<MOBase::IGame
|
|||||||
virtual QString binaryName() const { return this->get_override("binaryName")(); }
|
virtual QString binaryName() const { return this->get_override("binaryName")(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct IModInterfaceWrapper: MOBase::IModInterface, boost::python::wrapper<MOBase::IModInterface>
|
||||||
|
{
|
||||||
|
virtual QString name() const { return this->get_override("name")(); }
|
||||||
|
virtual QString absolutePath() const { return this->get_override("absolutePath")(); }
|
||||||
|
virtual void setVersion(const MOBase::VersionInfo &version) { this->get_override("setVersion")(version); }
|
||||||
|
virtual void setNewestVersion(const MOBase::VersionInfo &version) { this->get_override("setNewestVersion")(version); }
|
||||||
|
virtual void setIsEndorsed(bool endorsed) { this->get_override("setIsEndorsed")(endorsed); }
|
||||||
|
virtual void setNexusID(int nexusID) { this->get_override("setNexusID")(nexusID); }
|
||||||
|
virtual void addNexusCategory(int categoryID) { this->get_override("addNexusCategory")(categoryID); }
|
||||||
|
virtual bool setName(const QString &name) { return this->get_override("setName")(name); }
|
||||||
|
virtual bool remove() { return this->get_override("remove")(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct IPluginListWrapper: MOBase::IPluginList, boost::python::wrapper<MOBase::IPluginList> {
|
||||||
|
virtual PluginState state(const QString &name) const { return this->get_override("state")(name); }
|
||||||
|
virtual int priority(const QString &name) const { return this->get_override("priority")(name); }
|
||||||
|
virtual int loadOrder(const QString &name) const { return this->get_override("loadOrder")(name); }
|
||||||
|
virtual bool isMaster(const QString &name) const { return this->get_override("isMaster")(name); }
|
||||||
|
virtual QString origin(const QString &name) const { return this->get_override("origin")(name); }
|
||||||
|
virtual bool onRefreshed(const std::function<void ()> &callback) { return this->get_override("onRefreshed")(callback); }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct IModListWrapper: MOBase::IModList, boost::python::wrapper<MOBase::IModList> {
|
||||||
|
virtual ModStates state(const QString &name) const{ return this->get_override("state")(name); }
|
||||||
|
virtual int priority(const QString &name) const{ return this->get_override("priority")(name); }
|
||||||
|
virtual bool setPriority(const QString &name, int newPriority){ return this->get_override("setPriority")(name, newPriority); }
|
||||||
|
virtual bool onModStateChanged(const std::function<void (const QString &, ModStates)> &func) { return this->get_override("onModStateChanged")(func); }
|
||||||
|
};
|
||||||
|
|
||||||
#endif // UIBASEWRAPPERS_H
|
#endif // UIBASEWRAPPERS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user