QVariant ExtraDataModel::data(const QModelIndex &index, int role) const { QVariant ret; struct extra_data *ed = get_dive_dc(&displayed_dive, dc_number)->extra_data; int i = -1; while (ed && ++i < index.row()) ed = ed->next; if (!ed) return ret; switch (role) { case Qt::FontRole: ret = defaultModelFont(); break; case Qt::TextAlignmentRole: ret = int(Qt::AlignLeft | Qt::AlignVCenter); break; case Qt::DisplayRole: switch (index.column()) { case KEY: ret = QString(ed->key); break; case VALUE: ret = QString(ed->value); break; } break; } return ret; }
struct divecomputer *select_dc(struct dive *dive) { unsigned int max = number_of_computers(dive); unsigned int i = dc_number; /* Reset 'dc_number' if we've switched dives and it is now out of range */ if (i >= max) dc_number = i = 0; return get_dive_dc(dive, i); }
void ExtraDataModel::updateDive() { clear(); rows = 0; struct extra_data *ed = get_dive_dc(&displayed_dive, dc_number)->extra_data; while (ed) { rows++; ed = ed->next; } if (rows > 0) { beginInsertRows(QModelIndex(), 0, rows - 1); endInsertRows(); } }
bool DiveEventItem::shouldBeHidden() { struct event *event = internalEvent; /* * Some gas change events are special. Some dive computers just tell us the initial gas this way. * Don't bother showing those */ struct sample *first_sample = &get_dive_dc(&displayed_dive, dc_number)->sample[0]; if (!strcmp(event->name, "gaschange") && (event->time.seconds == 0 || (first_sample && event->time.seconds == first_sample->time.seconds))) return true; for (int i = 0; i < evn_used; i++) { if (!strcmp(event->name, ev_namelist[i].ev_name) && ev_namelist[i].plot_ev == false) return true; } return false; }
void TankItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { Q_UNUSED(topLeft); Q_UNUSED(bottomRight); // We don't have enougth data to calculate things, quit. if (!dataModel || !pInfoEntry || !pInfoNr) return; // remove the old rectangles foreach (QGraphicsRectItem *r, rects) { delete(r); } rects.clear(); qreal width, left; // Find correct end of the dive plot for correct end of the tankbar struct plot_data *last_entry = &pInfoEntry[pInfoNr-1]; // get the information directly from the displayed_dive (the dc always exists) struct divecomputer *dc = get_dive_dc(&displayed_dive, dc_number); // start with the first gasmix and at the start of the dive int cyl = explicit_first_cylinder(&displayed_dive, dc); struct gasmix *gasmix = &displayed_dive.cylinder[cyl].gasmix; int startTime = 0; // work through all the gas changes and add the rectangle for each gas while it was used struct event *ev = get_next_event(dc->events, "gaschange"); while (ev && ev->time.seconds < last_entry->sec) { width = hAxis->posAtValue(ev->time.seconds) - hAxis->posAtValue(startTime); left = hAxis->posAtValue(startTime); createBar(left, width, gasmix); startTime = ev->time.seconds; gasmix = get_gasmix_from_event(&displayed_dive, ev); ev = get_next_event(ev->next, "gaschange"); } width = hAxis->posAtValue(last_entry->sec) - hAxis->posAtValue(startTime); left = hAxis->posAtValue(startTime); createBar(left, width, gasmix); }