mirror of
https://github.com/holub/mame
synced 2025-05-06 06:14:45 +03:00
203 lines
4.1 KiB
C++
203 lines
4.1 KiB
C++
#ifndef __DEBUG_QT_MAIN_WINDOW_H__
|
|
#define __DEBUG_QT_MAIN_WINDOW_H__
|
|
|
|
#include <QtGui/QtGui>
|
|
#include <vector>
|
|
|
|
#include "debug/dvdisasm.h"
|
|
|
|
#include "debuggerview.h"
|
|
#include "windowqt.h"
|
|
|
|
class DasmDockWidget;
|
|
class ProcessorDockWidget;
|
|
|
|
|
|
//============================================================
|
|
// The Main Window. Contains processor and dasm docks.
|
|
//============================================================
|
|
class MainWindow : public WindowQt
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
MainWindow(running_machine* machine, QWidget* parent=NULL);
|
|
virtual ~MainWindow();
|
|
|
|
void setProcessor(device_t* processor);
|
|
|
|
|
|
protected:
|
|
// Used to intercept the user clicking 'X' in the upper corner
|
|
void closeEvent(QCloseEvent* event);
|
|
|
|
// Used to intercept the user hitting the up arrow in the input widget
|
|
bool eventFilter(QObject* obj, QEvent* event);
|
|
|
|
|
|
private slots:
|
|
void toggleBreakpointAtCursor(bool changedTo);
|
|
void enableBreakpointAtCursor(bool changedTo);
|
|
void runToCursor(bool changedTo);
|
|
void rightBarChanged(QAction* changedTo);
|
|
|
|
void executeCommand(bool withClear=true);
|
|
|
|
void mountImage(bool changedTo);
|
|
void unmountImage(bool changedTo);
|
|
|
|
void dasmViewUpdated();
|
|
|
|
// Closing the main window actually exits the program
|
|
void debugActClose();
|
|
|
|
|
|
private:
|
|
void createImagesMenu();
|
|
|
|
// Widgets and docks
|
|
QLineEdit* m_inputEdit;
|
|
DebuggerView* m_consoleView;
|
|
ProcessorDockWidget* m_procFrame;
|
|
DasmDockWidget* m_dasmFrame;
|
|
|
|
// Menu items
|
|
QAction* m_breakpointToggleAct;
|
|
QAction* m_breakpointEnableAct;
|
|
QAction* m_runToCursorAct;
|
|
|
|
// Terminal history
|
|
int m_historyIndex;
|
|
std::vector<QString> m_inputHistory;
|
|
void addToHistory(const QString& command);
|
|
};
|
|
|
|
|
|
//============================================================
|
|
// Docks with the Main Window. Disassembly.
|
|
//============================================================
|
|
class DasmDockWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
DasmDockWidget(running_machine* machine, QWidget* parent=NULL) :
|
|
QWidget(parent),
|
|
m_machine(machine)
|
|
{
|
|
m_dasmView = new DebuggerView(DVT_DISASSEMBLY,
|
|
m_machine,
|
|
this);
|
|
|
|
// Force a recompute of the disassembly region
|
|
downcast<debug_view_disasm*>(m_dasmView->view())->set_expression("curpc");
|
|
|
|
QVBoxLayout* dvLayout = new QVBoxLayout(this);
|
|
dvLayout->addWidget(m_dasmView);
|
|
dvLayout->setContentsMargins(4,0,4,0);
|
|
}
|
|
|
|
|
|
virtual ~DasmDockWidget();
|
|
|
|
|
|
DebuggerView* view() { return m_dasmView; }
|
|
|
|
|
|
QSize minimumSizeHint() const
|
|
{
|
|
return QSize(150,150);
|
|
}
|
|
|
|
|
|
QSize sizeHint() const
|
|
{
|
|
return QSize(150,200);
|
|
}
|
|
|
|
|
|
private:
|
|
DebuggerView* m_dasmView;
|
|
|
|
running_machine* m_machine;
|
|
};
|
|
|
|
|
|
//============================================================
|
|
// Docks with the Main Window. Processor information.
|
|
//============================================================
|
|
class ProcessorDockWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
ProcessorDockWidget(running_machine* machine,
|
|
QWidget* parent=NULL) :
|
|
QWidget(parent),
|
|
m_processorView(NULL),
|
|
m_machine(machine)
|
|
{
|
|
m_processorView = new DebuggerView(DVT_STATE,
|
|
m_machine,
|
|
this);
|
|
m_processorView->setFocusPolicy(Qt::NoFocus);
|
|
|
|
QVBoxLayout* cvLayout = new QVBoxLayout(this);
|
|
cvLayout->addWidget(m_processorView);
|
|
cvLayout->setContentsMargins(4,0,4,2);
|
|
}
|
|
|
|
|
|
virtual ~ProcessorDockWidget();
|
|
|
|
|
|
DebuggerView* view() { return m_processorView; }
|
|
|
|
|
|
QSize minimumSizeHint() const
|
|
{
|
|
return QSize(150,300);
|
|
}
|
|
|
|
|
|
QSize sizeHint() const
|
|
{
|
|
return QSize(200,300);
|
|
}
|
|
|
|
|
|
private:
|
|
DebuggerView* m_processorView;
|
|
|
|
running_machine* m_machine;
|
|
};
|
|
|
|
|
|
//=========================================================================
|
|
// A way to store the configuration of a window long enough to read/write.
|
|
//=========================================================================
|
|
class MainWindowQtConfig : public WindowQtConfig
|
|
{
|
|
public:
|
|
MainWindowQtConfig() :
|
|
WindowQtConfig(WIN_TYPE_MAIN),
|
|
m_rightBar(0),
|
|
m_windowState()
|
|
{}
|
|
|
|
~MainWindowQtConfig() {}
|
|
|
|
// Settings
|
|
int m_rightBar;
|
|
QByteArray m_windowState;
|
|
|
|
void buildFromQWidget(QWidget* widget);
|
|
void applyToQWidget(QWidget* widget);
|
|
void addToXmlDataNode(xml_data_node* node) const;
|
|
void recoverFromXmlNode(xml_data_node* node);
|
|
};
|
|
|
|
|
|
|
|
#endif
|