mirror of https://github.com/bsnes-emu/bsnes.git
304 lines
6.6 KiB
C++
304 lines
6.6 KiB
C++
|
/*
|
||
|
Qt requires moc in order to bind callbacks, which causes many complications.
|
||
|
|
||
|
First, moc is not C++11-aware. Thus, all of the "public slots:" functions must
|
||
|
be declared using C++98 syntax.
|
||
|
|
||
|
Second, multiple inheritance with QObject (eg pWindow : QObject, pObject)
|
||
|
seems to cause heap corruption. As such, we need to have separate classes for
|
||
|
inheriting from QObject, which are defined in this file.
|
||
|
|
||
|
Third, moc preprocessor output is required for every Q_OBJECT class. So to
|
||
|
avoid needing to generate several .moc files, all QObject classes are placed
|
||
|
inside this one file instead.
|
||
|
*/
|
||
|
|
||
|
#if !defined(HIRO_QT)
|
||
|
#include "../components.hpp"
|
||
|
#endif
|
||
|
|
||
|
namespace hiro {
|
||
|
|
||
|
#if defined(Hiro_Timer)
|
||
|
struct QtTimer : public QTimer {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtTimer(pTimer& p) : p(p) {}
|
||
|
pTimer& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_Window)
|
||
|
struct QtWindow : public QWidget {
|
||
|
QtWindow(pWindow& p) : p(p) {}
|
||
|
auto closeEvent(QCloseEvent*) -> void;
|
||
|
auto dragEnterEvent(QDragEnterEvent*) -> void;
|
||
|
auto dropEvent(QDropEvent*) -> void;
|
||
|
auto keyPressEvent(QKeyEvent*) -> void;
|
||
|
auto keyReleaseEvent(QKeyEvent*) -> void;
|
||
|
auto moveEvent(QMoveEvent*) -> void;
|
||
|
auto resizeEvent(QResizeEvent*) -> void;
|
||
|
auto sizeHint() const -> QSize;
|
||
|
pWindow& p;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_MenuItem)
|
||
|
struct QtMenuItem : public QAction {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtMenuItem(pMenuItem& p) : QAction(nullptr), p(p) {}
|
||
|
pMenuItem& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_MenuCheckItem)
|
||
|
struct QtMenuCheckItem : public QAction {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtMenuCheckItem(pMenuCheckItem& p) : QAction(nullptr), p(p) {}
|
||
|
pMenuCheckItem& p;
|
||
|
public slots:
|
||
|
void onToggle();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_MenuRadioItem)
|
||
|
struct QtMenuRadioItem : public QAction {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtMenuRadioItem(pMenuRadioItem& p) : QAction(nullptr), p(p) {}
|
||
|
pMenuRadioItem& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_Button)
|
||
|
struct QtButton : public QToolButton {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtButton(pButton& p) : p(p) {}
|
||
|
pButton& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_Canvas)
|
||
|
struct QtCanvas : public QWidget {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtCanvas(pCanvas& p) : p(p) {}
|
||
|
auto dragEnterEvent(QDragEnterEvent*) -> void;
|
||
|
auto dropEvent(QDropEvent*) -> void;
|
||
|
auto leaveEvent(QEvent*) -> void;
|
||
|
auto mouseMoveEvent(QMouseEvent*) -> void;
|
||
|
auto mousePressEvent(QMouseEvent*) -> void;
|
||
|
auto mouseReleaseEvent(QMouseEvent*) -> void;
|
||
|
auto paintEvent(QPaintEvent*) -> void;
|
||
|
pCanvas& p;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_CheckButton)
|
||
|
struct QtCheckButton : public QToolButton {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtCheckButton(pCheckButton& p) : p(p) {}
|
||
|
pCheckButton& p;
|
||
|
public slots:
|
||
|
void onToggle(bool checked);
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_CheckLabel)
|
||
|
struct QtCheckLabel : public QCheckBox {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtCheckLabel(pCheckLabel& p) : p(p) {}
|
||
|
pCheckLabel& p;
|
||
|
public slots:
|
||
|
void onToggle();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_ComboButton)
|
||
|
struct QtComboButton : public QComboBox {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtComboButton(pComboButton& p) : p(p) {}
|
||
|
pComboButton& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_HexEdit)
|
||
|
struct QtHexEdit : public QTextEdit {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtHexEdit(pHexEdit& p) : p(p) {}
|
||
|
auto keyPressEvent(QKeyEvent*) -> void;
|
||
|
auto keyPressEventAcknowledge(QKeyEvent*) -> void;
|
||
|
auto wheelEvent(QWheelEvent*) -> void;
|
||
|
pHexEdit& p;
|
||
|
};
|
||
|
|
||
|
struct QtHexEditScrollBar : public QScrollBar {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtHexEditScrollBar(pHexEdit& p) : p(p) {}
|
||
|
auto event(QEvent*) -> bool;
|
||
|
pHexEdit& p;
|
||
|
public slots:
|
||
|
void onScroll();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_HorizontalScroller)
|
||
|
struct QtHorizontalScroller : public QScrollBar {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtHorizontalScroller(pHorizontalScroller& p) : QScrollBar(Qt::Horizontal), p(p) {}
|
||
|
pHorizontalScroller& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_HorizontalSlider)
|
||
|
struct QtHorizontalSlider : public QSlider {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtHorizontalSlider(pHorizontalSlider& p) : QSlider(Qt::Horizontal), p(p) {}
|
||
|
pHorizontalSlider& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_LineEdit)
|
||
|
struct QtLineEdit : public QLineEdit {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtLineEdit(pLineEdit& p) : p(p) {}
|
||
|
pLineEdit& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_ListView)
|
||
|
struct QtListView : public QTreeWidget {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtListView(pListView& p) : p(p) {}
|
||
|
auto mousePressEvent(QMouseEvent*) -> void override;
|
||
|
auto resizeEvent(QResizeEvent*) -> void override;
|
||
|
auto showEvent(QShowEvent*) -> void override;
|
||
|
pListView& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
void onChange();
|
||
|
void onContext();
|
||
|
void onSort(int column);
|
||
|
void onToggle(QTreeWidgetItem* item);
|
||
|
};
|
||
|
|
||
|
struct QtListViewDelegate : public QStyledItemDelegate {
|
||
|
QtListViewDelegate(pListView& p);
|
||
|
auto paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const -> void;
|
||
|
pListView& p;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_RadioLabel)
|
||
|
struct QtRadioLabel : public QRadioButton {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtRadioLabel(pRadioLabel& p) : p(p) {}
|
||
|
pRadioLabel& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_RadioButton)
|
||
|
struct QtRadioButton : public QToolButton {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtRadioButton(pRadioButton& p) : p(p) {}
|
||
|
pRadioButton& p;
|
||
|
public slots:
|
||
|
void onActivate();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_TabFrame)
|
||
|
struct QtTabFrame : public QTabWidget {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtTabFrame(pTabFrame& p) : p(p) {}
|
||
|
pTabFrame& p;
|
||
|
auto showEvent(QShowEvent*) -> void override;
|
||
|
public slots:
|
||
|
void onChange(int selection);
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_TextEdit)
|
||
|
struct QtTextEdit : public QTextEdit {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtTextEdit(pTextEdit& p) : p(p) {}
|
||
|
pTextEdit& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_VerticalScroller)
|
||
|
struct QtVerticalScroller : public QScrollBar {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtVerticalScroller(pVerticalScroller& p) : QScrollBar(Qt::Vertical), p(p) {}
|
||
|
pVerticalScroller& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_VerticalSlider)
|
||
|
struct QtVerticalSlider : public QSlider {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtVerticalSlider(pVerticalSlider& p) : QSlider(Qt::Vertical), p(p) {}
|
||
|
pVerticalSlider& p;
|
||
|
public slots:
|
||
|
void onChange();
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(Hiro_Viewport)
|
||
|
struct QtViewport : public QWidget {
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
QtViewport(pViewport& p) : p(p) {}
|
||
|
auto dragEnterEvent(QDragEnterEvent*) -> void;
|
||
|
auto dropEvent(QDropEvent*) -> void;
|
||
|
auto leaveEvent(QEvent*) -> void;
|
||
|
auto mouseMoveEvent(QMouseEvent*) -> void;
|
||
|
auto mousePressEvent(QMouseEvent*) -> void;
|
||
|
auto mouseReleaseEvent(QMouseEvent*) -> void;
|
||
|
pViewport& p;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
}
|