Select Git revision
preseteditor.cpp
preseteditor.cpp 4.02 KiB
#include "preseteditor.h"
#include "ui_preseteditor.h"
#include <QSettings>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>
#define PRESET_SETTING "presets"
#define COLUMN_COUNT 5
PresetEditor::PresetEditor(QWidget *parent) :
QDialog(parent),
ui(new Ui::PresetEditor),
m_model(0, COLUMN_COUNT)
{
ui->setupUi(this);
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// init column details (id and label)
m_columns.append(QStringList() << "name" << "Name");
m_columns.append(QStringList() << "longitude" << "Longitude");
m_columns.append(QStringList() << "latitude" << "Latitude");
m_columns.append(QStringList() << "time" << "Time (UTC)");
m_columns.append(QStringList() << "description" << "Description");
Q_ASSERT(m_columns.length() == COLUMN_COUNT);
// set table headers
QStringList headers;
for(int i=0; i < m_columns.length(); i++) {
headers << m_columns[i][1];
}
m_model.setHorizontalHeaderLabels(headers);
QSettings settings;
QJsonDocument presetDoc = QJsonDocument::fromVariant(settings.value(PRESET_SETTING, "[]"));
// load stored presets or use defaults
if(presetDoc.isArray() && !presetDoc.isEmpty()) {
QJsonArray presets = presetDoc.array();
for(int i = 0; i < presets.size() ; i++) {
QJsonObject preset = presets[i].toObject();
QList<QStandardItem*> row;
for(int i=0; i < m_columns.length(); i++) {
QString value = preset.value(m_columns[i][0]).isUndefined() ? "" : preset.value(m_columns[i][0]).toString();
row.append(new QStandardItem(value));
}
m_model.appendRow(row);
}
}
else {
// prepare default presets
QList<QStringList> defaultPresets;
defaultPresets.append(QStringList() << "GW150914" << "" << "" << "2015-09-14 09:50:45" << "First detection ever (BBH)");
defaultPresets.append(QStringList() << "GW151226" << "" << "" << "2015-12-26 03:38:53" << "BBH detection");
defaultPresets.append(QStringList() << "GW170104" << "" << "" << "2017-01-04 10∶11:58" << "BBH detection");
defaultPresets.append(QStringList() << "GW170814" << "" << "" << "2017-08-14 10∶30:43" << "BBH detection");
defaultPresets.append(QStringList() << "GW170817" << "" << "" << "2017-08-17 12∶41:04" << "First BNS detection");
for(int i=0; i < defaultPresets.length(); i++) {
QStringList items = defaultPresets[i];
Q_ASSERT(items.length() == COLUMN_COUNT);
QList<QStandardItem*> row;
for(int i = 0; i < items.length(); i++) {
row.append(new QStandardItem(items[i]));
}
m_model.appendRow(row);
}
}
// assign current model and adjust widget sizes based on content
ui->tableView->setModel(&m_model);
ui->tableView->adjustSize();
this->adjustSize();
}
PresetEditor::~PresetEditor()
{
delete ui;
}
void PresetEditor::accept()
{
QJsonDocument presetDoc;
QJsonArray presets;
QSettings settings;
// store current presets
for(int i=0; i < m_model.rowCount(); i++) {
QJsonObject preset;
for(int j=0; j < m_model.columnCount(); j++) {
preset[m_columns[j][0]] = m_model.item(i,j)->text();
}
presets.append(preset);
}
presetDoc.setArray(presets);
settings.setValue(PRESET_SETTING, presetDoc.toVariant());
close();
}
void PresetEditor::on_btnAdd_clicked(bool checked = false)
{
QList<QStandardItem*> row;
for(int i=0; i < m_model.columnCount(); i++) {
row.append(new QStandardItem(""));
}
m_model.appendRow(row);
ui->tableView->selectRow(m_model.rowCount()-1);
}
void PresetEditor::on_btnDel_clicked(bool checked = false)
{
QModelIndexList selection = ui->tableView->selectionModel()->selectedRows();
for(int i=0; i < selection.length(); i++) {
m_model.removeRow(selection[i].row());
}
}