Search with CRVAL#

This commit is contained in:
2022-06-24 18:06:26 +02:00
parent 97346df596
commit 1d65eda490
2 changed files with 25 additions and 3 deletions
+22 -2
View File
@@ -97,17 +97,19 @@ void FITSFileModel::setColumns(const QStringList &columns)
prepareQuery(); 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()) if(value.isEmpty())
{ {
m_key.clear(); m_key.clear();
m_value.clear(); m_value.clear();
m_limit.clear();
} }
else else
{ {
m_key = key; m_key = key;
m_value = value; m_value = value;
m_limit = limit;
} }
prepareQuery(); prepareQuery();
} }
@@ -164,6 +166,10 @@ void FITSFileModel::prepareQuery()
where.append(QString(" %1 BETWEEN f.minRa AND f.maxRa ").arg(RA(m_value[i]))); where.append(QString(" %1 BETWEEN f.minRa AND f.maxRa ").arg(RA(m_value[i])));
else if(m_key[i] == "DEC pos") else if(m_key[i] == "DEC pos")
where.append(QString(" %1 BETWEEN f.minDec AND f.maxDec ").arg(DEC(m_value[i]))); 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 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]); 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("file");
m_filterKeyword[i]->addItem("RA pos"); m_filterKeyword[i]->addItem("RA pos");
m_filterKeyword[i]->addItem("DEC 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_filterKeyword[i]->addItems(fitsKeywords);
m_search[i] = new QLineEdit(this); m_search[i] = new QLineEdit(this);
m_search[i]->setPlaceholderText(tr("Text to search, you can % as wildcard")); 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<void(QComboBox::*)(int)>(&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_search[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter);
connect(m_limit[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter);
hlayout->addWidget(m_filterKeyword[i]); hlayout->addWidget(m_filterKeyword[i]);
hlayout->addWidget(m_search[i]); hlayout->addWidget(m_search[i]);
hlayout->addWidget(m_limit[i]);
} }
QPushButton *filterButton = new QPushButton(tr("Filter"), this); QPushButton *filterButton = new QPushButton(tr("Filter"), this);
@@ -316,6 +334,7 @@ void DataBaseView::applyFilter()
{ {
QStringList keys; QStringList keys;
QStringList values; QStringList values;
QStringList limits;
for(int i=0; i<3; i++) for(int i=0; i<3; i++)
{ {
QString key = m_filterKeyword[i]->currentText(); QString key = m_filterKeyword[i]->currentText();
@@ -323,7 +342,8 @@ void DataBaseView::applyFilter()
{ {
keys.append(key); keys.append(key);
values.append(m_search[i]->text()); values.append(m_search[i]->text());
limits.append(m_limit[i]->text());
} }
} }
m_model->setFilter(keys, values); m_model->setFilter(keys, values, limits);
} }
+3 -1
View File
@@ -27,13 +27,14 @@ class FITSFileModel : public QSqlQueryModel
QString m_sort; QString m_sort;
QStringList m_key; QStringList m_key;
QStringList m_value; QStringList m_value;
QStringList m_limit;
QSet<QString> m_markedFiles; QSet<QString> m_markedFiles;
Database *m_database; Database *m_database;
public: public:
explicit FITSFileModel(Database *database, QObject *parent = nullptr); explicit FITSFileModel(Database *database, QObject *parent = nullptr);
void sort(int column, Qt::SortOrder order) override; void sort(int column, Qt::SortOrder order) override;
void setColumns(const QStringList &columns); 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; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void filesMarked(const QModelIndexList &indexes); void filesMarked(const QModelIndexList &indexes);
void filesUnmarked(const QModelIndexList &indexes); void filesUnmarked(const QModelIndexList &indexes);
@@ -61,6 +62,7 @@ class DataBaseView : public QWidget
FITSFileModel *m_model; FITSFileModel *m_model;
QComboBox *m_filterKeyword[3]; QComboBox *m_filterKeyword[3];
QLineEdit *m_search[3]; QLineEdit *m_search[3];
QLineEdit *m_limit[3];
public: public:
explicit DataBaseView(Database *database, QWidget *parent = nullptr); explicit DataBaseView(Database *database, QWidget *parent = nullptr);
~DataBaseView() override; ~DataBaseView() override;