girara
statusbar.c
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines