Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 1 file). Show all
Unified · Split
| @@ -177,19 +177,51 @@ void ScriptEngine::disconnectNonEssentialSignals() { · 176 unmodified lines | |||
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | void ScriptEngine::runDebuggable() { | 179 | void ScriptEngine::runDebuggable() { |
| 180 | static QMenuBar* menuBar { nullptr }; | ||
| 181 | static QMenu* scriptDebugMenu { nullptr }; | ||
| 182 | static size_t scriptMenuCount { 0 }; | ||
| 183 | if (!scriptDebugMenu) { | ||
| 184 | for (auto window : qApp->topLevelWidgets()) { | ||
| 185 | auto mainWindow = qobject_cast<QMainWindow*>(window); | ||
| 186 | if (mainWindow) { | ||
| 187 | menuBar = mainWindow->menuBar(); | ||
| 188 | break; | ||
| 189 | } | ||
| 190 | } | ||
| 191 | if (menuBar) { | ||
| 192 | scriptDebugMenu = menuBar->addMenu("Script Debug"); | ||
| 193 | } | ||
| 194 | } | ||
| 195 | |||
| 180 | init(); | 196 | init(); |
| 181 | _isRunning = true; | 197 | _isRunning = true; |
| 182 | _debuggable = true; | 198 | _debuggable = true; |
| 183 | _debugger = new QScriptEngineDebugger(this); | 199 | _debugger = new QScriptEngineDebugger(this); |
| 184 | _debugger->attachTo(this); | 200 | _debugger->attachTo(this); |
| 185 | static QMenu* scriptDebugMenu = qobject_cast<QMainWindow*>(qApp->activeWindow())->menuBar()->addMenu("Script Debug"); | 201 | |
| 186 | scriptDebugMenu->addMenu(_fileNameString)->addMenu(_debugger->createStandardMenu(qApp->activeWindow())); | 202 | QMenu* parentMenu = scriptDebugMenu; |
| 187 | _debugger->action(QScriptEngineDebugger::InterruptAction)->trigger(); | 203 | QMenu* scriptMenu { nullptr }; |
| 204 | if (parentMenu) { | ||
| 205 | ++scriptMenuCount; | ||
| 206 | scriptMenu = parentMenu->addMenu(_fileNameString); | ||
| 207 | scriptMenu->addMenu(_debugger->createStandardMenu(qApp->activeWindow())); | ||
| 208 | } else { | ||
| 209 | qWarning() << "Unable to add script debug menu"; | ||
| 210 | } | ||
| 211 | |||
| 188 | QScriptValue result = evaluate(_scriptContents, _fileNameString); | 212 | QScriptValue result = evaluate(_scriptContents, _fileNameString); |
| 189 | 213 | ||
| 190 | _lastUpdate = usecTimestampNow(); | 214 | _lastUpdate = usecTimestampNow(); |
| 191 | QTimer* timer = new QTimer(this); | 215 | QTimer* timer = new QTimer(this); |
| 192 | connect(this, &ScriptEngine::finished, [this, timer] { | 216 | connect(this, &ScriptEngine::finished, [this, timer, parentMenu, scriptMenu] { |
| 217 | if (scriptMenu) { | ||
| 218 | parentMenu->removeAction(scriptMenu->menuAction()); | ||
| 219 | --scriptMenuCount; | ||
| 220 | if (0 == scriptMenuCount) { | ||
| 221 | menuBar->removeAction(scriptDebugMenu->menuAction()); | ||
| 222 | scriptDebugMenu = nullptr; | ||
| 223 | } | ||
| 224 | } | ||
| 193 | disconnect(timer); | 225 | disconnect(timer); |
| 194 | }); | 226 | }); |
| 195 | 227 | ||