| 1 | // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. |
| 2 | // |
| 3 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 4 | |
| 5 | #include "menumanager.h" |
| 6 | #include "debugmanager.h" |
| 7 | #include "debuggersignals.h" |
| 8 | #include "debuggerglobals.h" |
| 9 | #include "base/abstractmenu.h" |
| 10 | #include "common/common.h" |
| 11 | #include "services/window/windowservice.h" |
| 12 | |
| 13 | #include <QMenu> |
| 14 | |
| 15 | using namespace dpfservice; |
| 16 | MenuManager::(QObject *parent) : QObject(parent) |
| 17 | { |
| 18 | } |
| 19 | |
| 20 | void MenuManager::(WindowService *windowService) |
| 21 | { |
| 22 | if (!windowService) |
| 23 | return; |
| 24 | |
| 25 | startDebugging.reset(new QAction(MWMDA_START_DEBUG)); |
| 26 | ActionManager::getInstance()->registerAction(startDebugging.get(), "Debug.Start.Debugging" , |
| 27 | MWMDA_START_DEBUG, QKeySequence(Qt::Key::Key_F5), |
| 28 | ":/resource/images/debugger_start.png" ); |
| 29 | connect(startDebugging.get(), &QAction::triggered, debugManager, &DebugManager::run); |
| 30 | AbstractAction *actionImpl = new AbstractAction(startDebugging.get()); |
| 31 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 32 | windowService->addToolBarActionItem("Start Debugging" , startDebugging.get(), "Debug" ); |
| 33 | windowService->addToolBarActionItem("Debugger.Start" , startDebugging.get(), "Debug" ); |
| 34 | |
| 35 | #if 0 // not used yet. |
| 36 | detachDebugger.reset(new QAction("Detach Debugger" )); |
| 37 | connect(detachDebugger.get(), &QAction::triggered, debugManager, &DebugManager::detachDebug); |
| 38 | actionImpl = new AbstractAction(detachDebugger.get()); |
| 39 | windowService->addAction(QString::fromStdString(MENU_DEBUG), actionImpl); |
| 40 | #endif |
| 41 | |
| 42 | interrupt.reset(new QAction(MWMDA_INTERRUPT)); |
| 43 | ActionManager::getInstance()->registerAction(interrupt.get(), "Debug.Interrupt" , |
| 44 | MWMDA_INTERRUPT, QKeySequence(Qt::Key::Key_F5), |
| 45 | ":/resource/images/debugger_interrupt.png" ); |
| 46 | interrupt->setEnabled(false); |
| 47 | connect(interrupt.get(), &QAction::triggered, debugManager, &DebugManager::interruptDebug); |
| 48 | actionImpl = new AbstractAction(interrupt.get()); |
| 49 | interrupt->setEnabled(false); |
| 50 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 51 | |
| 52 | continueDebugging.reset(new QAction(MWMDA_CONTINUE)); |
| 53 | ActionManager::getInstance()->registerAction(continueDebugging.get(), "Debug.Continue" , |
| 54 | MWMDA_CONTINUE, QKeySequence(Qt::Key::Key_F5), |
| 55 | ":/resource/images/debugger_continue.png" ); |
| 56 | continueDebugging->setEnabled(false); |
| 57 | connect(continueDebugging.get(), &QAction::triggered, debugManager, &DebugManager::continueDebug); |
| 58 | actionImpl = new AbstractAction(continueDebugging.get()); |
| 59 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 60 | windowService->addToolBarActionItem("Debugger.Continue" , continueDebugging.get(), "Debug" ); |
| 61 | |
| 62 | abortDebugging.reset(new QAction(MWMDA_ABORT_DEBUGGING)); |
| 63 | ActionManager::getInstance()->registerAction(abortDebugging.get(), "Debug.Abort.Debugging" , |
| 64 | MWMDA_ABORT_DEBUGGING, QKeySequence(Qt::Modifier::ALT | Qt::Key::Key_Backspace), |
| 65 | ":/resource/images/debugger_stop.png" ); |
| 66 | abortDebugging->setEnabled(false); |
| 67 | connect(abortDebugging.get(), &QAction::triggered, debugManager, &DebugManager::abortDebug); |
| 68 | actionImpl = new AbstractAction(abortDebugging.get()); |
| 69 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 70 | windowService->addToolBarActionItem("abort_debug" , abortDebugging.get(), "Debug" ); |
| 71 | windowService->addToolBarActionItem("Debugger.Stop" , abortDebugging.get(), "Debug" ); |
| 72 | |
| 73 | restartDebugging.reset(new QAction(MWMDA_RESTART_DEBUGGING)); |
| 74 | ActionManager::getInstance()->registerAction(restartDebugging.get(), "Debug.Restart.Debugging" , |
| 75 | MWMDA_RESTART_DEBUGGING, QKeySequence(Qt::Modifier::CTRL | Qt::Key::Key_B), |
| 76 | ":/resource/images/restart_debug.png" ); |
| 77 | restartDebugging->setEnabled(false); |
| 78 | connect(restartDebugging.get(), &QAction::triggered, debugManager, &DebugManager::restartDebug); |
| 79 | actionImpl = new AbstractAction(restartDebugging.get()); |
| 80 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 81 | |
| 82 | stepOver.reset(new QAction(MWMDA_STEP_OVER)); |
| 83 | ActionManager::getInstance()->registerAction(stepOver.get(), "Debug.Step.Over" , |
| 84 | MWMDA_STEP_OVER, QKeySequence(Qt::Key::Key_F10), |
| 85 | ":/resource/images/debugger_stepover.png" ); |
| 86 | stepOver->setEnabled(false); |
| 87 | connect(stepOver.get(), &QAction::triggered, debugManager, &DebugManager::stepOver); |
| 88 | actionImpl = new AbstractAction(stepOver.get()); |
| 89 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 90 | windowService->addToolBarActionItem("Step.Over" , stepOver.get(), "Debug" ); |
| 91 | |
| 92 | stepIn.reset(new QAction(MWMDA_STEP_IN)); |
| 93 | ActionManager::getInstance()->registerAction(stepIn.get(), "Debug.Step.In" , |
| 94 | MWMDA_STEP_IN, QKeySequence(Qt::Key::Key_F11), |
| 95 | ":/resource/images/debugger_stepinto.png" ); |
| 96 | stepIn->setEnabled(false); |
| 97 | connect(stepIn.get(), &QAction::triggered, debugManager, &DebugManager::stepIn); |
| 98 | actionImpl = new AbstractAction(stepIn.get()); |
| 99 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 100 | windowService->addToolBarActionItem("Step.In" , stepIn.get(), "Debug" ); |
| 101 | |
| 102 | stepOut.reset(new QAction(MWMDA_STEP_OUT)); |
| 103 | ActionManager::getInstance()->registerAction(stepOut.get(), "Debug.Step.Out" , |
| 104 | MWMDA_STEP_OUT, QKeySequence(Qt::Modifier::SHIFT | Qt::Key::Key_F11), |
| 105 | ":/resource/images/debugger_stepout.png" ); |
| 106 | stepOut->setEnabled(false); |
| 107 | connect(stepOut.get(), &QAction::triggered, debugManager, &DebugManager::stepOut); |
| 108 | actionImpl = new AbstractAction(stepOut.get()); |
| 109 | windowService->addAction(MWM_DEBUG, actionImpl); |
| 110 | windowService->addToolBarActionItem("Step.Out" , stepOut.get(), "Debug.End" ); |
| 111 | } |
| 112 | |
| 113 | void MenuManager::handleRunStateChanged(AbstractDebugger::RunState state) |
| 114 | { |
| 115 | switch (state) { |
| 116 | case AbstractDebugger::kNoRun: |
| 117 | case AbstractDebugger::kPreparing: |
| 118 | case AbstractDebugger::kStart: |
| 119 | startDebugging->setEnabled(true); |
| 120 | #if 0 // not used yet. |
| 121 | detachDebugger->setEnabled(true); |
| 122 | #endif |
| 123 | interrupt->setEnabled(false); |
| 124 | continueDebugging->setEnabled(false); |
| 125 | abortDebugging->setEnabled(false); |
| 126 | restartDebugging->setEnabled(false); |
| 127 | stepOver->setEnabled(false); |
| 128 | stepIn->setEnabled(false); |
| 129 | stepOut->setEnabled(false); |
| 130 | break; |
| 131 | |
| 132 | case AbstractDebugger::kRunning: |
| 133 | startDebugging->setEnabled(false); |
| 134 | #if 0 // not used yet. |
| 135 | detachDebugger->setEnabled(false); |
| 136 | #endif |
| 137 | interrupt->setEnabled(true); |
| 138 | continueDebugging->setEnabled(false); |
| 139 | abortDebugging->setEnabled(true); |
| 140 | restartDebugging->setEnabled(true); |
| 141 | stepOver->setEnabled(false); |
| 142 | stepIn->setEnabled(false); |
| 143 | stepOut->setEnabled(false); |
| 144 | break; |
| 145 | case AbstractDebugger::kStopped: |
| 146 | startDebugging->setEnabled(false); |
| 147 | #if 0 // not used yet. |
| 148 | detachDebugger->setEnabled(false); |
| 149 | #endif |
| 150 | interrupt->setEnabled(false); |
| 151 | continueDebugging->setEnabled(true); |
| 152 | abortDebugging->setEnabled(true); |
| 153 | restartDebugging->setEnabled(true); |
| 154 | stepOver->setEnabled(true); |
| 155 | stepIn->setEnabled(true); |
| 156 | stepOut->setEnabled(true); |
| 157 | break; |
| 158 | case AbstractDebugger::kCustomRunning: |
| 159 | startDebugging->setEnabled(false); |
| 160 | interrupt->setEnabled(false); |
| 161 | continueDebugging->setEnabled(false); |
| 162 | abortDebugging->setEnabled(true); |
| 163 | restartDebugging->setEnabled(false); |
| 164 | stepOver->setEnabled(false); |
| 165 | stepIn->setEnabled(false); |
| 166 | stepOut->setEnabled(false); |
| 167 | break; |
| 168 | |
| 169 | default: |
| 170 | // do nothing. |
| 171 | break; |
| 172 | } |
| 173 | } |
| 174 | |