QVariant MashStepTableModel::data( const QModelIndex& index, int role ) const { MashStep* row; unitDisplay unit; unitScale scale; int col = index.column(); if( mashObs == 0 ) return QVariant(); // Ensure the row is ok. if( index.row() >= (int)(steps.size()) ) { Brewtarget::logW(tr("Bad model index. row = %1").arg(index.row())); return QVariant(); } else row = steps[index.row()]; // Make sure we only respond to the DisplayRole role. if( role != Qt::DisplayRole ) return QVariant(); switch( col ) { case MASHSTEPNAMECOL: return QVariant(row->name()); case MASHSTEPTYPECOL: return QVariant(row->typeStringTr()); case MASHSTEPAMOUNTCOL: unit = displayUnit(col); scale = displayScale(col); return (row->type() == MashStep::Decoction) ? QVariant( Brewtarget::displayAmount(row->decoctionAmount_l(), Units::liters, 3, unit, scale ) ) : QVariant( Brewtarget::displayAmount(row->infuseAmount_l(), Units::liters, 3, unit, scale) ); case MASHSTEPTEMPCOL: unit = displayUnit(col); return (row->type() == MashStep::Decoction) ? QVariant("---") : QVariant( Brewtarget::displayAmount(row->infuseTemp_c(), Units::celsius, 3, unit, noScale) ); case MASHSTEPTARGETTEMPCOL: unit = displayUnit(col); return QVariant( Brewtarget::displayAmount(row->stepTemp_c(), Units::celsius,3, unit, noScale) ); case MASHSTEPTIMECOL: scale = displayScale(col); return QVariant( Brewtarget::displayAmount(row->stepTime_min(), Units::minutes,0,noUnit,scale) ); default : Brewtarget::logW(tr("Bad column: %1").arg(index.column())); return QVariant(); } }
bool MashStepTableModel::setData( const QModelIndex& index, const QVariant& value, int role ) { MashStep *row; unitDisplay unit; if( mashObs == 0 ) return false; if( index.row() >= (int)(steps.size()) || role != Qt::EditRole ) return false; else row = steps[index.row()]; switch( index.column() ) { case MASHSTEPNAMECOL: if( value.canConvert(QVariant::String)) { row->setName(value.toString()); return true; } else return false; case MASHSTEPTYPECOL: if( value.canConvert(QVariant::Int) ) { row->setType(static_cast<MashStep::Type>(value.toInt())); return true; } else return false; case MASHSTEPAMOUNTCOL: if( value.canConvert(QVariant::String) ) { unit = displayUnit(MASHSTEPAMOUNTCOL); if( row->type() == MashStep::Decoction ) row->setDecoctionAmount_l( Brewtarget::qStringToSI(value.toString(),Units::liters,unit) ); else row->setInfuseAmount_l( Brewtarget::qStringToSI(value.toString(),Units::liters,unit) ); return true; } else return false; case MASHSTEPTEMPCOL: if( value.canConvert(QVariant::String) && row->type() != MashStep::Decoction ) { unit = displayUnit(MASHSTEPTEMPCOL); row->setInfuseTemp_c( Brewtarget::qStringToSI(value.toString(),Units::celsius,unit) ); return true; } else return false; case MASHSTEPTARGETTEMPCOL: if( value.canConvert(QVariant::String) ) { unit = displayUnit(MASHSTEPTARGETTEMPCOL); row->setStepTemp_c( Brewtarget::qStringToSI(value.toString(),Units::celsius,unit) ); row->setEndTemp_c( Brewtarget::qStringToSI(value.toString(),Units::celsius,unit) ); return true; } else return false; case MASHSTEPTIMECOL: if( value.canConvert(QVariant::String) ) { row->setStepTime_min( Brewtarget::qStringToSI(value.toString(),Units::minutes) ); return true; } else return false; default: return false; } }