PulseView  unreleased development snapshot
A Qt-based sigrok GUI
QHexView.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2015 Victor Anjin <virinext@gmail.com>
5  * Copyright (C) 2019 Soeren Apel <soeren@apelpie.net>
6  *
7  * The MIT License (MIT)
8  *
9  * Copyright (c) 2015
10  *
11  * Permission is hereby granted, free of charge, to any person obtaining a copy
12  * of this software and associated documentation files (the "Software"), to deal
13  * in the Software without restriction, including without limitation the rights
14  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15  * copies of the Software, and to permit persons to whom the Software is
16  * furnished to do so, subject to the following conditions:
17  *
18  * The above copyright notice and this permission notice shall be included in all
19  * copies or substantial portions of the Software.
20  *
21  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27  * SOFTWARE.
28  */
29 
30 #ifndef PULSEVIEW_PV_VIEWS_DECODER_BINARY_QHEXVIEW_HPP
31 #define PULSEVIEW_PV_VIEWS_DECODER_BINARY_QHEXVIEW_HPP
32 
33 #include <QAbstractScrollArea>
34 
35 #include <pv/data/decodesignal.hpp>
36 
37 using std::pair;
38 using std::size_t;
41 
43 {
44  Q_OBJECT
45 
46 public:
47  enum Mode {
50  };
51 
52 public:
53  QHexView(QWidget *parent = nullptr);
54 
55  void set_mode(Mode m);
56  void set_data(const DecodeBinaryClass* data);
57 
58  /* Sets range of samples that are visible in the main view */
59  void set_visible_sample_range(uint64_t start, uint64_t end);
60 
61  /* Sets sample whose associated data we should highlight */
62  void set_highlighted_data_sample(uint64_t sample);
63 
64  unsigned int get_bytes_per_line() const;
65 
66  void clear();
67  void showFromOffset(size_t offset);
68  virtual QSizePolicy sizePolicy() const;
69 
70  pair<size_t, size_t> get_selection() const;
71 
72  size_t create_hex_line(size_t start, size_t end, QString* dest,
73  bool with_offset=false, bool with_ascii=false);
74 
75 protected:
76  void initialize_byte_iterator(size_t offset);
77  uint8_t get_next_byte(bool* is_new_chunk = nullptr);
78 
79  void paintEvent(QPaintEvent *event);
80  void keyPressEvent(QKeyEvent *event);
81  void mouseMoveEvent(QMouseEvent *event);
82  void mousePressEvent(QMouseEvent *event);
83 
84 private:
85  QSize getFullSize() const;
86  void resetSelection();
87  void resetSelection(int pos);
88  void setSelection(int pos);
89  void ensureVisible();
90  void setCursorPos(int pos);
91  size_t cursorPosFromMousePos(const QPoint &position);
92 
93 private:
96  size_t data_size_;
97 
102 
104  DecodeBinaryDataChunk current_chunk_; // Cache locally so that we're not messed up when the vector is re-allocating its data
106 
107  pair<uint64_t, uint64_t> visible_range_;
109 
110  vector<QColor> chunk_colors_;
112 };
113 
114 #endif // PULSEVIEW_PV_VIEWS_DECODER_BINARY_QHEXVIEW_HPP
size_t posAscii_
Definition: QHexView.hpp:98
size_t cursorPos_
Definition: QHexView.hpp:100
uint8_t address_digits_
Definition: QHexView.hpp:101
void setCursorPos(int pos)
Definition: QHexView.cpp:758
const DecodeBinaryClass * data_
Definition: QHexView.hpp:95
void showFromOffset(size_t offset)
Definition: QHexView.cpp:146
void resetSelection()
Definition: QHexView.cpp:728
uint8_t get_next_byte(bool *is_new_chunk=nullptr)
Definition: QHexView.cpp:253
QSize getFullSize() const
Definition: QHexView.cpp:290
void mouseMoveEvent(QMouseEvent *event)
Definition: QHexView.cpp:680
void set_highlighted_data_sample(uint64_t sample)
Definition: QHexView.cpp:123
void set_data(const DecodeBinaryClass *data)
Definition: QHexView.cpp:94
void mousePressEvent(QMouseEvent *event)
Definition: QHexView.cpp:689
void paintEvent(QPaintEvent *event)
Definition: QHexView.cpp:310
void ensureVisible()
Definition: QHexView.cpp:771
size_t charHeight_
Definition: QHexView.hpp:99
size_t posAddr_
Definition: QHexView.hpp:98
void setSelection(int pos)
Definition: QHexView.cpp:744
pair< size_t, size_t > get_selection() const
Definition: QHexView.cpp:163
pair< uint64_t, uint64_t > visible_range_
Definition: QHexView.hpp:107
size_t cursorPosFromMousePos(const QPoint &position)
Definition: QHexView.cpp:703
void clear()
Definition: QHexView.cpp:135
m
Definition: CMakeCache.txt:621
void set_visible_sample_range(uint64_t start, uint64_t end)
Definition: QHexView.cpp:116
vector< QColor > chunk_colors_
Definition: QHexView.hpp:110
uint64_t next_chunk_sample_
Definition: QHexView.hpp:105
static std::string data()
Definition: exprtk.hpp:39024
size_t selectBegin_
Definition: QHexView.hpp:100
Reconstructs memory contents from data chunks.
Definition: QHexView.hpp:49
size_t charWidth_
Definition: QHexView.hpp:99
size_t current_offset_
Definition: QHexView.hpp:103
size_t create_hex_line(size_t start, size_t end, QString *dest, bool with_offset=false, bool with_ascii=false)
Definition: QHexView.cpp:178
virtual QSizePolicy sizePolicy() const
Definition: QHexView.cpp:158
Displays all data chunks in succession.
Definition: QHexView.hpp:48
QHexView(QWidget *parent=nullptr)
Definition: QHexView.cpp:54
Mode mode_
Definition: QHexView.hpp:94
size_t selectInit_
Definition: QHexView.hpp:100
unsigned int get_bytes_per_line() const
Definition: QHexView.cpp:130
DecodeBinaryDataChunk current_chunk_
Definition: QHexView.hpp:104
size_t selectEnd_
Definition: QHexView.hpp:100
QColor visible_range_color_
Definition: QHexView.hpp:111
size_t current_chunk_offset_
Definition: QHexView.hpp:103
void initialize_byte_iterator(size_t offset)
Definition: QHexView.cpp:222
size_t data_size_
Definition: QHexView.hpp:96
size_t current_chunk_id_
Definition: QHexView.hpp:103
void keyPressEvent(QKeyEvent *event)
Definition: QHexView.cpp:526
void set_mode(Mode m)
Definition: QHexView.cpp:86
uint64_t current_chunk_sample_
Definition: QHexView.hpp:105
uint64_t highlighted_sample_
Definition: QHexView.hpp:108
size_t posHex_
Definition: QHexView.hpp:98