Files
OpenRGB/qt/DetectorTableModel.cpp

169 lines
5.6 KiB
C++

/*---------------------------------------------------------*\
| DetectorTableModel.cpp |
| |
| Table model for detector list |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*---------------------------------------------------------*/
#include "DetectorTableModel.h"
#include "SettingsManager.h"
DetectorTableModel::DetectorTableModel(QObject* parent) : QAbstractTableModel(parent)
{
detectors.clear();
/*-----------------------------------------------------*\
| Read the detector list from the settings manager |
\*-----------------------------------------------------*/
json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("Detectors");
if(settings.contains("detectors"))
{
for(json::const_iterator it = settings["detectors"].begin(); it != settings["detectors"].end(); it++)
{
DetectorTableValue new_entry;
new_entry.key = it.key();
new_entry.value = it.value();
detectors.push_back(new_entry);
}
}
/*-----------------------------------------------------*\
| If settings contains the detectors list, fill in rows |
\*-----------------------------------------------------*/
beginInsertRows(QModelIndex(), 0, (int)detectors.size());
endInsertRows();
}
int DetectorTableModel::columnCount(const QModelIndex&) const
{
/*-----------------------------------------------------*\
| The table has two columns - detector name and enable |
\*-----------------------------------------------------*/
return(2);
}
int DetectorTableModel::rowCount(const QModelIndex&) const
{
/*-----------------------------------------------------*\
| The number of rows is equal to the number of detectors|
\*-----------------------------------------------------*/
return((int)detectors.size());
}
QVariant DetectorTableModel::data(const QModelIndex& index, int role) const
{
switch(role)
{
/*-----------------------------------------------------*\
| Column 0 is the detector name, 1 is the enable flag |
\*-----------------------------------------------------*/
case Qt::DisplayRole:
switch(index.column())
{
case 0:
return(detectors[index.row()].key.c_str());
case 1:
return(detectors[index.row()].value);
}
return(QVariant());
case Qt::CheckStateRole:
switch(index.column())
{
case 1:
return(2 * detectors[index.row()].value);
}
return(QVariant());
}
return(QVariant());
}
bool DetectorTableModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
/*-----------------------------------------------------*\
| Update detector value for column 1 |
\*-----------------------------------------------------*/
if(index.column() == 1 && role == Qt::CheckStateRole)
{
detectors[index.row()].value = value.toBool();
emit dataChanged(index, index);
}
return(false);
}
QVariant DetectorTableModel::headerData(int index, Qt::Orientation orientation, int role) const
{
if(role == Qt::DisplayRole)
{
switch(orientation)
{
case Qt::Vertical:
return(index + 1);
case Qt::Horizontal:
switch(index)
{
case 0:
return(tr("Name"));
case 1:
return(tr("Enabled"));
}
}
}
return(QVariant());
}
Qt::ItemFlags DetectorTableModel::flags(const QModelIndex& index) const
{
Qt::ItemFlags fl = Qt::ItemIsEnabled;
if(index.column() == 1)
{
fl |= Qt::ItemIsUserCheckable;
}
return(fl);
}
void DetectorTableModel::applySettings()
{
/*-----------------------------------------------------*\
| Read the detector list from the settings manager |
\*-----------------------------------------------------*/
json settings = ResourceManager::get()->GetSettingsManager()->GetSettings("Detectors");
/*-----------------------------------------------------*\
| Loop through all detectors in the list and update the |
| value in the settings |
\*-----------------------------------------------------*/
if(settings.contains("detectors"))
{
for(unsigned int detector_idx = 0; detector_idx < detectors.size(); detector_idx++)
{
settings["detectors"][detectors[detector_idx].key] = detectors[detector_idx].value;
}
}
/*-----------------------------------------------------*\
| Set and save the settings |
\*-----------------------------------------------------*/
ResourceManager::get()->GetSettingsManager()->SetSettings("Detectors", settings);
ResourceManager::get()->GetSettingsManager()->SaveSettings();
}
void DetectorTableModel::toggleAll(const bool state, QSortFilterProxyModel* detectorSortModel)
{
for(unsigned int detector_idx = 0; detector_idx < detectors.size(); detector_idx++)
{
if(detectorSortModel->mapFromSource(index(detector_idx, 0)).isValid())
{
setData(index(detector_idx,1), state, Qt::CheckStateRole);
}
}
}