Changeset View
Changeset View
Standalone View
Standalone View
src/debuggermanager.cpp
Show All 21 Lines | |||||
22 | #include "debuggerlaunchers.h" | 22 | #include "debuggerlaunchers.h" | ||
23 | #include "backtracegenerator.h" | 23 | #include "backtracegenerator.h" | ||
24 | 24 | | |||
25 | struct DebuggerManager::Private | 25 | struct DebuggerManager::Private | ||
26 | { | 26 | { | ||
27 | BacktraceGenerator *btGenerator; | 27 | BacktraceGenerator *btGenerator; | ||
28 | bool debuggerRunning; | 28 | bool debuggerRunning; | ||
29 | QList<AbstractDebuggerLauncher*> externalDebuggers; | 29 | QList<AbstractDebuggerLauncher*> externalDebuggers; | ||
30 | DBusOldInterfaceLauncher *dbusOldInterfaceLauncher; | 30 | DBusInterfaceAdaptor *dbusInterfaceAdaptor; | ||
31 | }; | 31 | }; | ||
32 | 32 | | |||
33 | DebuggerManager::DebuggerManager(const Debugger & internalDebugger, | 33 | DebuggerManager::DebuggerManager(const Debugger & internalDebugger, | ||
34 | const QList<Debugger> & externalDebuggers, | 34 | const QList<Debugger> & externalDebuggers, | ||
35 | QObject *parent) | 35 | QObject *parent) | ||
36 | : QObject(parent), d(new Private) | 36 | : QObject(parent), d(new Private) | ||
37 | { | 37 | { | ||
38 | d->debuggerRunning = false; | 38 | d->debuggerRunning = false; | ||
39 | d->btGenerator = new BacktraceGenerator(internalDebugger, this); | 39 | d->btGenerator = new BacktraceGenerator(internalDebugger, this); | ||
40 | connect(d->btGenerator, &BacktraceGenerator::starting, this, &DebuggerManager::onDebuggerStarting); | 40 | connect(d->btGenerator, &BacktraceGenerator::starting, this, &DebuggerManager::onDebuggerStarting); | ||
41 | connect(d->btGenerator, &BacktraceGenerator::done, this, &DebuggerManager::onDebuggerFinished); | 41 | connect(d->btGenerator, &BacktraceGenerator::done, this, &DebuggerManager::onDebuggerFinished); | ||
42 | connect(d->btGenerator, &BacktraceGenerator::someError, this, &DebuggerManager::onDebuggerFinished); | 42 | connect(d->btGenerator, &BacktraceGenerator::someError, this, &DebuggerManager::onDebuggerFinished); | ||
43 | connect(d->btGenerator, &BacktraceGenerator::failedToStart, this, &DebuggerManager::onDebuggerFinished); | 43 | connect(d->btGenerator, &BacktraceGenerator::failedToStart, this, &DebuggerManager::onDebuggerFinished); | ||
44 | 44 | | |||
45 | foreach(const Debugger & debugger, externalDebuggers) { | 45 | foreach(const Debugger & debugger, externalDebuggers) { | ||
46 | if (debugger.isInstalled()) { | 46 | if (debugger.isInstalled()) { | ||
47 | AbstractDebuggerLauncher *l = new DefaultDebuggerLauncher(debugger, this); //FIXME | 47 | // TODO: use TerminalDebuggerLauncher instead | ||
48 | d->externalDebuggers.append(l); | 48 | addDebugger(new DefaultDebuggerLauncher(debugger, this)); | ||
49 | connect(l, &AbstractDebuggerLauncher::starting, this, &DebuggerManager::onDebuggerStarting); | | |||
50 | connect(l, &AbstractDebuggerLauncher::finished, this, &DebuggerManager::onDebuggerFinished); | | |||
51 | connect(l, &AbstractDebuggerLauncher::invalidated, this, &DebuggerManager::onDebuggerInvalidated); | | |||
52 | } | 49 | } | ||
53 | } | 50 | } | ||
54 | 51 | | |||
55 | //setup kdevelop compatibility | 52 | //setup kdevelop compatibility | ||
56 | d->dbusOldInterfaceLauncher = new DBusOldInterfaceLauncher(this); | 53 | d->dbusInterfaceAdaptor = new DBusInterfaceAdaptor(this); | ||
57 | connect(d->dbusOldInterfaceLauncher, &DBusOldInterfaceLauncher::starting, this, &DebuggerManager::onDebuggerStarting); | | |||
58 | connect(d->dbusOldInterfaceLauncher, &DBusOldInterfaceLauncher::available, this, &DebuggerManager::onDBusOldInterfaceDebuggerAvailable); | | |||
59 | } | 54 | } | ||
60 | 55 | | |||
61 | DebuggerManager::~DebuggerManager() | 56 | DebuggerManager::~DebuggerManager() | ||
62 | { | 57 | { | ||
63 | if (d->btGenerator->state() == BacktraceGenerator::Loading) { | 58 | if (d->btGenerator->state() == BacktraceGenerator::Loading) { | ||
64 | //if the debugger is running, kill it and continue the process. | 59 | //if the debugger is running, kill it and continue the process. | ||
65 | delete d->btGenerator; | 60 | delete d->btGenerator; | ||
66 | onDebuggerFinished(); | 61 | onDebuggerFinished(); | ||
Show All 18 Lines | 79 | { | |||
85 | return d->externalDebuggers; | 80 | return d->externalDebuggers; | ||
86 | } | 81 | } | ||
87 | 82 | | |||
88 | BacktraceGenerator* DebuggerManager::backtraceGenerator() const | 83 | BacktraceGenerator* DebuggerManager::backtraceGenerator() const | ||
89 | { | 84 | { | ||
90 | return d->btGenerator; | 85 | return d->btGenerator; | ||
91 | } | 86 | } | ||
92 | 87 | | |||
88 | void DebuggerManager::addDebugger(AbstractDebuggerLauncher *launcher, bool emitsignal) | ||||
89 | { | ||||
90 | d->externalDebuggers.append(launcher); | ||||
91 | connect(launcher, &DBusInterfaceLauncher::starting, this, &DebuggerManager::onDebuggerStarting); | ||||
92 | connect(launcher, &DBusInterfaceLauncher::finished, this, &DebuggerManager::onDebuggerFinished); | ||||
93 | connect(launcher, &AbstractDebuggerLauncher::invalidated, this, &DebuggerManager::onDebuggerInvalidated); | ||||
94 | if (emitsignal) { | ||||
95 | emit externalDebuggerAdded(launcher); | ||||
96 | } | ||||
97 | } | ||||
98 | | ||||
93 | void DebuggerManager::onDebuggerStarting() | 99 | void DebuggerManager::onDebuggerStarting() | ||
94 | { | 100 | { | ||
95 | d->debuggerRunning = true; | 101 | d->debuggerRunning = true; | ||
96 | emit debuggerStarting(); | 102 | emit debuggerStarting(); | ||
97 | emit debuggerRunning(true); | 103 | emit debuggerRunning(true); | ||
98 | } | 104 | } | ||
99 | 105 | | |||
100 | void DebuggerManager::onDebuggerFinished() | 106 | void DebuggerManager::onDebuggerFinished() | ||
101 | { | 107 | { | ||
102 | d->debuggerRunning = false; | 108 | d->debuggerRunning = false; | ||
103 | emit debuggerFinished(); | 109 | emit debuggerFinished(); | ||
104 | emit debuggerRunning(false); | 110 | emit debuggerRunning(false); | ||
105 | } | 111 | } | ||
106 | 112 | | |||
107 | void DebuggerManager::onDebuggerInvalidated() | 113 | void DebuggerManager::onDebuggerInvalidated() | ||
108 | { | 114 | { | ||
109 | AbstractDebuggerLauncher *launcher = qobject_cast<AbstractDebuggerLauncher*>(sender()); | 115 | AbstractDebuggerLauncher *launcher = qobject_cast<AbstractDebuggerLauncher*>(sender()); | ||
110 | Q_ASSERT(launcher); | 116 | Q_ASSERT(launcher); | ||
111 | int index = d->externalDebuggers.indexOf(launcher); | 117 | int index = d->externalDebuggers.indexOf(launcher); | ||
112 | Q_ASSERT(index >= 0); | 118 | Q_ASSERT(index >= 0); | ||
113 | d->externalDebuggers.removeAt(index); | 119 | d->externalDebuggers.removeAt(index); | ||
114 | emit externalDebuggerRemoved(launcher); | 120 | emit externalDebuggerRemoved(launcher); | ||
115 | } | 121 | } | ||
116 | | ||||
117 | void DebuggerManager::onDBusOldInterfaceDebuggerAvailable() | | |||
118 | { | | |||
119 | d->externalDebuggers.append(d->dbusOldInterfaceLauncher); | | |||
120 | emit externalDebuggerAdded(d->dbusOldInterfaceLauncher); | | |||
121 | } | | |||
122 | | ||||
123 | |