Files
cinema-ticket-management-sy…/ui/widgets/entity_finder_widget.cpp
T
2026-07-12 14:34:52 +04:00

114 lines
3.3 KiB
C++

#include "entity_finder_widget.h"
#include "base_sql_table_model.h"
#include "model_manager.h"
#include "schema_metadata.h"
#include "search_dialog.h"
EntityFinderWidget::EntityFinderWidget(QWidget *parent) : QWidget(parent) {
setupUi(this);
setupConnections();
setupFrameStyle();
}
EntityFinderWidget::EntityFinderWidget(const QString &tableName,
const QString &fieldName,
QWidget *parent)
: EntityFinderWidget(parent) {
setModelTableName(tableName);
setFieldName(fieldName);
}
void EntityFinderWidget::setHiddenFrame(bool hidden) {
QLayout *frameLayout = frame->layout();
bool isHidden = frame->frameStyle() == QFrame::NoFrame;
if (isHidden == hidden) {
return;
}
if (hidden) {
frame->setFrameStyle(QFrame::NoFrame);
frameLayout->setContentsMargins(0, 0, 0, 0);
} else {
frame->setFrameStyle(originalFrameStyle_);
frameLayout->setContentsMargins(9, 9, 9, 9);
}
parentWidget()->adjustSize();
}
void EntityFinderWidget::refreshLineEditText(const QSqlRecord &record) {
ModelManager &modelManager = ModelManager::instance();
BaseSqlTableModel *model =
modelManager.getModelAs<BaseSqlTableModel>(modelTableName_);
QStringList columnDataList;
for (int i = 0; i < record.count(); ++i) {
QString columnName = model->headerData(i, Qt::Horizontal).toString();
QString columnValue = record.value(i).toString();
columnDataList.append(QString("%1: %2").arg(columnName, columnValue));
}
lineEditEntityInformation->setText(columnDataList.join(" | "));
}
void EntityFinderWidget::setDefaultRelation(
const QString &databaseRelationName) {
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
setModelTableName(metadata.modelTableName(databaseRelationName));
setFieldName(metadata.primaryIdColumnName(databaseRelationName));
qInfo() << "Default relation name set to:" << databaseRelationName;
}
void EntityFinderWidget::setupConnections() {
connect(pushButtonFindEntity, &QPushButton::clicked, this,
&EntityFinderWidget::onPushButtonFindEntityClicked);
}
void EntityFinderWidget::setupFrameStyle() {
originalFrameStyle_ = frame->frameStyle();
}
void EntityFinderWidget::resetToDefault() {
qInfo() << "Resetting entity finder to default:"
<< "Name of EntityFinderWidget:" << objectName();
lineEditEntityInformation->setText("");
emit reseted();
}
void EntityFinderWidget::onPushButtonFindEntityClicked() {
SearchDialog searchDialog(modelTableName_, fieldName_, this);
// All its signals are automatically disconnected from the slots
connect(&searchDialog, &SearchDialog::rowSelected, this,
&EntityFinderWidget::onRowSelected);
connect(&searchDialog, &SearchDialog::fieldRetrieved, this,
&EntityFinderWidget::onFieldRetrieved);
connect(&searchDialog, &SearchDialog::recordRetrieved, this,
&EntityFinderWidget::onRecordRetrieved);
searchDialog.exec();
}
void EntityFinderWidget::onRowSelected(int rowIndex) {
emit rowSelected(rowIndex);
}
void EntityFinderWidget::onRecordRetrieved(const QSqlRecord &rowValues) {
refreshLineEditText(rowValues);
emit recordRetrieved(rowValues);
}
void EntityFinderWidget::onFieldRetrieved(const QSqlField &field) {
emit fieldRetrieved(field);
}