1
0
Fork 0
x64dbg/x64_dbg_gui/Project/Src/BasicView/AbstractTableView.h

166 lines
4.0 KiB
C++

#ifndef ABSTRACTTABLEVIEW_H
#define ABSTRACTTABLEVIEW_H
#include <QtGui>
#include <QAbstractScrollArea>
#include <QPushButton>
#include <QStyleOptionButton>
#include <QStyle>
#include <QScrollBar>
#include <qdebug.h>
#include <NewTypes.h>
class AbstractTableView : public QAbstractScrollArea
{
Q_OBJECT
public:
enum GuiState_t {NoState, ReadyToResize, ResizeColumnState, HeaderButtonPressed};
// Constructor
explicit AbstractTableView(QWidget *parent = 0);
//config updates
virtual void colorsUpdated();
virtual void fontsUpdated();
// Pure Virtual Methods
virtual QString paintContent(QPainter* painter, int_t rowBase, int rowOffset, int col, int x, int y, int w, int h) = 0;
// Painting Stuff
void paintEvent(QPaintEvent* event);
// Mouse Management
void mouseMoveEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);
void mouseReleaseEvent(QMouseEvent* event);
void wheelEvent(QWheelEvent* event);
void resizeEvent(QResizeEvent* event);
void keyPressEvent(QKeyEvent* event);
// ScrollBar Management
virtual int_t sliderMovedHook(int type, int_t value, int_t delta);
int scaleFromUint64ToScrollBarRange(int_t value);
int_t scaleFromScrollBarRangeToUint64(int value);
void updateScrollBarRange(int_t range);
// Coordinates Utils
int getIndexOffsetFromY(int y);
int getColumnIndexFromX(int x);
int getColumnPosition(int index);
int transY(int y);
int getViewableRowsCount();
virtual int getLineToPrintcount();
// New Columns/New Size
virtual void addColumnAt(int width, QString title, bool isClickable);
virtual void setRowCount(int_t count);
virtual void deleteAllColumns();
void setColTitle(int index, QString title);
QString getColTitle(int index);
// Getter & Setter
int_t getRowCount();
int getColumnCount();
int getRowHeight();
int getColumnWidth(int index);
void setColumnWidth(int index, int width);
int getHeaderHeight();
int getTableHeigth();
int getGuiState();
int getNbrOfLineToPrint();
void setNbrOfLineToPrint(int parNbrOfLineToPrint);
void setShowHeader(bool show);
int getCharWidth();
// Table Offset Management
int_t getTableOffset();
void setTableOffset(int_t val);
// Update/Reload/Refresh/Repaint
virtual void prepareData();
signals:
void headerButtonPressed(int col);
void headerButtonReleased(int col);
void tableOffsetChanged(int_t i);
void viewableRows(int rows);
void repainted();
public slots:
void colorsUpdatedSlot();
void fontsUpdatedSlot();
// Update/Reload/Refresh/Repaint
virtual void reloadData();
void repaint();
// ScrollBar Management
void vertSliderActionSlot(int action);
private:
typedef struct _ColumnResizingData_t
{
bool splitHandle;
int index;
int lastPosX;
} ColumnResizingData_t;
typedef struct _HeaderButton_t
{
bool isClickable;
bool isPressed;
bool isMouseOver;
} HeaderButton_t;
typedef struct _Column_t
{
int width;
HeaderButton_t header;
QString title;
} Column_t;
typedef struct _Header_t
{
bool isVisible;
int height;
int activeButtonIndex;
} Header_t;
typedef struct _ScrollBar64_t
{
bool is64;
int rightShiftCount;
} ScrollBar64_t;
GuiState_t mGuiState;
ColumnResizingData_t mColResizeData;
QPushButton mHeaderButtonSytle;
QList<Column_t> mColumnList;
int_t mRowCount;
int_t mTableOffset;
Header_t mHeader;
int mNbrOfLineToPrint;
int_t mPrevTableOffset;
bool mShouldReload;
ScrollBar64_t mScrollBarAttributes;
protected:
QColor backgroundColor;
QColor textColor;
QColor separatorColor;
QColor headerTextColor;
QColor selectionColor;
};
#endif // ABSTRACTTABLEVIEW_H