]> sigrok.org Git - pulseview.git/blobdiff - pv/views/decoder_output/QHexView.hpp
DecoderOutputView: Directly use DecodeBinaryClass as data source
[pulseview.git] / pv / views / decoder_output / QHexView.hpp
index fd4b86f1859ca40b622b48f3eaf5ede7b575f2b9..b5fb01fb51ba6dfb7a16c17222645cd9b34cb04f 100644 (file)
 #define PULSEVIEW_PV_VIEWS_DECODEROUTPUT_QHEXVIEW_H
 
 #include <QAbstractScrollArea>
-#include <QByteArray>
-#include <QFile>
 
-using std::size_t;
+#include <pv/data/decodesignal.hpp>
 
+using std::size_t;
+using pv::data::DecodeBinaryClass;
+using pv::data::DecodeBinaryDataChunk;
 
-class DataStorage
+class QHexView: public QAbstractScrollArea
 {
-public:
-       virtual ~DataStorage() {};
-       virtual QByteArray getData(size_t position, size_t length) = 0;
-       virtual size_t size() = 0;
-};
+       Q_OBJECT
 
-
-class DataStorageArray: public DataStorage
-{
 public:
-       DataStorageArray(const QByteArray &arr);
-       virtual QByteArray getData(size_t position, size_t length);
-       virtual size_t size();
+       enum Mode {
+               ChunkedDataMode,    ///< Displays all data chunks in succession
+               MemoryEmulationMode ///< Reconstructs memory contents from data chunks
+       };
 
-private:
-       QByteArray data_;
-};
-
-
-class QHexView: public QAbstractScrollArea
-{
+public:
        QHexView(QWidget *parent = 0);
-       ~QHexView();
 
-public Q_SLOTS:
-       void setData(DataStorage *pData);
+       void setMode(Mode m);
+       void setData(const DecodeBinaryClass* data);
+
        void clear();
        void showFromOffset(size_t offset);
 
 protected:
+       void initialize_byte_iterator(size_t offset);
+       uint8_t get_next_byte(bool* is_next_chunk = nullptr);
+
        void paintEvent(QPaintEvent *event);
        void keyPressEvent(QKeyEvent *event);
        void mouseMoveEvent(QMouseEvent *event);
        void mousePressEvent(QMouseEvent *event);
 
 private:
-       QSize fullSize() const;
+       QSize getFullSize() const;
        void resetSelection();
        void resetSelection(int pos);
        void setSelection(int pos);
        void ensureVisible();
        void setCursorPos(int pos);
-       size_t cursorPos(const QPoint &position);
+       size_t cursorPosFromMousePos(const QPoint &position);
 
 private:
-       DataStorage *pdata_;
+       Mode mode_;
+       const DecodeBinaryClass* data_;
+       size_t data_size_;
 
        size_t posAddr_, posHex_, posAscii_;
        size_t charWidth_, charHeight_;
        size_t selectBegin_, selectEnd_, selectInit_, cursorPos_;
+
+       size_t current_chunk_id_, current_chunk_offset_;
+       const DecodeBinaryDataChunk* current_chunk_;
 };
 
 #endif /* PULSEVIEW_PV_VIEWS_DECODEROUTPUT_QHEXVIEW_H */