2018-06-23 16:59:23 +00:00
|
|
|
#ifndef PYTHONMANAGER_H
|
|
|
|
#define PYTHONMANAGER_H
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
|
|
|
|
class CutterPythonPlugin;
|
|
|
|
typedef struct _ts PyThreadState;
|
|
|
|
typedef struct _object PyObject;
|
|
|
|
|
2019-02-03 11:31:59 +00:00
|
|
|
class PythonManager: public QObject
|
2018-06-23 16:59:23 +00:00
|
|
|
{
|
2019-02-03 11:31:59 +00:00
|
|
|
Q_OBJECT
|
|
|
|
|
2018-06-23 16:59:23 +00:00
|
|
|
public:
|
|
|
|
static PythonManager *getInstance();
|
|
|
|
|
|
|
|
PythonManager();
|
|
|
|
~PythonManager();
|
|
|
|
|
2019-02-03 11:31:59 +00:00
|
|
|
void setPythonHome(const QString &pythonHome) { customPythonHome = pythonHome; }
|
2018-06-23 16:59:23 +00:00
|
|
|
|
|
|
|
void initPythonHome();
|
|
|
|
void initialize();
|
2019-02-03 13:00:40 +00:00
|
|
|
void shutdown();
|
|
|
|
|
2018-06-23 16:59:23 +00:00
|
|
|
void addPythonPath(char *path);
|
|
|
|
|
2018-06-24 09:51:16 +00:00
|
|
|
void restoreThread();
|
|
|
|
void saveThread();
|
2018-06-23 16:59:23 +00:00
|
|
|
|
2019-02-09 13:05:06 +00:00
|
|
|
/*!
|
|
|
|
* \brief RAII Helper class to call restoreThread() and saveThread() automatically
|
|
|
|
*
|
|
|
|
* As long as an object of this class is in scope, the Python thread will remain restored.
|
|
|
|
*/
|
|
|
|
class ThreadHolder
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ThreadHolder() { getInstance()->restoreThread(); }
|
|
|
|
~ThreadHolder() { getInstance()->saveThread(); }
|
|
|
|
};
|
|
|
|
|
2019-02-03 11:31:59 +00:00
|
|
|
signals:
|
|
|
|
void willShutDown();
|
|
|
|
|
2018-06-23 16:59:23 +00:00
|
|
|
private:
|
|
|
|
QString customPythonHome;
|
|
|
|
wchar_t *pythonHome = nullptr;
|
|
|
|
PyThreadState *pyThreadState = nullptr;
|
2019-02-09 13:05:06 +00:00
|
|
|
int pyThreadStateCounter = 0;
|
2018-06-23 16:59:23 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#define Python() (PythonManager::getInstance())
|
|
|
|
|
|
|
|
#endif // PYTHONMANAGER_H
|