GraphicsBreakPointsWidget::GraphicsBreakPointsWidget(std::shared_ptr<Pica::DebugContext> debug_context, QWidget* parent) : QDockWidget(tr("Pica Breakpoints"), parent), Pica::DebugContext::BreakPointObserver(debug_context) { setObjectName("PicaBreakPointsWidget"); status_text = new QLabel(tr("Emulation running")); resume_button = new QPushButton(tr("Resume")); resume_button->setEnabled(false); breakpoint_model = new BreakPointModel(debug_context, this); breakpoint_list = new QTreeView; breakpoint_list->setModel(breakpoint_model); toggle_breakpoint_button = new QPushButton(tr("Enable")); toggle_breakpoint_button->setEnabled(false); qRegisterMetaType<Pica::DebugContext::Event>("Pica::DebugContext::Event"); connect(resume_button, SIGNAL(clicked()), this, SLOT(OnResumeRequested())); connect(this, SIGNAL(BreakPointHit(Pica::DebugContext::Event,void*)), this, SLOT(OnBreakPointHit(Pica::DebugContext::Event,void*)), Qt::BlockingQueuedConnection); connect(this, SIGNAL(Resumed()), this, SLOT(OnResumed())); connect(this, SIGNAL(BreakPointHit(Pica::DebugContext::Event,void*)), breakpoint_model, SLOT(OnBreakPointHit(Pica::DebugContext::Event)), Qt::BlockingQueuedConnection); connect(this, SIGNAL(Resumed()), breakpoint_model, SLOT(OnResumed())); connect(this, SIGNAL(BreakPointsChanged(const QModelIndex&,const QModelIndex&)), breakpoint_model, SIGNAL(dataChanged(const QModelIndex&,const QModelIndex&))); connect(breakpoint_list->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(OnBreakpointSelectionChanged(QModelIndex))); connect(toggle_breakpoint_button, SIGNAL(clicked()), this, SLOT(OnToggleBreakpointEnabled())); QWidget* main_widget = new QWidget; auto main_layout = new QVBoxLayout; { auto sub_layout = new QHBoxLayout; sub_layout->addWidget(status_text); sub_layout->addWidget(resume_button); main_layout->addLayout(sub_layout); } main_layout->addWidget(breakpoint_list); main_layout->addWidget(toggle_breakpoint_button); main_widget->setLayout(main_layout); setWidget(main_widget); }
BreakPointObserverDock::BreakPointObserverDock(std::shared_ptr<Pica::DebugContext> debug_context, const QString& title, QWidget* parent) : QDockWidget(title, parent), BreakPointObserver(debug_context) { qRegisterMetaType<Pica::DebugContext::Event>("Pica::DebugContext::Event"); connect(this, SIGNAL(Resumed()), this, SLOT(OnResumed())); // NOTE: This signal is emitted from a non-GUI thread, but connect() takes // care of delaying its handling to the GUI thread. connect(this, SIGNAL(BreakPointHit(Pica::DebugContext::Event,void*)), this, SLOT(OnBreakPointHit(Pica::DebugContext::Event,void*)), Qt::BlockingQueuedConnection); }
void BreakPointObserverDock::OnPicaResume() { emit Resumed(); }
void GraphicsBreakPointsWidget::OnPicaResume() { // Process in GUI thread emit Resumed(); }