Public Types | Public Slots | Signals | Public Member Functions

CalibrationsModel Class Reference

Model container for sensor calibrations. More...

#include <calibrationsmodel.h>

Inheritance diagram for CalibrationsModel:
Inheritance graph
[legend]
Collaboration diagram for CalibrationsModel:
Collaboration graph
[legend]

List of all members.

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

Detailed Description

Model container for sensor calibrations.


Member Enumeration Documentation

Enumerator:
CalibrationId 
CalibrationFormula 
CalibrationTimestamp 

                              {
        CalibrationId = Qt::UserRole+1000,
        CalibrationFormula,
        CalibrationTimestamp
    };


Constructor & Destructor Documentation

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


Member Function Documentation

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().

{
    if (state == Qt::Checked || state == Qt::Unchecked){
        for (int i = 0; i < rowCount(); i++)
            setData(index(i, 0), state, Qt::CheckStateRole);
        return;
    }
}

void CalibrationsModel::slot_syncTreeId ( const int &  tree_id  )  [slot]

Referenced by CalibrationsView::CalibrationsView().

{
    Q_ASSERT(tree_id != 0);
    db_tree_id =  tree_id;
    reQuery();
}


The documentation for this class was generated from the following files: