void CodeEditor::lineNumberAreaMousePressEvent(QMouseEvent *event) { if (hasBreakpoints) { //if mouse click has been made - add breakpoint //counting line number int lineNumber = 0; int sumHeight = 0; QTextBlock block = firstVisibleBlock(); while (block.isValid() && event->y() > sumHeight) { sumHeight += blockBoundingGeometry(block).height(); block = block.next(); lineNumber++; } lineNumber += verticalScrollBar()->value(); //+ invisible lines if (lineNumber <= document()->lineCount()) { //blocks counting starts with 0 lineNumber = document()->findBlockByLineNumber(lineNumber - 1).blockNumber() + 1; //line number to paint //add or remove line number in list if (breakpoints.contains(lineNumber)) { breakpoints.removeOne(lineNumber); emit breakpointsChanged(lineNumber, false); } else { breakpoints.append(lineNumber); emit breakpointsChanged(lineNumber, true); } repaintLineNumberArea(); } } }
void ExecutionVisualizerDockWidget::showEvent(QShowEvent* /*event*/) { QObject* emulator = CObjectRegistry::getObject("Emulator"); QDockWidget* breakpointInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Breakpoints")); QDockWidget* codeBrowser = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Assembly Browser")); QObject::connect(codeBrowser,SIGNAL(breakpointsChanged()),pThread,SLOT(updateDebuggers())); QObject::connect(breakpointInspector,SIGNAL(breakpointsChanged()),pThread,SLOT(updateDebuggers())); QObject::connect(emulator,SIGNAL(updateDebuggers()),pThread,SLOT(updateDebuggers())); pThread->updateDebuggers(); }
void BreakpointDockWidget::updateTargetMachine(QString /*target*/) { QObject* breakpointWatcher = CObjectRegistry::getObject("Breakpoint Watcher"); QObject* emulator = CObjectRegistry::getObject("Emulator"); QObject::connect(breakpointWatcher,SIGNAL(breakpointHit()),this,SLOT(updateData()) ); QObject::connect(breakpointWatcher,SIGNAL(breakpointHit()),model,SLOT(update())); if ( emulator ) { QObject::connect(emulator,SIGNAL(machineReady()),model,SLOT(update())); QObject::connect(emulator,SIGNAL(emulatorReset()),model,SLOT(update())); QObject::connect(emulator,SIGNAL(emulatorPaused(bool)),model,SLOT(update())); QObject::connect(emulator,SIGNAL(emulatorStarted()),model,SLOT(update())); QObject::connect(this,SIGNAL(breakpointsChanged()),emulator,SLOT(breakpointsChanged())); } }
void ProjectManager::removeBreakpoints(std::vector<qint64> const& breakpoints) { for(qint64 const breakpoint : breakpoints) { this->breakpoints.erase(breakpoint); } saved = false; emit breakpointsChanged(); }
void ProjectManager::addBreakpoints(std::vector<qint64> const& breakpoints) { for(qint64 const& breakpoint : breakpoints) { this->breakpoints.insert(breakpoint); } saved = false; emit breakpointsChanged(); }
void ProjectManager::setBreakpoints(std::set<qint64>&& breakpoints) { if(this->breakpoints != breakpoints) { this->breakpoints = breakpoints; saved = false; emit breakpointsChanged(); } }
void ProjectManager::replaceBreakpoint(qint64 const oldPosition, qint64 const newPosition) { if(oldPosition != newPosition) { removeBreakpoint(oldPosition); addBreakpoint(newPosition); saved = false; emit breakpointsChanged(); } }
void BreakpointDockWidget::on_actionDisable_Breakpoint_triggered() { if ( ui->tableView->currentIndex().row() < m_pBreakpoints->GetNumBreakpoints() ) { m_pBreakpoints->SetEnabled(ui->tableView->currentIndex().row(), false); emit breakpointsChanged(); emit markProjectDirty(true); } }
void BreakpointDockWidget::on_actionDisable_All_Breakpoints_triggered() { int bp; for ( bp = 0; bp < m_pBreakpoints->GetNumBreakpoints(); bp++ ) { m_pBreakpoints->SetEnabled(bp,false); } emit breakpointsChanged(); emit markProjectDirty(true); }
void CodeEditor::setBreakpointOnCurrentLine() { if (hasBreakpoints) { int lineNumber = textCursor().blockNumber() + 1; if (lineNumber <= document()->lineCount()) { //blocks counting starts with 0 lineNumber = document()->findBlockByLineNumber(lineNumber - 1).blockNumber() + 1; //line number to paint //add or remove line number in list if (breakpoints.contains(lineNumber)) { breakpoints.removeOne(lineNumber); emit breakpointsChanged(lineNumber, false); } else { breakpoints.append(lineNumber); emit breakpointsChanged(lineNumber, true); } repaintLineNumberArea(); } } }
void ExecutionVisualizerDockWidget::keyPressEvent(QKeyEvent */*event*/) { CMarker* pMarkers = nesGetExecutionMarkerDatabase(); if ( ui->tableView->currentIndex().isValid() ) { pMarkers->RemoveMarker(ui->tableView->currentIndex().row()); pThread->updateDebuggers(); emit breakpointsChanged(); } }
void BreakpointDockWidget::dropEvent(QDropEvent *event) { QString text; int addr; int bpIdx; if ( event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist") ) { QStandardItemModel model; model.dropMimeData(event->mimeData(), Qt::CopyAction, 0,0, QModelIndex()); text = model.item(0,0)->data(Qt::DisplayRole).toString(); event->acceptProposedAction(); } else if ( event->mimeData()->hasText() ) { text = event->mimeData()->text(); event->acceptProposedAction(); } if ( event->isAccepted() ) { addr = CCC65Interface::getSymbolAddress(text); if ( addr != 0xFFFFFFFF ) { bpIdx = m_pBreakpoints->AddBreakpoint ( eBreakOnCPUMemoryAccess, eBreakpointItemAddress, 0, addr, addr, addr, 0xFFFF, false, eBreakpointConditionTest, eBreakIfAnything, eBreakpointDataPure, 0, true ); if ( bpIdx < 0 ) { QString str; str.sprintf("Cannot add breakpoint, maximum of %d already used.", NUM_BREAKPOINTS); QMessageBox::information(0, "Error", str); } emit breakpointsChanged(); emit markProjectDirty(true); } } }
void BreakpointDockWidget::on_actionAdd_Breakpoint_triggered() { int result; BreakpointDialog bd(m_pBreakpoints,-1,this); result = bd.exec(); if ( result ) { m_pBreakpoints->AddBreakpoint(bd.getBreakpoint()); emit breakpointsChanged(); emit markProjectDirty(true); } }
void ExecutionVisualizerDockWidget::on_actionRemove_Marker_triggered() { CMarker* pMarkers = nesGetExecutionMarkerDatabase(); int marker = ui->tableView->currentIndex().row(); if ( ui->tableView->currentIndex().isValid() ) { pMarkers->RemoveMarker(marker); pThread->updateDebuggers(); emit breakpointsChanged(); emit markProjectDirty(true); } }
BreakpointDockWidget::BreakpointDockWidget(CBreakpointInfo* pBreakpoints,QWidget *parent) : CDebuggerBase(parent), ui(new Ui::BreakpointDockWidget) { ui->setupUi(this); m_pBreakpoints = pBreakpoints; model = new CBreakpointDisplayModel(pBreakpoints); ui->tableView->setModel ( model ); ui->tableView->installEventFilter(this); ui->tableView->viewport()->installEventFilter(this); QObject::connect(this,SIGNAL(breakpointsChanged()),model,SLOT(update())); }
void BreakpointDockWidget::on_tableView_doubleClicked(QModelIndex index) { int result; // Check for double-click to "edit"... if ( (index.row() < m_pBreakpoints->GetNumBreakpoints()) && (index.column() > 0) ) { BreakpointDialog bd(m_pBreakpoints,index.row(),this); result = bd.exec(); if ( result ) { m_pBreakpoints->ModifyBreakpoint(index.row(), bd.getBreakpoint()); emit breakpointsChanged(); emit markProjectDirty(true); } } // Check for double-click to "add"... if ( index.row() == m_pBreakpoints->GetNumBreakpoints() ) { BreakpointDialog bd(m_pBreakpoints,-1,this); result = bd.exec(); if ( result ) { m_pBreakpoints->AddBreakpoint(bd.getBreakpoint()); emit breakpointsChanged(); emit markProjectDirty(true); } } // Check for double-click to "enable/disable"... if ( (index.row() < m_pBreakpoints->GetNumBreakpoints()) && (index.column() == 0) ) { m_pBreakpoints->ToggleEnabled(index.row()); emit breakpointsChanged(); emit markProjectDirty(true); } }
void BreakpointDockWidget::on_actionEdit_Breakpoint_triggered() { int result; if ( ui->tableView->currentIndex().row() < m_pBreakpoints->GetNumBreakpoints() ) { BreakpointDialog bd(m_pBreakpoints,ui->tableView->currentIndex().row(),this); result = bd.exec(); if ( result ) { m_pBreakpoints->ModifyBreakpoint(ui->tableView->currentIndex().row(), bd.getBreakpoint()); emit breakpointsChanged(); emit markProjectDirty(true); } } }
void BreakpointDockWidget::on_tableView_pressed(QModelIndex index) { char buffer[32]; // Check for left-click to "enable/disable"... if ( QApplication::mouseButtons()&Qt::LeftButton ) { // Emit snapTo if possible... if ( (index.row() < m_pBreakpoints->GetNumBreakpoints()) && (m_pBreakpoints->GetBreakpoint(index.row())->type == eBreakOnCPUExecution) ) { nesGetPrintableAddressWithAbsolute(buffer,m_pBreakpoints->GetBreakpoint(index.row())->item1,m_pBreakpoints->GetBreakpoint(index.row())->item1Absolute); emit snapTo(QString("Address,")+QString(buffer)); } if ( (index.row() < m_pBreakpoints->GetNumBreakpoints()) && (index.column() == 0) ) { m_pBreakpoints->ToggleEnabled(index.row()); emit breakpointsChanged(); emit markProjectDirty(true); } } }
void ProjectManager::removeBreakpoint(qint64 const breakpoint) { breakpoints.erase(breakpoint); saved = false; emit breakpointsChanged(); }
void BreakpointDockWidget::showEvent(QShowEvent*) { QDockWidget* codeBrowser = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Assembly Browser")); QDockWidget* symbolInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Symbol Inspector")); QDockWidget* memoryInspector; QObject* emulator = CObjectRegistry::getObject("Emulator"); QObject::connect(codeBrowser,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); QObject::connect(symbolInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("CPU RAM Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); if ( !nesicideProject->getProjectTarget().compare("nes",Qt::CaseInsensitive) ) { memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Cartridge EXRAM Memory Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Cartridge SRAM Memory Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("PRG-ROM Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); } if ( emulator ) { QObject::connect(codeBrowser,SIGNAL(breakpointsChanged()),emulator, SLOT(breakpointsChanged()) ); QObject::connect(symbolInspector,SIGNAL(breakpointsChanged()),model, SLOT(update()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("CPU RAM Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),emulator, SLOT(breakpointsChanged()) ); if ( !nesicideProject->getProjectTarget().compare("nes",Qt::CaseInsensitive) ) { memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Cartridge EXRAM Memory Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),emulator, SLOT(breakpointsChanged()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("Cartridge SRAM Memory Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),emulator, SLOT(breakpointsChanged()) ); memoryInspector = dynamic_cast<QDockWidget*>(CDockWidgetRegistry::getWidget("PRG-ROM Inspector")); QObject::connect(memoryInspector,SIGNAL(breakpointsChanged()),emulator, SLOT(breakpointsChanged()) ); } } model->update(); updateData(); }
DebuggerMainWnd::DebuggerMainWnd() : KXmlGuiWindow(), m_debugger(0), #ifdef GDB_TRANSCRIPT m_transcriptFile(GDB_TRANSCRIPT), #endif m_outputTermCmdStr(defaultTermCmdStr), m_outputTermProc(new QProcess), m_ttyLevel(-1), /* no tty yet */ m_popForeground(false), m_backTimeout(1000), m_tabWidth(0), m_sourceFilter(defaultSourceFilter), m_headerFilter(defaultHeaderFilter), m_animation(0), m_statusActive(i18n("active")) { setDockNestingEnabled(true); m_filesWindow = new WinStack(this); setCentralWidget(m_filesWindow); QDockWidget* dw1 = createDockWidget("Stack", i18n("Stack")); m_btWindow = new QListWidget(dw1); dw1->setWidget(m_btWindow); QDockWidget* dw2 = createDockWidget("Locals", i18n("Locals")); m_localVariables = new ExprWnd(dw2, i18n("Variable")); dw2->setWidget(m_localVariables); QDockWidget* dw3 = createDockWidget("Watches", i18n("Watches")); m_watches = new WatchWindow(dw3); dw3->setWidget(m_watches); QDockWidget* dw4 = createDockWidget("Registers", i18n("Registers")); m_registers = new RegisterView(dw4); dw4->setWidget(m_registers); QDockWidget* dw5 = createDockWidget("Breakpoints", i18n("Breakpoints")); m_bpTable = new BreakpointTable(dw5); dw5->setWidget(m_bpTable); QDockWidget* dw6 = createDockWidget("Output", i18n("Output")); m_ttyWindow = new TTYWindow(dw6); dw6->setWidget(m_ttyWindow); QDockWidget* dw7 = createDockWidget("Threads", i18n("Threads")); m_threads = new ThreadList(dw7); dw7->setWidget(m_threads); QDockWidget* dw8 = createDockWidget("Memory", i18n("Memory")); m_memoryWindow = new MemoryWindow(dw8); dw8->setWidget(m_memoryWindow); m_debugger = new KDebugger(this, m_localVariables, m_watches->watchVariables(), m_btWindow); connect(m_debugger, SIGNAL(updateStatusMessage()), SLOT(slotNewStatusMsg())); connect(m_debugger, SIGNAL(updateUI()), SLOT(updateUI())); connect(m_debugger, SIGNAL(breakpointsChanged()), SLOT(updateLineItems())); connect(m_debugger, SIGNAL(debuggerStarting()), SLOT(slotDebuggerStarting())); m_bpTable->setDebugger(m_debugger); m_memoryWindow->setDebugger(m_debugger); setStandardToolBarMenuEnabled(true); initKAction(); initStatusBar(); connect(m_watches, SIGNAL(addWatch()), SLOT(slotAddWatch())); connect(m_watches, SIGNAL(deleteWatch()), m_debugger, SLOT(slotDeleteWatch())); connect(m_watches, SIGNAL(textDropped(const QString&)), SLOT(slotAddWatch(const QString&))); connect(&m_filesWindow->m_findDlg, SIGNAL(closed()), SLOT(updateUI())); connect(m_filesWindow, SIGNAL(newFileLoaded()), SLOT(slotNewFileLoaded())); connect(m_filesWindow, SIGNAL(toggleBreak(const QString&,int,const DbgAddr&,bool)), this, SLOT(slotToggleBreak(const QString&,int,const DbgAddr&,bool))); connect(m_filesWindow, SIGNAL(enadisBreak(const QString&,int,const DbgAddr&)), this, SLOT(slotEnaDisBreak(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)), m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(executableUpdated()), m_filesWindow, SLOT(reloadAllFiles())); connect(m_debugger, SIGNAL(updatePC(const QString&,int,const DbgAddr&,int)), m_filesWindow, SLOT(updatePC(const QString&,int,const DbgAddr&,int))); // value popup communication connect(m_filesWindow, SIGNAL(initiateValuePopup(const QString&)), m_debugger, SLOT(slotValuePopup(const QString&))); connect(m_debugger, SIGNAL(valuePopup(const QString&)), m_filesWindow, SLOT(slotShowValueTip(const QString&))); // disassembling connect(m_filesWindow, SIGNAL(disassemble(const QString&, int)), m_debugger, SLOT(slotDisassemble(const QString&, int))); connect(m_debugger, SIGNAL(disassembled(const QString&,int,const std::list<DisassembledCode>&)), m_filesWindow, SLOT(slotDisassembled(const QString&,int,const std::list<DisassembledCode>&))); connect(m_filesWindow, SIGNAL(moveProgramCounter(const QString&,int,const DbgAddr&)), m_debugger, SLOT(setProgramCounter(const QString&,int,const DbgAddr&))); // program stopped connect(m_debugger, SIGNAL(programStopped()), SLOT(slotProgramStopped())); connect(&m_backTimer, SIGNAL(timeout()), SLOT(slotBackTimer())); // tab width connect(this, SIGNAL(setTabWidth(int)), m_filesWindow, SIGNAL(setTabWidth(int))); // connect breakpoint table connect(m_bpTable, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)), m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&))); connect(m_debugger, SIGNAL(updateUI()), m_bpTable, SLOT(updateUI())); connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateBreakList())); connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateUI())); connect(m_debugger, SIGNAL(registersChanged(const std::list<RegisterInfo>&)), m_registers, SLOT(updateRegisters(const std::list<RegisterInfo>&))); connect(m_debugger, SIGNAL(memoryDumpChanged(const QString&, const std::list<MemoryDump>&)), m_memoryWindow, SLOT(slotNewMemoryDump(const QString&, const std::list<MemoryDump>&))); connect(m_debugger, SIGNAL(saveProgramSpecific(KConfigBase*)), m_memoryWindow, SLOT(saveProgramSpecific(KConfigBase*))); connect(m_debugger, SIGNAL(restoreProgramSpecific(KConfigBase*)), m_memoryWindow, SLOT(restoreProgramSpecific(KConfigBase*))); // thread window connect(m_debugger, SIGNAL(threadsChanged(const std::list<ThreadInfo>&)), m_threads, SLOT(updateThreads(const std::list<ThreadInfo>&))); connect(m_threads, SIGNAL(setThread(int)), m_debugger, SLOT(setThread(int))); // popup menu of the local variables window m_localVariables->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_localVariables, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotLocalsPopup(const QPoint&))); makeDefaultLayout(); setupGUI(KXmlGuiWindow::Default, "kdbgui.rc"); restoreSettings(KGlobal::config()); // The animation button is not part of the restored window state. // We must create it after the toolbar was loaded. initAnimation(); updateUI(); m_bpTable->updateUI(); }
void ProjectManager::addBreakpoint(qint64 const breakpoint) { breakpoints.insert(breakpoint); saved = false; emit breakpointsChanged(); }