test_sdk/gui/gtl_gui_log_viewer.h

201 lines
5.3 KiB
C++

#ifndef GTL_GUI_LOG_VIEWER_H
#define GTL_GUI_LOG_VIEWER_H
#include <QWidget>
#include <QAbstractTableModel>
#include <QSortFilterProxyModel>
#include <QTableView>
#include <QComboBox>
#include <QPushButton>
#include <QLineEdit>
#include <QDateTime>
#include <QCalendarWidget>
#include <QAction>
#include <QWheelEvent>
#include <QScrollBar>
#include "gui_global.h"
#include "core/gtl_logger.h"
namespace gtl
{
namespace gui
{
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* main view model
*/
class log_viewer_model : public QAbstractTableModel {
Q_OBJECT
public:
log_viewer_model( QObject* parent = 0 );
int rowCount( const QModelIndex& parent = QModelIndex() ) const;
int columnCount( const QModelIndex& paren = QModelIndex() ) const;
QVariant data( const QModelIndex& index, int role ) const;
bool setData( const QModelIndex& index, const QVariant& value, int role );
QVariant headerData( int section, Qt::Orientation orientation, int role ) const;
void set_level_value(uint8_t val);
void clear(void);
public slots:
void slt_append_string( const QString& level, const QString& date, const QString& time, const QString& tag, const QString& text );
signals:
void sgnl_set_data(void);
private:
enum Column {
LEVEL = 0,
DATE,
TIME,
TAG,
TEXT,
LAST
};
uint8_t m_select_levels;
typedef QHash< Column, QVariant > LogViewerData;
typedef QList< LogViewerData > Logs;
Logs m_logs;
};
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* proxy model
*/
class filter_proxy_model : public QSortFilterProxyModel
{
Q_OBJECT
public:
filter_proxy_model(QObject *parent = nullptr);
void set_filter_level(const QString &level);
void set_search_string(const QString &str);
void set_enable_search_string(void);
void set_disable_search_string(void);
void set_enable_date_filter(void);
void set_disable_date_filter(void);
void set_datetime_filter(QDateTime from, QDateTime to);
protected:
QString m_filter_level;
QString m_search_string;
QDateTime m_dt_from;
QDateTime m_dt_to;
bool m_enable_text_search;
bool m_enable_date_filter;
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
private:
bool check_date_in_range(QDateTime date) const;
};
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* custom QTableView class
*/
class MyTableVeiw : public QTableView
{
Q_OBJECT
public:
explicit MyTableVeiw(QWidget *parent = nullptr){};
enum Rotate {
NONE = 0,
DOWN,
UP
};
int flag_whell_rotate = DOWN;
protected:
virtual void wheelEvent(QWheelEvent *e) override
{
if (e->angleDelta().y() < 0)
{
flag_whell_rotate = DOWN;
}
else
{
flag_whell_rotate = UP;
}
QTableView::wheelEvent(e);
};
};
/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* log_viewer
*/
class GTL_GUI_EXPORT log_viewer : public QWidget
{
Q_OBJECT
public:
explicit log_viewer(QWidget *parent = nullptr);
public slots:
void slt_data_changed(void);
void slt_rows_about_to_be_inserted();
void slt_check_levels(int index);
void slt_update_search_string(void);
void slt_reset_search(void);
void slt_dialog_set_datetime(void);
void slt_update_dt(void);
void slt_set_scroll_range(int min, int max);
void slt_set_scroll_value();
void slt_table_click(const QModelIndex &index);
private:
filter_proxy_model *m_proxy_model;
MyTableVeiw *m_view;
log_viewer_model *m_model;
QModelIndex m_prev_index = QModelIndex();
int m_prev_value = -1;
QComboBox *m_cbb_level;
QLineEdit *m_le_search_string;
QLineEdit *m_le_search_date;
QLineEdit *m_le_search_time;
QLineEdit *m_le_dt_from;
QLineEdit *m_le_dt_to;
QAction *m_action_le_dt_from;
QAction *m_action_le_dt_to;
QDate m_date_from;
QTime m_time_from;
QDate m_date_to;
QTime m_time_to;
QPushButton *m_b_reset_search;
QPushButton *m_b_clear_data;
QCalendarWidget *m_calendar_widget;
QDialog *m_dialog_set_datetime;
int m_scroll_min;
int m_scroll_max;
};
}
}
#endif // GTL_GUI_LOG_VIEWER_H