#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(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); }