void DiveEventItem::setupToolTipString() { // we display the event on screen - so translate QString name = gettextFromC::instance()->tr(internalEvent->name); int value = internalEvent->value; int type = internalEvent->type; if (value) { if (event_is_gaschange(internalEvent)) { name += ": "; name += gasname(&internalEvent->gas.mix); /* Do we have an explicit cylinder index? Show it. */ if (internalEvent->gas.index >= 0) name += QString(" (cyl %1)").arg(internalEvent->gas.index+1); } else if (type == SAMPLE_EVENT_PO2 && name == "SP change") { name += QString(":%1").arg((double)value / 1000); } else { name += QString(":%1").arg(value); } } else if (type == SAMPLE_EVENT_PO2 && name == "SP change") { // this is a bad idea - we are abusing an existing event type that is supposed to // warn of high or low pO₂ and are turning it into a set point change event name += "\n" + tr("Manual switch to OC"); } else { name += internalEvent->flags == SAMPLE_FLAGS_BEGIN ? tr(" begin", "Starts with space!") : internalEvent->flags == SAMPLE_FLAGS_END ? tr(" end", "Starts with space!") : ""; } // qDebug() << name; setToolTip(name); }
static void save_one_event(struct membuffer *b, struct event *ev) { put_format(b, " <event time='%d:%02d min'", FRACTION(ev->time.seconds, 60)); show_index(b, ev->type, "type='", "'"); show_index(b, ev->flags, "flags='", "'"); show_index(b, ev->value, "value='", "'"); show_utf8(b, ev->name, " name='", "'", 1); if (event_is_gaschange(ev)) { if (ev->gas.index >= 0) { show_index(b, ev->gas.index, "cylinder='", "'"); put_gasmix(b, &ev->gas.mix); } else if (!event_gasmix_redundant(ev)) put_gasmix(b, &ev->gas.mix); } put_format(b, " />\n"); }
static void parse_dc_event(char *line, struct membuffer *str, void *_dc) { int m, s = 0; const char *name; struct divecomputer *dc = _dc; struct event event = { 0 }, *ev; m = strtol(line, &line, 10); if (*line == ':') s = strtol(line+1, &line, 10); event.time.seconds = m*60+s; for (;;) { char c; while (isspace(c = *line)) line++; if (!c) break; line = parse_keyvalue_entry(parse_event_keyvalue, &event, line); } name = ""; if (str->len) name = mb_cstring(str); ev = add_event(dc, event.time.seconds, event.type, event.flags, event.value, name); /* * Older logs might mark the dive to be CCR by having an "SP change" event at time 0:00. * Better to mark them being CCR on import so no need for special treatments elsewhere on * the code. */ if (ev && event.time.seconds == 0 && event.type == SAMPLE_EVENT_PO2 && dc->divemode==OC) { dc->divemode = CCR; } if (ev && event_is_gaschange(ev)) { /* * We subtract one here because "0" is "no index", * and the parsing will add one for actual cylinder * index data (see parse_event_keyvalue) */ ev->gas.index = event.gas.index-1; if (event.gas.mix.o2.permille || event.gas.mix.he.permille) ev->gas.mix = event.gas.mix; } }
static void parse_dc_event(char *line, struct membuffer *str, void *_dc) { int m, s = 0; const char *name; struct divecomputer *dc = _dc; struct event event = { 0 }, *ev; m = strtol(line, &line, 10); if (*line == ':') s = strtol(line+1, &line, 10); event.time.seconds = m*60+s; for (;;) { char c; while (isspace(c = *line)) line++; if (!c) break; line = parse_keyvalue_entry(parse_event_keyvalue, &event, line); } name = ""; if (str->len) name = mb_cstring(str); ev = add_event(dc, event.time.seconds, event.type, event.flags, event.value, name); if (ev && event_is_gaschange(ev)) { /* * We subtract one here because "0" is "no index", * and the parsing will add one for actual cylinder * index data (see parse_event_keyvalue) */ ev->gas.index = event.gas.index-1; if (event.gas.mix.o2.permille || event.gas.mix.he.permille) ev->gas.mix = event.gas.mix; } }
void DiveEventItem::setupPixmap() { const IconMetrics& metrics = defaultIconMetrics(); int sz_bigger = metrics.sz_med + metrics.sz_small; // ex 40px int sz_pix = sz_bigger/2; // ex 20px #define EVENT_PIXMAP(PIX) QPixmap(QString(PIX)).scaled(sz_pix, sz_pix, Qt::KeepAspectRatio, Qt::SmoothTransformation) #define EVENT_PIXMAP_BIGGER(PIX) QPixmap(QString(PIX)).scaled(sz_bigger, sz_bigger, Qt::KeepAspectRatio, Qt::SmoothTransformation) if (same_string(internalEvent->name, "")) { setPixmap(EVENT_PIXMAP(":warning")); } else if (internalEvent->type == SAMPLE_EVENT_BOOKMARK) { setPixmap(EVENT_PIXMAP(":flag")); } else if (strcmp(internalEvent->name, "heading") == 0 || (same_string(internalEvent->name, "SP change") && internalEvent->time.seconds == 0)) { // 2 cases: // a) some dive computers have heading in every sample // b) at t=0 we might have an "SP change" to indicate dive type // in both cases we want to get the right data into the tooltip but don't want the visual clutter // so set an "almost invisible" pixmap (a narrow but somewhat tall, basically transparent pixmap) // that allows tooltips to work when we don't want to show a specific // pixmap for an event, but want to show the event value in the tooltip QPixmap transparentPixmap(4, 20); transparentPixmap.fill(QColor::fromRgbF(1.0, 1.0, 1.0, 0.01)); setPixmap(transparentPixmap); } else if (event_is_gaschange(internalEvent)) { if (internalEvent->gas.mix.he.permille) setPixmap(EVENT_PIXMAP_BIGGER(":gaschangeTrimix")); else if (gasmix_is_air(&internalEvent->gas.mix)) setPixmap(EVENT_PIXMAP_BIGGER(":gaschangeAir")); else setPixmap(EVENT_PIXMAP_BIGGER(":gaschangeNitrox")); } else { setPixmap(EVENT_PIXMAP(":warning")); } #undef EVENT_PIXMAP }