Sandboxie/SandboxiePlus/SandMan/Engine/V4ScriptDebuggerApi.h

83 lines
3.0 KiB
C++

/****************************************************************************
**
** Copyright (C) 2023 David Xanatos (xanasoft.com) All rights reserved.
** Contact: XanatosDavid@gmil.com
**
**
** To use the V4ScriptTools in a commercial project, you must obtain
** an appropriate business use license.
**
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
**
**
****************************************************************************/
#ifndef CV4SCRIPTDEBUGGERAPI_H
#define CV4SCRIPTDEBUGGERAPI_H
#include <QJSEngine>
#include <QMainWindow>
#include <QLibrary>
class CV4EngineItf
{
public:
virtual QJSEngine* self() = 0;
virtual int getScriptCount() const = 0;
virtual QString getScriptName(qint64 scriptId) const = 0;
virtual QString getScriptSource(qint64 scriptId) const = 0;
virtual int getScriptLineNumber(qint64 scriptId) const = 0;
virtual qint64 getScriptId(const QString& fileName) const = 0;
//
// Note: the implementation of this interface must be derived from
// QObject and include the following signals and slots:
//
//slots:
// QJSValue evaluateScript(const QString& program, const QString& fileName, int lineNumber = 1);
//
//signals:
// void evaluateFinished(const QJSValue& ret);
// void printTrace(const QString& Message);
// void invokeDebugger();
};
typedef QObject* (*pNewV4ScriptDebuggerBackend)(CV4EngineItf* engine);
typedef QObject* (*pNewJSScriptDebuggerFrontend)();
typedef QMainWindow* (*pNewJSScriptDebugger)(QObject* frontend, QWidget *parent, Qt::WindowFlags flags);
__forceinline QObject* newV4ScriptDebuggerBackendDynamic(CV4EngineItf* engine)
{
pNewV4ScriptDebuggerBackend myNewV4ScriptDebuggerBackend = (pNewV4ScriptDebuggerBackend)QLibrary::resolve("V4ScriptDebugger", "newV4ScriptDebuggerBackend");
if (myNewV4ScriptDebuggerBackend)
return myNewV4ScriptDebuggerBackend(engine);
return NULL;
}
__forceinline QObject* newJSScriptDebuggerFrontendDynamic()
{
pNewJSScriptDebuggerFrontend myNewJSScriptDebuggerFrontend = (pNewJSScriptDebuggerFrontend)QLibrary::resolve("V4ScriptDebugger", "newJSScriptDebuggerFrontend");
if (myNewJSScriptDebuggerFrontend)
return myNewJSScriptDebuggerFrontend();
return NULL;
}
__forceinline QMainWindow* newJSScriptDebuggerDynamic(QObject* frontend, QWidget *parent = nullptr, Qt::WindowFlags flags = {})
{
pNewJSScriptDebugger myNewJSScriptDebugger = (pNewJSScriptDebugger)QLibrary::resolve("V4ScriptDebugger", "newJSScriptDebugger");
if (myNewJSScriptDebugger)
return myNewJSScriptDebugger(frontend, parent, flags);
return NULL;
}
#endif