From 1d65eda4906e34068afa552cb1d40adee976cb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Fri, 24 Jun 2022 18:06:26 +0200 Subject: [PATCH] Search with CRVAL# --- databaseview.cpp | 24 ++++++++++++++++++++++-- databaseview.h | 4 +++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/databaseview.cpp b/databaseview.cpp index 7418f00..e0d1ddf 100644 --- a/databaseview.cpp +++ b/databaseview.cpp @@ -97,17 +97,19 @@ void FITSFileModel::setColumns(const QStringList &columns) prepareQuery(); } -void FITSFileModel::setFilter(const QStringList &key, const QStringList &value) +void FITSFileModel::setFilter(const QStringList &key, const QStringList &value, const QStringList &limit) { if(value.isEmpty()) { m_key.clear(); m_value.clear(); + m_limit.clear(); } else { m_key = key; m_value = value; + m_limit = limit; } prepareQuery(); } @@ -164,6 +166,10 @@ void FITSFileModel::prepareQuery() where.append(QString(" %1 BETWEEN f.minRa AND f.maxRa ").arg(RA(m_value[i]))); else if(m_key[i] == "DEC pos") where.append(QString(" %1 BETWEEN f.minDec AND f.maxDec ").arg(DEC(m_value[i]))); + else if(m_key[i] == "RA range") + where.append(QString(" crVal1 BETWEEN %1 AND %2 ").arg(RA(m_value[i])).arg(RA(m_limit[i]))); + else if(m_key[i] == "DEC range") + where.append(QString(" crVal2 BETWEEN %1 AND %2 ").arg(DEC(m_value[i])).arg(DEC(m_limit[i]))); else join += QString(" JOIN fits_headers AS s%1 ON f.id=s%1.id_file AND s%1.key='%2' AND s%1.value LIKE '%3'").arg(i).arg(m_key[i]).arg(m_value[i]); } @@ -267,13 +273,25 @@ DataBaseView::DataBaseView(Database *database, QWidget *parent) : QWidget(parent m_filterKeyword[i]->addItem("file"); m_filterKeyword[i]->addItem("RA pos"); m_filterKeyword[i]->addItem("DEC pos"); + m_filterKeyword[i]->addItem("RA range"); + m_filterKeyword[i]->addItem("DEC range"); m_filterKeyword[i]->addItems(fitsKeywords); m_search[i] = new QLineEdit(this); m_search[i]->setPlaceholderText(tr("Text to search, you can % as wildcard")); + + m_limit[i] = new QLineEdit(this); + m_limit[i]->hide(); + connect(m_filterKeyword[i], static_cast(&QComboBox::currentIndexChanged), [this, i](int index){ + if(index == 3 || index == 4)m_limit[i]->show(); + else m_limit[i]->hide(); + }); + connect(m_search[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter); + connect(m_limit[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter); hlayout->addWidget(m_filterKeyword[i]); hlayout->addWidget(m_search[i]); + hlayout->addWidget(m_limit[i]); } QPushButton *filterButton = new QPushButton(tr("Filter"), this); @@ -316,6 +334,7 @@ void DataBaseView::applyFilter() { QStringList keys; QStringList values; + QStringList limits; for(int i=0; i<3; i++) { QString key = m_filterKeyword[i]->currentText(); @@ -323,7 +342,8 @@ void DataBaseView::applyFilter() { keys.append(key); values.append(m_search[i]->text()); + limits.append(m_limit[i]->text()); } } - m_model->setFilter(keys, values); + m_model->setFilter(keys, values, limits); } diff --git a/databaseview.h b/databaseview.h index 2a2b421..690722a 100644 --- a/databaseview.h +++ b/databaseview.h @@ -27,13 +27,14 @@ class FITSFileModel : public QSqlQueryModel QString m_sort; QStringList m_key; QStringList m_value; + QStringList m_limit; QSet m_markedFiles; Database *m_database; public: explicit FITSFileModel(Database *database, QObject *parent = nullptr); void sort(int column, Qt::SortOrder order) override; void setColumns(const QStringList &columns); - void setFilter(const QStringList &key, const QStringList &value); + void setFilter(const QStringList &key, const QStringList &value, const QStringList &limit); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void filesMarked(const QModelIndexList &indexes); void filesUnmarked(const QModelIndexList &indexes); @@ -61,6 +62,7 @@ class DataBaseView : public QWidget FITSFileModel *m_model; QComboBox *m_filterKeyword[3]; QLineEdit *m_search[3]; + QLineEdit *m_limit[3]; public: explicit DataBaseView(Database *database, QWidget *parent = nullptr); ~DataBaseView() override;