Skip to content
Snippets Groups Projects
Select Git revision
  • 1c9f99fb0cce7005875a82bf1685ef78d787c80b
  • master default protected
  • antenna-patterns
  • qt5-qopenglwidget
  • license-demo
  • isolated
  • isolated-fixedprofile
  • release_1.1
  • press-conference
  • rim-only
  • release_1.0
11 results

preseteditor.cpp

Blame
  • user avatar
    Oliver Bock authored
    1c9f99fb
    History
    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());
        }
    }