diff --git a/src/UserOperationLogForm.cpp b/src/UserOperationLogForm.cpp index d18f7c4..134f969 100644 --- a/src/UserOperationLogForm.cpp +++ b/src/UserOperationLogForm.cpp @@ -11,7 +11,7 @@ #include #include #include -#include "components/SlideableTableView.h" +#include "components/SlideTableView.h" #include #include "src/dialogs/SelectDialog.h" #include "src/windows/mainwindow.h" @@ -34,7 +34,7 @@ UserOperationLogForm::UserOperationLogForm(QWidget* parent) { btn = new QPushButton(header); headerLayout->addWidget(btn, 0, Qt::AlignLeft); headerLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); - table = new SlideableTableView(this); + table = new SlideTableView(this); layout->addWidget(header); layout->addWidget(table); model = new LogFileTableModel(this); @@ -90,7 +90,7 @@ void UserOperationLogForm::loadUserOperationLog(const QString& fileName, const Q model->setHeader(header); // UserOperationLog::getHistoryLogFiles(); delete table; - table = new SlideableTableView(this); + table = new SlideTableView(this); layout->addWidget(table); table->setModel(model); diff --git a/src/components/SlideTableView.cpp b/src/components/SlideTableView.cpp new file mode 100644 index 0000000..a867ce6 --- /dev/null +++ b/src/components/SlideTableView.cpp @@ -0,0 +1,59 @@ +// +// Created by Krad on 2021/11/23. +// + +#include "SlideTableView.h" + +#include +#include +#include +#include + +namespace { + const double ROW_HEIGHT = 30.0l; +} +SlideTableView::SlideTableView(QWidget *parent) +: QTableView(parent) +, mIsDragging(false) +, mOriginPosY(-1) +, mOriginScrollBarV(0) +{ + +} + +SlideTableView::~SlideTableView() { + +} + +void SlideTableView::mousePressEvent(QMouseEvent *ev) { + mIsDragging = true; + mOriginPosY = ev->pos().y(); + mOriginScrollBarV = this->verticalScrollBar()->value(); + QTableView::mousePressEvent(ev); +} + +void SlideTableView::mouseMoveEvent(QMouseEvent *ev) { + if (!mIsDragging) { + QTableView::mouseMoveEvent(ev); + return; + } + if (this->verticalScrollBar()->isVisible()) { + int nv = (int) round(((double) mOriginScrollBarV * ROW_HEIGHT + ((double) (mOriginPosY - ev->pos().y()))) + / ROW_HEIGHT); + int max = this->verticalScrollBar()->maximum(); + int min = this->verticalScrollBar()->minimum(); + nv = nv > max ? max : (nv < min ? min : nv); + this->verticalScrollBar()->setValue(nv); + } + QTableView::mouseMoveEvent(ev); +} + +void SlideTableView::mouseReleaseEvent(QMouseEvent *ev) { + if (!mIsDragging)mIsDragging = false; + QTableView::mouseReleaseEvent(ev); +} + +void SlideTableView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { + QTableView::currentChanged(current, previous); + emit currentRowChanged(current.row()); +} diff --git a/src/components/SlideableTableView.h b/src/components/SlideTableView.h similarity index 60% rename from src/components/SlideableTableView.h rename to src/components/SlideTableView.h index 7388615..7a1c2c1 100644 --- a/src/components/SlideableTableView.h +++ b/src/components/SlideTableView.h @@ -2,15 +2,15 @@ // Created by Krad on 2021/11/23. // -#ifndef GUI_SLIDEABLETABLEVIEW_H -#define GUI_SLIDEABLETABLEVIEW_H +#ifndef GUI_SLIDETABLEVIEW_H +#define GUI_SLIDETABLEVIEW_H #include -class SlideableTableView:public QTableView { +class SlideTableView: public QTableView { Q_OBJECT public: - explicit SlideableTableView(QWidget *parent = nullptr); - ~SlideableTableView(); + explicit SlideTableView(QWidget *parent = nullptr); + ~SlideTableView() override; Q_SIGNALS: void currentRowChanged(int row); @@ -18,14 +18,13 @@ protected: void mousePressEvent(QMouseEvent *ev) override ; void mouseMoveEvent(QMouseEvent *ev) override ; void mouseReleaseEvent(QMouseEvent *ev) override ; - void currentChanged(const QModelIndex ¤t, const QModelIndex &previous) override; private: - bool isDragging = false; - int ox,oy,ov; + bool mIsDragging; + int mOriginPosY,mOriginScrollBarV; }; -#endif //GUI_SLIDEABLETABLEVIEW_H +#endif //GUI_SLIDETABLEVIEW_H diff --git a/src/components/SlideableTableView.cpp b/src/components/SlideableTableView.cpp deleted file mode 100644 index d07b72d..0000000 --- a/src/components/SlideableTableView.cpp +++ /dev/null @@ -1,75 +0,0 @@ -// -// Created by Krad on 2021/11/23. -// - -#include "SlideableTableView.h" -#include -#include -#include -#include - -SlideableTableView::SlideableTableView(QWidget *parent) : QTableView(parent) { - -} - -SlideableTableView::~SlideableTableView() { - -} - -void SlideableTableView::mousePressEvent(QMouseEvent *ev) { - isDragging = true; - ox = ev->pos().x(); - oy = ev->pos().y(); - ov = this->verticalScrollBar()->value(); - QTableView::mousePressEvent(ev); -} - -void SlideableTableView::mouseMoveEvent(QMouseEvent *ev) { - if (!isDragging) - { - QTableView::mouseMoveEvent(ev); - return; - } else{ - if (this->verticalScrollBar()->isVisible()) - { - int nv = (int)round(((double)ov*30.0+((double)(oy-ev->pos().y())))/30.0); - int max = this->verticalScrollBar()->maximum(); - int min = this->verticalScrollBar()->minimum(); - printf("max:%d, min:%d, nv:%d\r\n", max, min, nv); - nv = nv>max?max:(nvverticalScrollBar()->setValue(nv); - } -// if (this->verticalScrollBar()->isVisible()) -// { -// this->verticalScrollBar()->setPageStep(this->viewport()->height()); -// this->verticalScrollBar()->setRange(0,this->height()); -// int nv =this->verticalScrollBar()->value()+(oy-ev->pos().y()); -// int max = this->verticalScrollBar()->maximum(); -// int min = this->verticalScrollBar()->minimum(); -// printf("max:%d, min:%d, nv:%d\r\n", max, min, nv); -// nv = nv>max?max:(nvverticalScrollBar()->setValue(nv); -// return; -// } - } - QTableView::mouseMoveEvent(ev); -} - -void SlideableTableView::mouseReleaseEvent(QMouseEvent *ev) { - if (!isDragging) - { - isDragging = false; - } - -// if (this->verticalScrollBar()->isVisible()) -// { -// QApplication::sendEvent(this->verticalScrollBar(),ev); -// } - QTableView::mouseReleaseEvent(ev); -} - -void SlideableTableView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { - QTableView::currentChanged(current, previous); - emit currentRowChanged(current.row()); -} diff --git a/src/forms/select/SelectFormWidget.cpp b/src/forms/select/SelectFormWidget.cpp index 4309aaa..2540a46 100644 --- a/src/forms/select/SelectFormWidget.cpp +++ b/src/forms/select/SelectFormWidget.cpp @@ -6,7 +6,7 @@ #include #include #include -#include "components/SlideableTableView.h" +#include "components/SlideTableView.h" #include #include #include @@ -53,7 +53,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) : contentLayout->setContentsMargins(5, 5, 0, 5); this->ui->contentWidget->setLayout(contentLayout); // TableView for patient - SlideableTableView* table = new SlideableTableView(this); + SlideTableView* table = new SlideTableView(this); table->setAlternatingRowColors(true); table->setSelectionMode(QAbstractItemView::SingleSelection); table->setEditTriggers(QAbstractItemView::NoEditTriggers); @@ -134,7 +134,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) : btnAdd->setEnabled(!disableALL); }; //table current row selection changing event - connect(table, &SlideableTableView::currentRowChanged, [=](int row) { + connect(table, &SlideTableView::currentRowChanged, [=](int row) { setPatientDetail(table, model, edit_patient); prepareButtons(false); }); @@ -310,7 +310,7 @@ SelectFormWidget::SelectFormWidget(QWidget* parent) : prepareButtons(false); } -void SelectFormWidget::setPatientDetail(const SlideableTableView *table, const QSqlTableModel *model, +void SelectFormWidget::setPatientDetail(const SlideTableView *table, const QSqlTableModel *model, EditPatientForm *edit_patient) const { PatientInformation pat; #define ADD_PATIENT_PROPERTY(val)\ diff --git a/src/forms/select/SelectFormWidget.h b/src/forms/select/SelectFormWidget.h index 1c0ddd1..bf2d93f 100644 --- a/src/forms/select/SelectFormWidget.h +++ b/src/forms/select/SelectFormWidget.h @@ -9,7 +9,7 @@ #include "forms/tabformwidget.h" #include "EditPatientDialog.h" class EditPatientForm; -class SlideableTableView; +class SlideTableView; class SelectFormWidget: public TabFormWidget { Q_OBJECT public: @@ -20,7 +20,7 @@ private: QString selectedPatientUID; void - setPatientDetail(const SlideableTableView *table, const QSqlTableModel *model, EditPatientForm *edit_patient) const; + setPatientDetail(const SlideTableView *table, const QSqlTableModel *model, EditPatientForm *edit_patient) const; }; diff --git a/src/forms/settings/AccountTableForm.cpp b/src/forms/settings/AccountTableForm.cpp index 7e66530..ebaad20 100644 --- a/src/forms/settings/AccountTableForm.cpp +++ b/src/forms/settings/AccountTableForm.cpp @@ -13,13 +13,13 @@ #include "db/SQLHelper.h" #include "models/User.h" #include -#include "components/SlideableTableView.h" +#include "components/SlideTableView.h" #include "src/dialogs/AccountFormDialog.h" #include "event/EventCenter.h" AccountTableForm::AccountTableForm(QWidget* parent) { layout = new QVBoxLayout(this); layout->setMargin(0); - QTableView* table = new SlideableTableView(this); + QTableView* table = new SlideTableView(this); layout->addWidget(table); // TableView for patient table->setAlternatingRowColors(true); diff --git a/src/network/networkcfgdialog.ui b/src/network/networkcfgdialog.ui index ce4262a..ea31861 100644 --- a/src/network/networkcfgdialog.ui +++ b/src/network/networkcfgdialog.ui @@ -216,7 +216,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} 30 - + @@ -381,7 +381,7 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} 9 - + Qt::DashLine @@ -557,9 +557,9 @@ QLineEdit#led_inface{font-size:15px;border: 0px;} 1 - SlideableTableView + SlideTableView QTableView -
components/SlideableTableView.h
+
components/SlideTableView.h