diff --git a/core/event.c b/core/event.c index 1e296be93..dd5551761 100644 --- a/core/event.c +++ b/core/event.c @@ -102,3 +102,17 @@ bool same_event(const struct event *a, const struct event *b) return 0; return !strcmp(a->name, b->name); } + +extern enum event_severity get_event_severity(const struct event *ev) +{ + switch (ev->flags & SAMPLE_FLAGS_SEVERITY_MASK) { + case SAMPLE_FLAGS_SEVERITY_INFO: + return EVENT_SEVERITY_INFO; + case SAMPLE_FLAGS_SEVERITY_WARN: + return EVENT_SEVERITY_WARN; + case SAMPLE_FLAGS_SEVERITY_ALARM: + return EVENT_SEVERITY_ALARM; + default: + return EVENT_SEVERITY_NONE; + } +} diff --git a/core/event.h b/core/event.h index 90f36fe54..31eca87fc 100644 --- a/core/event.h +++ b/core/event.h @@ -12,6 +12,13 @@ extern "C" { #endif +enum event_severity { + EVENT_SEVERITY_NONE = 0, + EVENT_SEVERITY_INFO, + EVENT_SEVERITY_WARN, + EVENT_SEVERITY_ALARM +}; + /* * Events are currently based straight on what libdivecomputer gives us. * We need to wrap these into our own events at some point to remove some of the limitations. @@ -46,12 +53,12 @@ extern void free_events(struct event *ev); extern struct event *create_event(unsigned int time, int type, int flags, int value, const char *name); extern struct event *clone_event_rename(const struct event *ev, const char *name); extern bool same_event(const struct event *a, const struct event *b); +extern enum event_severity get_event_severity(const struct event *ev); /* Since C doesn't have parameter-based overloading, two versions of get_next_event. */ extern const struct event *get_next_event(const struct event *event, const char *name); extern struct event *get_next_event_mutable(struct event *event, const char *name); - #ifdef __cplusplus } #endif diff --git a/core/eventtype.cpp b/core/eventtype.cpp index 90c1c7b09..dbe0157bc 100644 --- a/core/eventtype.cpp +++ b/core/eventtype.cpp @@ -9,10 +9,12 @@ struct event_type { std::string name; - int flags; + event_severity severity; bool plot; - event_type(const struct event *ev) - : name(ev->name), flags(ev->flags), plot(true) + event_type(const struct event *ev) : + name(ev->name), + severity(get_event_severity(ev)), + plot(true) { } }; @@ -21,7 +23,7 @@ static std::vector event_types; static bool operator==(const event_type &en1, const event_type &en2) { - return en1.name == en2.name && en1.flags == en2.flags; + return en1.name == en2.name && en1.severity == en2.severity; } extern "C" void clear_event_types() diff --git a/profile-widget/diveeventitem.cpp b/profile-widget/diveeventitem.cpp index 9b2b8213b..0de81c454 100644 --- a/profile-widget/diveeventitem.cpp +++ b/profile-widget/diveeventitem.cpp @@ -47,6 +47,7 @@ struct event *DiveEventItem::getEventMutable() void DiveEventItem::setupPixmap(struct gasmix lastgasmix, const DivePixmaps &pixmaps) { + event_severity severity = get_event_severity(ev); if (empty_string(ev->name)) { setPixmap(pixmaps.warning); } else if (same_string_caseinsensitive(ev->name, "modechange")) { @@ -82,12 +83,8 @@ void DiveEventItem::setupPixmap(struct gasmix lastgasmix, const DivePixmaps &pix else setPixmap(pixmaps.gaschangeEAN); } -#ifdef SAMPLE_FLAGS_SEVERITY_SHIFT } else if ((((ev->flags & SAMPLE_FLAGS_SEVERITY_MASK) >> SAMPLE_FLAGS_SEVERITY_SHIFT) == 1) || // those are useless internals of the dive computer -#else - } else if ( -#endif same_string_caseinsensitive(ev->name, "heading") || (same_string_caseinsensitive(ev->name, "SP change") && ev->time.seconds == 0)) { // 2 cases: @@ -98,14 +95,12 @@ void DiveEventItem::setupPixmap(struct gasmix lastgasmix, const DivePixmaps &pix // 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 setPixmap(pixmaps.transparent); -#ifdef SAMPLE_FLAGS_SEVERITY_SHIFT - } else if (((ev->flags & SAMPLE_FLAGS_SEVERITY_MASK) >> SAMPLE_FLAGS_SEVERITY_SHIFT) == 2) { + } else if (severity == EVENT_SEVERITY_INFO) { setPixmap(pixmaps.info); - } else if (((ev->flags & SAMPLE_FLAGS_SEVERITY_MASK) >> SAMPLE_FLAGS_SEVERITY_SHIFT) == 3) { + } else if (severity == EVENT_SEVERITY_WARN) { setPixmap(pixmaps.warning); - } else if (((ev->flags & SAMPLE_FLAGS_SEVERITY_MASK) >> SAMPLE_FLAGS_SEVERITY_SHIFT) == 4) { + } else if (severity == EVENT_SEVERITY_ALARM) { setPixmap(pixmaps.violation); -#endif } else if (same_string_caseinsensitive(ev->name, "violation") || // generic libdivecomputer same_string_caseinsensitive(ev->name, "Safety stop violation") || // the rest are from the Uemis downloader same_string_caseinsensitive(ev->name, "pO₂ ascend alarm") ||