diff --git a/EffectUI/EffectUI.pro b/EffectUI/EffectUI.pro index 2653963..75807b6 100644 --- a/EffectUI/EffectUI.pro +++ b/EffectUI/EffectUI.pro @@ -19,13 +19,15 @@ SOURCES += main.cpp\ sutilfunction.cpp \ sutilclass.cpp \ srunninglistwidget.cpp \ - stimer.cpp + stimer.cpp \ + sadddelwidget.cpp HEADERS += widget.h \ scompanylistwidget.h \ sutilfunction.h \ sutilclass.h \ srunninglistwidget.h \ - stimer.h + stimer.h \ + sadddelwidget.h FORMS += widget.ui diff --git a/EffectUI/EffectUI.pro.user b/EffectUI/EffectUI.pro.user index 4b9aeea..0084adb 100644 --- a/EffectUI/EffectUI.pro.user +++ b/EffectUI/EffectUI.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/EffectUI/sadddelwidget.cpp b/EffectUI/sadddelwidget.cpp new file mode 100644 index 0000000..688cac7 --- /dev/null +++ b/EffectUI/sadddelwidget.cpp @@ -0,0 +1,69 @@ +#include "sadddelwidget.h" +#include +#include +#include + +SAddDelWidget::SAddDelWidget(QWidget *parent): + m_pbtnAdd(new QPushButton(parent)), m_pbtnDel(new QPushButton(parent)), + m_pParent(parent), m_playout(new QVBoxLayout(parent)) + +{ + initButton(); + initLayout(); +} + +SAddDelWidget::~SAddDelWidget() +{ + if (m_pParent == nullptr) + { + disconnect(m_pbtnAdd, 0, 0, 0); + disconnect(m_pbtnDel, 0, 0, 0); + delete m_pbtnAdd; + delete m_pbtnDel; + } +} + +void SAddDelWidget::initButton() +{ + m_pbtnAdd->setText("->"); + m_pbtnDel->setText("<-"); + m_pbtnAdd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + m_pbtnDel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + connect(m_pbtnAdd, &QPushButton::released, this, &SAddDelWidget::slotClickedAddBtn); + connect(m_pbtnDel, &QPushButton::released, this, &SAddDelWidget::slotClickedDelBtn); +} + +void SAddDelWidget::enableBtnDel(bool _enable) +{ + m_pbtnAdd->setEnabled(_enable); +} + +void SAddDelWidget::enableBtnAdd(bool _enable) +{ + m_pbtnDel->setEnabled(_enable); +} + +void SAddDelWidget::slotClickedAddBtn() +{ + qDebug() << "click slotClickedAddBtn"; + emit signalClickedAddBtn(); +} + +void SAddDelWidget::slotClickedDelBtn() +{ + qDebug() << "click slotClickedDelBtn"; + emit signalClickedDelBtn(); +} + +void SAddDelWidget::initLayout() +{ + m_playout->addWidget(m_pbtnAdd); + m_playout->addWidget(m_pbtnDel); +} + +QVBoxLayout* SAddDelWidget::getLayout() +{ + return m_playout; +} + + diff --git a/EffectUI/sadddelwidget.h b/EffectUI/sadddelwidget.h new file mode 100644 index 0000000..4252f12 --- /dev/null +++ b/EffectUI/sadddelwidget.h @@ -0,0 +1,45 @@ +#ifndef SADDDELWIDGET +#define SADDDELWIDGET + +#include + +class QPushButton; +class QVBoxLayout; +class QWidget; + + +class SAddDelWidget: public QObject +{ + Q_OBJECT + +public: + explicit SAddDelWidget(QWidget *parent = nullptr); + ~SAddDelWidget(); + QVBoxLayout* getLayout(); + +private: + void initButton(); + void initLayout(); + +private slots: + void slotClickedAddBtn(); + void slotClickedDelBtn(); + +public slots: + void enableBtnAdd(bool _enable); + void enableBtnDel(bool _enable); + +signals: + void signalClickedAddBtn(); + void signalClickedDelBtn(); + +private: + QPushButton* m_pbtnAdd; + QPushButton* m_pbtnDel; + QWidget* m_pParent; + QVBoxLayout* m_playout; +}; + + +#endif // SADDDELWIDGET + diff --git a/EffectUI/scompanylistwidget.cpp b/EffectUI/scompanylistwidget.cpp index bee9ce2..227ec67 100644 --- a/EffectUI/scompanylistwidget.cpp +++ b/EffectUI/scompanylistwidget.cpp @@ -91,6 +91,7 @@ void SCompanyListWidget::initLayout() m_playout->addWidget(m_ptableWidget); m_playout->addLayout(pblbutton); + } void SCompanyListWidget::initTableWidget() @@ -99,6 +100,7 @@ void SCompanyListWidget::initTableWidget() m_ptableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); m_ptableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); m_ptableWidget->setSortingEnabled(true); + //m_ptableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); connect(m_ptableWidget, &QTableWidget::itemSelectionChanged, this, &SCompanyListWidget::slotClickedItem); } @@ -161,6 +163,7 @@ void SCompanyListWidget::refresh() QTableWidgetItem *itemCompany = new QTableWidgetItem(query.value(static_cast(E_TABLE_HEADER::COMPANY) + 1).toString()); itemCompany->setData(Qt::UserRole, query.value(0)); + m_ptableWidget->setRowHidden(nRow, false); m_ptableWidget->setItem(nRow, static_cast(E_TABLE_HEADER::COMPANY), itemCompany); m_ptableWidget->setItem(nRow, static_cast(E_TABLE_HEADER::START_DATE), @@ -172,7 +175,6 @@ void SCompanyListWidget::refresh() query.value(static_cast(E_TABLE_HEADER::EVENT_NUM) + 1).toInt()))); m_ptableWidget->setItem(nRow, static_cast(E_TABLE_HEADER::STATUS), new QTableWidgetItem("")); - m_ptableWidget->setRowHidden(nRow, false); ++nRow; } @@ -297,7 +299,7 @@ QVector> SCompanyListWidget::getSelectedList() const item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast(E_TABLE_HEADER::COMPANY)))); item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast(E_TABLE_HEADER::START_DATE)))); item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast(E_TABLE_HEADER::END_DATE)))); - item.append(QTableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast(E_TABLE_HEADER::EVENT_NUM)))); + item.append(STableWidgetItem(*m_ptableWidget->item(modelIndex.row(), static_cast(E_TABLE_HEADER::EVENT_NUM)))); items.append(item); } return items; diff --git a/EffectUI/srunninglistwidget.cpp b/EffectUI/srunninglistwidget.cpp index a2b6301..fb2f069 100644 --- a/EffectUI/srunninglistwidget.cpp +++ b/EffectUI/srunninglistwidget.cpp @@ -1,4 +1,7 @@ #include "srunninglistwidget.h" +#include "sutilfunction.h" +#include "sutilclass.h" + #include #include #include @@ -9,23 +12,37 @@ #include #include #include +#include namespace { -QString strDatabaseName("runninglist"); +const QString strDatabaseName("runninglist"); } +enum class SRunningListWidget::E_TABLE_HEADER +{ + COMPANY = 0, + START_DATE, + END_DATE, + EVENT_NUM, + STATUS, + LAST_UPDATE_TIME, + MAX +}; SRunningListWidget::SRunningListWidget(QWidget* parent) : - m_pwParent(parent), m_pbtnTimerStart(new QPushButton(parent)), m_pbtnTimerStop(new QPushButton(parent)), - m_pbtnForceStart(new QPushButton(parent)), m_pbtnForceStop(new QPushButton(parent)), m_ptableWidget(new QTableWidget(parent)), + m_pwParent(parent), m_pbtnTimerStart(new QPushButton(parent)), + m_pbtnTimerStop(new QPushButton(parent)), m_pbtnForceStart(new QPushButton(parent)), + m_pbtnForceStop(new QPushButton(parent)), m_ptableWidget(new QTableWidget(parent)), m_playout(new QVBoxLayout(parent)), m_pslTableHeader(new QStringList) { - *m_pslTableHeader << "Company" << "Start date" << "End date" << "Event Num" << "Status" << "Last Update Time"; + *m_pslTableHeader << "Company" << "Start date" << "End date" + << "Event Num" << "Status" << "Last Update Time"; initButton(); initDatabase(); - initLayout(); initTableWidget(); + initLayout(); + resetTableHeader(); } void SRunningListWidget::initButton() @@ -35,105 +52,254 @@ void SRunningListWidget::initButton() m_pbtnTimerStart->setText("Timer Start"); m_pbtnTimerStop->setText("Timer Stop"); - connect(m_pbtnForceStart, &QPushButton::released, this, &SRunningListWidget::) + connect(m_pbtnForceStart, &QPushButton::released, + this, &SRunningListWidget::slotForceStart); + connect(m_pbtnForceStop, &QPushButton::released, + this, &SRunningListWidget::slotForceStop); + connect(m_pbtnTimerStart, &QPushButton::released, + this, &SRunningListWidget::slotTimerStart); + connect(m_pbtnTimerStop, &QPushButton::released, + this, &SRunningListWidget::slotTimerStop); } void SRunningListWidget::initDatabase() { + databaseSetting(strDatabaseName); } void SRunningListWidget::initTableWidget() { + m_ptableWidget->setColumnCount(m_pslTableHeader->size()); + m_ptableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + m_ptableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + m_ptableWidget->setSortingEnabled(true); + //m_ptableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + connect(m_ptableWidget, &QTableWidget::itemSelectionChanged, + this, &SRunningListWidget::slotClickedItem); } void SRunningListWidget::initLayout() { + QHBoxLayout *pblbutton = new QHBoxLayout; + pblbutton->addWidget(m_pbtnTimerStart); + pblbutton->addWidget(m_pbtnTimerStop); + pblbutton->addWidget(m_pbtnForceStart); + pblbutton->addWidget(m_pbtnForceStop); + + m_playout->addWidget(m_ptableWidget); + m_playout->addLayout(pblbutton); +} + +void SRunningListWidget::slotClickedItem() +{ + emit signalClickItem(); +} + +QVector SRunningListWidget::getSelectedList() const +{ + auto modelIndexes = m_ptableWidget->selectionModel()->selectedRows(); + + QVector items; + + foreach (auto& modelIndex, modelIndexes) + { + items.append(modelIndex.row()); + } + return items; +} + +QVector SRunningListWidget::getAllList() const +{ + QVector items; + for (int i = 0; i < m_ptableWidget->rowCount(); ++i) + { + int num = m_ptableWidget->item(i, static_cast(E_TABLE_HEADER::COMPANY))-> + data(Qt::UserRole).toInt(); + items.append(num); + } + return items; +} + +void SRunningListWidget::removeSelectedList() +{ + QModelIndexList selectedList = m_ptableWidget->selectionModel()->selectedRows(); + for (int i = selectedList.size() - 1; i >= 0; --i) + { + m_ptableWidget->removeRow(selectedList[i].row()); + } } QVBoxLayout* SRunningListWidget::getLayout() const { + return m_playout; } void SRunningListWidget::delList(int _id) { + if (m_setNumber.contains(_id)) + { + m_setNumber.remove(_id); + for (int i = 0; i < m_ptableWidget->rowCount(); ++i) + { + auto item = m_ptableWidget->item(i, static_cast(E_TABLE_HEADER::COMPANY)); + if (item->data(Qt::UserRole).toInt() == _id) + { + m_ptableWidget->removeRow(i); + break; + } + } + } } void SRunningListWidget::delList(QVector _ids) { + foreach (auto& id, _ids) + { + delList(id); + } } void SRunningListWidget::resetTableHeader() { + m_ptableWidget->clear(); + m_ptableWidget->setHorizontalHeaderLabels(*m_pslTableHeader); } SRunningListWidget::~SRunningListWidget() { + if (m_pwParent == nullptr) + { + disconnect(m_pbtnForceStart, &QPushButton::released, + this, &SRunningListWidget::slotForceStart); + disconnect(m_pbtnForceStop, &QPushButton::released, + this, &SRunningListWidget::slotForceStop); + disconnect(m_pbtnTimerStart, &QPushButton::released, + this, &SRunningListWidget::slotTimerStart); + disconnect(m_pbtnTimerStop, &QPushButton::released, + this, &SRunningListWidget::slotTimerStop); + disconnect(m_ptableWidget, &QTableWidget::itemSelectionChanged, + this, &SRunningListWidget::slotClickedItem); + + delete m_pbtnForceStart; + delete m_pbtnForceStop; + delete m_pbtnTimerStart; + delete m_pbtnTimerStop; + delete m_ptableWidget; + delete m_playout; + } } void SRunningListWidget::addList(QVector> items) { - + foreach (auto& item, items) + { + int num = item[static_cast(E_TABLE_HEADER::COMPANY)].data(Qt::UserRole).toInt(); + if (m_setNumber.contains(num)) + continue; + m_setNumber.insert(num); + m_ptableWidget->insertRow(m_ptableWidget->rowCount()); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::COMPANY), + new QTableWidgetItem(item[static_cast(E_TABLE_HEADER::COMPANY)])); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::START_DATE), + new QTableWidgetItem(item[static_cast(E_TABLE_HEADER::START_DATE)])); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::END_DATE), + new QTableWidgetItem(item[static_cast(E_TABLE_HEADER::END_DATE)])); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::EVENT_NUM), + new STableWidgetItem(item[static_cast(E_TABLE_HEADER::EVENT_NUM)])); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::STATUS), + new QTableWidgetItem("")); + m_ptableWidget->setItem(m_ptableWidget->rowCount() - 1, + static_cast(E_TABLE_HEADER::LAST_UPDATE_TIME), + new QTableWidgetItem("")); + } } -void SRunningListWidget::enableBtnTimerStart(bool enable) +QTableWidgetItem* SRunningListWidget::findWidgetItembyID(int _id, E_TABLE_HEADER _header) const { + QTableWidgetItem* item = nullptr; + for (int i = 0; i < m_ptableWidget->rowCount(); ++i) + { + QTableWidgetItem* temp = m_ptableWidget->item(i, static_cast(E_TABLE_HEADER::COMPANY)); + if (temp->data(Qt::UserRole).toInt() == _id) + { + item = m_ptableWidget->item(i, static_cast(_header)); + break; + } + } + return item; } -void SRunningListWidget::enableBtnTimerStop(bool enable) +void SRunningListWidget::enableBtnTimerStart(bool _enable) { - + m_pbtnTimerStart->setEnabled(_enable); } -void SRunningListWidget::enableBtnForceStart(bool enable) +void SRunningListWidget::enableBtnTimerStop(bool _enable) { - + m_pbtnTimerStop->setEnabled(_enable); } -void SRunningListWidget::enableBtnForceStop(bool enable) +void SRunningListWidget::enableBtnForceStart(bool _enable) { + m_pbtnForceStart->setEnabled(_enable); +} +void SRunningListWidget::enableBtnForceStop(bool _enable) +{ + m_pbtnForceStop->setEnabled(_enable); } void SRunningListWidget::setRunning(int _id) { - + QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::STATUS); + if (item) + item->setText("Running"); } void SRunningListWidget::setWaiting(int _id) { - + QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::STATUS); + if (item) + item->setText("Wating"); } void SRunningListWidget::setComplete(int _id) { - -} - -QVector SRunningListWidget::getList() -{ - + QTableWidgetItem* item = findWidgetItembyID(_id, E_TABLE_HEADER::LAST_UPDATE_TIME); + if (item) + item->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); } void SRunningListWidget::slotTimerStart() { - + qDebug() << "clicked TimerStart()"; + emit signalTimerStart(); } void SRunningListWidget::slotTimerStop() { - + qDebug() << "clicked slotTimerStop()"; + emit signalTimerStop(); } void SRunningListWidget::slotForceStart() { - + qDebug() << "clicked slotForceStart()"; + emit signalForceStart(); } void SRunningListWidget::slotForceStop() { - + qDebug() << "clicked slotForceStop()"; + emit signalForceStop(); } + diff --git a/EffectUI/srunninglistwidget.h b/EffectUI/srunninglistwidget.h index 7606054..362ddf3 100644 --- a/EffectUI/srunninglistwidget.h +++ b/EffectUI/srunninglistwidget.h @@ -4,13 +4,14 @@ #include #include #include +#include +#include class QPushButton; class QTableWidget; class QDateEdit; class QVBoxLayout; class QStringList; -class QTableWidgetItem; class SRunningListWidget:public QObject { @@ -32,28 +33,37 @@ private: void initDatabase(); void initLayout(); void resetTableHeader(); + QTableWidgetItem* findWidgetItembyID(int _id, E_TABLE_HEADER _header) const; public slots: void addList(QVector> items); - QVector getList(); + QVector getSelectedList() const; + QVector getAllList() const; void enableBtnTimerStart(bool enable); void enableBtnTimerStop(bool enable); void enableBtnForceStart(bool enable); void enableBtnForceStop(bool enable); + void setRunning(int _id); + void setWaiting(int _id); + void setComplete(int _id); + void removeSelectedList(); + void slotTimerStart(); void slotTimerStop(); void slotForceStart(); void slotForceStop(); - void setRunning(int _id); - void setWaiting(int _id); - void setComplete(int _id); + + +private slots: + void slotClickedItem(); signals: void signalTimerStart(); void signalTimerStop(); void signalForceStart(); void signalForceStop(); + void signalClickItem(); private: QPushButton* m_pbtnTimerStart; @@ -64,6 +74,7 @@ private: QWidget* m_pwParent; QVBoxLayout *m_playout; std::unique_ptr m_pslTableHeader; + QSet m_setNumber; }; diff --git a/EffectUI/stimer.cpp b/EffectUI/stimer.cpp index 1ced1df..cf19a31 100644 --- a/EffectUI/stimer.cpp +++ b/EffectUI/stimer.cpp @@ -9,12 +9,12 @@ const int TIME = 300000; // 5 minute STimer::STimer(): m_pTimer(new QTimer), m_nPreviousHour(-1) { m_pTimer->setInterval(TIME); - connect(&(*m_pTimer), &QTimer::timeout, this, &checkTimeout); + connect(&(*m_pTimer), &QTimer::timeout, this, &STimer::checkTimeout); } STimer::~STimer() { - disconnect(&(*m_pTimer), &QTimer::timeout, this, &checkTimeout); + disconnect(&(*m_pTimer), &QTimer::timeout, this, &STimer::checkTimeout); } STimer::STimer(int time): STimer() @@ -44,7 +44,7 @@ void STimer::stop() m_pTimer->stop(); } -bool STimer::isActive() const noexcept +bool STimer::isActive() const { return m_pTimer->isActive(); } diff --git a/EffectUI/stimer.h b/EffectUI/stimer.h index e61cc54..388eb87 100644 --- a/EffectUI/stimer.h +++ b/EffectUI/stimer.h @@ -25,7 +25,7 @@ public: STimer& operator=(const STimer& other) = delete; void start(); void stop(); - bool isActive() const noexcept; + bool isActive() const; void set(int time); void set(QVector times); void unset(int time); diff --git a/EffectUI/sutilclass.cpp b/EffectUI/sutilclass.cpp index 5878fd6..c0d3790 100644 --- a/EffectUI/sutilclass.cpp +++ b/EffectUI/sutilclass.cpp @@ -16,7 +16,7 @@ STableWidgetItem::STableWidgetItem(const QString &text, int type): } -STableWidgetItem::STableWidgetItem(const STableWidgetItem &other): +STableWidgetItem::STableWidgetItem(const QTableWidgetItem &other): QTableWidgetItem(other) { diff --git a/EffectUI/sutilclass.h b/EffectUI/sutilclass.h index 3e15228..939e783 100644 --- a/EffectUI/sutilclass.h +++ b/EffectUI/sutilclass.h @@ -9,7 +9,7 @@ public: STableWidgetItem(int type = Type); STableWidgetItem(const QString & text, int type = Type); STableWidgetItem(const QIcon & icon, const QString & text, int type = Type); - STableWidgetItem(const STableWidgetItem & other); + STableWidgetItem(const QTableWidgetItem & other); virtual bool operator<(const QTableWidgetItem & other) const override; }; diff --git a/EffectUI/widget.cpp b/EffectUI/widget.cpp index 01ad65e..bc73fb8 100644 --- a/EffectUI/widget.cpp +++ b/EffectUI/widget.cpp @@ -1,15 +1,28 @@ #include "widget.h" #include "ui_widget.h" #include "scompanylistwidget.h" -#include +#include "srunninglistwidget.h" +#include "sadddelwidget.h" +#include Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); - SCompanyListWidget *c = new SCompanyListWidget(this); - setLayout(c->getLayout()); + QWidget *w1 = new QWidget; + QWidget *w2 = new QWidget; + QWidget *w3 = new QWidget; + SCompanyListWidget *c = new SCompanyListWidget(w1); + SRunningListWidget *d = new SRunningListWidget(w2); + SAddDelWidget *e = new SAddDelWidget(w3); + QHBoxLayout* mainLayout = new QHBoxLayout(this); + + mainLayout->addWidget(w1); + mainLayout->addWidget(w3); + mainLayout->addWidget(w2); + setLayout(mainLayout); + show(); c->refresh();