Add database indexing of FITS files
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
#include "databaseview.h"
|
||||
#include <QVBoxLayout>
|
||||
#include <QPushButton>
|
||||
#include <QSettings>
|
||||
#include <QDialogButtonBox>
|
||||
#include <QHeaderView>
|
||||
|
||||
const QStringList DEFAULT_COLUMNS = {"EXPTIME", "OBJECT", "RA", "DEC"};
|
||||
|
||||
SelectColumnsDialog::SelectColumnsDialog(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
m_listWidget = new QListWidget(this);
|
||||
m_listWidget->setSelectionMode(QAbstractItemView::MultiSelection);
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
setLayout(layout);
|
||||
layout->addWidget(m_listWidget);
|
||||
|
||||
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
layout->addWidget(buttonBox);
|
||||
|
||||
setWindowTitle(tr("Select columns"));
|
||||
}
|
||||
|
||||
void SelectColumnsDialog::setColumns(QStringList columns)
|
||||
{
|
||||
QSettings settings;
|
||||
m_listWidget->addItems(columns);
|
||||
QStringList selected = settings.value("databaseview/selectedColumns", DEFAULT_COLUMNS).toStringList();
|
||||
for(auto &sel : selected)
|
||||
{
|
||||
int i = columns.indexOf(sel);
|
||||
if(i>=0)
|
||||
m_listWidget->item(i)->setSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
QStringList SelectColumnsDialog::selectedColumns()
|
||||
{
|
||||
QStringList ret;
|
||||
for(auto &sel : m_listWidget->selectedItems())
|
||||
ret.append(sel->text());
|
||||
return ret;
|
||||
}
|
||||
|
||||
DataBaseView::DataBaseView(Database *database, QWidget *parent) : QWidget(parent)
|
||||
,m_database(database)
|
||||
{
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
setLayout(layout);
|
||||
|
||||
m_tableView = new QTableView(this);
|
||||
m_tableView->verticalHeader()->setDefaultSectionSize(1);
|
||||
layout->addWidget(m_tableView);
|
||||
|
||||
m_model = new QSqlQueryModel(this);
|
||||
|
||||
QSettings settings;
|
||||
m_tableView->setModel(m_model);
|
||||
m_tableView->horizontalHeader()->restoreState(settings.value("databaseview/header").toByteArray());
|
||||
|
||||
QHBoxLayout *hlayout = new QHBoxLayout(this);
|
||||
layout->addLayout(hlayout);
|
||||
|
||||
QPushButton *selectColumnsButton = new QPushButton(tr("Select columns"), this);
|
||||
hlayout->addWidget(selectColumnsButton);
|
||||
connect(selectColumnsButton, &QPushButton::pressed, this, &DataBaseView::selectColumns);
|
||||
|
||||
QPushButton *loadDatabaseButton = new QPushButton(tr("Load database"), this);
|
||||
hlayout->addWidget(loadDatabaseButton);
|
||||
connect(loadDatabaseButton, &QPushButton::pressed, this, &DataBaseView::loadDatabase);
|
||||
}
|
||||
|
||||
DataBaseView::~DataBaseView()
|
||||
{
|
||||
QSettings settings;
|
||||
settings.setValue("databaseview/header", m_tableView->horizontalHeader()->saveState());
|
||||
}
|
||||
|
||||
void DataBaseView::selectColumns()
|
||||
{
|
||||
SelectColumnsDialog dialog;
|
||||
QStringList columns = m_database->getFitsKeywords();
|
||||
dialog.setColumns(columns);
|
||||
if(dialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
QSettings settings;
|
||||
QStringList columns = dialog.selectedColumns();
|
||||
settings.setValue("databaseview/selectedColumns", columns);
|
||||
prepareQuery(columns);
|
||||
}
|
||||
}
|
||||
|
||||
void DataBaseView::loadDatabase()
|
||||
{
|
||||
QSettings settings;
|
||||
prepareQuery(settings.value("databaseview/selectedColumns", DEFAULT_COLUMNS).toStringList());
|
||||
}
|
||||
|
||||
void DataBaseView::prepareQuery(const QStringList &columns)
|
||||
{
|
||||
QString sql = "SELECT file,";
|
||||
for(auto &column : columns)
|
||||
{
|
||||
sql += QString("GROUP_CONCAT(CASE WHEN key=\"%1\" THEN value END) AS \"%1\",").arg(column);
|
||||
}
|
||||
sql.chop(1);
|
||||
sql += " FROM fits_files LEFT JOIN fits_headers ON fits_files.id=id_file GROUP BY fits_files.id";
|
||||
m_model->setQuery(sql);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user