Exemplo n.º 1
0
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();
}
Exemplo n.º 3
0
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()));
   }
}
Exemplo n.º 4
0
void ProjectManager::removeBreakpoints(std::vector<qint64> const& breakpoints) {
	for(qint64 const breakpoint : breakpoints) {
		this->breakpoints.erase(breakpoint);
	}
	saved = false;
	emit breakpointsChanged();
}
Exemplo n.º 5
0
void ProjectManager::addBreakpoints(std::vector<qint64> const& breakpoints) {
	for(qint64 const& breakpoint : breakpoints) {
		this->breakpoints.insert(breakpoint);
	}
	saved = false;
	emit breakpointsChanged();
}
Exemplo n.º 6
0
void ProjectManager::setBreakpoints(std::set<qint64>&& breakpoints) {
	if(this->breakpoints != breakpoints) {
		this->breakpoints = breakpoints;
		saved = false;
		emit breakpointsChanged();
	}
}
Exemplo n.º 7
0
void ProjectManager::replaceBreakpoint(qint64 const oldPosition, qint64 const newPosition) {
	if(oldPosition != newPosition) {
		removeBreakpoint(oldPosition);
		addBreakpoint(newPosition);
		saved = false;
		emit breakpointsChanged();
	}
}
Exemplo n.º 8
0
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);
   }
}
Exemplo n.º 9
0
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);
}
Exemplo n.º 10
0
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();
   }
}
Exemplo n.º 12
0
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);
      }
   }
}
Exemplo n.º 13
0
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);
   }
}
Exemplo n.º 15
0
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()));
}
Exemplo n.º 16
0
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);
   }
}
Exemplo n.º 17
0
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);
      }
   }
}
Exemplo n.º 18
0
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);
      }
   }
}
Exemplo n.º 19
0
void ProjectManager::removeBreakpoint(qint64 const breakpoint) {
	breakpoints.erase(breakpoint);
	saved = false;
	emit breakpointsChanged();
}
Exemplo n.º 20
0
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();
}
Exemplo n.º 21
0
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();
}
Exemplo n.º 22
0
void ProjectManager::addBreakpoint(qint64 const breakpoint) {
	breakpoints.insert(breakpoint);
	saved = false;
	emit breakpointsChanged();
}