#include "HomeView.h" #include "CreateProjWidget.h" #include "ProjectStateWidget.h" #include "ProjectManager.h" #include "QFDAlert.h" #include "QFDIcon.h" #include "ProjectListWidget.h" #include "QFDConfig.h" #include #include #include #include #include #include HomeView::HomeView(QWidget *parent) : QWidget(parent) { } void HomeView::showEvent(QShowEvent *event) { if (m_initilized == false) { initWidgets(); initLayout(); connectSignalsAndSlots(); m_initilized = true; } QWidget::showEvent(event); if (qfReloadHomeProjectsAtShow) { loadProjects(); qfReloadHomeProjectsAtShow = false; } } void HomeView::hideEvent(QHideEvent *event) { QWidget::hideEvent(event); } void HomeView::initWidgets() { m_title = new QLabel(this); m_title->setText("评估项目管理"); QFont ft("Microsoft YaHei", 12); m_title->setFont(ft); m_create = new PushButton("新建", NEWFLICON(FluentIcon, ADD), this); m_create->setToolTip("新建项目"); m_search = new LineEdit(this); m_search->setIsClearButtonEnabled(true); m_search->setPlaceholderText("输入项目名搜索"); m_search->setMinimumWidth(300); m_filter = new PushButton("搜索 / 刷新", NEWFLICON(QFDIcon, Filter), this); m_filter->setToolTip("搜索 / 刷新项目列表"); m_projListWidget = new ProjectListWidget(this); m_createProjWidget = new CreateProjWidget(this); m_totalLab = new QLabel(this); m_pageLab = new QLabel(this); m_previous = new PushButton("上一页", this); m_next = new PushButton("下一页", this); m_first = new PushButton("首页", this); m_final = new PushButton("末页", this); } void HomeView::initLayout() { // 总体布局 m_layout = new QVBoxLayout(this); m_layout->setAlignment(Qt::AlignTop | Qt::AlignLeft); m_layout->setContentsMargins(15, 10, 10, 15); m_topLayout = new QHBoxLayout(); m_layout->addLayout(m_topLayout); m_layout->addWidget(m_projListWidget); m_pageLayout = new QHBoxLayout(); m_layout->addLayout(m_pageLayout); // 顶部布局 m_topLayout->addWidget(m_title); m_topLayout->addSpacing(15); m_topLayout->addWidget(m_create, 1, Qt::AlignLeft); m_topLayout->addWidget(m_search, 0, Qt::AlignLeft); m_topLayout->addStretch(); m_topLayout->addWidget(m_filter); m_pageLayout->addWidget(m_totalLab); m_pageLayout->addStretch(); m_pageLayout->addWidget(m_first); m_pageLayout->addWidget(m_previous); m_pageLayout->addWidget(m_pageLab); m_pageLayout->addWidget(m_next); m_pageLayout->addWidget(m_final); m_pageLayout->addStretch(); } void HomeView::connectSignalsAndSlots() { connect(m_create, &PushButton::clicked, this, &HomeView::slotCreateProjClicked); connect(m_search, &LineEdit::textChanged, this, &HomeView::slotSearchTextChanged); connect(m_filter, &PushButton::clicked, this, &HomeView::slotFilterClicked); connect(m_createProjWidget, &CreateProjWidget::signalConfirm, this, &HomeView::slotProjInfoConfirmed); connect(m_projListWidget, &ProjectListWidget::sigOpen, this, &HomeView::slotOpenProject); connect(m_projListWidget, &ProjectListWidget::sigInfo, this, &HomeView::slotProjectInfo); connect(m_projListWidget, &ProjectListWidget::sigDelete, this, &HomeView::slotDeleteProject); connect(m_previous, &PushButton::clicked, this, &HomeView::slotPreviousClicked); connect(m_next, &PushButton::clicked, this, &HomeView::slotNextClicked); connect(m_first, &PushButton::clicked, this, &HomeView::slotFirstClicked); connect(m_final, &PushButton::clicked, this, &HomeView::slotFinalClicked); } void HomeView::loadProjects() { qDeleteAll(m_projList); m_projList.clear(); int code = ProjectManager::queryProjects(&m_projList, m_total, m_page, m_pageSize, m_search->text()); if (code != QF_CODE_SUCCEEDED) { QFDAlert::showAlertWithCode(code, this); return; } m_totalLab->setText(QString("共%1条, 每页%2条").arg(m_total).arg(m_pageSize)); m_pageLab->setText(QString("第 %1/%2 页").arg(m_page).arg(finalPage())); m_projListWidget->setProjects(m_projList); } int HomeView::firstPage() const { return 1; } int HomeView::finalPage() const { int p = m_total / m_pageSize + (m_total % m_pageSize > 0 ? 1 : 0); return std::max(p, firstPage()); } void HomeView::slotCreateProjClicked() { if (m_createProjWidget->isVisible() == false) { m_createProjWidget->setMode(CreateProjWidget::Create); m_createProjWidget->resetInputs(); m_createProjWidget->show(); } } void HomeView::slotSearchTextChanged() { } void HomeView::slotFilterClicked() { m_page = firstPage(); loadProjects(); } /// @todo 修改或者新建项目后, 列表移到该条目 void HomeView::slotProjInfoConfirmed() { int code = -1; ProjectInfo *info = m_createProjWidget->projInfo(); ProjectInfo editedInfo = m_createProjWidget->editedProjInfo(); if (m_createProjWidget->mode() == CreateProjWidget::Create) { code = ProjectManager::insertProject(editedInfo); } else if (m_createProjWidget->mode() == CreateProjWidget::Update) { editedInfo.id = m_createProjWidget->projInfo()->id; code = ProjectManager::updateProject(editedInfo); } else { return; } QFDAlert::showAlertWithCode(code, m_createProjWidget); if (code == QF_CODE_SUCCEEDED) { m_createProjWidget->close(); m_search->clear(); loadProjects(); } } void HomeView::slotProjectInfo(ProjectInfo *proj) { if (m_createProjWidget->isVisible() == false) { m_createProjWidget->setMode(CreateProjWidget::Info); m_createProjWidget->setProjectInfo(proj); m_createProjWidget->show(); } } void HomeView::slotOpenProject(ProjectInfo *proj) { emit sigOpenProject(proj); } void HomeView::slotDeleteProject(ProjectInfo *proj) { QString title = "删除工程 “" + proj->projectName + "” ?"; MessageBox *m = new MessageBox(title, "删除后无法恢复", this); if (m->exec()) { int code = ProjectManager::deleteProject(proj->id); QFDAlert::showAlertWithCode(code, this); if (code == QF_CODE_SUCCEEDED) { m_projList.removeOne(proj); m_projListWidget->removeProject(proj); } } } void HomeView::slotPreviousClicked() { m_page--; m_page = std::max(m_page, firstPage()); loadProjects(); } void HomeView::slotNextClicked() { m_page++; m_page = std::min(m_page, finalPage()); loadProjects(); } void HomeView::slotFirstClicked() { m_page = firstPage(); loadProjects(); } void HomeView::slotFinalClicked() { m_page = finalPage(); loadProjects(); }