diff --git a/src/gm-world-tab.c b/src/gm-world-tab.c deleted file mode 100644 index 3c15b61..0000000 --- a/src/gm-world-tab.c +++ /dev/null @@ -1,196 +0,0 @@ -#include -#include "gm-world.h" -#include "gm-world-tab.h" -#include "gm-support.h" -#include "gm-pixbuf.h" -#include "debug.h" - -#define GM_WORLD_TAB_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GM_TYPE_WORLD_TAB, GmWorldTabPrivate)) - -void on_gm_world_tab_button_clicked(GtkButton *button, GmWorldTab *tab); -void on_gm_world_tab_world_activity_changed(GmWorld *world, gint activity, - GmWorldTab *tab); -void on_gm_world_tab_world_name_changed(GmWorld *world, gchar *text, - GmWorldTab *tab); - -struct _GmWorldTabPrivate { - GmWorld *world; - - GtkImage *image; - GtkLabel *label; - GtkButton *button; - - guint source_id; -}; - -// Signals - -enum { - CLOSE, - NUM_SIGNALS -}; - -static guint gm_world_tab_signals[NUM_SIGNALS] = {0}; - -G_DEFINE_TYPE(GmWorldTab, gm_world_tab, GTK_TYPE_HBOX) - -static void -gm_world_tab_stop_recolor(GmWorldTab *tab) { - if (tab->priv->source_id != 0) { - g_source_remove(tab->priv->source_id); - tab->priv->source_id = 0; - } -} - -static void -gm_world_tab_finalize(GObject *object) { - GmWorldTab *obj = GM_WORLD_TAB(object); - - gm_world_tab_stop_recolor(obj); - - if (obj->priv->world) { - g_signal_handlers_disconnect_by_func(obj->priv->world, - G_CALLBACK(on_gm_world_tab_world_activity_changed), obj); - g_signal_handlers_disconnect_by_func(obj->priv->world, - G_CALLBACK(on_gm_world_tab_world_name_changed), obj); - g_object_unref(obj->priv->world); - } - - G_OBJECT_CLASS(gm_world_tab_parent_class)->finalize(object); -} - -static void -gm_world_tab_class_init(GmWorldTabClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS(klass); - - object_class->finalize = gm_world_tab_finalize; - - gm_world_tab_signals[CLOSE] = - g_signal_new("close", - G_OBJECT_CLASS_TYPE(object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GmWorldTabClass, close), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - g_type_class_add_private(object_class, sizeof(GmWorldTabPrivate)); -} - -static void -gm_world_tab_create_interface(GmWorldTab *obj) { - GtkWidget *image, *label, *button, *image_button; - - image = gtk_image_new(); - label = gtk_label_new(""); - button = gtk_button_new(); - - image_button = gtk_image_new_from_stock(GTK_STOCK_CLOSE, - GTK_ICON_SIZE_BUTTON); - gtk_widget_set_size_request(button, 16, 16); - gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); - gtk_container_add(GTK_CONTAINER(button), image_button); - - gtk_box_pack_start(GTK_BOX(obj), image, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(obj), label, FALSE, FALSE, 0); - gtk_box_pack_end(GTK_BOX(obj), button, FALSE, FALSE, 0); - - gtk_box_set_spacing(GTK_BOX(obj), 6); - - obj->priv->image = GTK_IMAGE(image); - obj->priv->label = GTK_LABEL(label); - obj->priv->button = GTK_BUTTON(button); -} - -static void -gm_world_tab_init(GmWorldTab *obj) { - obj->priv = GM_WORLD_TAB_GET_PRIVATE(obj); - obj->priv->source_id = 0; - obj->priv->world = NULL; - - gm_world_tab_create_interface(obj); - - g_signal_connect(obj->priv->button, "clicked", - G_CALLBACK(on_gm_world_tab_button_clicked), obj); - - gtk_widget_show_all(GTK_WIDGET(obj)); - gtk_widget_hide(GTK_WIDGET(obj)); -} - -gboolean -gm_world_tab_update_color(GmWorldTab *tab) { - gchar *text; - gint activity = gm_world_activity(tab->priv->world); - - text = g_strdup_printf("%s [%i]", - CALC_COLOR_RANGE(activity), - gm_world_name(tab->priv->world), activity); - - gtk_label_set_markup(tab->priv->label, text); - g_free(text); - - tab->priv->source_id = 0; - return FALSE; -} - -static void -gm_world_tab_update(GmWorldTab *tab) { - gint activity = gm_world_activity(tab->priv->world); - gchar *text; - - gm_world_tab_stop_recolor(tab); - - if (activity) { - text = g_strdup_printf("%s [%i]", - CALC_COLOR_RANGE(activity), - gm_world_name(tab->priv->world), activity); - gtk_image_set_from_pixbuf(tab->priv->image, - gm_pixbuf_get_at_size("world_activity.svg", 16, 16)); - tab->priv->source_id = g_idle_add((GSourceFunc) - gm_world_tab_update_color, tab); - } else { - text = g_strdup(gm_world_name(tab->priv->world)); - gtk_image_set_from_pixbuf(tab->priv->image, - gm_pixbuf_get_at_size("world.svg", 16, 16)); - } - - gtk_label_set_markup(tab->priv->label, text); - g_free(text); -} - -// Public - -GmWorldTab * -gm_world_tab_new(GmWorld *world) { - GmWorldTab *obj = GM_WORLD_TAB(g_object_new(GM_TYPE_WORLD_TAB, NULL)); - - obj->priv->world = g_object_ref(world); - - g_signal_connect(world, "activity_changed", - G_CALLBACK(on_gm_world_tab_world_activity_changed), obj); - g_signal_connect(world, "name_changed", - G_CALLBACK(on_gm_world_tab_world_name_changed), obj); - - gm_world_tab_update(obj); - return obj; -} - -// Callbacks - -void -on_gm_world_tab_button_clicked(GtkButton *button, GmWorldTab *tab) { - g_signal_emit(tab, gm_world_tab_signals[CLOSE], 0); -} - -void -on_gm_world_tab_world_activity_changed(GmWorld *world, gint activity, - GmWorldTab *tab) { - gm_world_tab_update(tab); -} - -void -on_gm_world_tab_world_name_changed(GmWorld *world, gchar *text, - GmWorldTab *tab) { - gm_world_tab_update(tab); -}