Anil Kumar's blog

Setting Color of submenu Widgets

you can set the FG and BG color of any widget using style object

GtkStyle *style0;GtkStyle *style0;
style0 = gtk_style_new ();
gdk_color_parse ("orange", &(style0->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menubar1, style0);

or for sub menus ..

GtkStyle *style0;GtkStyle *style1;
style1 = gtk_style_new ();
gdk_color_parse ("green", &(style1->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menu2, style0);

code block:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"

#define GLADE_HOOKUP_OBJECT(component,widget,name) \
g_object_set_data_full (G_OBJECT (component), name, \
gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)

#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
g_object_set_data (G_OBJECT (component), name, widget)

GtkWidget*
create_window1 (void)
{
GtkWidget *window1;
GtkWidget *fixed1;
GtkWidget *menubar1;
GtkWidget *menuitem4;
GtkWidget *menu4;
GtkWidget *new1;
GtkWidget *open1;
GtkWidget *save1;
GtkWidget *save_as1;
GtkWidget *separatormenuitem1;
GtkWidget *quit1;
GtkWidget *menuitem5;
GtkWidget *menu5;
GtkWidget *cut1;
GtkWidget *copy1;
GtkWidget *paste1;
GtkWidget *delete1;
GtkWidget *menuitem6;
GtkWidget *menu6;
GtkWidget *menuitem7;
GtkWidget *menu7;
GtkWidget *about1;
GtkAccelGroup *accel_group;
GtkStyle *style0;
GtkStyle *style1;
GtkStyle *style2;
GtkStyle *style3;
GtkStyle *style4;

style0 = gtk_style_new ();
style1 = gtk_style_new ();
style2 = gtk_style_new ();
style3 = gtk_style_new ();
style4 = gtk_style_new ();

accel_group = gtk_accel_group_new ();

window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window1), _("window1"));
gtk_widget_set_size_request (window1, 416, 300);

fixed1 = gtk_fixed_new ();
gtk_widget_show (fixed1);
gtk_container_add (GTK_CONTAINER (window1), fixed1);

menubar1 = gtk_menu_bar_new ();
gtk_widget_show (menubar1);
gtk_fixed_put (GTK_FIXED (fixed1), menubar1, 0, 0);
gtk_widget_set_size_request (menubar1, 416, 32);
gdk_color_parse ("orange", &(style0->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menubar1, style0);

menuitem4 = gtk_menu_item_new_with_mnemonic (_("_File"));
gtk_widget_show (menuitem4);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);

menu4 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);
gdk_color_parse ("green", &(style1->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menu4, style1);

new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group);
gtk_widget_show (new1);
gtk_container_add (GTK_CONTAINER (menu4), new1);

open1 = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group);
gtk_widget_show (open1);
gtk_container_add (GTK_CONTAINER (menu4), open1);

save1 = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group);
gtk_widget_show (save1);
gtk_container_add (GTK_CONTAINER (menu4), save1);

save_as1 = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group);
gtk_widget_show (save_as1);
gtk_container_add (GTK_CONTAINER (menu4), save_as1);

separatormenuitem1 = gtk_separator_menu_item_new ();
gtk_widget_show (separatormenuitem1);
gtk_container_add (GTK_CONTAINER (menu4), separatormenuitem1);
gtk_widget_set_sensitive (separatormenuitem1, FALSE);

quit1 = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
gtk_widget_show (quit1);
gtk_container_add (GTK_CONTAINER (menu4), quit1);

menuitem5 = gtk_menu_item_new_with_mnemonic (_("_Edit"));
gtk_widget_show (menuitem5);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem5);

menu5 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem5), menu5);
gdk_color_parse ("blue", &(style2->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menu5, style2);

cut1 = gtk_image_menu_item_new_from_stock ("gtk-cut", accel_group);
gtk_widget_show (cut1);
gtk_container_add (GTK_CONTAINER (menu5), cut1);

copy1 = gtk_image_menu_item_new_from_stock ("gtk-copy", accel_group);
gtk_widget_show (copy1);
gtk_container_add (GTK_CONTAINER (menu5), copy1);

paste1 = gtk_image_menu_item_new_from_stock ("gtk-paste", accel_group);
gtk_widget_show (paste1);
gtk_container_add (GTK_CONTAINER (menu5), paste1);

delete1 = gtk_image_menu_item_new_from_stock ("gtk-delete", accel_group);
gtk_widget_show (delete1);
gtk_container_add (GTK_CONTAINER (menu5), delete1);

menuitem6 = gtk_menu_item_new_with_mnemonic (_("_View"));
gtk_widget_show (menuitem6);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem6);

menu6 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem6), menu6);
gdk_color_parse ("red", &(style3->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menu6, style3);

menuitem7 = gtk_menu_item_new_with_mnemonic (_("_Help"));
gtk_widget_show (menuitem7);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem7);

menu7 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem7), menu7);
gdk_color_parse ("yellow", &(style4->bg[GTK_STATE_NORMAL]));
gtk_widget_set_style (menu7, style4);

about1 = gtk_menu_item_new_with_mnemonic (_("_About"));
gtk_widget_show (about1);
gtk_container_add (GTK_CONTAINER (menu7), about1);

g_signal_connect ((gpointer) new1, "activate",
G_CALLBACK (on_new1_activate),
NULL);
g_signal_connect ((gpointer) open1, "activate",
G_CALLBACK (on_open1_activate),
NULL);
g_signal_connect ((gpointer) save1, "activate",
G_CALLBACK (on_save1_activate),
NULL);
g_signal_connect ((gpointer) save_as1, "activate",
G_CALLBACK (on_save_as1_activate),
NULL);
g_signal_connect ((gpointer) quit1, "activate",
G_CALLBACK (on_quit1_activate),
NULL);
g_signal_connect ((gpointer) cut1, "activate",
G_CALLBACK (on_cut1_activate),
NULL);
g_signal_connect ((gpointer) copy1, "activate",
G_CALLBACK (on_copy1_activate),
NULL);
g_signal_connect ((gpointer) paste1, "activate",
G_CALLBACK (on_paste1_activate),
NULL);
g_signal_connect ((gpointer) delete1, "activate",
G_CALLBACK (on_delete1_activate),
NULL);
g_signal_connect ((gpointer) about1, "activate",
G_CALLBACK (on_about1_activate),
NULL);

/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
GLADE_HOOKUP_OBJECT (window1, fixed1, "fixed1");
GLADE_HOOKUP_OBJECT (window1, menubar1, "menubar1");
GLADE_HOOKUP_OBJECT (window1, menuitem4, "menuitem4");
GLADE_HOOKUP_OBJECT (window1, menu4, "menu4");
GLADE_HOOKUP_OBJECT (window1, new1, "new1");
GLADE_HOOKUP_OBJECT (window1, open1, "open1");
GLADE_HOOKUP_OBJECT (window1, save1, "save1");
GLADE_HOOKUP_OBJECT (window1, save_as1, "save_as1");
GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, "separatormenuitem1");
GLADE_HOOKUP_OBJECT (window1, quit1, "quit1");
GLADE_HOOKUP_OBJECT (window1, menuitem5, "menuitem5");
GLADE_HOOKUP_OBJECT (window1, menu5, "menu5");
GLADE_HOOKUP_OBJECT (window1, cut1, "cut1");
GLADE_HOOKUP_OBJECT (window1, copy1, "copy1");
GLADE_HOOKUP_OBJECT (window1, paste1, "paste1");
GLADE_HOOKUP_OBJECT (window1, delete1, "delete1");
GLADE_HOOKUP_OBJECT (window1, menuitem6, "menuitem6");
GLADE_HOOKUP_OBJECT (window1, menu6, "menu6");
GLADE_HOOKUP_OBJECT (window1, menuitem7, "menuitem7");
GLADE_HOOKUP_OBJECT (window1, menu7, "menu7");
GLADE_HOOKUP_OBJECT (window1, about1, "about1");

gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);

return window1;
}

sample code of GtkExtra Widget Set for simple spread sheet ......

use this modified testgtksheet.c code to get this view
copy the code to testgtksheet.c.

this package will works under gtk1.2 and glib1.2

code block:

#include <stdio.h>

#include <stdlib.h>

#include <gtk/gtk.h>

#include <gdk/gdk.h>

#include <gdk/gdkkeysyms.h>

#include <glib.h>

#include <string.h>

#include "gtkcombobox.h"

#include "gtkbordercombo.h"

#include "gtkcolorcombo.h"

#include "gtktogglecombo.h"

#include "gtksheet.h"

#include "gtkitementry.h"

#include "gtkfontcombo.h"

#include "pixmaps.h"

#define DEFAULT_PRECISION 3

#define DEFAULT_SPACE 8

GtkWidget *window;

GtkWidget *main_vbox;

GtkWidget *notebook;

GtkWidget *sheets;

GtkWidget *scrolled_windows;

GtkWidget *show_hide_box;

GtkWidget *status_box;

GtkWidget *location;

GtkWidget *entry;

GtkWidget *fgcolorcombo;

GtkWidget *bgcolorcombo;

GtkWidget *bordercombo;

GdkPixmap *pixmap;

GdkBitmap *mask;

GtkWidget *bg_pixmap;

GtkWidget *fg_pixmap;

GtkWidget *toolbar;

GtkWidget *left_button;

GtkWidget *center_button;

GtkWidget *right_button;

GtkWidget *tpixmap;

GtkWidget *bullet[10];

GtkWidget *smile;

GtkWidget *curve;

GtkWidget *popup;

void

quit ()

{

gtk_main_quit();

}

static gint

popup_activated(GtkWidget *widget, gpointer data)

{

GtkSheet *sheet;

gchar *item;

sheet=GTK_SHEET(sheets);

item = (gchar *)data;

if(strcmp(item,"Add Column")==0)

gtk_sheet_add_column(sheet,1);

if(strcmp(item,"Add Row")==0)

gtk_sheet_add_row(sheet,1);

if(strcmp(item,"Insert Row")==0){

if(sheet->state==GTK_SHEET_ROW_SELECTED)

gtk_sheet_insert_rows(sheet,sheet->range.row0,

sheet->range.rowi-sheet->range.row0+1);

}

if(strcmp(item,"Insert Column")==0){

if(sheet->state==GTK_SHEET_COLUMN_SELECTED)

gtk_sheet_insert_columns(sheet,sheet->range.col0,

sheet->range.coli-sheet->range.col0+1);

}

if(strcmp(item,"Delete Row")==0){

if(sheet->state==GTK_SHEET_ROW_SELECTED)

gtk_sheet_delete_rows(sheet,sheet->range.row0,

sheet->range.rowi-sheet->range.row0+1);

}

if(strcmp(item,"Delete Column")==0){

if(sheet->state==GTK_SHEET_COLUMN_SELECTED)

gtk_sheet_delete_columns(sheet,sheet->range.col0,

sheet->range.coli-sheet->range.col0+1);

}

if(strcmp(item,"Clear Cells")==0){

if(sheet->state!=GTK_SHEET_NORMAL)

gtk_sheet_range_clear(sheet, &sheet->range);

}

gtk_widget_destroy(popup);

return TRUE;

}

static GtkWidget *

build_menu(GtkWidget *sheet)

{

static char *items[]={

"Add Column",

"Add Row",

"Insert Row",

"Insert Column",

"Delete Row",

"Delete Column",

"Clear Cells"

};

GtkWidget *menu;

GtkWidget *item;

int i;

menu=gtk_menu_new();

for (i=0; i < (sizeof(items)/sizeof(items[0])) ; i++){

item=gtk_menu_item_new_with_label(items[i]);

gtk_signal_connect(GTK_OBJECT(item),"activate",

(GtkSignalFunc) popup_activated,

items[i]);

GTK_WIDGET_SET_FLAGS (item, GTK_SENSITIVE | GTK_CAN_FOCUS);

switch(i){

case 2:

if(GTK_SHEET(sheet)->state!=GTK_SHEET_ROW_SELECTED)

GTK_WIDGET_UNSET_FLAGS (item,

GTK_SENSITIVE | GTK_CAN_FOCUS);

break;

case 3:

if(GTK_SHEET(sheet)->state!=GTK_SHEET_COLUMN_SELECTED)

GTK_WIDGET_UNSET_FLAGS (item,

GTK_SENSITIVE | GTK_CAN_FOCUS);

break;

case 4:

if(GTK_SHEET(sheet)->state!=GTK_SHEET_ROW_SELECTED)

GTK_WIDGET_UNSET_FLAGS (item,

GTK_SENSITIVE | GTK_CAN_FOCUS);

break;

case 5:

if(GTK_SHEET(sheet)->state!=GTK_SHEET_COLUMN_SELECTED)

GTK_WIDGET_UNSET_FLAGS (item,

GTK_SENSITIVE | GTK_CAN_FOCUS);

break;

}

gtk_widget_show(item);

gtk_menu_append(GTK_MENU(menu),item);

}

return menu;

}

gint

do_popup(GtkWidget *widget, GdkEventButton *event, gpointer data)

{

GdkModifierType mods;

GtkWidget *sheet;

sheet=GTK_WIDGET(widget);

gdk_window_get_pointer (sheet->window, NULL, NULL, &mods);

if(mods&GDK_BUTTON3_MASK){

if(popup)

g_free(popup);

popup=build_menu(sheet);

gtk_menu_popup(GTK_MENU(popup), NULL, NULL, NULL, NULL,

event->button, event->time);

}

return TRUE;

}

void

format_text (GtkSheet *sheet, gchar *text, gint *justification, char *label)

{

double auxval;

int digspace=0;

int cell_width, char_width;

double val = 0.0;

int format;

double space;

int intspace;

int nonzero=FALSE;

int ipos;

char nchar;

enum {EMPTY, TEXT, NUMERIC};

cell_width=sheet->column[sheet->active_cell.col].width;

char_width = gdk_char_width (GTK_WIDGET(sheet)->style->font,(gchar)'X');

space= (double)cell_width/(double)char_width;

intspace=MIN(space, DEFAULT_SPACE);

format=EMPTY;

if(strlen(text) != 0)

{

for(ipos=0; ipos<strlen(text); ipos++){

switch(nchar=text[ipos]){

case '.':

case ' ': case ',':

case '-': case '+':

case 'd': case 'D':

case 'E': case 'e':

case '1': case '2': case '3': case '4': case '5': case '6':

case '7': case '8': case '9':

nonzero=TRUE;

break;

case '0':

break;

default:

format=TEXT;

}

if(format != EMPTY) break;

}

val=atof(text);

if(format!=EMPTY || (val==0. && nonzero))

format = TEXT;

else

format = NUMERIC;

}

switch(format){

case TEXT:

case EMPTY:

strcpy(label, text);

return;

case NUMERIC:

val=atof(text);

*justification = GTK_JUSTIFY_RIGHT;

}

auxval= val < 0 ? -val : val;

while(auxval<1 && auxval != 0.){

auxval=auxval*10.;

digspace+=1;

}

if(digspace+DEFAULT_PRECISION+1>intspace || digspace > DEFAULT_PRECISION){

sprintf (label, "%*.*E", intspace, DEFAULT_PRECISION, val);

}

else

{

intspace=MIN(intspace, strlen(text)-digspace-1);

sprintf (label, "%*.*f", intspace, DEFAULT_PRECISION, val);

if(strlen(label) > space)

sprintf (label, "%*.*E", intspace, DEFAULT_PRECISION, val);

}

}

void

parse_numbers(GtkWidget *widget, gpointer data)

{

GtkSheet *sheet;

char label[400];

gint justification;

GtkSheetCellAttr attr;

sheet=GTK_SHEET(widget);

gtk_sheet_get_attributes(sheet, sheet->active_cell.row,

sheet->active_cell.col,

&attr);

justification = attr.justification;

format_text(sheet, gtk_entry_get_text(GTK_ENTRY(sheet->sheet_entry)),

&justification, label);

gtk_sheet_set_cell(sheet, sheet->active_cell.row,

sheet->active_cell.col,

justification, label);

}

void

clipboard_handler(GtkWidget *widget, GdkEventKey *key)

{

GtkSheet *sheet;

sheet = GTK_SHEET(widget);

if(key->state & GDK_CONTROL_MASK || key->keyval==GDK_Control_L ||

key->keyval==GDK_Control_R){

if((key->keyval=='c' || key->keyval == 'C') && sheet->state != GTK_STATE_NORMAL){

if(GTK_SHEET_IN_CLIP(sheet)) gtk_sheet_unclip_range(sheet);

gtk_sheet_clip_range(sheet, &sheet->range);

/* gtk_sheet_unselect_range(sheet);

*/

}

if(key->keyval=='x' || key->keyval == 'X')

gtk_sheet_unclip_range(sheet);

}

}

void

resize_handler(GtkWidget *widget, GtkSheetRange *old_range,

GtkSheetRange *new_range,

gpointer data)

{

printf("OLD SELECTION: %d %d %d %d\n",old_range->row0, old_range->col0,

old_range->rowi, old_range->coli);

printf("NEW SELECTION: %d %d %d %d\n",new_range->row0, new_range->col0,

new_range->rowi, new_range->coli);

}

void

move_handler(GtkWidget *widget, GtkSheetRange *old_range,

GtkSheetRange *new_range,

gpointer data)

{

printf("OLD SELECTION: %d %d %d %d\n",old_range->row0, old_range->col0,

old_range->rowi, old_range->coli);

printf("NEW SELECTION: %d %d %d %d\n",new_range->row0, new_range->col0,

new_range->rowi, new_range->coli);

}

gint change_entry(GtkWidget *widget,

gint row, gint col, gint *new_row, gint *new_col,

gpointer data)

{

GtkSheet *sheet;

sheet = GTK_SHEET(widget);

if(*new_col == 0 && col != 0)

gtk_sheet_change_entry(sheet, gtk_combo_get_type());

if(*new_col == 1 && col != 1)

gtk_sheet_change_entry(sheet, GTK_TYPE_ENTRY);

if(*new_col == 2 && col != 2)

gtk_sheet_change_entry(sheet, GTK_TYPE_SPIN_BUTTON);

if(*new_col >= 3 && col < 3)

gtk_sheet_change_entry(sheet, GTK_TYPE_ITEM_ENTRY);

return TRUE;

}

void alarm_change(GtkWidget *widget, gint row, gint col,

gpointer data)

{

printf("CHANGE CELL: %d %d\n",row,col);

}

void alarm_activate(GtkWidget *widget, gint row, gint col,

gpointer data)

{

GtkSheetRange range;

printf("ACTIVATE CELL: %d %d\n",row,col);

range.row0 = range.rowi = row;

range.col0 = range.coli = col;

/*

gtk_sheet_range_set_justification(GTK_SHEET(widget), &range, GTK_JUSTIFY_LEFT);

*/

}

void alarm_deactivate(GtkWidget *widget, gint row, gint col,

gpointer data)

{

GtkSheetRange range;

printf("DEACTIVATE CELL: %d %d\n",row,col);

range.row0 = range.rowi = row;

range.col0 = range.coli = col;

/*

gtk_sheet_range_set_justification(GTK_SHEET(widget), &range, GTK_JUSTIFY_RIGHT);

*/

}

gint alarm_traverse(GtkWidget *widget,

gint row, gint col, gint *new_row, gint *new_col,

gpointer data)

{

printf("TRAVERSE: %d %d %d %d\n",row,col,*new_row,*new_col);

return TRUE;

}

void show_child(GtkWidget *widget, gpointer data)

{

if(!GTK_WIDGET_MAPPED(curve))

gtk_sheet_attach(GTK_SHEET(sheets), curve, 2, 7, 0., 0.);

/* gtk_sheet_put(GTK_SHEET(sheets[0]), curve, 550, 120);

*/

}

void

build_example2(GtkWidget *widget)

{

GtkSheet *sheet;

GtkSheetRange range;

GdkColor color;

sheet=GTK_SHEET(widget);

GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_AUTO_SCROLL);

/*

GTK_SHEET_UNSET_FLAGS(sheet, GTK_SHEET_JUSTIFY_ENTRY);

*/

gtk_sheet_set_selection_mode(sheet, GTK_SELECTION_SINGLE);

range.row0=0;

range.rowi=2;

range.col0=0;

range.coli=sheet->maxcol;

gdk_color_parse("black", &color);

gdk_color_alloc(gtk_widget_get_colormap(widget), &color);

gtk_sheet_range_set_foreground(sheet, &range, &color);

gtk_sheet_set_active_cell(sheet, 0, 0);

/*

gtk_sheet_set_update_policy(sheet, GTK_UPDATE_CONTINUOUS, GTK_UPDATE_CONTINUOUS);

*/

gtk_signal_connect(GTK_OBJECT(sheet),

"button_press_event",

(GtkSignalFunc) do_popup,

NULL);

gtk_signal_connect(GTK_OBJECT(sheet),

"set_cell",

(GtkSignalFunc) parse_numbers,

NULL);

}

void

set_cell(GtkWidget *widget, gchar *insert, gint text_legth, gint position,

gpointer data)

{

char *text;

GtkEntry *sheet_entry;

sheet_entry = GTK_ENTRY(gtk_sheet_get_entry(GTK_SHEET(widget)));

if((text = gtk_entry_get_text (sheet_entry))) {

gtk_entry_set_text(GTK_ENTRY(entry), text);

}

GTK_WIDGET_UNSET_FLAGS(entry, GTK_HAS_FOCUS);

GTK_WIDGET_SET_FLAGS(GTK_SHEET(widget)->sheet_entry, GTK_HAS_FOCUS);

}

void

show_sheet_entry(GtkWidget *widget, gpointer data)

{

char *text;

GtkSheet *sheet;

GtkEntry *sheet_entry;

if(!GTK_WIDGET_HAS_FOCUS(widget)) return;

sheet=GTK_SHEET(sheets);

sheet_entry = GTK_ENTRY(gtk_sheet_get_entry(sheet));

if((text=gtk_entry_get_text (GTK_ENTRY(entry)))){

gtk_entry_set_text(sheet_entry, text);

}

}

void

activate_sheet_entry(GtkWidget *widget, gpointer data)

{

}

void

show_entry(GtkWidget *widget, gpointer data)

{

char *text;

GtkSheet *sheet;

GtkWidget * sheet_entry;

if(!GTK_WIDGET_HAS_FOCUS(widget)) return;

sheet=GTK_SHEET(sheets);

sheet_entry = gtk_sheet_get_entry(sheet);

if((text=gtk_entry_get_text (GTK_ENTRY(sheet_entry))))

gtk_entry_set_text(GTK_ENTRY(entry), text);

}

void

justify_left(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(left_button),

GTK_STATE_ACTIVE);

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(right_button),

GTK_STATE_NORMAL);

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(center_button),

GTK_STATE_NORMAL);

gtk_sheet_range_set_justification(current, &current->range,

GTK_JUSTIFY_LEFT);

}

void

justify_center(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(center_button),

GTK_STATE_ACTIVE);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(right_button),

GTK_STATE_NORMAL);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(left_button),

GTK_STATE_NORMAL);

gtk_sheet_range_set_justification(current, &current->range,

GTK_JUSTIFY_CENTER);

}

void

justify_right(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(right_button),

GTK_STATE_ACTIVE);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(left_button),

GTK_STATE_NORMAL);

gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(center_button),

GTK_STATE_NORMAL);

gtk_sheet_range_set_justification(current, &current->range,

GTK_JUSTIFY_RIGHT);

}

gint

activate_sheet_cell(GtkWidget *widget, gint row, gint column, gpointer data)

{

GtkSheet *sheet;

GtkEntry *sheet_entry;

char cell[100];

char *text;

GtkSheetCellAttr attributes;

sheet=GTK_SHEET(widget);

sheet_entry = GTK_ENTRY(gtk_sheet_get_entry(sheet));

if(GTK_SHEET(widget)->column[column].name)

sprintf(cell," %s:%d ",GTK_SHEET(widget)->column[column].name, row);

else

sprintf(cell, " ROW: %d COLUMN: %d ", row, column);

gtk_label_set(GTK_LABEL(location), cell);

gtk_entry_set_max_length(GTK_ENTRY(entry),

GTK_ENTRY(sheet_entry)->text_max_length);

if((text=gtk_entry_get_text(GTK_ENTRY(gtk_sheet_get_entry(sheet)))))

gtk_entry_set_text(GTK_ENTRY(entry), text);

else

gtk_entry_set_text(GTK_ENTRY(entry), "");

gtk_sheet_get_attributes(sheet,sheet->active_cell.row,

sheet->active_cell.col, &attributes);

gtk_entry_set_editable(GTK_ENTRY(entry), attributes.is_editable);

switch (attributes.justification){

case GTK_JUSTIFY_LEFT:

justify_left(NULL);

break;

case GTK_JUSTIFY_CENTER:

justify_center(NULL);

break;

case GTK_JUSTIFY_RIGHT:

justify_right(NULL);

break;

default:

justify_left(NULL);

break;

}

return TRUE;

}

void

change_border (GtkWidget *widget, gint border)

{

GtkSheet *current;

GtkSheetRange range, auxrange;

gint border_mask, border_width=3;

gint auxcol, auxrow;

gint i,j;

current=GTK_SHEET(sheets);

range=current->range;

gtk_sheet_range_set_border(current, &range, 0, 0, 0);

switch(border){

case 0:

break;

case 1:

border_mask = GTK_SHEET_TOP_BORDER;

range.rowi = range.row0;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 2:

border_mask = GTK_SHEET_BOTTOM_BORDER;

range.row0 = range.rowi;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 3:

border_mask = GTK_SHEET_RIGHT_BORDER;

range.col0 = range.coli;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 4:

border_mask = GTK_SHEET_LEFT_BORDER;

range.coli = range.col0;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 5:

if(range.col0 == range.coli){

border_mask = GTK_SHEET_LEFT_BORDER | GTK_SHEET_RIGHT_BORDER;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

}

border_mask = GTK_SHEET_LEFT_BORDER;

auxcol=range.coli;

range.coli = range.col0;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

border_mask = GTK_SHEET_RIGHT_BORDER;

range.col0 = range.coli=auxcol;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 6:

if(range.row0 == range.rowi){

border_mask = GTK_SHEET_TOP_BORDER | GTK_SHEET_BOTTOM_BORDER;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

}

border_mask = GTK_SHEET_TOP_BORDER;

auxrow=range.rowi;

range.rowi = range.row0;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

border_mask = GTK_SHEET_BOTTOM_BORDER;

range.row0=range.rowi=auxrow;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 7:

border_mask = GTK_SHEET_RIGHT_BORDER | GTK_SHEET_LEFT_BORDER;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 8:

border_mask = GTK_SHEET_BOTTOM_BORDER | GTK_SHEET_TOP_BORDER;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

case 9:

gtk_sheet_range_set_border(current, &range, 15, border_width, 0);

for(i=range.row0; i<=range.rowi; i++)

for(j=range.col0; j<=range.coli; j++){

border_mask = 15;

auxrange.row0 = i;

auxrange.rowi = i;

auxrange.col0 = j;

auxrange.coli = j;

if(i == range.rowi) border_mask ^= GTK_SHEET_BOTTOM_BORDER;

if(i == range.row0) border_mask ^= GTK_SHEET_TOP_BORDER;

if(j == range.coli) border_mask ^= GTK_SHEET_RIGHT_BORDER;

if(j == range.col0) border_mask ^= GTK_SHEET_LEFT_BORDER;

if(border_mask != 15)

gtk_sheet_range_set_border(current, &auxrange, border_mask,

border_width, 0);

}

break;

case 10:

for(i=range.row0; i<=range.rowi; i++)

for(j=range.col0; j<=range.coli; j++){

border_mask = 0;

auxrange.row0 = i;

auxrange.rowi = i;

auxrange.col0 = j;

auxrange.coli = j;

if(i == range.rowi) border_mask |= GTK_SHEET_BOTTOM_BORDER;

if(i == range.row0) border_mask |= GTK_SHEET_TOP_BORDER;

if(j == range.coli) border_mask |= GTK_SHEET_RIGHT_BORDER;

if(j == range.col0) border_mask |= GTK_SHEET_LEFT_BORDER;

if(border_mask != 0)

gtk_sheet_range_set_border(current, &auxrange, border_mask,

border_width, 0);

}

break;

case 11:

border_mask = 15;

gtk_sheet_range_set_border(current, &range, border_mask, border_width, 0);

break;

}

}

void

change_fg(GtkWidget *widget, gint i, gchar *color_name)

{

GtkSheet *current;

GdkColor color;

GdkGC *tmp_gc;

current=GTK_SHEET(sheets);

gdk_color_parse(color_name, &color);

gdk_color_alloc(gtk_widget_get_colormap(widget), &color);

gtk_sheet_range_set_foreground(current, &current->range, &color);

tmp_gc=gdk_gc_new(window->window);

gdk_gc_set_foreground(tmp_gc,&color);

gdk_draw_rectangle(GTK_PIXMAP(fg_pixmap)->pixmap,

tmp_gc, TRUE, 5,20,16,4);

gtk_widget_queue_draw(fg_pixmap); gdk_gc_unref(tmp_gc);

}

void

change_bg(GtkWidget *widget, gint i, gchar *color_name)

{

GtkSheet *current;

GdkColor color;

GdkGC *tmp_gc;

current=GTK_SHEET(sheets);

gdk_color_parse(color_name, &color);

gdk_color_alloc(gtk_widget_get_colormap(widget), &color);

gtk_sheet_range_set_background(current, &current->range, &color);

tmp_gc=gdk_gc_new(window->window);

gdk_gc_set_foreground(tmp_gc,&color);

gdk_draw_rectangle(GTK_PIXMAP(bg_pixmap)->pixmap,

tmp_gc, TRUE, 4,20,18,4);

gtk_widget_draw(bg_pixmap, NULL);

gdk_gc_unref(tmp_gc);

}

void

do_hide_row_titles(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_sheet_hide_row_titles(current);

}

void

do_hide_column_titles(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_sheet_hide_column_titles(current);

}

void

do_show_row_titles(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_sheet_show_row_titles(current);

}

void

do_show_column_titles(GtkWidget *widget)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_sheet_show_column_titles(current);

}

void

new_font(GtkFontCombo *font_combo, gpointer data)

{

GtkSheet *current;

current=GTK_SHEET(sheets);

gtk_sheet_range_set_font(current, &current->range, font_combo->font);

}

int main(int argc, char *argv[])

{

GtkWidget *label;

GtkRequisition request;

GtkWidget *hide_row_titles;

GtkWidget *hide_column_titles;

GtkWidget *show_row_titles;

GtkWidget *show_column_titles;

GtkWidget *font_combo;

GtkWidget *toggle_combo;

GdkColormap *colormap;

char title[10]= {"GTK Sheet "};

char folder[10]= {"sheet1"};

gtk_init(&argc, &argv);

colormap = gdk_colormap_get_system();

window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window), "GtkSheet Demo");

gtk_widget_set_usize(GTK_WIDGET(window), 500, 400);

gtk_signal_connect (GTK_OBJECT (window), "destroy",

GTK_SIGNAL_FUNC (quit), NULL);

main_vbox=gtk_vbox_new(FALSE,1);

gtk_container_set_border_width(GTK_CONTAINER(main_vbox),0);

gtk_container_add(GTK_CONTAINER(window), main_vbox);

gtk_widget_show(main_vbox);

show_hide_box = gtk_hbox_new(FALSE, 1);

hide_row_titles = gtk_button_new_with_label("Hide Row Titles");

hide_column_titles = gtk_button_new_with_label("Hide Column Titles");

show_row_titles = gtk_button_new_with_label("Show Row Titles");

show_column_titles = gtk_button_new_with_label("Show Column Titles");

gtk_box_pack_start(GTK_BOX(show_hide_box), hide_row_titles, TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(show_hide_box), hide_column_titles, TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(show_hide_box), show_row_titles, TRUE, TRUE, 0);

gtk_box_pack_start(GTK_BOX(show_hide_box), show_column_titles, TRUE, TRUE, 0);

gtk_widget_show(hide_row_titles);

gtk_widget_show(hide_column_titles);

gtk_widget_show(show_row_titles);

gtk_widget_show(show_column_titles);

gtk_signal_connect(GTK_OBJECT(hide_row_titles), "clicked",

(GtkSignalFunc) do_hide_row_titles, NULL);

gtk_signal_connect(GTK_OBJECT(hide_column_titles), "clicked",

(GtkSignalFunc) do_hide_column_titles, NULL);

gtk_signal_connect(GTK_OBJECT(show_row_titles), "clicked",

(GtkSignalFunc) do_show_row_titles, NULL);

gtk_signal_connect(GTK_OBJECT(show_column_titles), "clicked",

(GtkSignalFunc) do_show_column_titles, NULL);

gtk_box_pack_start(GTK_BOX(main_vbox), show_hide_box, FALSE, TRUE, 0);

gtk_widget_show(show_hide_box);

toolbar=gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

font_combo = gtk_font_combo_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

font_combo, "font", "font");

gtk_widget_set_usize(GTK_FONT_COMBO(font_combo)->italic_button, 32, 32);

gtk_widget_set_usize(GTK_FONT_COMBO(font_combo)->bold_button, 32, 32);

gtk_widget_show(font_combo);

gtk_signal_connect(GTK_OBJECT(font_combo), "changed", new_font, NULL);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

left_button = gtk_toggle_button_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

left_button, "justify left", "justify left");

gtk_widget_show(left_button);

gtk_signal_connect(GTK_OBJECT(left_button),"released",

(GtkSignalFunc) justify_left, NULL);

center_button = gtk_toggle_button_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

center_button, "justify center", "justify center");

gtk_widget_show(center_button);

gtk_signal_connect(GTK_OBJECT(center_button), "released",

(GtkSignalFunc) justify_center, NULL);

right_button = gtk_toggle_button_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

right_button, "justify right", "justify right");

gtk_widget_show(right_button);

gtk_signal_connect(GTK_OBJECT(right_button), "released",

(GtkSignalFunc) justify_right, NULL);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

bordercombo=gtk_border_combo_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

bordercombo, "border", "border");

gtk_widget_set_usize(GTK_COMBO_BOX(bordercombo)->button, 32, 32);

gtk_widget_show(bordercombo);

gtk_signal_connect(GTK_OBJECT(bordercombo),

"changed", (GtkSignalFunc)change_border, NULL);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

fgcolorcombo=gtk_color_combo_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

fgcolorcombo, "font color", "font color");

gtk_widget_show(fgcolorcombo);

gtk_signal_connect(GTK_OBJECT(fgcolorcombo),

"changed", (GtkSignalFunc)change_fg, NULL);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

bgcolorcombo=gtk_color_combo_new();

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

bgcolorcombo, "background color", "background color");

gtk_widget_show(bgcolorcombo);

gtk_signal_connect(GTK_OBJECT(bgcolorcombo),

"changed", (GtkSignalFunc)change_bg, NULL);

gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));

toggle_combo = gtk_toggle_combo_new(5, 5);

gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar),

toggle_combo, "test", "test");

gtk_widget_set_usize(GTK_COMBO_BOX(toggle_combo)->button, 32, 32);

gtk_widget_show(toggle_combo);

gtk_box_pack_start(GTK_BOX(main_vbox), toolbar, FALSE, TRUE, 0);

gtk_widget_show(toolbar);

status_box=gtk_hbox_new(FALSE, 1);

gtk_container_set_border_width(GTK_CONTAINER(status_box),0);

gtk_box_pack_start(GTK_BOX(main_vbox), status_box, FALSE, TRUE, 0);

gtk_widget_show(status_box);

location=gtk_label_new("");

gtk_widget_size_request(location, &request);

gtk_widget_set_usize(location, 160, request.height);

gtk_box_pack_start(GTK_BOX(status_box), location, FALSE, TRUE, 0);

gtk_widget_show(location);

entry=gtk_entry_new(); gtk_box_pack_start(GTK_BOX(status_box), entry,

TRUE, TRUE, 0); gtk_widget_show(entry);

notebook=gtk_notebook_new();

gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_BOTTOM);

gtk_box_pack_start(GTK_BOX(main_vbox), notebook, TRUE, TRUE, 0);

gtk_widget_show(notebook);

sheets=(GtkWidget *)realloc(sheets, sizeof(GtkWidget *));

sheets=gtk_sheet_new(100000,40000,title);

scrolled_windows=(GtkWidget *)realloc(scrolled_windows,sizeof(GtkWidget *));

scrolled_windows=gtk_scrolled_window_new(NULL, NULL);

gtk_container_add(GTK_CONTAINER(scrolled_windows), sheets);

gtk_widget_show(sheets);

gtk_widget_show(scrolled_windows);

label=gtk_label_new(folder);

gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(scrolled_windows),

label);

gtk_signal_connect(GTK_OBJECT(gtk_sheet_get_entry(GTK_SHEET(sheets))),

"changed", (GtkSignalFunc)show_entry, NULL);

gtk_signal_connect(GTK_OBJECT(sheets),

"activate", (GtkSignalFunc)activate_sheet_cell,

NULL);

gtk_signal_connect(GTK_OBJECT(entry),

"changed", (GtkSignalFunc)show_sheet_entry, NULL);

gtk_signal_connect(GTK_OBJECT(entry),

"activate", (GtkSignalFunc)activate_sheet_entry,

NULL);

build_example2(sheets);

gtk_signal_connect(GTK_OBJECT(gtk_sheet_get_entry(GTK_SHEET(sheets))),

"changed", (GtkSignalFunc)show_entry, NULL);

pixmap=gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL,

left_just);

tpixmap = gtk_pixmap_new(pixmap, mask);

gtk_container_add(GTK_CONTAINER(left_button), tpixmap);

gtk_widget_show(tpixmap);

pixmap=gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL,

center_just);

tpixmap = gtk_pixmap_new(pixmap, mask);

gtk_container_add(GTK_CONTAINER(center_button), tpixmap);

gtk_widget_show(tpixmap);

pixmap=gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL,

right_just);

tpixmap = gtk_pixmap_new(pixmap, mask);

gtk_container_add(GTK_CONTAINER(right_button), tpixmap);

gtk_widget_show(tpixmap);

pixmap=gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL,

paint);

bg_pixmap=gtk_pixmap_new(pixmap, mask);

gtk_container_add(GTK_CONTAINER(GTK_COMBO_BOX(bgcolorcombo)->button),

bg_pixmap);

gtk_widget_show(bg_pixmap);

pixmap=gdk_pixmap_colormap_create_from_xpm_d(NULL, colormap, &mask, NULL,

font);

fg_pixmap=gtk_pixmap_new(pixmap, mask);

gtk_container_add(GTK_CONTAINER(GTK_COMBO_BOX(fgcolorcombo)->button),

fg_pixmap);

gtk_widget_show(fg_pixmap);

gtk_widget_show(window);

gtk_main();

return(0);

}

open operation using libglade? how to open a file using file chooser, and made it contents displayed on the Textview

how to open a file using file chooser, and made it contents displayed on the Textview using libglade:
here the test.glade file generated by glade :

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">

<glade-interface>

<widget class="GtkFileChooserDialog" id="filechooserdialog1">
<property name="border_width">5</property>
<property name="visible">True</property>
<property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>

code block:

/* This program displays a simple window and has a simple callback for
* * when the OK button is clicked.
* */
#define GTK_ENABLE_BROKEN
#include <gtk/gtk.h>
#include <glade/glade.h>

GtkWidget *filechooserdialog1;
GtkWidget *TextWindow;
GtkWidget *Textview;
void
on_button2_clicked (GtkWidget * widget, gpointer user_data)
{
FILE *infile;
char *filename;
GdkFont *fixed_font;
filename =
gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooserdialog1));
/* Load a fixed font */
fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-140-*-*-*-*-*-*");

/* Load the file into the text window */
printf ("%s", filename);
infile = fopen (filename, "r");
if (infile)
{
char buf[10000];
int nchars;

nchars = fread (buf, 1,10000, infile);
gtk_text_buffer_set_text((GTK_TEXT_VIEW(user_data))->buffer,buf,nchars);

fclose (infile);
}
/* Thaw the text widget, allowing the updates to become visible */
gtk_widget_show (TextWindow);
}

int
main (int argc, char *argv[])
{
GladeXML *main_window;
GtkWidget *button2;

gtk_init (&argc, &argv);

/* load the interface */
main_window = glade_xml_new ("test.glade", NULL, NULL);

/* connect the signals in the interface */

/* Have the ok button call the ok_button_clicked callback */
filechooserdialog1 =
glade_xml_get_widget (main_window, "filechooserdialog1");
button2 = glade_xml_get_widget (main_window, "button2");

/* Have the delete event (window close) end the program */
TextWindow = glade_xml_get_widget (main_window, "TextWindow");
gtk_widget_hide (TextWindow);
Textview = glade_xml_get_widget (main_window, "textview1");

g_signal_connect (G_OBJECT (button2), "clicked",
G_CALLBACK (on_button2_clicked), Textview);
/* start the event loop */
gtk_main ();

return 0;
}

Text View with colored scrollbar

Text View with colored scrollbar

code block:

#define GTK_ENABLE_BROKEN
#include <stdio.h>
#include <gtk/gtk.h>

void text_toggle_editable (GtkWidget *checkbutton,
GtkWidget *text)
{
gtk_text_set_editable (GTK_TEXT (text),
GTK_TOGGLE_BUTTON (checkbutton)->active);
}

void text_toggle_word_wrap (GtkWidget *checkbutton,
GtkWidget *text)
{
gtk_text_set_word_wrap (GTK_TEXT (text),
GTK_TOGGLE_BUTTON (checkbutton)->active);
}

void close_application( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}

int main( int argc,
char *argv[] )
{
GtkWidget *window;
GtkWidget *box1;
GtkWidget *box2;
GtkWidget *box3;
GtkWidget *hbox;
GtkWidget *button;
GtkWidget *check;
GtkWidget *separator;
GtkWidget *table;
GtkWidget *vscrollbar;
GtkWidget *text;
GtkAdjustment *adj1;
GdkColormap *cmap;
GdkColor color;
GdkFont *fixed_font;
GtkStyle *style;

FILE *infile;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (window, 600, 500);
gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (close_application),
NULL);
gtk_window_set_title (GTK_WINDOW (window), "Text Widget Example");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);

box1 = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box1);
gtk_widget_show (box1);

box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
gtk_widget_show (box2);

hbox = gtk_hbutton_box_new ();
gtk_box_pack_start (GTK_BOX (box2), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);

box3 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), box3, TRUE, TRUE, 0);
gtk_widget_show (box3);

table = gtk_table_new (2, 2, FALSE);
gtk_table_set_row_spacing (GTK_TABLE (table), 0, 2);
gtk_table_set_col_spacing (GTK_TABLE (table), 0, 2);
gtk_box_pack_start (GTK_BOX (box2), table, TRUE, TRUE, 0);
gtk_widget_show (table);

adj1 = gtk_adjustment_new (0.0, 0.0, 101.0, 8.0, 1.0, 1.0);
/* Create the GtkText widget */
text = gtk_text_new (NULL, NULL);
gtk_text_set_editable (GTK_TEXT (text), TRUE);
gtk_table_attach (GTK_TABLE (table), text, 0, 1, 0, 1,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (text);

vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj);
gtk_box_pack_start (GTK_BOX (box3), vscrollbar, TRUE, FALSE, 0);
gtk_widget_set_size_request (vscrollbar, 24, 24);
gtk_table_attach (GTK_TABLE (table),hbox, 1, 2, 0, 1,
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);

/* Get the system color map and allocate the color red */
cmap = gdk_colormap_get_system ();
color.red = 0xffff;
color.green = 0;
color.blue = 0;
if (!gdk_color_alloc (cmap, &color)) {
g_error ("couldn't allocate color");
}

style = gtk_style_new ();
gdk_color_parse ("GREEN", &(style->fg[GTK_STATE_NORMAL]));
gdk_color_parse ("RED", &(style->fg[GTK_STATE_PRELIGHT]));
gdk_color_parse ("BLACK", &(style->bg[GTK_STATE_NORMAL]));
gdk_color_parse ("BLACK", &(style->bg[GTK_STATE_PRELIGHT]));
gtk_widget_set_style (vscrollbar, style);
gtk_widget_set_style (window, style);

gtk_widget_show (vscrollbar);
/* Load a fixed font */
fixed_font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-140-*-*-*-*-*-*");

gtk_text_freeze (GTK_TEXT (text));

/* Insert some colored text */
gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL,
"Supports ", -1);
gtk_text_insert (GTK_TEXT (text), NULL, &color, NULL,
"colored ", -1);
gtk_text_insert (GTK_TEXT (text), NULL, &text->style->black, NULL,
"text and different ", -1);
gtk_text_insert (GTK_TEXT (text), fixed_font, &text->style->black, NULL,
"fonts\n\n", -1);

/* Load the file text.c into the text window */

infile = fopen ("scrollpage.c", "r");

if (infile) {
char buffer[1024];
int nchars;

while (1)
{
nchars = fread (buffer, 1, 1024, infile);
gtk_text_insert (GTK_TEXT (text), fixed_font, NULL,
NULL, buffer, nchars);

if (nchars < 1024)
break;
}

fclose (infile);
}

/* Thaw the text widget, allowing the updates to become visible */
gtk_text_thaw (GTK_TEXT (text));

check = gtk_check_button_new_with_label ("Editable");
gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT (check), "toggled",
G_CALLBACK (text_toggle_editable), text);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);
gtk_widget_show (check);
check = gtk_check_button_new_with_label ("Wrap Words");
gtk_box_pack_start (GTK_BOX (hbox), check, FALSE, TRUE, 0);
g_signal_connect (G_OBJECT (check), "toggled",
G_CALLBACK (text_toggle_word_wrap), text);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), FALSE);
gtk_widget_show (check);

separator = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
gtk_widget_show (separator);

box2 = gtk_vbox_new (FALSE, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
gtk_widget_show (box2);

button = gtk_button_new_with_label ("close");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (close_application),
NULL);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_widget_grab_default (button);
gtk_widget_show (button);

gtk_widget_show (window);

gtk_main ();

return 0;
}

Battery Widget using xmp image file and progress bar

Battery Widget using xmp image file and progress bar

code block:

#include
/* XPM */
static char * battary_xpm[] = {
"24 65 1359 2",
" c None",
". c #1C9B44",
"+ c #4ABB6D",
"@ c #66C780",
"# c #63B875",
"$ c #66B073",
"% c #74BA7C",
"& c #68B071",
"* c #65AD6E",
"= c #60A76B",
"- c #5DA269",
"; c #5CA16A",
"> c #5DA26B",
", c #5CA66B",
"' c #5AAB69",
") c #49A558",
"! c #158324",
"~ c #4FBC78",
"{ c #A7FFC9",
"] c #D2FFED",
"^ c #DCFFF0",
"/ c #DBFFE9",
"( c #EAFFF3",
"_ c #ECFFF2",
": c #EEFFF2",
"< c #EFFFF4",
"[ c #F0FFF7",
"} c #EEFFF6",
"| c #E9FFF2",
"1 c #E2FFEB",
"2 c #D4FFDD",
"3 c #5DAD66",
"4 c #63C087",
"5 c #BEFFDC",
"6 c #DFFFF6",
"7 c #E3FFF4",
"8 c #EFFFFC",
"9 c #F6FFFC",
"0 c #F9F8F4",
"a c #FFFBF7",
"b c #FFF7F5",
"c c #FFF6F7",
"d c #FFFCFF",
"e c #FFFCFB",
"f c #F6F9F2",
"g c #F2FFEE",
"h c #EEFFEC",
"i c #86B682",
"j c #47C66F",
"k c #82F9A5",
"l c #7BE79B",
"m c #A1FBBB",
"n c #D2FFE6",
"o c #DDFFED",
"p c #E0FFEA",
"q c #F0FFF3",
"r c #F4FFF1",
"s c #F5FFE8",
"t c #F7FFE4",
"u c #F4FFE3",
"v c #F4FFE6",
"w c #F9FFEC",
"x c #F8FFED",
"y c #F0FFE7",
"z c #EEFFE5",
"A c #E1FFD8",
"B c #C2F8BA",
"C c #9BE292",
"D c #7BD573",
"E c #51BD46",
"F c #4FC072",
"G c #8BFFA6",
"H c #88FE9E",
"I c #7AE98A",
"J c #81E88D",
"K c #8BE993",
"L c #85D785",
"M c #89D084",
"N c #96D48B",
"O c #8FD481",
"P c #81DA70",
"Q c #7BDE69",
"R c #76D464",
"S c #72CE63",
"T c #7AD06D",
"U c #7ACE70",
"V c #79CA6E",
"W c #7BCE72",
"X c #71C86A",
"Y c #7AD975",
"Z c #86ED82",
"` c #84F581",
" . c #93FF91",
".. c #5ADE57",
"+. c #81EC9E",
"@. c #94FFA8",
"#. c #1A9129",
"$. c #168E20",
"%. c #1A9020",
"&. c #1A8C1A",
"*. c #14820F",
"=. c #1D8610",
"-. c #248913",
";. c #158404",
">. c #0F9502",
",. c #069700",
"'. c #008A00",
"). c #008200",
"!. c #008300",
"~. c #028100",
"{. c #027D00",
"]. c #098008",
"^. c #178E1A",
"/. c #037A06",
"(. c #067F0B",
"_. c #0B8611",
":. c #5FDF66",
"<. c #8BFF93",
"[. c #A2FFBD",
"}. c #61D574",
"|. c #118F21",
"1. c #149A21",
"2. c #19A221",
"3. c #15A218",
"4. c #15A313",
"5. c #1EAD17",
"6. c #1FAF12",
"7. c #12A608",
"8. c #0EA90D",
"9. c #08A70C",
"0. c #009900",
"a. c #008F00",
"b. c #009001",
"c. c #008E05",
"d. c #008C09",
"e. c #089014",
"f. c #0F931C",
"g. c #048415",
"h. c #19972C",
"i. c #037E16",
"j. c #39B14D",
"k. c #A6FFBB",
"l. c #B6FFD7",
"m. c #3AB356",
"n. c #14982B",
"o. c #14A228",
"p. c #0FA520",
"q. c #04A112",
"r. c #02A50C",
"s. c #07AD0B",
"t. c #05AF06",
"u. c #02A901",
"v. c #03A207",
"w. c #029C08",
"x. c #008600",
"y. c #008900",
"z. c #008B04",
"A. c #008404",
"B. c #00850C",
"C. c #21A432",
"D. c #0B891D",
"E. c #209932",
"F. c #9CFFB1",
"G. c #B5FFE4",
"H. c #3ABA63",
"I. c #129D3A",
"J. c #11A537",
"K. c #08A32B",
"L. c #00A01D",
"M. c #00A515",
"N. c #00A70E",
"O. c #00A706",
"P. c #00A507",
"Q. c #17A618",
"R. c #1CA017",
"S. c #0D9409",
"T. c #038E00",
"U. c #049200",
"V. c #019400",
"W. c #009300",
"X. c #069902",
"Y. c #0EA10B",
"Z. c #069603",
"`. c #039003",
" + c #1AA01D",
".+ c #A0FFA3",
"++ c #AAFFD9",
"@+ c #48C373",
"#+ c #079735",
"$+ c #05A332",
"%+ c #02A62D",
"&+ c #01A827",
"*+ c #06AE23",
"=+ c #00AF17",
"-+ c #00AE09",
";+ c #00AE0A",
">+ c #0A9E0C",
",+ c #11950C",
"'+ c #078901",
")+ c #008B00",
"!+ c #008D00",
"~+ c #029700",
"{+ c #009600",
"]+ c #10A30D",
"^+ c #32B831",
"/+ c #9BFF97",
"(+ c #AFFFCF",
"_+ c #54BE74",
":+ c #069D2C",
"<+ c #00AA25",
"[+ c #00A722",
"}+ c #02A61F",
"|+ c #0DAA1D",
"1+ c #05AA0E",
"2+ c #00AD00",
"3+ c #00B100",
"4+ c #00A801",
"5+ c #059E06",
"6+ c #038B05",
"7+ c #008400",
"8+ c #009000",
"9+ c #028F03",
"0+ c #029006",
"a+ c #029707",
"b+ c #009700",
"c+ c #2AA72F",
"d+ c #ACFFAF",
"e+ c #B6FFCD",
"f+ c #5BBB74",
"g+ c #059E2A",
"h+ c #09BB31",
"i+ c #0CB62F",
"j+ c #02A21A",
"k+ c #0A9E12",
"l+ c #0CAA0F",
"m+ c #00B600",
"n+ c #00B202",
"o+ c #04A80B",
"p+ c #05910C",
"q+ c #0A920E",
"r+ c #04900D",
"s+ c #03970D",
"t+ c #019D0B",
"u+ c #2BA536",
"v+ c #AEFFB4",
"w+ c #B6FFCF",
"x+ c #5DB976",
"y+ c #0FA635",
"z+ c #00A11C",
"A+ c #009614",
"B+ c #05A020",
"C+ c #18A421",
"D+ c #069A08",
"E+ c #00A400",
"F+ c #00BB04",
"G+ c #00AB00",
"H+ c #01A207",
"I+ c #028B09",
"J+ c #009100",
"K+ c #068B0B",
"L+ c #058E0D",
"M+ c #009B00",
"N+ c #029F0A",
"O+ c #2BA634",
"P+ c #ABFFB1",
"Q+ c #B7FFCF",
"R+ c #5EB878",
"S+ c #008F22",
"T+ c #05AE2F",
"U+ c #0BA930",
"V+ c #05961F",
"W+ c #179821",
"X+ c #21A923",
"Y+ c #0AB00E",
"Z+ c #00A800",
"`+ c #00A703",
" @ c #019E09",
".@ c #038809",
"+@ c #008000",
"@@ c #008C00",
"#@ c #008E00",
"$@ c #07890B",
"%@ c #038A0A",
"&@ c #02940B",
"*@ c #009800",
"=@ c #2CA733",
"-@ c #ABFFB0",
";@ c #B9FFD0",
">@ c #60B679",
",@ c #129F37",
"'@ c #00A129",
")@ c #10A736",
"!@ c #32BA4E",
"~@ c #3DB249",
"{@ c #17911A",
"]@ c #05A90C",
"^@ c #0AA211",
"/@ c #0B8B10",
"(@ c #068206",
"_@ c #078905",
":@ c #108C12",
"<@ c #05870B",
"[@ c #03910B",
"}@ c #2BA833",
"|@ c #ABFFB2",
"1@ c #BAFFD0",
"2@ c #61B57A",
"3@ c #23A946",
"4@ c #029C2A",
"5@ c #008921",
"6@ c #2EAA4A",
"7@ c #8AF195",
"8@ c #A5FFA8",
"9@ c #5CE363",
"0@ c #0FA415",
"a@ c #07A10D",
"b@ c #099A0F",
"c@ c #0D8311",
"d@ c #067B08",
"e@ c #008800",
"f@ c #098105",
"g@ c #108512",
"h@ c #0D8813",
"i@ c #099210",
"j@ c #2AA732",
"k@ c #AAFFB0",
"l@ c #BBFFD2",
"m@ c #64B37C",
"n@ c #129336",
"o@ c #04962B",
"p@ c #1DA042",
"q@ c #52C26C",
"r@ c #76CF7F",
"s@ c #55B259",
"t@ c #229828",
"u@ c #119A19",
"v@ c #0EA115",
"w@ c #119A18",
"x@ c #14831A",
"y@ c #0F7B0E",
"z@ c #088600",
"A@ c #088800",
"B@ c #12800D",
"C@ c #19841A",
"D@ c #1B8D1E",
"E@ c #139519",
"F@ c #009703",
"G@ c #039B0A",
"H@ c #28A52F",
"I@ c #A5FFAB",
"J@ c #BDFFD2",
"K@ c #67B17E",
"L@ c #179439",
"M@ c #139E39",
"N@ c #2FA952",
"O@ c #60C67A",
"P@ c #90DD99",
"Q@ c #85D387",
"R@ c #4FB754",
"S@ c #27AE2E",
"T@ c #29A930",
"U@ c #2D9131",
"V@ c #288827",
"W@ c #21951A",
"X@ c #219518",
"Y@ c #2B8E24",
"Z@ c #329230",
"`@ c #27902B",
" # c #1E9723",
".# c #049708",
"+# c #059A0A",
"@# c #26A32E",
"## c #A3FFA9",
"$# c #BDFFD1",
"%# c #68B27F",
"&# c #1C943D",
"*# c #19A13F",
"=# c #71E594",
"-# c #A4FFBB",
";# c #BAFEC3",
"># c #B3F5B5",
",# c #79D57E",
"'# c #70DF78",
")# c #72ED79",
"!# c #6CE274",
"~# c #71CA76",
"{# c #75CA75",
"]# c #71D767",
"^# c #6BD360",
"/# c #75CC6D",
"(# c #84D882",
"_# c #6AC96D",
":# c #68D96D",
"<# c #23B026",
"[# c #008D02",
"}# c #AFFFB5",
"|# c #69B17F",
"1# c #1C923C",
"2# c #20A345",
"3# c #72E194",
"4# c #99EFB0",
"5# c #AEEAB6",
"6# c #ADE8AE",
"7# c #7BCC7F",
"8# c #76D97C",
"9# c #5ECF67",
"0# c #6ED876",
"a# c #7ECB83",
"b# c #7BC37A",
"c# c #77D16D",
"d# c #7AD56E",
"e# c #7BC472",
"f# c #74BC70",
"g# c #7CCF7D",
"h# c #74DD78",
"i# c #2DB330",
"j# c #038D06",
"k# c #299F2F",
"l# c #BDFFCF",
"m# c #69B27D",
"n# c #289E48",
"o# c #2DAE51",
"p# c #71DB90",
"q# c #85D799",
"r# c #9AD2A1",
"s# c #ACE1AB",
"t# c #87D087",
"u# c #86E089",
"v# c #7BE082",
"w# c #82E08A",
"x# c #87C98C",
"y# c #7FBB7F",
"z# c #77C56F",
"A# c #7BCA6F",
"B# c #83C07A",
"C# c #84BF7F",
"D# c #81C980",
"E# c #78D57A",
"F# c #33B136",
"G# c #0A8F0F",
"H# c #2A9E33",
"I# c #A7FFAF",
"J# c #138830",
"K# c #2CAC4D",
"L# c #7DE79C",
"M# c #9BEBB0",
"N# c #BCF0C0",
"O# c #C7F7C5",
"P# c #87CD87",
"Q# c #72C575",
"R# c #75D17C",
"S# c #77C97F",
"T# c #82B887",
"U# c #8ABA8A",
"V# c #89C97F",
"W# c #84C478",
"X# c #89BA82",
"Y# c #94C38F",
"Z# c #87C387",
"`# c #74C775",
" $ c #31A735",
".$ c #119118",
"+$ c #33A23B",
"@$ c #ABFFB4",
"#$ c #BDFFCE",
"$$ c #68B17A",
"%$ c #21963D",
"&$ c #31B150",
"*$ c #73DB8E",
"=$ c #89D99C",
"-$ c #B9EABB",
";$ c #CFFDCC",
">$ c #94D794",
",$ c #81D285",
"'$ c #90E497",
")$ c #9AE2A2",
"!$ c #98C29E",
"~$ c #88AC88",
"{$ c #8DC183",
"]$ c #A9DD9B",
"^$ c #C4EABB",
"/$ c #CCF1C8",
"($ c #A8DAA7",
"_$ c #7FCB83",
":$ c #31A135",
"<$ c #148D1A",
"[$ c #36A23F",
"}$ c #B0FFB8",
"|$ c #13882F",
"1$ c #29A948",
"2$ c #71D98C",
"3$ c #90DEA2",
"4$ c #C3F4C5",
"5$ c #D3FFCE",
"6$ c #8DCE8C",
"7$ c #7BC77D",
"8$ c #A8F5AF",
"9$ c #CBFFD3",
"0$ c #C7E9CE",
"a$ c #9CB69B",
"b$ c #98C38E",
"c$ c #C5F0BA",
"d$ c #D9F4D1",
"e$ c #C2DDBE",
"f$ c #D0F9CF",
"g$ c #93D897",
"h$ c #37A03B",
"i$ c #15891C",
"j$ c #32993D",
"k$ c #B0FFB7",
"l$ c #BCFFCC",
"m$ c #67B279",
"n$ c #1C9337",
"o$ c #2EB04C",
"p$ c #6CD787",
"q$ c #85D596",
"r$ c #B5E7B6",
"s$ c #C1F0BC",
"t$ c #89CC87",
"u$ c #8CD88E",
"v$ c #78C080",
"w$ c #A7E1B1",
"x$ c #CAE6D0",
"y$ c #C6DCC7",
"z$ c #C5EBBC",
"A$ c #CBF0BD",
"B$ c #BACFB0",
"C$ c #99AD94",
"D$ c #D2F6D2",
"E$ c #94D195",
"F$ c #3B9F3D",
"G$ c #1C8D21",
"H$ c #34993D",
"I$ c #ADFFB5",
"J$ c #BBFFCB",
"K$ c #10872D",
"L$ c #2DAF4D",
"M$ c #79E496",
"N$ c #99E9AC",
"O$ c #C2F4C3",
"P$ c #BFEEBA",
"Q$ c #7FC27D",
"R$ c #89D28B",
"S$ c #89CA90",
"T$ c #8CBC94",
"U$ c #A6BDAB",
"V$ c #CDE0CD",
"W$ c #DEFED7",
"X$ c #D6FACE",
"Y$ c #E1FADA",
"Z$ c #F1FFED",
"`$ c #B8DAB9",
" % c #83BE86",
".% c #399F3B",
"+% c #229627",
"@% c #3B9E44",
"#% c #ACFFB6",
"$% c #C1FFD3",
"%% c #6AB37E",
"&% c #2AAB4E",
"*% c #72D990",
"=% c #A7F5BB",
"-% c #B6E7B8",
";% c #C1EFBE",
">% c #B0F3AC",
",% c #84CA84",
"'% c #94C897",
")% c #BADFC0",
"!% c #ECFFF1",
"~% c #E1F6E5",
"{% c #DAF9DA",
"]% c #E8FFE7",
"^% c #B9E4B7",
"/% c #86AF85",
"(% c #89AA8D",
"_% c #89C28F",
":% c #43B345",
"<% c #18961B",
"[% c #359A3E",
"}% c #AAFFB4",
"|% c #C1FFD5",
"1% c #6AB282",
"2% c #1C9140",
"3% c #2BAC52",
"4% c #6CD38C",
"5% c #8FDCA4",
"6% c #B4E5B8",
"7% c #C5F3C2",
"8% c #9CDF98",
"9% c #88CE88",
"0% c #B3E2B4",
"a% c #E0FFE4",
"b% c #ADC6B1",
"c% c #BBD2C0",
"d% c #D0EED4",
"e% c #B0D8B3",
"f% c #C7FCC8",
"g% c #D4FFD5",
"h% c #AACCB1",
"i% c #8EC695",
"j% c #2DA22F",
"k% c #058808",
"l% c #399E42",
"m% c #BEFFCA",
"n% c #6AB280",
"o% c #188E3A",
"p% c #2BAC50",
"q% c #7AE198",
"r% c #91DFA5",
"s% c #C5F6C7",
"t% c #D8FFD5",
"u% c #89CC85",
"v% c #88CE86",
"w% c #84B985",
"x% c #E9FFEC",
"y% c #B1CDB4",
"z% c #B3CFB8",
"A% c #DFFFE1",
"B% c #8AB58A",
"C% c #79B079",
"D% c #C5FAC6",
"E% c #CFF2D4",
"F% c #A2DBA8",
"G% c #34A936",
"H% c #068909",
"I% c #36993F",
"J% c #B6FFC1",
"K% c #1D9241",
"L% c #23A44A",
"M% c #85ECA5",
"N% c #90DDA5",
"O% c #B6E7BA",
"P% c #D4FFD1",
"Q% c #85C881",
"R% c #8BD38A",
"S% c #99D099",
"T% c #AAD4AC",
"U% c #DBF9DD",
"V% c #AED4AF",
"W% c #99C799",
"X% c #84BE83",
"Y% c #84BB84",
"Z% c #ADD2B3",
"`% c #8BC491",
" & c #33A835",
".& c #119213",
"+& c #379A40",
"@& c #B2FFBE",
"#& c #279D49",
"$& c #1A9B3F",
"%& c #83EAA1",
"&& c #88D69C",
"*& c #91C293",
"=& c #BBE9B8",
"-& c #8CCF88",
";& c #91D98F",
">& c #9AD69A",
",& c #A6D6A6",
"'& c #A0C6A1",
")& c #86A988",
"!& c #90B98F",
"~& c #90C28F",
"{& c #76B274",
"]& c #91CB91",
"^& c #ACD1B0",
"/& c #85C08A",
"(& c #34A732",
"_& c #169716",
":& c #B0FFBA",
"<& c #69B181",
"[& c #1FA046",
"}& c #8EF5AE",
"|& c #A4F1B9",
"1& c #9FD0A3",
"2& c #B8E6B5",
"3& c #93D68F",
"4& c #85CF84",
"5& c #78B675",
"6& c #C0F5BF",
"7& c #DDFFDD",
"8& c #E7FFE8",
"9& c #C8F6C7",
"0& c #7CB179",
"a& c #97D592",
"b& c #97D196",
"c& c #DBFFE0",
"d& c #98D39D",
"e& c #32A530",
"f& c #119211",
"g& c #36963D",
"h& c #B0FFB9",
"i& c #C0FFD4",
"j& c #0F8531",
"k& c #2EAF53",
"l& c #89F0A7",
"m& c #ACFAC0",
"n& c #B5E6B7",
"o& c #B7E5B4",
"p& c #91D48D",
"q& c #7BC578",
"r& c #AEEFAB",
"s& c #DFFFDC",
"t& c #9BC99A",
"u& c #A5D0A3",
"v& c #E0FFDE",
"w& c #B7EEB4",
"x& c #95D790",
"y& c #87C385",
"z& c #DCFFE1",
"A& c #8DC890",
"B& c #249722",
"C& c #0C8D0C",
"D& c #3A9A41",
"E& c #BCFFC7",
"F& c #128736",
"G& c #3ABB61",
"H& c #66CD86",
"I& c #7FCC94",
"J& c #9ECFA2",
"K& c #9ECC9B",
"L& c #87CA83",
"M& c #82CC7F",
"N& c #ACEFA8",
"O& c #B8F2B5",
"P& c #A1D19F",
"Q& c #719F70",
"R& c #9ACA96",
"S& c #D5FFD0",
"T& c #B5F7B0",
"U& c #96D294",
"V& c #DFFFE2",
"W& c #95CE97",
"X& c #2FA22D",
"Y& c #179517",
"Z& c #37953F",
"`& c #B1FFBA",
" * c #BEFFD2",
".* c #2FB054",
"+* c #6ED58C",
"@* c #8BD99F",
"#* c #A1D2A3",
"$* c #A0CE9D",
"%* c #83C67F",
"&* c #8DD78A",
"** c #96D891",
"=* c #DFFFDA",
"-* c #86B483",
";* c #89B486",
">* c #87B783",
",* c #94CC8F",
"'* c #D8FFD1",
")* c #DDFFDA",
"!* c #E9FFEA",
"~* c #97D099",
"{* c #2B9E29",
"]* c #169514",
"^* c #3E9C44",
"/* c #B2FFBB",
"(* c #168B3A",
"_* c #2EAF55",
":* c #78DF98",
"<* c #AAF7BF",
"[* c #D2FFD6",
"}* c #CBF9C8",
"|* c #92D58E",
"1* c #80CA7D",
"2* c #95D390",
"3* c #C9FFC5",
"4* c #9EC99B",
"5* c #9EC79B",
"6* c #95C392",
"7* c #8BC187",
"8* c #8CC984",
"9* c #BDF5B8",
"0* c #C2E5C4",
"a* c #90C790",
"b* c #34A531",
"c* c #149111",
"d* c #3A963F",
"e* c #BAFFC3",
"f* c #68B07E",
"g* c #209642",
"h* c #2AAB4F",
"i* c #63CA81",
"j* c #8DDBA1",
"k* c #B8E9BA",
"l* c #BCEAB9",
"m* c #8FD28B",
"n* c #87CF85",
"o* c #8DC989",
"p* c #91B78E",
"q* c #90B48E",
"r* c #85AF81",
"s* c #9ECF98",
"t* c #6BA664",
"u* c #8AC086",
"v* c #A0C2A1",
"w* c #8BC08C",
"x* c #3DAB38",
"y* c #128F0F",
"z* c #35913A",
"A* c #C0FFC7",
"B* c #BCFFD0",
"C* c #67AF7F",
"D* c #188D3C",
"E* c #2FB056",
"F* c #74DB94",
"G* c #9BE8B0",
"H* c #B9EABD",
"I* c #B3E1B0",
"J* c #86C982",
"K* c #83CB81",
"L* c #9CD399",
"M* c #A7D1A3",
"N* c #D4F3D1",
"O* c #B5D4B4",
"P* c #759A71",
"Q* c #B4E0AF",
"R* c #C2F8BC",
"S* c #E0FFDB",
"T* c #ABCAAB",
"U* c #8EC38F",
"V* c #139010",
"W* c #BEFFC5",
"X* c #67AF7D",
"Y* c #74DB92",
"Z* c #9BE9AF",
"`* c #84CA82",
" = c #A3D5A0",
".= c #D7FBD5",
"+= c #E2FCDF",
"@= c #D7F6D4",
"#= c #E7FFE2",
"$= c #D3FFCD",
"%= c #C9F8C4",
"&= c #D6F3D7",
"*= c #9BCD9C",
"== c #38A434",
"-= c #179215",
";= c #B6FFBD",
">= c #68B080",
",= c #209544",
"'= c #2AAB51",
")= c #63CA83",
"!= c #8DDAA2",
"~= c #B8E9BC",
"{= c #8ACD88",
"]= c #EAFFE8",
"^= c #869983",
"/= c #ADC0AC",
"(= c #F0FFED",
"_= c #D5F8D0",
":= c #8EBD89",
"<= c #8AB685",
"[= c #F0FFEF",
"}= c #A3D3A3",
"|= c #349E2F",
"1= c #199417",
"2= c #3E9A43",
"3= c #B1FFB8",
"4= c #168C38",
"5= c #78DF96",
"6= c #AAF8BE",
"7= c #D2FFD4",
"8= c #84C782",
"9= c #A7D0A4",
"0= c #F0FFEE",
"a= c #AEBFAD",
"b= c #CBD9CA",
"c= c #E8FEE7",
"d= c #B8D7B5",
"e= c #86B281",
"f= c #A5CFA1",
"g= c #F0FFF1",
"h= c #A1D0A2",
"i= c #199115",
"j= c #3D9A41",
"k= c #B3FFB9",
"l= c #69B382",
"m= c #178E3C",
"n= c #70D48E",
"o= c #8DD8A0",
"p= c #9FD3A5",
"q= c #9FCF9F",
"r= c #83C681",
"s= c #91D48F",
"t= c #97C996",
"u= c #E0FFE0",
"v= c #E4FFE9",
"w= c #DCFBD9",
"x= c #DAFFD5",
"y= c #CBFDCA",
"z= c #D4FFD4",
"A= c #DBFADB",
"B= c #9BCD9A",
"C= c #35A132",
"D= c #159014",
"E= c #3B983F",
"F= c #B8FFBE",
"G= c #BDFFD4",
"H= c #66B484",
"I= c #1A9343",
"J= c #31B059",
"K= c #7ED89A",
"L= c #B3F5C5",
"M= c #BCF3C9",
"N= c #ADE3B2",
"O= c #94D593",
"P= c #86CC84",
"Q= c #99DB9D",
"R= c #A3D8AC",
"S= c #98CBA0",
"T= c #A2E09D",
"U= c #B5F9BC",
"V= c #C4FFCE",
"W= c #8EBC8D",
"X= c #8ECC8B",
"Y= c #30A435",
"Z= c #0F8F18",
"`= c #3B9B41",
" - c #B1FFB7",
".- c #BDFFD6",
"+- c #64B384",
"@- c #1B9646",
"#- c #2DAB57",
"$- c #6DC386",
"%- c #94D3A4",
"&- c #A5DEB3",
"*- c #A0D8A9",
"=- c #8ECC8D",
"-- c #89CF86",
";- c #72C472",
">- c #79CA7E",
",- c #7EC18C",
"'- c #76B580",
")- c #73B76C",
"!- c #7BC475",
"~- c #80CC8B",
"{- c #83C88F",
"]- c #8CBE89",
"^- c #8BCE87",
"/- c #2DA537",
"(- c #0E8F1B",
"_- c #399C41",
":- c #64B383",
"<- c #118C3B",
"[- c #32B05C",
"}- c #7CD497",
"|- c #A9E8B9",
"1- c #C7FFD5",
"2- c #BDF7C5",
"3- c #8DCB8A",
"4- c #82C97D",
"5- c #86D886",
"6- c #85D68A",
"7- c #86C993",
"8- c #80C189",
"9- c #80C77B",
"0- c #83CD7E",
"a- c #79C886",
"b- c #72B97F",
"c- c #8ABF89",
"d- c #B0FFB5",
"e- c #BCFFD5",
"f- c #62B483",
"g- c #199745",
"h- c #34B35C",
"i- c #74CD8D",
"j- c #8DD09D",
"k- c #B4EFC1",
"l- c #BBF5C3",
"m- c #8ACB89",
"n- c #8CD488",
"o- c #82D387",
"p- c #83C690",
"q- c #82C18A",
"r- c #85C97E",
"s- c #86CF80",
"t- c #7DC988",
"u- c #76BB82",
"v- c #0E8F19",
"w- c #399C3F",
"x- c #B1FFB5",
"y- c #BAFFD5",
"z- c #61B382",
"A- c #30B059",
"B- c #7BD595",
"C- c #8CCF9C",
"D- c #ADE8BA",
"E- c #BDF9C5",
"F- c #8DD687",
"G- c #7DCF7B",
"H- c #7CCD80",
"I- c #7EC18B",
"J- c #7CBD85",
"K- c #7CC377",
"L- c #7EC879",
"M- c #7BCA88",
"N- c #7FC68C",
"O- c #8ABF87",
"P- c #8BCF86",
"Q- c #2DA635",
"R- c #0F8D3B",
"S- c #27A94F",
"T- c #92EDAA",
"U- c #A2E7B1",
"V- c #AFEDBC",
"W- c #C4FFCA",
"X- c #8BCE89",
"Y- c #82CC7D",
"Z- c #85D782",
"`- c #83D487",
" ; c #84C38C",
".; c #80C479",
"+; c #7FC879",
"@; c #89CE95",
"#; c #8CBF87",
"$; c #B9FFD2",
"%; c #60B37F",
"&; c #179742",
"*; c #1EA046",
"=; c #8BE7A4",
"-; c #8AD09A",
";; c #81C18D",
">; c #A8E9AF",
",; c #89D188",
"'; c #89D684",
"); c #7ED27C",
"!; c #7BCC7D",
"~; c #7DC188",
"{; c #7CBD83",
"]; c #79C072",
"^; c #76C16F",
"/; c #74C47F",
"(; c #7CC387",
"_; c #0E8F18",
":; c #399D3D",
"<; c #B0FFB3",
"[; c #159540",
"}; c #1DA245",
"|; c #A3FFBC",
"1; c #A8F1B9",
"2; c #8FD29C",
"3; c #B5F7BA",
"4; c #92DA90",
"5; c #86D681",
"6; c #81D57D",
"7; c #7EC289",
"8; c #83C289",
"9; c #85C97C",
"0; c #81CA79",
"a; c #7BC884",
"b; c #7FC589",
"c; c #8BCF84",
"d; c #2DA633",
"e; c #B1FFB3",
"f; c #BBFFD4",
"g; c #60B480",
"h; c #179941",
"i; c #26AB4E",
"j; c #89E9A1",
"k; c #A6F0B5",
"l; c #BAFFC6",
"m; c #A1E7A8",
"n; c #8DDA8C",
"o; c #7DCD76",
"p; c #7FD37B",
"q; c #80D280",
"r; c #7FC388",
"s; c #7DBF82",
"t; c #80C777",
"u; c #7DC875",
"v; c #74C47D",
"w; c #7DC586",
"x; c #89BF85",
"y; c #8ACE83",
"z; c #2EA734",
"A; c #0F9019",
"B; c #3B9F3F",
"C; c #B0FFB2",
"D; c #13953D",
"E; c #1BA243",
"F; c #72D48B",
"G; c #84D092",
"H; c #95DCA0",
"I; c #86CD8B",
"J; c #81CE7E",
"K; c #7ACD73",
"L; c #7FD479",
"M; c #7EBE82",
"N; c #82C777",
"O; c #7EC775",
"P; c #76C37D",
"Q; c #7EC486",
"R; c #8BBE85",
"S; c #0F9117",
"T; c #B1FFB2",
"U; c #BAFFD2",
"V; c #5EB57E",
"W; c #159A3F",
"X; c #1FA745",
"Y; c #70D589",
"Z; c #7AC988",
"`; c #87D192",
" > c #7BC681",
".> c #80D27E",
"+> c #82D77C",
"@> c #7ED479",
"#> c #7FC386",
"$> c #7DBF81",
"%> c #80C876",
"&> c #7DC873",
"*> c #74C47B",
"=> c #7DC585",
"-> c #89BF83",
";> c #8ACE81",
">> c #2EA733",
",> c #B0FFB0",
"'> c #12973C",
")> c #22AD4A",
"!> c #7CE195",
"~> c #84D593",
"{> c #8ED899",
"]> c #80CC84",
"^> c #83D580",
"/> c #82D97B",
"(> c #7ED577",
"_> c #7EBE81",
":> c #82C776",
"<> c #7EC873",
"[> c #76C37B",
"}> c #7EC485",
"|> c #8BBE83",
"1> c #0F9115",
"2> c #3B9F3C",
"3> c #B1FFB0",
"4> c #5FB67F",
"5> c #0A9133",
"6> c #1DAA44",
"7> c #79E091",
"8> c #7FD28E",
"9> c #88D493",
"0> c #7BC880",
"a> c #7CD078",
"b> c #7BD273",
"c> c #89BF81",
"d> c #8ACF7F",
"e> c #2EA831",
"f> c #12993B",
"g> c #22AF49",
"h> c #78DF90",
"i> c #79CC88",
"j> c #82CE8D",
"k> c #7BC97E",
"l> c #80D67B",
"m> c #7ED876",
"n> c #7ED576",
"o> c #8BBF81",
"p> c #BBFFD1",
"q> c #5FB77D",
"r> c #19A042",
"s> c #28B54F",
"t> c #7BE291",
"u> c #7ACD87",
"v> c #84D48F",
"w> c #7FD084",
"x> c #85DB80",
"y> c #80DA78",
"z> c #80C874",
"A> c #7DC971",
"B> c #74C579",
"C> c #7DC583",
"D> c #B0FFAE",
"E> c #B8FFCE",
"F> c #5DB978",
"G> c #129339",
"H> c #26A94B",
"I> c #76DE91",
"J> c #77CE89",
"K> c #84D791",
"L> c #7CD082",
"M> c #7BD478",
"N> c #71CD6A",
"O> c #7CD676",
"P> c #7FD37D",
"Q> c #7AC17D",
"R> c #7FC876",
"S> c #76C479",
"T> c #86C17F",
"U> c #87D07F",
"V> c #33A536",
"W> c #138F17",
"X> c #3AA03A",
"Y> c #AEFFAC",
"Z> c #AEFFC2",
"`> c #4EB566",
" , c #1A8E3B",
"., c #3DB261",
"+, c #6BD48F",
"@, c #77DA97",
"#, c #6FCF87",
"$, c #75D281",
"%, c #7EDD7F",
"&, c #7DDC78",
"*, c #7CDC7A",
"=, c #77CC79",
"-, c #74C777",
";, c #77C675",
">, c #79C879",
",, c #7AC87D",
"', c #7BC77F",
"), c #78C178",
"!, c #78CA78",
"~, c #47AB49",
"{, c #218C22",
"], c #2F992D",
"^, c #A5FFA4",
"/, c #BFFFD4",
"(, c #5CCA71",
"_, c #1D8F3A",
":, c #41B264",
"<, c #6CDA93",
"[, c #7DE79F",
"}, c #77DE8F",
"|, c #75DC83",
"1, c #78DC79",
"2, c #6ED36B",
"3, c #74D971",
"4, c #70D471",
"5, c #6ECE6D",
"6, c #6EC86E",
"7, c #72C772",
"8, c #76C977",
"9, c #78C97A",
"0, c #79CA7B",
"a, c #95E896",
"b, c #72CA73",
"c, c #389837",
"d, c #157C13",
"e, c #37A836",
"f, c #ABFFA7",
"g, c #ABFFC2",
"h, c #3EB454",
"i, c #11882E",
"j, c #2CA24C",
"k, c #51C574",
"l, c #63D482",
"m, c #65D37A",
"n, c #68D673",
"o, c #6CD86B",
"p, c #61CE5B",
"q, c #69D663",
"r, c #65CF60",
"s, c #61C85B",
"t, c #5FC45C",
"u, c #62C260",
"v, c #66C162",
"w, c #67C265",
"x, c #68C366",
"y, c #63C161",
"z, c #56B853",
"A, c #3FA63B",
"B, c #107F09",
"C, c #38AF31",
"D, c #A1FF98",
"E, c #87FEA2",
"F, c #54CD6C",
"G, c #189436",
"H, c #1D983D",
"I, c #28A047",
"J, c #279E44",
"K, c #219534",
"L, c #23972C",
"M, c #269924",
"N, c #1F9118",
"O, c #279826",
"P, c #249124",
"Q, c #1D881E",
"R, c #19821D",
"S, c #1A7E1C",
"T, c #1C7D1E",
"U, c #1D7C20",
"V, c #1C7D20",
"W, c #137717",
"X, c #208623",
"Y, c #28952A",
"Z, c #007200",
"`, c #3EB93D",
" ' c #A3FFA3",
".' c #7BF399",
"+' c #A1FFBC",
"@' c #119130",
"#' c #0C8C2D",
"$' c #0E8B2D",
"%' c #0E8A28",
"&' c #0E871E",
"*' c #17901F",
"=' c #21991E",
"-' c #1F951D",
";' c #12851D",
">' c #0D7F20",
",' c #08771B",
"'' c #08711C",
")' c #086F1C",
"!' c #0A6F1F",
"~' c #0D6F22",
"{' c #0E7023",
"]' c #278C3C",
"^' c #107924",
"/' c #0F7E22",
"(' c #047817",
"_' c #4EC95F",
":' c #8AFF99",
"<' c #48BF6D",
"[' c #8DFFAE",
"}' c #87FFA9",
"|' c #80FDA1",
"1' c #81FCA1",
"2' c #82FB9C",
"3' c #7CF58E",
"4' c #7BF385",
"5' c #7CF37D",
"6' c #76EB78",
"7' c #83F68F",
"8' c #7FF192",
"9' c #7DEC90",
"0' c #7CE990",
"a' c #82EA95",
"b' c #87ED9A",
"c' c #8AEF9F",
"d' c #8BF0A0",
"e' c #78DF8C",
"f' c #6DD681",
"g' c #89F89C",
"h' c #9AFFAD",
"i' c #9BFFAC",
"j' c #61DF71",
"k' c #38AC61",
"l' c #6ADF91",
"m' c #66DB8C",
"n' c #6EE392",
"o' c #76EA95",
"p' c #76E98E",
"q' c #77E987",
"r' c #7AEB81",
"s' c #75E778",
"t' c #6EDE6E",
"u' c #6ADA6A",
"v' c #67D467",
"w' c #66D167",
"x' c #69D26B",
"y' c #6ED470",
"z' c #70D672",
"A' c #71D773",
"B' c #7CE27E",
"C' c #73DE76",
"D' c #71DE71",
"E' c #65D765",
"F' c #39B03A",
" . + @ # $ % & * = - ; > , ' ) ! ",
" ~ { ] ^ / ( _ : < [ [ } | 1 2 3 ",
" 4 5 6 7 8 9 0 a b c d e f g h i ",
" j k l m n o p q r s t u v w x y z A B C D E ",
"F G H I J K L M N O P Q R S T U V W X Y Z ` ...",
"+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].^./.(._.:.<.",
"[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.",
"l.m.n.o.p.q.r.s.t.u.v.w.a.x.y.y.x.z.A.B.C.D.E.F.",
"G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`.x. +.+",
"++@+#+$+%+&+*+=+-+;+>+,+'+).)+!+'.a.)+~+{+]+^+/+",
"(+_+:+<+[+}+|+1+2+3+4+5+6+7+a.8+)+9+0+a+b+w.c+d+",
"e+f+g+h+i+j+k+l+m+m+n+o+p+y.{+b+a.q+r+s+0.t+u+v+",
"w+x+y+z+A+B+C+D+E+F+G+H+I+!.8+J+y.K+L+s+M+N+O+P+",
"Q+R+S+T+U+V+W+X+Y+Z+`+ @.@+@@@#@x.$@%@&@*@N+=@-@",
";@>@,@'@)@!@~@{@#@]@]@^@/@(@a.8+_@:@<@[@{+ @}@|@",
"1@2@3@4@5@6@7@8@9@0@a@b@c@d@e@y.f@g@h@i@{+w.j@k@",
"l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@",
"J@K@L@M@N@O@P@Q@R@=@S@T@U@V@W@X@Y@Z@`@ #.#+#@###",
"$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#=@}#",
"$#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#k@",
"l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#",
"l#m#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$",
"#$$$%$&$*$=$-$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$",
"#$$$|$1$2$3$4$5$6$7$8$9$0$a$b$c$d$e$f$g$h$i$j$k$",
"l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$",
"J$m$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%",
"$%%%1#&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%",
"|%1%2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%k%l%m%",
"|%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%",
"|%1%K%L%M%N%O%P%Q%R%S%T%A%U%V%W%X%Y%Z%`% &.&+&@&",
"|%n%#&$&%&&&*&=&-&;&>&,&'&)&!&~&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&",
"i&|#j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&A&B&C&D&E&",
"i&<&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&`&",
" *n%o%.*+*@*#*$*%*&***=*-*;*>*,*'*)*!*~*{*]*^*/*",
" *<&(*_*:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*",
"$#f*g*h*i*j*k*l*m*n*o*>*p*q*r*s*t*u*v*w*x*y*z*A*",
"B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*x*V*z*W*",
"B*X*o%.*Y*Z*-$I*J*`* =.=+=h @=#=$=%=&=*===-=d*;=",
"$#>=,='=)=!=~=l*m*{=9&]=^=/=(=_=:=<=[=}=|=1=2=3=",
" *|#4=k&5=6=7=}*|*8=9=0=a=b=c=d=e=f=g=h=|=i=j=k=",
" *l=m=E*n=o=p=q=r=s=t=u=v=q w=x=y=z=A=B=C=D=E=F=",
"G=H=I=J=K=L=M=N=O=P=v%Q=R=S=,*T=U=V=W=X=Y=Z=`= -",
".-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_- -",
".-:-<-[-}-|-1-2-3-4-5-6-7-8-9-0-a-b-c-^-/-(-_-d-",
"e-f-g-h-i-j-k-l-m-n-L o-p-q-r-s-t-u-]-^-/-v-w-x-",
"y-z-g-A-B-C-D-E-t$F-G-H-I-J-K-L-M-N-O-P-Q-v-w-d-",
"l@z-R-S-T-U-V-W-X-Y-Z-`-7- ;.;+;~-@;#;P-Q-v-w-x-",
"$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;O-P-Q-_;:;<;",
"$;%;[;};|;1;2;3;4;5;6;!;7;8;9;0;a;b;#;c;d;_;:;e;",
"f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;",
"f;g;D;E;F;G;H;I;J;K;L;q;r;M;N;O;P;Q;R;y;z;S;F$T;",
"U;V;W;X;Y;Z;`; >.>+>@>q;#>$>%>&>*>=>->;>>>S;F$,>",
"U;V;'>)>!>~>{>]>^>/>(>q;#>_>:><>[>}>|>;>>>1>2>3>",
"U;4>5>6>7>8>9>0>a>b>(>.>#>$>%>&>*>=>c>d>e>1>2>,>",
"U;4>f>g>h>i>j>k>l>m>n>.>#>_>:><>[>}>o>d>e>1>2>3>",
"p>q>r>s>t>u>v>w>x>y>n>.>#>$>z>A>B>C>c>d>e>1>2>D>",
"E>F>G>H>I>J>K>L>M>N>O>P> >Q>R>&>S>C>T>U>V>W>X>Y>",
"Z>`> ,.,+,@,#,$,%,&,*,E#=,-,;,>,,,',),!,~,{,],^,",
"/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,",
"g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,",
"E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,`, '",
".'+'@'#'$'%'&'*'='-';'>',''')'!'~'{']'^'/'('_':'",
"<'['}'|'1'2'3'4'5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'",
" k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'C'D'E'F' "};

gint
progress_timeout (gpointer data)
{
gfloat new_val;
GtkAdjustment *adj;
new_val = gtk_progress_get_value (GTK_PROGRESS (data)) + 1;

adj = GTK_PROGRESS (data)->adjustment;
if (new_val > adj->upper)
new_val = adj->lower;
gtk_progress_set_value (GTK_PROGRESS (data), new_val);
return (TRUE);
}

int
main (int argc, char *argv[])
{
GtkWidget *window, *pixmap, *fixed;
GdkPixmap *gdk_pixmap;
GdkBitmap *mask;
GtkStyle *style;
GdkGC *gc;

GtkWidget *pbar;
GtkAdjustment *adj;
int timer;

gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_POPUP);

pbar = gtk_progress_bar_new ();

style = gtk_style_new ();
gdk_color_parse ("green", &(style->bg[GTK_STATE_PRELIGHT]));
gtk_widget_set_style (pbar, style);

gtk_widget_set_uposition (pbar, 3, 6);
gtk_widget_set_usize (pbar, 18, 55);

timer = gtk_timeout_add (50, progress_timeout, pbar);
gtk_progress_bar_set_bar_style (GTK_PROGRESS_BAR (pbar),
GTK_PROGRESS_CONTINUOUS);
gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (pbar),
GTK_PROGRESS_BOTTOM_TO_TOP);

style = gtk_widget_get_default_style ();
gc = style->black_gc;
gdk_pixmap = gdk_pixmap_create_from_xpm_d (window->window, &mask,
&style->bg[GTK_STATE_NORMAL],
battary_xpm);

pixmap = gtk_pixmap_new (gdk_pixmap, mask);
gtk_widget_show (pixmap);

gtk_widget_show (pbar);

fixed = gtk_fixed_new ();
gtk_widget_set_usize (fixed, 30, 80);
gtk_fixed_put (GTK_FIXED (fixed), pixmap, 0, 0);
gtk_fixed_put (GTK_FIXED (fixed), pbar, 7, 7);

gtk_widget_show (fixed);

gtk_container_add (GTK_CONTAINER (window), fixed);

/* This masks out everything except for the image itself */
gtk_widget_shape_combine_mask (window, mask, 0, 0);

/* show the window */
gtk_widget_set_uposition (window, 300, 100);
gtk_widget_show (window);
gtk_main ();

return (0);
}

Syndicate content