Compare commits

..
Author SHA1 Message Date
Tannin 9b989e9f97 bugfix: translations for some plugins weren't loaded 2015-01-11 11:14:58 +01:00
6 changed files with 52 additions and 54 deletions
+14 -15
View File
@@ -37,7 +37,7 @@ const char *ProxyPython::s_DownloadPythonURL = "http://www.python.org/download/r
HMODULE GetOwnModuleHandle()
{
HMODULE hMod = nullptr;
HMODULE hMod = NULL;
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
reinterpret_cast<LPCWSTR>(&GetOwnModuleHandle), &hMod);
@@ -50,12 +50,12 @@ QString ExtractResource(WORD resourceID, const QString &szFilename)
HMODULE mod = GetOwnModuleHandle();
HRSRC hResource = FindResourceW(mod, MAKEINTRESOURCE(resourceID), L"BINARY");
if (hResource == nullptr) {
if (hResource == NULL) {
throw MyException("embedded dll not available: " + windowsErrorString(::GetLastError()));
}
HGLOBAL hFileResource = LoadResource(mod, hResource);
if (hFileResource == nullptr) {
if (hFileResource == NULL) {
throw MyException("failed to load embedded dll resource: " + windowsErrorString(::GetLastError()));
}
@@ -64,8 +64,8 @@ QString ExtractResource(WORD resourceID, const QString &szFilename)
QString outFile = QDir::tempPath() + "/" + szFilename;
HANDLE hFile = CreateFileW(outFile.toStdWString().c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
HANDLE hFileMap = CreateFileMapping(hFile, nullptr, PAGE_READWRITE, 0, dwSize, nullptr);
HANDLE hFile = CreateFileW(ToWString(outFile).c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL);
LPVOID lpAddress = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
CopyMemory(lpAddress, lpFile, dwSize);
@@ -73,7 +73,6 @@ QString ExtractResource(WORD resourceID, const QString &szFilename)
UnmapViewOfFile(lpAddress);
CloseHandle(hFileMap);
::FlushFileBuffers(hFile);
CloseHandle(hFile);
return outFile;
@@ -81,7 +80,7 @@ QString ExtractResource(WORD resourceID, const QString &szFilename)
ProxyPython::ProxyPython()
: m_MOInfo(nullptr), m_Runner(nullptr), m_LoadFailure(FAIL_NOTINIT)
: m_MOInfo(NULL), m_Runner(NULL), m_LoadFailure(FAIL_NOTINIT)
{
}
@@ -119,9 +118,9 @@ bool ProxyPython::init(IOrganizer *moInfo)
m_TempRunnerFile = ExtractResource(IDR_LOADER_DLL, "__pythonRunner.dll");
m_RunnerLib = ::LoadLibraryW(ToWString(m_TempRunnerFile).c_str());
if (m_RunnerLib != nullptr) {
if (m_RunnerLib != NULL) {
CreatePythonRunner_func CreatePythonRunner = (CreatePythonRunner_func)::GetProcAddress(m_RunnerLib, "CreatePythonRunner");
if (CreatePythonRunner == nullptr) {
if (CreatePythonRunner == NULL) {
throw MyException("embedded dll is invalid: " + windowsErrorString(::GetLastError()));
}
if (m_MOInfo->persistent(name(), "tryInit", false).toBool()) {
@@ -146,7 +145,7 @@ bool ProxyPython::init(IOrganizer *moInfo)
m_Runner = CreatePythonRunner(moInfo, pythonPath);
m_MOInfo->setPersistent(name(), "tryInit", false);
if (m_Runner != nullptr) {
if (m_Runner != NULL) {
m_LoadFailure = FAIL_NONE;
} else {
m_LoadFailure = FAIL_INITFAIL;
@@ -154,7 +153,7 @@ bool ProxyPython::init(IOrganizer *moInfo)
return true;
} else {
DWORD error = ::GetLastError();
qCritical("Failed to load python runner (%s): %s", qPrintable(m_TempRunnerFile), qPrintable(windowsErrorString(error)));
qCritical("Failed to load python runner: %s", qPrintable(windowsErrorString(error)));
if (error == ERROR_MOD_NOT_FOUND) {
m_LoadFailure = FAIL_MISSINGDEPENDENCIES;
}
@@ -210,11 +209,11 @@ QStringList ProxyPython::pluginList(const QString &pluginPath) const
QObject *ProxyPython::instantiate(const QString &pluginName)
{
if (m_Runner != nullptr) {
if (m_Runner != NULL) {
QObject *result = m_Runner->instantiate(pluginName);
return result;
} else {
return nullptr;
return NULL;
}
}
@@ -232,7 +231,7 @@ std::vector<unsigned int> ProxyPython::activeProblems() const
result.push_back(PROBLEM_INITFAIL);
} else if (m_LoadFailure == FAIL_SEMICOLON) {
result.push_back(PROBLEM_SEMICOLON);
} else if (m_Runner != nullptr) {
} else if (m_Runner != NULL) {
if (!m_Runner->isPythonInstalled()) {
// don't know how this could happen but wth
result.push_back(PROBLEM_PYTHONMISSING);
@@ -318,7 +317,7 @@ bool ProxyPython::hasGuidedFix(unsigned int key) const
void ProxyPython::startGuidedFix(unsigned int key) const
{
if ((key == PROBLEM_PYTHONMISSING) || (key == PROBLEM_PYTHONWRONGVERSION)) {
::ShellExecuteA(nullptr, "open", s_DownloadPythonURL, nullptr, nullptr, SW_SHOWNORMAL);
::ShellExecuteA(NULL, "open", s_DownloadPythonURL, NULL, NULL, SW_SHOWNORMAL);
}
}
+1 -1
View File
@@ -28,7 +28,7 @@ along with python proxy plugin. If not, see <http://www.gnu.org/licenses/>.
#include <pythonrunner.h>
class ProxyPython : public QObject, MOBase::IPluginProxy, MOBase::IPluginDiagnose
class ProxyPython : public QObject, public MOBase::IPluginProxy, public MOBase::IPluginDiagnose
{
Q_OBJECT
Q_INTERFACES(MOBase::IPlugin MOBase::IPluginProxy MOBase::IPluginDiagnose)
+1
View File
@@ -1,3 +1,4 @@
//#define HAVE_ROUND
#include "proxypluginwrappers.h"
#include <utility.h>
#include "error.h"
+2 -1
View File
@@ -13,13 +13,14 @@ CONFIG += warn_on
DEFINES += PYTHONRUNNER_LIBRARY
# suppress a few warnings caused by boost vs vc++ paranoia
DEFINES += _SCL_SECURE_NO_WARNINGS HAVE_ROUND
DEFINES += _SCL_SECURE_NO_WARNINGS -DHAVE_ROUND
!include(../LocalPaths.pri) {
message("paths to required libraries need to be set up in LocalPaths.pri")
}
SOURCES += pythonrunner.cpp \
gilock.cpp \
error.cpp \
+32 -34
View File
@@ -1,3 +1,5 @@
#define HAVE_ROUND
#include "pythonrunner.h"
#pragma warning( disable : 4100 )
@@ -20,7 +22,7 @@
#endif
MOBase::IOrganizer *s_Organizer = nullptr;
MOBase::IOrganizer *s_Organizer = NULL;
@@ -53,7 +55,7 @@ IPythonRunner *CreatePythonRunner(MOBase::IOrganizer *moInfo, const QString &pyt
return result;
} else {
delete result;
return nullptr;
return NULL;
}
}
@@ -101,13 +103,13 @@ struct QString_from_python_str
}
static void *convertible(PyObject *objPtr) {
return PyString_Check(objPtr) ? objPtr : nullptr;
return PyString_Check(objPtr) ? objPtr : NULL;
}
static void construct(PyObject *objPtr, bpy::converter::rvalue_from_python_stage1_data *data) {
// Extract the character data from the python string
const char* value = PyString_AsString(objPtr);
assert(value != nullptr);
assert(value != NULL);
// allocate storage
void *storage = ((bpy::converter::rvalue_from_python_storage<QString>*)data)->storage.bytes;
@@ -144,7 +146,7 @@ struct GuessedValue_converters
if PyList_Check(objPtr) {
return objPtr;
} else {
return nullptr;
return NULL;
}
}
@@ -215,7 +217,7 @@ struct QVariant_from_python_obj
static void *convertible(PyObject *objPtr) {
if (!PyString_Check(objPtr) && !PyInt_Check(objPtr) &&
!PyBool_Check(objPtr) && !PyList_Check(objPtr)) {
return nullptr;
return NULL;
}
return objPtr;
}
@@ -308,7 +310,7 @@ struct QList_from_python_obj
static void* convertible(PyObject *objPtr) {
if (PyList_Check(objPtr)) return objPtr;
return nullptr;
return NULL;
}
static void construct(PyObject *objPtr, bpy::converter::rvalue_from_python_stage1_data *data) {
@@ -337,7 +339,7 @@ struct stdset_from_python_list
static void* convertible(PyObject *objPtr) {
if (PyList_Check(objPtr)) return objPtr;
return nullptr;
return NULL;
}
static void construct(PyObject *objPtr, bpy::converter::rvalue_from_python_stage1_data *data) {
@@ -357,8 +359,8 @@ struct stdset_from_python_list
static const sipAPIDef *sipAPI()
{
static const sipAPIDef *sipApi = nullptr;
if (sipApi == nullptr) {
static const sipAPIDef *sipApi = NULL;
if (sipApi == NULL) {
sipApi = (const sipAPIDef *)PyCapsule_Import("sip._C_API", 0);
}
@@ -391,19 +393,19 @@ template <> struct MetaData<QVariant> { static const char *className() { return
template <typename T>
PyObject *toPyQt(T *objPtr)
{
if (objPtr == nullptr) {
if (objPtr == NULL) {
qDebug("no input object");
return bpy::incref(Py_None);
}
const sipTypeDef *type = sipAPI()->api_find_type(MetaData<T>::className());
if (type == nullptr) {
if (type == NULL) {
qDebug("failed to determine type: %s", MetaData<T>::className());
return bpy::incref(Py_None);
}
PyObject *sipObj = sipAPI()->api_convert_from_type(objPtr, type, 0);
if (sipObj == nullptr) {
if (sipObj == NULL) {
qDebug("failed to convert");
return bpy::incref(Py_None);
}
@@ -418,12 +420,12 @@ struct QClass_converters
{
static PyObject *convert(const T &object) {
const sipTypeDef *type = sipAPI()->api_find_type(MetaData<T>::className());
if (type == nullptr) {
if (type == NULL) {
return bpy::incref(Py_None);
}
PyObject *sipObj = sipAPI()->api_convert_from_type((void*)(&object), type, 0);
if (sipObj == nullptr) {
if (sipObj == NULL) {
return bpy::incref(Py_None);
}
@@ -431,17 +433,17 @@ struct QClass_converters
}
static PyObject *convert(T *object) {
if (object == nullptr) {
if (object == NULL) {
return bpy::incref(Py_None);
}
const sipTypeDef *type = sipAPI()->api_find_type(MetaData<T>::className());
if (type == nullptr) {
if (type == NULL) {
return bpy::incref(Py_None);
}
PyObject *sipObj = sipAPI()->api_convert_from_type(object, type, 0);
if (sipObj == nullptr) {
if (sipObj == NULL) {
return bpy::incref(Py_None);
}
@@ -482,12 +484,12 @@ struct QInterface_converters
{
static PyObject *convert(const T &object) {
const sipTypeDef *type = sipAPI()->api_find_type(MetaData<T>::className());
if (type == nullptr) {
if (type == NULL) {
return bpy::incref(Py_None);
}
PyObject *sipObj = sipAPI()->api_convert_from_type((void*)(&object), type, 0);
if (sipObj == nullptr) {
if (sipObj == NULL) {
return bpy::incref(Py_None);
}
@@ -495,17 +497,17 @@ struct QInterface_converters
}
static PyObject *convert(T *object) {
if (object == nullptr) {
if (object == NULL) {
return bpy::incref(Py_None);
}
const sipTypeDef *type = sipAPI()->api_find_type(MetaData<T>::className());
if (type == nullptr) {
if (type == NULL) {
return bpy::incref(Py_None);
}
PyObject *sipObj = sipAPI()->api_convert_from_type(object, type, 0);
if (sipObj == nullptr) {
if (sipObj == NULL) {
return bpy::incref(Py_None);
}
@@ -577,7 +579,7 @@ struct Functor0_converter
{
if (!PyCallable_Check(object)
|| (getArgCount(object) != 0)) {
return nullptr;
return NULL;
}
return object;
}
@@ -618,7 +620,7 @@ struct Functor2_converter
{
if (!PyCallable_Check(object)
|| (getArgCount(object) != 2)) {
return nullptr;
return NULL;
}
return object;
}
@@ -725,7 +727,6 @@ BOOST_PYTHON_MODULE(mobase)
.def("startApplication", bpy::pure_virtual(&IOrganizer::startApplication), bpy::return_value_policy<bpy::return_by_value>())
.def("waitForApplication", bpy::pure_virtual(&IOrganizer::waitForApplication), bpy::return_value_policy<bpy::return_by_value>())
.def("onAboutToRun", bpy::pure_virtual(&IOrganizer::onAboutToRun))
.def("onFinishedRun", bpy::pure_virtual(&IOrganizer::onFinishedRun))
.def("onModInstalled", bpy::pure_virtual(&IOrganizer::onModInstalled))
.def("refreshModList", bpy::pure_virtual(&IOrganizer::refreshModList))
;
@@ -839,7 +840,7 @@ PythonRunner::PythonRunner(const MOBase::IOrganizer *moInfo)
m_PythonHome = new char[MAX_PATH + 1];
}
static const char *argv0 = "ModOrganizer.exe";
static char* argv0 = "ModOrganizer.exe";
bool PythonRunner::initPython(const QString &pythonPath)
@@ -853,10 +854,7 @@ bool PythonRunner::initPython(const QString &pythonPath)
Py_SetPythonHome(m_PythonHome);
}
char argBuffer[MAX_PATH];
strcpy(argBuffer, argv0);
Py_SetProgramName(argBuffer);
Py_SetProgramName(argv0);
PyImport_AppendInittab("mobase", &initmobase);
Py_OptimizeFlag = 2;
Py_NoSiteFlag = 1;
@@ -866,7 +864,7 @@ bool PythonRunner::initPython(const QString &pythonPath)
return false;
}
PySys_SetArgv(0, (char**)&argBuffer);
PySys_SetArgv(0, &argv0);
bpy::object mainModule = bpy::import("__main__");
bpy::object mainNamespace = mainModule.attr("__dict__");
@@ -938,7 +936,7 @@ QObject *PythonRunner::instantiate(const QString &pluginName)
std::string temp = ToString(pluginName);
if (handled_exec_file(temp.c_str(), moduleNamespace)) {
reportPythonError();
return nullptr;
return NULL;
}
m_PythonObjects[pluginName] = moduleNamespace["createPlugin"]();
@@ -949,7 +947,7 @@ QObject *PythonRunner::instantiate(const QString &pluginName)
qWarning("failed to run python script \"%s\"", qPrintable(pluginName));
reportPythonError();
}
return nullptr;
return NULL;
}
bool PythonRunner::isPythonInstalled() const
+2 -3
View File
@@ -221,13 +221,12 @@ struct IOrganizerWrapper: MOBase::IOrganizer, boost::python::wrapper<MOBase::IOr
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 QStringList getFileOrigins(const QString &fileName) const { return this->get_override("getFileOrigins")(fileName); }
virtual QStringList getFileOrigins(const QString &fileName) const { return this->get_override("getFileOrigin")(fileName); }
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 waitForApplication(HANDLE handle, LPDWORD exitCode = nullptr) const { return this->get_override("waitForApplication")(handle, exitCode); }
virtual bool waitForApplication(HANDLE handle, LPDWORD exitCode = NULL) const { return this->get_override("waitForApplication")(handle, exitCode); }
virtual void refreshModList(bool saveChanges = true) { this->get_override("refreshModList")(saveChanges); }
virtual bool onAboutToRun(const std::function<bool(const QString&)> &func) { return this->get_override("onAboutToRun")(func); }
virtual bool onFinishedRun(const std::function<void(const QString&, unsigned int)> &func) { return this->get_override("onFinishedRun")(func); }
virtual bool onModInstalled(const std::function<void(const QString&)> &func) { return this->get_override("onModInstalled")(func); }
};