mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 18:44:00 +02:00
possible fix to windows assert
This commit is contained in:
parent
d4c36acd7d
commit
42ddc82ac4
7 changed files with 74 additions and 37 deletions
|
@ -4240,6 +4240,11 @@ void Application::removeScriptName(const QString& fileNameString) {
|
|||
_activeScripts.removeOne(fileNameString);
|
||||
}
|
||||
|
||||
void Application::cleanupScriptMenuItem(const QString& scriptMenuName) {
|
||||
Menu::getInstance()->removeAction(Menu::getInstance()->getActiveScriptsMenu(), scriptMenuName);
|
||||
}
|
||||
|
||||
|
||||
void Application::loadScript(const QString& fileNameString) {
|
||||
_activeScripts.append(fileNameString);
|
||||
QByteArray fileNameAscii = fileNameString.toLocal8Bit();
|
||||
|
@ -4268,9 +4273,11 @@ void Application::loadScript(const QString& fileNameString) {
|
|||
// start the script on a new thread...
|
||||
bool wantMenuItems = true; // tells the ScriptEngine object to add menu items for itself
|
||||
|
||||
ScriptEngine* scriptEngine = new ScriptEngine(script, wantMenuItems, fileName, Menu::getInstance(),
|
||||
&_controllerScriptingInterface);
|
||||
scriptEngine->setupMenuItems();
|
||||
ScriptEngine* scriptEngine = new ScriptEngine(script, wantMenuItems, fileName, &_controllerScriptingInterface);
|
||||
|
||||
// add a stop menu itm
|
||||
Menu::getInstance()->addActionToQMenuAndActionHash(Menu::getInstance()->getActiveScriptsMenu(),
|
||||
scriptEngine->getScriptMenuName(), 0, scriptEngine, SLOT(stop()));
|
||||
|
||||
// setup the packet senders and jurisdiction listeners of the script engine's scripting interfaces so
|
||||
// we can use the same ones from the application.
|
||||
|
@ -4302,6 +4309,7 @@ void Application::loadScript(const QString& fileNameString) {
|
|||
connect(scriptEngine, SIGNAL(finished(const QString&)), scriptEngine, SLOT(deleteLater()));
|
||||
connect(workerThread, SIGNAL(finished()), workerThread, SLOT(deleteLater()));
|
||||
connect(scriptEngine, SIGNAL(finished(const QString&)), this, SLOT(removeScriptName(const QString&)));
|
||||
connect(scriptEngine, SIGNAL(cleanupMenuItem(const QString&)), this, SLOT(cleanupScriptMenuItem(const QString&)));
|
||||
|
||||
// when the application is about to quit, stop our script engine so it unwinds properly
|
||||
connect(this, SIGNAL(aboutToQuit()), scriptEngine, SLOT(stop()));
|
||||
|
|
|
@ -291,6 +291,7 @@ private slots:
|
|||
void parseVersionXml();
|
||||
|
||||
void removeScriptName(const QString& fileNameString);
|
||||
void cleanupScriptMenuItem(const QString& scriptMenuName);
|
||||
|
||||
private:
|
||||
void resetCamerasOnResizeGL(Camera& camera, int width, int height);
|
||||
|
|
|
@ -679,7 +679,7 @@ void Menu::addDisabledActionAndSeparator(QMenu* destinationMenu, const QString&
|
|||
}
|
||||
|
||||
QAction* Menu::addActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString actionName,
|
||||
const QString& actionName,
|
||||
const QKeySequence& shortcut,
|
||||
const QObject* receiver,
|
||||
const char* member,
|
||||
|
@ -716,7 +716,7 @@ QAction* Menu::addActionToQMenuAndActionHash(QMenu* destinationMenu,
|
|||
}
|
||||
|
||||
QAction* Menu::addCheckableActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString actionName,
|
||||
const QString& actionName,
|
||||
const QKeySequence& shortcut,
|
||||
const bool checked,
|
||||
const QObject* receiver,
|
||||
|
@ -1509,3 +1509,31 @@ void Menu::removeMenuItem(const QString& menu, const QString& menuitem) {
|
|||
QMenuBar::repaint();
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
|
||||
void Menu::invokeAddActionToQMenuAndActionHash(QMenu* destinationMenu, const QString actionName,
|
||||
const QKeySequence& shortcut, const QObject* receiver, const char* member) {
|
||||
|
||||
qDebug() << "about to call QMetaObject::invokeMethod(this, \"addActionToQMenuAndActionHash\"...)";
|
||||
|
||||
QMetaObject::invokeMethod(this, "addActionToQMenuAndActionHash",
|
||||
Q_ARG(QMenu*, destinationMenu),
|
||||
Q_ARG(const QString&, actionName),
|
||||
Q_ARG(const QKeySequence&, shortcut),
|
||||
Q_ARG(const QObject*, receiver),
|
||||
Q_ARG(const char*, member)
|
||||
);
|
||||
}
|
||||
|
||||
void Menu::invokeRemoveAction(QMenu* menu, const QString& actionName) {
|
||||
|
||||
qDebug() << "about to call QMetaObject::invokeMethod(this, \"removeAction\"...)";
|
||||
|
||||
QMetaObject::invokeMethod(this, "removeAction",
|
||||
Q_ARG(QMenu*, menu),
|
||||
Q_ARG(const QString&, actionName)
|
||||
);
|
||||
}
|
||||
|
||||
**/
|
||||
|
|
|
@ -57,7 +57,7 @@ class MetavoxelEditor;
|
|||
class VoxelStatsDialog;
|
||||
class MenuItemProperties;
|
||||
|
||||
class Menu : public QMenuBar, public AbstractMenuInterface {
|
||||
class Menu : public QMenuBar /*, public AbstractMenuInterface*/ {
|
||||
Q_OBJECT
|
||||
public:
|
||||
static Menu* getInstance();
|
||||
|
@ -92,20 +92,32 @@ public:
|
|||
// User Tweakable PPS from Voxel Server
|
||||
int getMaxVoxelPacketsPerSecond() const { return _maxVoxelPacketsPerSecond; }
|
||||
|
||||
virtual QMenu* getActiveScriptsMenu() { return _activeScriptsMenu;}
|
||||
virtual QAction* addActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
bool goToDestination(QString destination);
|
||||
void goToOrientation(QString orientation);
|
||||
void goToDomain(const QString newDomain);
|
||||
|
||||
QMenu* getActiveScriptsMenu() { return _activeScriptsMenu;}
|
||||
|
||||
/**
|
||||
virtual void invokeAddActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString actionName,
|
||||
const QKeySequence& shortcut = 0,
|
||||
const QObject* receiver = NULL,
|
||||
const char* member = NULL);
|
||||
virtual void invokeRemoveAction(QMenu* menu, const QString& actionName);
|
||||
**/
|
||||
|
||||
public slots:
|
||||
QAction* addActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString& actionName,
|
||||
const QKeySequence& shortcut = 0,
|
||||
const QObject* receiver = NULL,
|
||||
const char* member = NULL,
|
||||
QAction::MenuRole role = QAction::NoRole,
|
||||
int menuItemLocation = UNSPECIFIED_POSITION);
|
||||
virtual void removeAction(QMenu* menu, const QString& actionName);
|
||||
bool goToDestination(QString destination);
|
||||
void goToOrientation(QString orientation);
|
||||
void goToDomain(const QString newDomain);
|
||||
|
||||
public slots:
|
||||
void removeAction(QMenu* menu, const QString& actionName);
|
||||
|
||||
void loginForCurrentDomain();
|
||||
void bandwidthDetails();
|
||||
void voxelStatsDetails();
|
||||
|
@ -156,7 +168,7 @@ private:
|
|||
void addDisabledActionAndSeparator(QMenu* destinationMenu, const QString& actionName);
|
||||
|
||||
QAction* addCheckableActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString actionName,
|
||||
const QString& actionName,
|
||||
const QKeySequence& shortcut = 0,
|
||||
const bool checked = false,
|
||||
const QObject* receiver = NULL,
|
||||
|
|
|
@ -42,7 +42,6 @@ static QScriptValue soundConstructor(QScriptContext* context, QScriptEngine* eng
|
|||
|
||||
|
||||
ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, const QString& fileNameString,
|
||||
AbstractMenuInterface* menu,
|
||||
AbstractControllerScriptingInterface* controllerScriptingInterface) :
|
||||
_isAvatar(false),
|
||||
_avatarIdentityTimer(NULL),
|
||||
|
@ -69,7 +68,6 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co
|
|||
_scriptMenuName.append(_scriptNumber);
|
||||
}
|
||||
_scriptNumber++;
|
||||
_menu = menu;
|
||||
_controllerScriptingInterface = controllerScriptingInterface;
|
||||
}
|
||||
|
||||
|
@ -105,16 +103,9 @@ void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectNa
|
|||
registerGlobalObject(objectName, _avatarData);
|
||||
}
|
||||
|
||||
|
||||
void ScriptEngine::setupMenuItems() {
|
||||
if (_menu && _wantMenuItems) {
|
||||
_menu->addActionToQMenuAndActionHash(_menu->getActiveScriptsMenu(), _scriptMenuName, 0, this, SLOT(stop()));
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptEngine::cleanMenuItems() {
|
||||
if (_menu && _wantMenuItems) {
|
||||
_menu->removeAction(_menu->getActiveScriptsMenu(), _scriptMenuName);
|
||||
void ScriptEngine::cleanupMenuItems() {
|
||||
if (_wantMenuItems) {
|
||||
emit cleanupMenuItem(_scriptMenuName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +163,6 @@ void ScriptEngine::init() {
|
|||
_voxelsScriptingInterface.getVoxelPacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
||||
_particlesScriptingInterface.getParticlePacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
||||
|
||||
//qDebug() << "Script:\n" << _scriptContents << "\n";
|
||||
}
|
||||
|
||||
void ScriptEngine::registerGlobalObject(const QString& name, QObject* object) {
|
||||
|
@ -301,7 +291,7 @@ void ScriptEngine::run() {
|
|||
}
|
||||
}
|
||||
|
||||
cleanMenuItems();
|
||||
cleanupMenuItems();
|
||||
|
||||
// If we were on a thread, then wait till it's done
|
||||
if (thread()) {
|
||||
|
|
|
@ -33,7 +33,7 @@ class ScriptEngine : public QObject {
|
|||
Q_OBJECT
|
||||
public:
|
||||
ScriptEngine(const QString& scriptContents = NO_SCRIPT, bool wantMenuItems = false,
|
||||
const QString& scriptMenuName = QString(""), AbstractMenuInterface* menu = NULL,
|
||||
const QString& scriptMenuName = QString(""),
|
||||
AbstractControllerScriptingInterface* controllerScriptingInterface = NULL);
|
||||
|
||||
~ScriptEngine();
|
||||
|
@ -47,8 +47,8 @@ public:
|
|||
/// sets the script contents, will return false if failed, will fail if script is already running
|
||||
bool setScriptContents(const QString& scriptContents);
|
||||
|
||||
void setupMenuItems();
|
||||
void cleanMenuItems();
|
||||
const QString& getScriptMenuName() const { return _scriptMenuName; }
|
||||
void cleanupMenuItems();
|
||||
|
||||
void registerGlobalObject(const QString& name, QObject* object); /// registers a global object by name
|
||||
|
||||
|
@ -76,6 +76,7 @@ signals:
|
|||
void willSendVisualDataCallback();
|
||||
void scriptEnding();
|
||||
void finished(const QString& fileNameString);
|
||||
void cleanupMenuItem(const QString& menuItemString);
|
||||
|
||||
protected:
|
||||
QString _scriptContents;
|
||||
|
@ -103,7 +104,6 @@ private:
|
|||
bool _wantMenuItems;
|
||||
QString _scriptMenuName;
|
||||
QString _fileNameString;
|
||||
AbstractMenuInterface* _menu;
|
||||
static int _scriptNumber;
|
||||
Quat _quatLibrary;
|
||||
Vec3 _vec3Library;
|
||||
|
|
|
@ -20,14 +20,12 @@ class QKeySequence;
|
|||
class AbstractMenuInterface {
|
||||
public:
|
||||
virtual QMenu* getActiveScriptsMenu() = 0;
|
||||
virtual QAction* addActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
virtual void invokeAddActionToQMenuAndActionHash(QMenu* destinationMenu,
|
||||
const QString actionName,
|
||||
const QKeySequence& shortcut = 0,
|
||||
const QObject* receiver = NULL,
|
||||
const char* member = NULL,
|
||||
QAction::MenuRole role = QAction::NoRole,
|
||||
int menuItemLocation = -1) = 0;
|
||||
virtual void removeAction(QMenu* menu, const QString& actionName) = 0;
|
||||
const char* member = NULL) = 0;
|
||||
virtual void invokeRemoveAction(QMenu* menu, const QString& actionName) = 0;
|
||||
};
|
||||
|
||||
#endif /* defined(__hifi__AbstractMenuInterface__) */
|
||||
|
|
Loading…
Reference in a new issue