Table based project-specific calibrations editor. More...
#include <calibrationeditor.h>


Public Member Functions | |
| ProjectCalibrationEditor (QWidget *parent=0) | |
Protected Slots | |
| void | onSensorChannelSelection (const QItemSelection &newSelection, const QItemSelection &) |
| virtual void | updateButtons () |
| virtual void | onNewButtonPress () |
| bool | isChannelSelected () |
Table based project-specific calibrations editor.
| ProjectCalibrationEditor::ProjectCalibrationEditor | ( | QWidget * | parent = 0 |
) | [inline] |
: CalibrationEditor(parent) { setObjectName("ProjectCalibrationEditorEditor"); setWindowTitle("Calibrations editor, project based"); treeView = new QTreeView(this); treeView->setModel(new AdjustedTreeModel(treeView)); QSplitter *splitter = new QSplitter(this); splitter->addWidget(treeView); splitter->addWidget(table()); splitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QLabel *note = new QLabel(this); note->setTextInteractionFlags(Qt::LinksAccessibleByMouse); note->setOpenExternalLinks(true); note->setTextFormat(Qt::RichText); note->setWordWrap(true); note->setText(GlobalConst::CALI_FORMULA_HELP); QGridLayout *widgetLayout = new QGridLayout(); widgetLayout->addWidget(splitter, 0, 0, 1, 1); widgetLayout->addWidget(note, 1, 0, 1, 1); // main layout setup mainLayout()->addLayout(widgetLayout, 0, 0, 1, 1); // setup connections connect(treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(onSensorChannelSelection(QItemSelection,QItemSelection))); // initialize onSensorChannelSelection(QItemSelection(), QItemSelection()); // setup connections connect(table()->itemDelegate(), SIGNAL(closeEditor(QWidget*)), this, SLOT(updateButtons())); }
| bool ProjectCalibrationEditor::isChannelSelected | ( | ) | [inline, protected, slot] |
Referenced by onNewButtonPress(), and onSensorChannelSelection().
{
Q_ASSERT(treeView->selectionModel()->selection().indexes().count() <= 1);
return !treeView->selectionModel()->selection().indexes().isEmpty();
}
| virtual void ProjectCalibrationEditor::onNewButtonPress | ( | ) | [inline, protected, virtual, slot] |
Reimplemented from TableBaseEditor.
{
CalibrationEditor::onNewButtonPress();
Q_ASSERT(isChannelSelected());
Q_ASSERT(table()->isEnabled());
// fill in foreign key of the currently selected tree_id
bool ok;
int tree_id = treeView->selectionModel()->selection().indexes().first().data(ProjectTreeModel::TreeId).toInt(&ok);
Q_ASSERT(ok);
QSqlRecord key = Database::execStaticR(QString::number(tree_id).prepend("SELECT DISTINCT sens_id, sens_chan_nr FROM tbl_trees WHERE tree_id = "));
int sens_id = key.value("sens_id").toInt(&ok);
Q_ASSERT(ok);
int sens_chan_nr = key.value("sens_chan_nr").toInt(&ok);
Q_ASSERT(ok);
model()->setData(model()->index(model()->rowCount() - 1, model()->record().indexOf("sens_id")), sens_id);
model()->setData(model()->index(model()->rowCount() - 1, model()->record().indexOf("sens_chan_nr")), sens_chan_nr);
}
| void ProjectCalibrationEditor::onSensorChannelSelection | ( | const QItemSelection & | newSelection, | |
| const QItemSelection & | ||||
| ) | [inline, protected, slot] |
Referenced by ProjectCalibrationEditor().
{
int tree_id = 0;
QString filter("(sens_id, sens_chan_nr) IN (SELECT DISTINCT sens_id, sens_chan_nr FROM tbl_trees INNER JOIN tbl_sensor_channel_calibrations USING (sens_id, sens_chan_nr) WHERE tree_id = %1)");
bool channelIsSelected = isChannelSelected();
table()->setEnabled(channelIsSelected);
if (!channelIsSelected) {
// if there is no selection
tree_id = 0;
} else {
// if there is a selection
tree_id = newSelection.indexes().first().data(ProjectTreeModel::TreeId).toInt();
// sanity check
Q_ASSERT(newSelection.indexes().count() == 1);
Q_ASSERT(tree_id != 0);
Q_ASSERT(tree_id != -1);
}
// There is a minor problem here: once a non-empty model was selected(),
// and an other empty is selected afterwards, then the header
// will display questionmarks.
model()->setTable(channelIsSelected ? "tbl_sensor_channel_calibrations" : QString());
model()->setFilter(filter.arg(QString::number(tree_id)));
model()->setSort(model()->record().indexOf("sens_chan_cali_timestamp"), Qt::AscendingOrder);
model()->select();
// hide pk column
QSqlIndex pk = model()->primaryKey();
for(int i = 0; i < pk.count() ; i++){
table()->setColumnHidden(model()->record().indexOf(pk.fieldName(i)), true);
}
// hide sens_id & sens_chan_nr columns
table()->setColumnHidden(model()->record().indexOf("sens_id"), true);
table()->setColumnHidden(model()->record().indexOf("sens_chan_nr"), true);
}
| virtual void ProjectCalibrationEditor::updateButtons | ( | ) | [inline, protected, virtual, slot] |
Reimplemented from TableBaseEditor.
Referenced by ProjectCalibrationEditor().
{
CalibrationEditor::updateButtons();
treeView->setEnabled(!isDirty());
}
1.7.1