#include "common.h" #include "customcellrendererstate.h" static void custom_cell_renderer_state_get_property(GObject* object, guint param_id, GValue* value, GParamSpec* pspec); static void custom_cell_renderer_state_set_property(GObject* object, guint param_id, const GValue* value, GParamSpec* pspec); static void update_state(CustomCellRendererState* cell_state, gint state); enum { PROP_0, PROP_STATE, }; G_DEFINE_TYPE(CustomCellRendererState, custom_cell_renderer_state, GTK_TYPE_CELL_RENDERER_PIXBUF) static void custom_cell_renderer_state_init(CustomCellRendererState* cell_state) { update_state(cell_state, cell_state->state); } static void custom_cell_renderer_state_class_init(CustomCellRendererStateClass *cell_state_class) { GObjectClass *object_class; /* GtkCellRendererClass *cell_renderer_class; */ object_class = G_OBJECT_CLASS(cell_state_class); /* cell_renderer_class = GTK_CELL_RENDERER_CLASS(cell_state_class); */ object_class->set_property = custom_cell_renderer_state_set_property; object_class->get_property = custom_cell_renderer_state_get_property; g_object_class_install_property(object_class, PROP_STATE, g_param_spec_int("state", "Torrent state", "Torrent state", STATE_DEAD, STATE_REHASH, 0, G_PARAM_READABLE | G_PARAM_WRITABLE)); } GtkCellRenderer* custom_cell_renderer_state_new(void) { return g_object_new(CUSTOM_TYPE_CELL_RENDERER_STATE, NULL); } void custom_cell_renderer_state_get_property(GObject* object, guint param_id, GValue* value, GParamSpec* pspec) { CustomCellRendererState* state = CUSTOM_CELL_RENDERER_STATE(object); switch (param_id) { case PROP_STATE: g_value_set_int(value, state->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); } } void custom_cell_renderer_state_set_property(GObject* object, guint param_id, const GValue* value, GParamSpec* pspec) { CustomCellRendererState* state = CUSTOM_CELL_RENDERER_STATE(object); gboolean changed = FALSE; switch (param_id) { case PROP_STATE: { gint state_value = g_value_get_int(value); if (state->state != state_value) { state->state = state_value; changed = TRUE; } break; } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); } if (changed) { update_state(state, state->state); } } void update_state(CustomCellRendererState* cell_state, gint state) { switch ((state_t)state) { case STATE_DEAD: g_object_set(cell_state, "stock-id", GTK_STOCK_CLOSE, NULL); break; case STATE_ACTIVE: g_object_set(cell_state, "stock-id", GTK_STOCK_YES, NULL); break; case STATE_REHASH: g_object_set(cell_state, "stock-id", GTK_STOCK_REFRESH, NULL); break; default: g_assert(FALSE); break; } }