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();
}
1.7.1