diff options
Diffstat (limited to 'qtmips_gui')
| -rw-r--r-- | qtmips_gui/coreview.cpp | 43 | ||||
| -rw-r--r-- | qtmips_gui/coreview.h | 20 | ||||
| -rw-r--r-- | qtmips_gui/graphicsview.cpp | 36 | ||||
| -rw-r--r-- | qtmips_gui/graphicsview.h | 20 | ||||
| -rw-r--r-- | qtmips_gui/mainwindow.cpp | 2 | ||||
| -rw-r--r-- | qtmips_gui/mainwindow.h | 2 | ||||
| -rw-r--r-- | qtmips_gui/qtmips_gui.pro | 2 | 
7 files changed, 69 insertions, 56 deletions
| diff --git a/qtmips_gui/coreview.cpp b/qtmips_gui/coreview.cpp index 66ad933..d32f4aa 100644 --- a/qtmips_gui/coreview.cpp +++ b/qtmips_gui/coreview.cpp @@ -7,41 +7,6 @@  #define SC_HEIGHT 540  ////////////////////////////////////////////////////////////////////////////// -CoreView::CoreView(QWidget *parent) : QGraphicsView(parent) { -    setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); -} - -void CoreView::setScene(QGraphicsScene *scene) { -    QGraphicsView::setScene(scene); -    update_scale(); -} - -void CoreView::resizeEvent(QResizeEvent *event) { -    QGraphicsView::resizeEvent(event); -    update_scale(); -} - -void CoreView::update_scale() { -    if (scene() == nullptr) -        return; // Skip if we have no scene - -    // Note: there is somehow three pixels error when viewing so we have to always compensate -    const int w = scene()->width() + 3; -    const int h = scene()->height() + 3; - -    qreal scale = 1; -    if (height() > h && width() > w) { -        if (height() > width()) { -            scale = (qreal)width() / w; -        } else { -            scale = (qreal)height() / h; -        } -    } -    QTransform t; -    t.scale(scale, scale); -    setTransform(t, false); -} -  #define NEW_B(TYPE, VAR, ...) do { \          VAR = new coreview::TYPE(__VA_ARGS__);\          addItem(VAR);\ @@ -55,7 +20,7 @@ void CoreView::update_scale() {          connect(machine->core(), SIGNAL(SIG), VAR, SLOT(instruction_update(const machine::Instruction&))); \      } while(false) -CoreViewScene::CoreViewScene(CoreView *view, machine::QtMipsMachine *machine) : QGraphicsScene(view) { +CoreViewScene::CoreViewScene(GraphicsView *view, machine::QtMipsMachine *machine) : QGraphicsScene(view) {      setSceneRect(0, 0, SC_WIDTH, SC_HEIGHT);      // Elements // @@ -133,6 +98,8 @@ CoreViewScene::CoreViewScene(CoreView *view, machine::QtMipsMachine *machine) :      connect(mem_data, SIGNAL(open_mem()), this, SIGNAL(request_data_memory()));      connect(ft.pc, SIGNAL(open_program()), this, SIGNAL(request_program_memory()));      connect(ft.pc, SIGNAL(jump_to_pc(std::uint32_t)), this, SIGNAL(request_jump_to_program_counter(std::uint32_t))); +    connect(mem_program, SIGNAL(open_cache()), this, SIGNAL(request_cache_program())); +    connect(mem_data, SIGNAL(open_cache()), this, SIGNAL(request_cache_data()));  }  CoreViewScene::~CoreViewScene() { @@ -160,7 +127,7 @@ coreview::Signal *CoreViewScene::new_signal(const coreview::Connector *a, const      return c;  } -CoreViewSceneSimple::CoreViewSceneSimple(CoreView *view, machine::QtMipsMachine *machine) : CoreViewScene(view, machine) { +CoreViewSceneSimple::CoreViewSceneSimple(GraphicsView *view, machine::QtMipsMachine *machine) : CoreViewScene(view, machine) {      NEW_I(instr_prim, 230, 60, instruction_fetched(const machine::Instruction&));      if (machine->config().delay_slot()) {          NEW(Latch, delay_slot_latch, 55, 470, machine, 25); @@ -226,7 +193,7 @@ CoreViewSceneSimple::CoreViewSceneSimple(CoreView *view, machine::QtMipsMachine      con->setAxes({CON_AXIS_Y(430), CON_AXIS_X(500), CON_AXIS_Y(210)});  } -CoreViewScenePipelined::CoreViewScenePipelined(CoreView *view, machine::QtMipsMachine *machine) : CoreViewScene(view, machine) { +CoreViewScenePipelined::CoreViewScenePipelined(GraphicsView *view, machine::QtMipsMachine *machine) : CoreViewScene(view, machine) {      NEW(Latch, latch_if_id, 158, 70, machine, 400);      latch_if_id->setTitle("IF/ID");      NEW(Latch, latch_id_ex, 392, 70, machine, 400); diff --git a/qtmips_gui/coreview.h b/qtmips_gui/coreview.h index 9fdf0a3..8935d41 100644 --- a/qtmips_gui/coreview.h +++ b/qtmips_gui/coreview.h @@ -4,6 +4,7 @@  #include <QGraphicsView>  #include <QGraphicsScene>  #include "qtmipsmachine.h" +#include "graphicsview.h"  #include "coreview/connection.h"  #include "coreview/programcounter.h"  #include "coreview/multiplexer.h" @@ -18,22 +19,10 @@  #include "coreview/logicblock.h"  #include "coreview/and.h" -class CoreView : public QGraphicsView { -public: -    CoreView(QWidget *parent); - -    void setScene(QGraphicsScene *scene); - -protected: -    void resizeEvent(QResizeEvent *event); -private: -    void update_scale(); -}; -  class CoreViewScene : public QGraphicsScene {      Q_OBJECT  public: -    CoreViewScene(CoreView *view, machine::QtMipsMachine *machine); +    CoreViewScene(GraphicsView *view, machine::QtMipsMachine *machine);      ~CoreViewScene();  signals: @@ -86,7 +75,7 @@ protected:  class CoreViewSceneSimple : public CoreViewScene {  public: -    CoreViewSceneSimple(CoreView *view, machine::QtMipsMachine *machine); +    CoreViewSceneSimple(GraphicsView *view, machine::QtMipsMachine *machine);  private:      coreview::InstructionView *instr_prim, *instr_delay; @@ -95,7 +84,7 @@ private:  class CoreViewScenePipelined : public CoreViewScene {  public: -    CoreViewScenePipelined(CoreView *view, machine::QtMipsMachine *machine); +    CoreViewScenePipelined(GraphicsView *view, machine::QtMipsMachine *machine);  private:      coreview::Latch *latch_if_id, *latch_id_ex, *latch_ex_mem, *latch_mem_wb; @@ -105,7 +94,6 @@ private:  #else -class CoreView;  class CoreViewScene;  class CoreViewSceneSimple;  class CoreViewScenePipelined; diff --git a/qtmips_gui/graphicsview.cpp b/qtmips_gui/graphicsview.cpp new file mode 100644 index 0000000..6ef118d --- /dev/null +++ b/qtmips_gui/graphicsview.cpp @@ -0,0 +1,36 @@ +#include "graphicsview.h" + +GraphicsView::GraphicsView(QWidget *parent) : QGraphicsView(parent) { +    setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); +} + +void GraphicsView::setScene(QGraphicsScene *scene) { +    QGraphicsView::setScene(scene); +    update_scale(); +} + +void GraphicsView::resizeEvent(QResizeEvent *event) { +    QGraphicsView::resizeEvent(event); +    update_scale(); +} + +void GraphicsView::update_scale() { +    if (scene() == nullptr) +        return; // Skip if we have no scene + +    // Note: there is somehow three pixels error when viewing so we have to always compensate +    const int w = scene()->width() + 3; +    const int h = scene()->height() + 3; + +    qreal scale = 1; +    if (height() > h && width() > w) { +        if (height() > width()) { +            scale = (qreal)width() / w; +        } else { +            scale = (qreal)height() / h; +        } +    } +    QTransform t; +    t.scale(scale, scale); +    setTransform(t, false); +} diff --git a/qtmips_gui/graphicsview.h b/qtmips_gui/graphicsview.h new file mode 100644 index 0000000..6b16d40 --- /dev/null +++ b/qtmips_gui/graphicsview.h @@ -0,0 +1,20 @@ +#ifndef GRAPHICSVIEW_H +#define GRAPHICSVIEW_H + +#include <QGraphicsView> +#include <QGraphicsScene> + +class GraphicsView : public QGraphicsView { +public: +    GraphicsView(QWidget *parent); + +    void setScene(QGraphicsScene *scene); + +protected: +    void resizeEvent(QResizeEvent *event); + +private: +    void update_scale(); +}; + +#endif // GRAPHICSVIEW_H diff --git a/qtmips_gui/mainwindow.cpp b/qtmips_gui/mainwindow.cpp index ce6f52c..b61c0e5 100644 --- a/qtmips_gui/mainwindow.cpp +++ b/qtmips_gui/mainwindow.cpp @@ -10,7 +10,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {      setWindowTitle("QtMips");      // Prepare empty core view -    coreview  = new CoreView(this); +    coreview  = new GraphicsView(this);      this->setCentralWidget(coreview);      // Create/prepare other widgets      ndialog = new NewDialog(this, settings); diff --git a/qtmips_gui/mainwindow.h b/qtmips_gui/mainwindow.h index 3c1cf9f..acfeb05 100644 --- a/qtmips_gui/mainwindow.h +++ b/qtmips_gui/mainwindow.h @@ -50,7 +50,7 @@ private:      NewDialog *ndialog; -    CoreView *coreview; +    GraphicsView *coreview;      CoreViewScene *corescene;      RegistersDock *registers; diff --git a/qtmips_gui/qtmips_gui.pro b/qtmips_gui/qtmips_gui.pro index 2d8ba78..e12eaef 100644 --- a/qtmips_gui/qtmips_gui.pro +++ b/qtmips_gui/qtmips_gui.pro @@ -37,6 +37,7 @@ SOURCES += \          coreview/and.cpp \          statictable.cpp \      cachedock.cpp \ +    graphicsview.cpp  HEADERS += \          mainwindow.h \ @@ -61,6 +62,7 @@ HEADERS += \          coreview/and.h \          statictable.h \      cachedock.h \ +    graphicsview.h  FORMS += \          NewDialog.ui \ | 
