Fix Up Log Window with new QTOZWLog AbstractItemModel

This commit is contained in:
Justin Hammond 2020-06-04 17:33:10 +08:00
parent 826a2f47cc
commit 81f9e21fb8
11 changed files with 122 additions and 20 deletions

View file

@ -1,6 +1,5 @@
#include <QTableWidgetItem>
#include <QTime>
#include <QTimer>
#include "eventwindow.h"
#include "ui_eventwindow.h"
@ -18,7 +17,8 @@ EventWindow::EventWindow(QWidget *parent) :
ui->eventTable->setHorizontalHeaderItem(1, new QTableWidgetItem("Message"));
ui->eventTable->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->eventTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
this->m_scrollTimer.setInterval(500);
connect(&this->m_scrollTimer, &QTimer::timeout, this, &EventWindow::scrollWindow);
}
EventWindow::~EventWindow()
@ -39,5 +39,16 @@ void EventWindow::newEvent(QString Msg) {
this->ui->eventTable->setItem(this->ui->eventTable->rowCount() -1,
1,
message);
QTimer::singleShot(10, this->ui->eventTable, &QTableWidget::scrollToBottom);
if (!this->m_scrollTimer.isActive())
this->m_scrollTimer.start();
}
void EventWindow::scrollWindow()
{
if (this->ui->pauseScroll->isChecked())
this->ui->eventTable->scrollToBottom();
this->m_scrollTimer.stop();
}

View file

@ -2,6 +2,8 @@
#define EVENTWINDOW_H
#include <QWidget>
#include <QTimer>
namespace Ui {
class EventWindow;
@ -17,8 +19,11 @@ public:
public slots:
void newEvent(QString);
private slots:
void scrollWindow();
private:
Ui::EventWindow *ui;
QTimer m_scrollTimer;
};
#endif // EVENTWINDOW_H

View file

@ -13,7 +13,31 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QToolButton" name="pauseScroll">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="ozwadmin-main.qrc">
<normaloff>:/res/buttonIcons/play.svg</normaloff>
<normalon>:/res/buttonIcons/pause.svg</normalon>:/res/buttonIcons/play.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>12</width>
<height>12</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="eventTable">
<property name="columnCount">
@ -25,6 +49,8 @@
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="ozwadmin-main.qrc"/>
</resources>
<connections/>
</ui>

View file

@ -14,31 +14,39 @@ LogWindow::LogWindow(QWidget *parent) :
this->ui->logview->horizontalHeader()->setStretchLastSection(true);
this->ui->logview->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
this->ui->logview->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// this->ui->logview->resizeColumnsToContents();
this->m_log = OZWCore::get()->getQTOZWManager()->getLog();
connect(this->m_log, &QTOZWLog::newLogLine, this, &LogWindow::newMsg);
this->m_log->syncroniseLogs();
this->m_scrollTimer.setInterval(500);
connect(&this->m_scrollTimer, &QTimer::timeout, this, &LogWindow::scrollWindow);
}
LogWindow::~LogWindow()
{
this->m_scrollTimer.stop();
delete ui;
}
void LogWindow::newMsg(QDateTime time, LogLevels::Level level, quint8 s_node, QString s_msg) {
qCDebug(ozwadmin) << time << level << s_node << s_msg;
Q_UNUSED(time);
Q_UNUSED(level);
Q_UNUSED(s_node);
Q_UNUSED(s_msg);
if (!this->m_scrollTimer.isActive())
this->m_scrollTimer.start();
}
void LogWindow::scrollWindow()
{
if (this->ui->pauseScroll->isChecked())
this->ui->logview->scrollToBottom();
void LogWindow::setModel(QAbstractItemModel *model) {
this->ui->logview->setModel(model);
// this->ui->logview->resizeColumnsToContents();
connect(this->ui->logview->model(), &QAbstractItemModel::rowsAboutToBeInserted,
this->ui->logview, [&] {
auto bar = this->ui->logview->verticalScrollBar();
viewAtBottom = bar ? (bar->value() == bar->maximum()) : false;
});
connect(this->ui->logview->model(), &QAbstractItemModel::rowsInserted,
this->ui->logview, [&]{ if (viewAtBottom) this->ui->logview->scrollToBottom(); });
this->m_scrollTimer.stop();
}
void LogWindow::init() {
this->m_logModel = new QTOZWLogModel(this->m_log, this);
this->ui->logview->setModel(this->m_logModel);
}

View file

@ -16,13 +16,16 @@ class LogWindow : public QWidget
public:
explicit LogWindow(QWidget *parent = nullptr);
~LogWindow();
void setModel(QAbstractItemModel *model);
void init();
private slots:
void newMsg(QDateTime time, LogLevels::Level level, quint8 s_node, QString s_msg);
void scrollWindow();
private:
Ui::LogWindow *ui;
bool viewAtBottom = true;
QTOZWLog *m_log;
QTOZWLogModel *m_logModel;
QTimer m_scrollTimer;
};
#endif // LOGWINDOW_H

View file

@ -14,6 +14,33 @@
<string>OZW Log</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QToolButton" name="pauseScroll">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="ozwadmin-main.qrc">
<normaloff>:/res/buttonIcons/play.svg</normaloff>
<normalon>:/res/buttonIcons/pause.svg</normalon>:/res/buttonIcons/play.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>12</width>
<height>12</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="logview">
<property name="font">
@ -53,6 +80,8 @@ QHeaderView::section:horizontal {margin-right: 2; border: 1px solid}</string>
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="ozwadmin-main.qrc"/>
</resources>
<connections/>
</ui>

View file

@ -177,6 +177,9 @@ void MainWindow::openDefaultWindows() {
this->ui->menuWindow->addAction(logWindowDW->toggleViewAction());
this->m_DockManager->addDockWidget(ads::CenterDockWidgetArea, logWindowDW, BottomDockWidget);
lw->init();
/* set Active Tabs */
RightDockWidget->setCurrentDockWidget(DeviceInfoDW);
BottomDockWidget->setCurrentDockWidget(eventViewDW);

View file

@ -53,7 +53,7 @@ void nodeTableWidget::setModel(QAbstractItemModel *model)
connect(ui->nodeList->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &nodeTableWidget::currentRowChanged);
connect(proxyNodeList, &QTOZW_proxyNodeModel::rowsInserted, this, &nodeTableWidget::resizeContents);
connect(proxyNodeList, &QTOZW_proxyNodeModel::rowsRemoved, this, &nodeTableWidget::resizeContents);
QTimer::singleShot(100, this, &nodeTableWidget::resizeContents);
QTimer::singleShot(500, this, &nodeTableWidget::resizeContents);
}
QModelIndex nodeTableWidget::currentIndex()

View file

@ -12,5 +12,7 @@
<file>res/nodeflags/Sleeping.svg</file>
<file>res/nodeflags/zwaveplus.png</file>
<file>res/start.svg</file>
<file>res/buttonIcons/pause.svg</file>
<file>res/buttonIcons/play.svg</file>
</qresource>
</RCC>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m50 0c27.668 0 50 22.332 50 50s-22.332 50-50 50-50-22.332-50-50 22.332-50 50-50zm0 3.7227c25.566 0 46.277 20.711 46.277 46.277s-20.711 46.277-46.277 46.277-46.277-20.711-46.277-46.277 20.711-46.277 46.277-46.277z" fill-rule="evenodd"/>
<path d="m43.852 22.168v55.664h-16.18v-55.664h16.18zm-2.9141 2.9141h-10.52v49.84h10.52z"/>
<path d="m72.332 22.168v55.664h-16.18v-55.664h16.18zm-2.9141 2.9141h-10.355v49.84h10.355z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 598 B

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100pt" height="100pt" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<g>
<path d="m50 94c-11.668 0-22.859-4.6367-31.113-12.887-8.25-8.2539-12.887-19.445-12.887-31.113s4.6367-22.859 12.887-31.113c8.2539-8.25 19.445-12.887 31.113-12.887s22.859 4.6367 31.113 12.887c8.25 8.2539 12.887 19.445 12.887 31.113-0.011719 11.664-4.6523 22.848-12.902 31.098s-19.434 12.891-31.098 12.902zm0-84c-10.609 0-20.781 4.2148-28.285 11.715-7.5 7.5039-11.715 17.676-11.715 28.285s4.2148 20.781 11.715 28.285c7.5039 7.5 17.676 11.715 28.285 11.715s20.781-4.2148 28.285-11.715c7.5-7.5039 11.715-17.676 11.715-28.285s-4.2148-20.781-11.715-28.285c-7.5039-7.5-17.676-11.715-28.285-11.715z"/>
<path d="m36.199 73v-46l39.852 23zm4-39.09v32.168l27.852-16.078z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 828 B