// // Created by Krad on 2021/10/8. // #include "ui_tabformwidget.h" #include "SelectFormWidget.h" #include #include #include #include #include #include #include "db/SQLHelper.h" #include "editpatientform.h" #include "guimacros.h" #include "event/EventCenter.h" #define ADD_CENTER_ITEM(row,col,text)\ item = new QTableWidgetItem(text);\ item->setTextAlignment(Qt::AlignmentFlag::AlignCenter);\ table->setItem(row,col,item); SelectFormWidget::SelectFormWidget(QWidget *parent) : TabFormWidget(parent) { const char* style="QHeaderView::section{background-color:#595959;" " min-height:50px;max-height:50px;" "font-weight:Bold; font-size:16px; border:1px solid #323232;}" "QHeaderView::section:horizontal{border-bottom: 1px solid rgb(0,170,255);}" "QHeaderView::section:vertical{min-height:36px;max-height:36px;}" "QWidget#edit_patient{min-width:300px;max-width:300px;}" "QTableView{border:none}" "QTableView{alternate-background-color: #595959;selection-color:white;selection-background-color:#0078d8}" "QToolButton#sexBtn{min-width:120px;max-width:120px;font-size:20px;padding:2px;}" "QToolButton#sexBtn:disabled{color:silver}" "QWidget#sexpanelwidget{border:1px solid silver;}" "QWidget#sexpanelwidget:enabled{background-color: #515151;}" "QToolButton#sexBtn:checked{border:2px solid darkorange;padding:0px;}" ; this->setStyleSheet(this->styleSheet().append(style)); //init command bar QHBoxLayout* layout =new QHBoxLayout(); ui->commandWidget->setLayout(layout); ADD_TOOL_BTN(Account,":/icons/account.png"); ADD_TOOL_BTN(Worklist,":/icons/setting.png"); layout->addSpacerItem(new QSpacerItem(20, 20, QSizePolicy::Expanding)); QWidget* spacerLine= new QWidget(this); spacerLine->setFixedWidth(2); spacerLine->setObjectName("verSpaceLine"); layout->addWidget(spacerLine); ADD_TOOL_BTN(Add,":/icons/add.png"); ADD_TOOL_BTN(Edit,":/icons/details.png"); ADD_TOOL_BTN(Delete,":/icons/close_circle.png"); ADD_TOOL_BTN(Select,":/icons/selected.png"); //Init content widget QHBoxLayout* contentLayout =new QHBoxLayout(); this->ui->contentWidget->setLayout(contentLayout); // TableView for patient QTableView* table= new QTableView(this); table->setAlternatingRowColors(true); table->setSelectionMode(QAbstractItemView::SingleSelection); table->setEditTriggers(QAbstractItemView::NoEditTriggers); table->setSelectionBehavior(QAbstractItemView::SelectRows); table->verticalHeader()->setDefaultSectionSize(38); table->horizontalHeader()->setStretchLastSection(true); //dat from SQLITE auto model = SQLHelper::getTable("Patient"); model->setFilter("Flag=0"); model->select(); model->setHeaderData(1,Qt::Horizontal,"ID"); model->setHeaderData(2,Qt::Horizontal,"Name"); model->setHeaderData(3,Qt::Horizontal,"Birth Date"); table->setModel((QAbstractItemModel*)model); table->hideColumn(0); table->hideColumn(6); table->show(); table->setColumnWidth(1,250); table->setColumnWidth(2,250); table->setColumnWidth(3,120); table->setColumnWidth(4,60); contentLayout->addWidget(table); QWidget* spacerLine2= new QWidget(this); spacerLine2->setFixedWidth(2); spacerLine2->setObjectName("verSpaceLine"); contentLayout->addWidget(spacerLine2); //edit panel EditPatientForm* edit_patient= new EditPatientForm(this); edit_patient->setObjectName("edit_patient"); contentLayout->addWidget(edit_patient); //select default row 0 if (model->rowCount()>0) { table->selectRow(0); currentRow=0; PatientInformation pat; #define ADD_PATIENT_PROPERTY(val)\ pat. val = model->data(model->index(currentRow,PatientInformationEnum:: val)).toString(); EDIT_PATIENT() #undef ADD_PATIENT_PROPERTY edit_patient->setPatientInformation(&pat); } //events---------------------------------------------------------------------- //table current row selection changing event connect(table,&QTableView::clicked,[=](const QModelIndex & modelIndex){ if (currentRow!=modelIndex.row()) { currentRow=modelIndex.row(); PatientInformation pat; #define ADD_PATIENT_PROPERTY(val)\ pat. val = model->data(model->index(modelIndex.row(),PatientInformationEnum:: val)).toString(); EDIT_PATIENT() #undef ADD_PATIENT_PROPERTY edit_patient->setPatientInformation(&pat); } }); connect(btnAdd, &QToolButton::clicked,[=](){ edit_patient->clearPatientInformation(); edit_patient->setEditEnable(true); btnSelect->setEnabled(false); }); connect(btnEdit, &QToolButton::clicked,[=](){ table->clicked(table->currentIndex()); edit_patient->setEditEnable(true); btnSelect->setEnabled(false); }); connect(edit_patient, &EditPatientForm::editCancel,[=](){ btnSelect->setEnabled(true); }); connect(edit_patient, &EditPatientForm::editAccept,[=](PatientInformation* inf){ int selectedRow = currentRow; if (inf->PatientUID.isEmpty()) { selectedRow = model->rowCount(); inf->PatientUID = QUuid::createUuid().toString(); printf(inf->PatientUID.toStdString().data()); model->insertRow(selectedRow); } #define ADD_PATIENT_PROPERTY(val)\ model->setData(model->index(selectedRow,PatientInformationEnum:: val),inf-> val); EDIT_PATIENT() #undef ADD_PATIENT_PROPERTY if (model->submitAll()) { table->selectRow(selectedRow); model->selectRow(selectedRow); } else{ //TODO:add some error handle logic } btnSelect->setEnabled(true); }); connect(btnDelete, &QToolButton::clicked,[=](){ if (currentRow<0)return; model->setData(model->index(currentRow,PatientInformationEnum::Flag),9); // model->removeRow(currentRow); if (model->submitAll()) { model->select(); if (model->rowCount()>0) { table->selectRow(0); model->selectRow(0); PatientInformation pat; #define ADD_PATIENT_PROPERTY(val)\ pat. val = model->data(model->index(0,PatientInformationEnum:: val)).toString(); EDIT_PATIENT() #undef ADD_PATIENT_PROPERTY edit_patient->setPatientInformation(&pat); } else{ currentRow=-1; } } else{ //TODO:error handle } }); connect(btnSelect, &QToolButton::clicked,[=](){ if (currentRow<0)return; EventCenter::Default()->triggerEvent(GUIEvents::PatientSelected, nullptr,edit_patient->getPatientInformation()->Copy()); }); connect(EventCenter::Default(),&EventCenter::ResponsePreview,[=](QObject* sender,QObject* data){ btnSelect->setEnabled(false); btnDelete->setEnabled(false); btnEdit->setEnabled(false); btnAdd->setEnabled(false); }); connect(EventCenter::Default(),&EventCenter::ResponseStop,[=](QObject* sender,QObject* data){ btnSelect->setEnabled(true); btnDelete->setEnabled(true); btnEdit->setEnabled(true); btnAdd->setEnabled(true); }); } SelectFormWidget::~SelectFormWidget() { }