Search with CRVAL#
This commit is contained in:
+22
-2
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user