#include "AccountTableForm.h" #include #include #include #include #include "components/AccountRoleComboDelegate.h" #include "dialogs/DialogManager.h" #include "db/SQLHelper.h" #include "models/User.h" #include "components/SlideTableView.h" #include "event/EventCenter.h" #include "log/LogManager.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("commandWidget"); 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); auto btnAdd = new QToolButton(this); btnAdd->setObjectName("btnAdd"); cmdLayout->addWidget(btnAdd); auto btnEdit = new QToolButton(this); btnEdit->setObjectName("btnEdit"); cmdLayout->addWidget(btnEdit); auto btnDelete = new QToolButton(this); btnDelete->setObjectName("btnDelete"); cmdLayout->addWidget(btnDelete); 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, [=]() { if (DialogManager::Default()->requestAddAccount(model) == QDialog::Accepted) { table->selectRow(0); model->selectRow(0); mCurrentRow = 0; } }); connect(btnEdit, &QToolButton::clicked, [=]() { if (mCurrentRow < 0) { return; } QMap map; auto record = model->record(mCurrentRow); for (int i = 0; i < model->columnCount(); i++) { map[record.fieldName(i)] = record.value(i); } int ret =0; if (map["UserID"] == User::Current()->getUserID()){ ret = DialogManager::Default()->requestEditSelfAccount(); } else{ ret = DialogManager::Default()->requestEditAdminAccount(map); } if (ret == 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()->getUserCode() == id) { //尝试删除自己 DialogManager::Default()->requestAlertMessage(tr("Can't delete current log in account!"), DialogButtonMode::OkOnly); return; } if ( DialogManager::Default()->requestAlertMessage(QString(tr("Delete account with ID:\"%1\"!")), id, DialogButtonMode::OkAndCancel) != QDialog::Accepted) return; model->removeRow(mCurrentRow); model->select(); mCurrentRow = model->rowCount() > mCurrentRow + 1 ? mCurrentRow : mCurrentRow - 1; table->selectRow(mCurrentRow); LOG_USER_OPERATION("Delete Account, ID:" + id); }); 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")); }); connect(EventCenter::Default(), &EventCenter::CurrentUserInfoChanged, [model]() { model->select(); }); } AccountTableForm::~AccountTableForm() { }