Moved
This commit is contained in:
parent
5c514f2f34
commit
3e3833b2ad
1 changed files with 0 additions and 196 deletions
|
@ -1,196 +0,0 @@
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#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("<span color=\"#0000%02x\">%s [%i]</span>",
|
|
||||||
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("<span color=\"#%02x0000\">%s [%i]</span>",
|
|
||||||
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);
|
|
||||||
}
|
|
Reference in a new issue