Files
GUI/src/forms/settings/AccountTableForm.cpp
2022-06-14 18:04:44 +08:00

158 lines
5.1 KiB
C++

//
// Created by Krad on 2021/12/8.
//
#include "AccountTableForm.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QToolButton>
#include <QHeaderView>
#include <QSqlRecord>
#include "components/AccountRoleComboDelegate.h"
#include "dialogs/AlertDialog.h"
#include "db/SQLHelper.h"
#include "models/User.h"
#include "components/SlideTableView.h"
#include "dialogs/AccountFormDialog.h"
#include "event/EventCenter.h"
#include "guimacros.h"
AccountTableForm::AccountTableForm(QWidget* aParent)
: QWidget(aParent)
, mLayout(new QVBoxLayout(this))
, mCurrentRow(-1)
{
mLayout->setMargin(0);
QTableView* table = new SlideTableView(this);
mLayout->addWidget(table);
// TableView for patient
table->setAlternatingRowColors(true);
table->setSelectionMode(QAbstractItemView::SingleSelection);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
table->setSelectionBehavior(QAbstractItemView::SelectRows);
table->verticalHeader()->setDefaultSectionSize(38);
table->horizontalHeader()->setStretchLastSection(true);
//data from SQLITE
auto model = SQLHelper::getTable("Account");
model->sort(5, Qt::DescendingOrder);
model->select();
model->setHeaderData(1, Qt::Horizontal, tr("ID"));
model->setHeaderData(2, Qt::Horizontal, tr("Name"));
model->setHeaderData(4, Qt::Horizontal, tr("Role"));
model->setHeaderData(5, Qt::Horizontal, tr("Comment"));
table->setModel((QAbstractItemModel*)model);
table->hideColumn(0);
table->hideColumn(3);
AccountRoleComboDelegate* comboDelegate = new AccountRoleComboDelegate(this);
table->setItemDelegateForColumn(4, comboDelegate);
table->show();
// table->setSortingEnabled(true);
table->setColumnWidth(1, 250);
table->setColumnWidth(2, 250);
table->setColumnWidth(4, 150);
QWidget* cmdPanel = new QWidget(this);
cmdPanel->setObjectName("commandWidgetnoBBorder");
QHBoxLayout* cmdLayout = new QHBoxLayout(cmdPanel);
cmdLayout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding));
QWidget* spacerLine = new QWidget(this);
spacerLine->setFixedWidth(2);
spacerLine->setObjectName("verSpaceLine");
cmdLayout->addWidget(spacerLine);
ADD_TOOL_BTN_TO_LAYOUT(Add, ":/icons/add.png", cmdLayout);
ADD_TOOL_BTN_TO_LAYOUT(Edit, ":/icons/details.png", cmdLayout);
ADD_TOOL_BTN_TO_LAYOUT(Delete, ":/icons/close_circle.png", cmdLayout);
btnAdd->setText(tr("Add"));
btnEdit->setText(tr("Edit"));
btnDelete->setText(tr("Delete"));
mLayout->addWidget(cmdPanel);
//index change
connect(table, &QTableView::clicked, [=](const QModelIndex& aModelIndex) {
if (mCurrentRow != aModelIndex.row())
{
mCurrentRow = aModelIndex.row();
}
});
//add new account
connect(btnAdd, &QToolButton::clicked, [=]() {
AccountFormDialog dialog(this, New);
dialog.setWindowModality(Qt::WindowModal);
dialog.setReferenceModel(model);
if (dialog.exec() == QDialog::Accepted)
{
table->selectRow(0);
}
});
connect(btnEdit, &QToolButton::clicked, [=]() {
if (mCurrentRow < 0)
{
return;
}
QMap<QString, QVariant> map;
auto record = model->record(mCurrentRow);
for (int i = 0; i < model->columnCount(); i++)
{
map[record.fieldName(i)] = record.value(i);
}
auto mode = map["UserID"] == User::Current()->getUserID() ? Self : Admin;
AccountFormDialog dialog(this, mode);
dialog.setWindowModality(Qt::WindowModal);
if (mode == Admin)dialog.setAccountInformation(map);
if (dialog.exec() == QDialog::Accepted)
{
model->select();
table->selectRow(mCurrentRow);
}
});
connect(btnDelete, &QToolButton::clicked, [=]() {
if (mCurrentRow < 0)
{
return;
}
QString id = model->data(model->index(mCurrentRow, 1)).toString();
if (User::Current()->getUserID() == id)
{
//尝试删除自己
AlertDialog dialog(this);
dialog.setButtonMode(OkOnly);
dialog.setWindowModality(Qt::WindowModal);
dialog.setAlertMessage(tr("Can't delete current log in account!"));
dialog.exec();
return;
}
AlertDialog dialog(this);
dialog.setWindowModality(Qt::WindowModal);
dialog.setAlertMessage(QString(tr("Delete account with ID:\"%1\"!")).arg(id));
if (dialog.exec() != QDialog::Accepted) return;
model->removeRow(mCurrentRow);
model->select();
table->selectRow(model->rowCount() > mCurrentRow + 1 ? mCurrentRow : mCurrentRow - 1);
});
connect(EventCenter::Default(), &EventCenter::ReloadLanguage, [=]() {
model->setHeaderData(2, Qt::Horizontal, tr("Name"));
model->setHeaderData(4, Qt::Horizontal, tr("Role"));
model->setHeaderData(5, Qt::Horizontal, tr("Comment"));
btnAdd->setText(tr("Add"));
btnEdit->setText(tr("Edit"));
btnDelete->setText(tr("Delete"));
});
}
AccountTableForm::~AccountTableForm()
{
}