duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

memoryviewwidget.h (1258B)


      1 #pragma once
      2 #include <QtWidgets/QAbstractScrollArea>
      3 
      4 // Based on https://stackoverflow.com/questions/46375673/how-can-realize-my-own-memory-viewer-by-qt
      5 
      6 class MemoryViewWidget : public QAbstractScrollArea
      7 {
      8 public:
      9   Q_OBJECT
     10 public:
     11   MemoryViewWidget(QWidget* parent = nullptr, size_t address_offset = 0, const void* data_ptr = nullptr,
     12                    size_t data_size = 0);
     13   ~MemoryViewWidget();
     14 
     15   size_t addressOffset() const { return m_address_offset; }
     16 
     17   void setData(size_t address_offset, const void* data_ptr, size_t data_size);
     18   void setHighlightRange(size_t start, size_t end);
     19   void clearHighlightRange();
     20   void scrolltoOffset(size_t offset);
     21   void scrollToAddress(size_t address);
     22   void setFont(const QFont& font);
     23 
     24 protected:
     25   void paintEvent(QPaintEvent*);
     26   void resizeEvent(QResizeEvent*);
     27 
     28 private Q_SLOTS:
     29   void adjustContent();
     30 
     31 private:
     32   int addressWidth() const;
     33   int hexWidth() const;
     34   int asciiWidth() const;
     35   void updateMetrics();
     36 
     37   const void* m_data;
     38   size_t m_data_size;
     39   size_t m_address_offset;
     40 
     41   size_t m_start_offset;
     42   size_t m_end_offset;
     43 
     44   size_t m_highlight_start = 0;
     45   size_t m_highlight_end = 0;
     46 
     47   unsigned m_bytes_per_line;
     48 
     49   int m_char_width;
     50   int m_char_height;
     51 
     52   int m_rows_visible;
     53 };