Model container for sensor calibrations. More...
#include <calibrationsmodel.h>
Public Types | |
enum | CalibrationDataTypes { CalibrationId = Qt::UserRole+1000, CalibrationFormula, CalibrationTimestamp } |
Public Slots | |
void | slot_syncTreeId (const int &tree_id) |
void | slot_allCalibrations_toggle (const Qt::CheckState state) |
void | slot_allCalibrations_toggle (const int state) |
void | reQuery () |
Signals | |
void | signal_calibrationSelections_changed (Qt::CheckState) |
Public Member Functions | |
CalibrationsModel (QObject *parent) | |
QVariant | data (const QModelIndex &item, int role) const |
bool | setData (const QModelIndex &index, const QVariant &value, int role) |
QStringList | getSelectedCalibrationIds () |
Qt::ItemFlags | flags (const QModelIndex &index) const |
bool | isAnyItemChecked () const |
Model container for sensor calibrations.
{ CalibrationId = Qt::UserRole+1000, CalibrationFormula, CalibrationTimestamp };
CalibrationsModel::CalibrationsModel | ( | QObject * | parent | ) |
: SqlQueryModel(parent), db_tree_id(0) { setDependency("tbl_sensor_channel_calibrations"); const static QString query = "SELECT c.sens_chan_cali_timestamp AS Timestamp, c.sens_chan_cali_formula AS Formula, sens_chan_cali_id \n" "FROM tbl_sensor_channel_calibrations AS c INNER JOIN tbl_trees AS t USING (sens_id, sens_chan_nr) \n" // uit tree_id halen we de sens_chan_id, en daaraan koppelen we de calibratie_functies "WHERE tree_id = %1 " // "AND sens_chan_cali_timestamp >= \n" // " COALESCE( \n" // " (SELECT c_bottom.sens_chan_cali_timestamp \n" // " FROM tbl_sensor_channel_calibrations AS c_bottom \n" // " WHERE c_bottom.sens_id = c.sens_id and c_bottom.sens_chan_nr = c.sens_chan_nr AND c_bottom.sens_chan_cali_timestamp < '%2' \n" // " ORDER BY c_bottom.sens_chan_cali_timestamp DESC \n" // " LIMIT 1), \n" // " '-infinity') \n" // "AND c.sens_chan_cali_timestamp < '%3' \n" "ORDER BY c.sens_chan_cali_timestamp ASC"; templateQuery = const_cast<QString*>(&query); // setup connections connect(TimeConstraint::instance(), SIGNAL(signalOnTimeConstraintChange(TimeConstraint::ConstraintType,QDateTime)), this, SLOT(reQuery())); }
QVariant CalibrationsModel::data | ( | const QModelIndex & | item, | |
int | role | |||
) | const |
{ if (role == CalibrationId) return index(item.row(), 2).data(Qt::DisplayRole); if (role == CalibrationFormula) return index(item.row(), 1).data(Qt::DisplayRole); if (role == CalibrationTimestamp) return index(item.row(), 0).data(Qt::DisplayRole); if (role == Qt::CheckStateRole && item.column() == 0) return checkedItems[item.row()]; if (role == Qt::DisplayRole && item.column() == 1) return formulaRead(QSqlQueryModel::data(item, role)); if (role == Qt::BackgroundRole){ QDateTime oldest = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeBeginTime); QDateTime newest = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeEndTime); QDateTime itemTimestamp = item.data(CalibrationsModel::CalibrationTimestamp).toDateTime(); if (itemTimestamp < newest) { if (itemTimestamp > oldest) // if item is between global timescope return Qt::green; else { // Presupposition here is ASC order according to timestamp! Q_ASSERT(templateQuery->contains("ORDER BY c.sens_chan_cali_timestamp ASC")); // if item is just under the global timescope: green, else yellow if (!index(item.row() + 1, 0).isValid() || index(item.row() + 1, 0).data(CalibrationsModel::CalibrationTimestamp).toDateTime() > oldest) return Qt::green; else return Qt::yellow; } } else return Qt::red; } //inkleuren eventueel ook? bv: oranje de niet toegepaste, groen de toegepaste, wit de ongeselecteerde return SqlQueryModel::data(item, role); }
Qt::ItemFlags CalibrationsModel::flags | ( | const QModelIndex & | index | ) | const |
{ return index.column() == 0 ? SqlQueryModel::flags(index) | Qt::ItemIsUserCheckable : SqlQueryModel::flags(index); }
QStringList CalibrationsModel::getSelectedCalibrationIds | ( | ) |
Referenced by DataHeaderSection::getSqlForColumn().
{ QStringList selectedIds; QList<int> selectedRows = checkedItems.keys(Qt::Checked); foreach(int i, selectedRows){ selectedIds << index(i, 2).data(CalibrationsModel::CalibrationId).toString(); } return selectedIds; }
bool CalibrationsModel::isAnyItemChecked | ( | ) | const |
Referenced by DataHeaderSection::onCalibrationSelectionChange().
{ return !checkedItems.keys(Qt::Checked).isEmpty(); }
void CalibrationsModel::reQuery | ( | ) | [slot] |
Reimplemented from SqlQueryModel.
Referenced by CalibrationsModel(), and slot_syncTreeId().
{ QDateTime oldest = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeBeginTime); QDateTime newest = TimeConstraint::instance()->getTimeConstraint(TimeConstraint::TypeEndTime); if (oldest.isValid() && newest.isValid() && db_tree_id != 0){ //qDebug() << templateQuery->arg(oldest.toString(Qt::ISODate), newest.toString(Qt::ISODate), QString::number(db_tree_id)); beginResetModel(); setQuery(Database::execStatic(templateQuery->arg(QString::number(db_tree_id)/*, oldest.toString(Qt::ISODate), newest.toString(Qt::ISODate) */))); endResetModel(); } }
bool CalibrationsModel::setData | ( | const QModelIndex & | index, | |
const QVariant & | value, | |||
int | role | |||
) |
Referenced by slot_allCalibrations_toggle().
{ if (role == Qt::CheckStateRole){ Qt::CheckState state = (Qt::CheckState) value.toInt(); //ENUM CAST! checkedItems.insert(index.row(), state); Qt::CheckState chkState; if (checkedItems.count() == 0) chkState = Qt::Unchecked; else { int checked = checkedItems.keys(Qt::Checked).count(); int unchecked = rowCount() - checked; // niet checkedItems.keys(Qt::Unchecked), want niet alle rows zijn gerepresenteerd in checkedItems; if (checked == 0) chkState = Qt::Unchecked; else if (unchecked == 0) chkState = Qt::Checked; else chkState = Qt::PartiallyChecked; } emit dataChanged(index,index); emit signal_calibrationSelections_changed(chkState); return true; } return SqlQueryModel::setData(index, value, role); }
void CalibrationsModel::signal_calibrationSelections_changed | ( | Qt::CheckState | ) | [signal] |
Referenced by setData().
void CalibrationsModel::slot_allCalibrations_toggle | ( | const int | state | ) | [slot] |
{ slot_allCalibrations_toggle((Qt::CheckState) state); //ENUM CAST }
void CalibrationsModel::slot_allCalibrations_toggle | ( | const Qt::CheckState | state | ) | [slot] |
Referenced by slot_allCalibrations_toggle().
void CalibrationsModel::slot_syncTreeId | ( | const int & | tree_id | ) | [slot] |
Referenced by CalibrationsView::CalibrationsView().
{ Q_ASSERT(tree_id != 0); db_tree_id = tree_id; reQuery(); }