#define PULSEVIEW_PV_VIEWS_DECODEROUTPUT_QHEXVIEW_H
#include <QAbstractScrollArea>
-#include <QByteArray>
-#include <QFile>
-using std::size_t;
+#include <pv/data/decodesignal.hpp>
+using std::pair;
+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();
-
-private:
- QByteArray data_;
-};
-
+ enum Mode {
+ ChunkedDataMode, ///< Displays all data chunks in succession
+ MemoryEmulationMode ///< Reconstructs memory contents from data chunks
+ };
-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);
+ virtual QSizePolicy sizePolicy() const;
+
+ pair<size_t, size_t> get_selection() const;
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);
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_, current_offset_;
+ DecodeBinaryDataChunk current_chunk_; // Cache locally so that we're not messed up when the vector is re-allocating its data
+
+ vector<QColor> chunk_colors_;
};
#endif /* PULSEVIEW_PV_VIEWS_DECODEROUTPUT_QHEXVIEW_H */