girara
|
00001 /* See LICENSE file for license and copyright information */ 00002 00003 #include "statusbar.h" 00004 #include "session.h" 00005 #include "datastructures.h" 00006 00007 #if GTK_MAJOR_VERSION == 2 00008 #include "gtk2-compat.h" 00009 #endif 00010 00014 struct girara_statusbar_item_s 00015 { 00016 GtkWidget* box; 00017 GtkLabel *text; 00018 }; 00019 00020 girara_statusbar_item_t* 00021 girara_statusbar_item_add(girara_session_t* session, bool expand, bool fill, bool left, girara_statusbar_event_t callback) 00022 { 00023 g_return_val_if_fail(session != NULL && session->elements.statusbar_items, FALSE); 00024 00025 girara_statusbar_item_t* item = g_slice_new(girara_statusbar_item_t); 00026 00027 item->box = gtk_event_box_new(); 00028 item->text = GTK_LABEL(gtk_label_new(NULL)); 00029 00030 /* set style */ 00031 gtk_widget_override_background_color(GTK_WIDGET(item->box), GTK_STATE_NORMAL, &(session->style.statusbar_background)); 00032 gtk_widget_override_color(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &(session->style.statusbar_foreground)); 00033 gtk_widget_override_font(GTK_WIDGET(item->text), session->style.font); 00034 00035 /* set properties */ 00036 gtk_misc_set_alignment(GTK_MISC(item->text), left ? 0.0 : 1.0, 0.0); 00037 gtk_misc_set_padding(GTK_MISC(item->text), 2, 4); 00038 gtk_label_set_use_markup(item->text, TRUE); 00039 00040 if (callback != NULL) { 00041 g_signal_connect(G_OBJECT(item->box), "button-press-event", G_CALLBACK(callback), session); 00042 } 00043 00044 /* add it to the list */ 00045 gtk_container_add(GTK_CONTAINER(item->box), GTK_WIDGET(item->text)); 00046 gtk_box_pack_start(session->gtk.statusbar_entries, GTK_WIDGET(item->box), expand, fill, 2); 00047 gtk_widget_show_all(GTK_WIDGET(item->box)); 00048 00049 girara_list_prepend(session->elements.statusbar_items, item); 00050 return item; 00051 } 00052 00053 void 00054 girara_statusbar_item_free(girara_statusbar_item_t* item) 00055 { 00056 g_slice_free(girara_statusbar_item_t, item); 00057 } 00058 00059 bool 00060 girara_statusbar_item_set_text(girara_session_t* session, girara_statusbar_item_t* item, const char* text) 00061 { 00062 g_return_val_if_fail(session != NULL, false); 00063 g_return_val_if_fail(item != NULL, false); 00064 00065 char* escaped_text = g_markup_escape_text(text, -1); 00066 gtk_label_set_markup((GtkLabel*) item->text, escaped_text); 00067 g_free(escaped_text); 00068 00069 return true; 00070 } 00071 00072 bool 00073 girara_statusbar_item_set_foreground(girara_session_t* session, girara_statusbar_item_t* item, const char* color) 00074 { 00075 g_return_val_if_fail(session != NULL, false); 00076 g_return_val_if_fail(item != NULL, false); 00077 00078 GdkColor gdk_color; 00079 gdk_color_parse(color, &gdk_color); 00080 gtk_widget_modify_fg(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &gdk_color); 00081 00082 return true; 00083 } 00084 00085 bool 00086 girara_statusbar_set_background(girara_session_t* session, const char* color) 00087 { 00088 g_return_val_if_fail(session != NULL, false); 00089 00090 GdkRGBA gdk_color; 00091 gdk_rgba_parse(&gdk_color, color); 00092 gtk_widget_override_background_color(GTK_WIDGET(session->gtk.statusbar), GTK_STATE_NORMAL, &gdk_color); 00093 00094 return true; 00095 } 00096