Mercurial > projects > package-update-indicator
diff pui-types.c @ 0:6884bb8130ca
Initial revision
author | Guido Berhoerster <guido+pui@berhoerster.name> |
---|---|
date | Sun, 20 May 2018 11:32:57 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pui-types.c Sun May 20 11:32:57 2018 +0200 @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2018 Guido Berhoerster <guido+pui@berhoerster.name> + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "pui-types.h" + +#define PUI_DEFINE_ENUM_VALUE(valuename, valuenick) \ + { valuename, #valuename, #valuenick }, +#define PUI_DEFINE_ENUM_TYPE(EnumName, enum_name, values) \ + GType \ + enum_name##_get_type(void) \ + { \ + static volatile gsize g_define_type_id__volatile = 0; \ + static const GEnumValue v[] = { \ + values \ + { 0 } \ + }; \ + GType g_define_type_id; \ + if (g_once_init_enter(&g_define_type_id__volatile)) { \ + g_define_type_id = \ + g_enum_register_static(g_intern_static_string(#EnumName), \ + v); \ + g_once_init_leave(&g_define_type_id__volatile, \ + g_define_type_id); \ + } \ + return (g_define_type_id__volatile); \ + } + +PUI_DEFINE_ENUM_TYPE(PuiState, pui_state, + PUI_DEFINE_ENUM_VALUE(PUI_STATE_UP_TO_DATE, "up-to-date") + PUI_DEFINE_ENUM_VALUE(PUI_STATE_NORMAL_UPDATES_AVAILABLE, + "normal-updates-available") + PUI_DEFINE_ENUM_VALUE(PUI_STATE_IMPORTANT_UPDATES_AVAILABLE, + "important-updates-available") + PUI_DEFINE_ENUM_VALUE(PUI_STATE_ERROR, "error")) + +gchar * +pui_types_enum_to_string(GType type, gint value) +{ + GTypeClass *type_class; + GEnumValue *enum_value; + + type_class = g_type_class_ref(type); + + g_return_val_if_fail(G_IS_ENUM_CLASS(type_class), NULL); + + enum_value = g_enum_get_value(G_ENUM_CLASS(type_class), value); + if (enum_value == NULL) { + return (g_strdup_printf("%d", value)); + } + + return (g_strdup(enum_value->value_nick)); +}