void DivePlannerPointsModel::editStop(int row, divedatapoint newData) { /* * When moving divepoints rigorously, we might end up with index * out of range, thus returning the last one instead. */ if (row >= divepoints.count()) return; divepoints[row] = newData; std::sort(divepoints.begin(), divepoints.end(), divePointsLessThan); if (updateMaxDepth()) CylindersModel::instance()->updateBestMixes(); emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1)); }
void DivePlannerPointsModel::createSimpleDive() { // initialize the start time in the plan diveplan.when = displayed_dive.when; // Use gas from the first cylinder int cylinderid = 0; // If we're in drop_stone_mode, don't add a first point. // It will be added implicit. if (!prefs.drop_stone_mode) addStop(M_OR_FT(15, 45), 1 * 60, cylinderid, 0, true); addStop(M_OR_FT(15, 45), 20 * 60, 0, 0, true); if (!isPlanner()) { addStop(M_OR_FT(5, 15), 42 * 60, 0, cylinderid, true); addStop(M_OR_FT(5, 15), 45 * 60, 0, cylinderid, true); } updateMaxDepth(); }
bool DivePlannerPointsModel::setData(const QModelIndex &index, const QVariant &value, int role) { int i, shift; if (role == Qt::EditRole) { divedatapoint &p = divepoints[index.row()]; switch (index.column()) { case DEPTH: if (value.toInt() >= 0) { p.depth = units_to_depth(value.toInt()); if (updateMaxDepth()) CylindersModel::instance()->updateBestMixes(); } break; case RUNTIME: p.time = value.toInt() * 60; break; case DURATION: i = index.row(); if (i) shift = divepoints[i].time - divepoints[i - 1].time - value.toInt() * 60; else shift = divepoints[i].time - value.toInt() * 60; while (i < divepoints.size()) divepoints[i++].time -= shift; break; case CCSETPOINT: { int po2 = 0; QByteArray gasv = value.toByteArray(); if (validate_po2(gasv.data(), &po2)) p.setpoint = po2; } break; case GAS: if (value.toInt() >= 0 && value.toInt() < MAX_CYLINDERS) p.cylinderid = value.toInt(); CylindersModel::instance()->updateTrashIcon(); break; } editStop(index.row(), p); } return QAbstractItemModel::setData(index, value, role); }