114 lines
3.3 KiB
C++
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);
|
||
|
|
}
|