diff --git a/colors.conf b/colors.conf index 94796d1..39e9525 100644 --- a/colors.conf +++ b/colors.conf @@ -1,61 +1,82 @@ +# +# "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 +# (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a +# aplicativos mainframe. Registro no INPI sob o nome G3270. +# +# Copyright (C) <2008> +# +# Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob +# os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela +# Free Software Foundation. +# +# Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER +# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO +# A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para +# obter mais detalhes. +# +# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este +# programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple +# Place, Suite 330, Boston, MA, 02111-1307, USA +# +# Contatos: +# +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) +# erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) +# + [X3270] -Label=X3270 -Terminal=black,deepSkyBlue,red,pink,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,paleTurquoise2,grey,white -BaseAttributes=green,red,deepSkyBlue,white -SelectedText=dimGrey,black,dimGrey -Cursor=white,white -OIA=black,white,white,white,white +label=X3270 + +base=black,deepSkyBlue,red,pink,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,paleTurquoise2,grey,white +field=green,red,deepSkyBlue,white +selection=dimGrey,black +OIA=black,turquoise,turquoise,white,red + +cross-hair=white [Reverse] -Label=Reverse -Label[pt_BR]=Invertido -Terminal=white,blue,firebrick,pink,green4,cadetBlue,goldenrod,black,black,blue3,orange,purple,paleGreen,darkTurquoise,grey,black -BaseAttributes=green4,firebrick,blue,black -SelectedText=dimGrey,black,dimGrey -Cursor=black,black -OIA=white,black,black,black,black +label=Reverse +label[pt_BR]=Invertido + +base=white,blue,firebrick,pink,green4,cadetBlue,goldenrod,black,white,blue3,orange,purple,paleGreen,darkTurquoise,grey,black +selection=dimGrey,black +OIA=white,blue,blue,black,black + +cross-hair=black [Bright] -Label=Bright -Label[pt_BR]=Cores fortes -Terminal=black,blue,red,magenta,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,cyan,grey,white -BaseAttributes=green,red,blue,white -SelectedText=dimGrey,black,dimGrey -Cursor=white,white -OIA=black,white,white,white,white +label=Bright +label[pt_BR]=Cores fortes + +base=black,blue,red,magenta,green,turquoise,yellow,white,black,blue3,orange,purple,paleGreen,cyan,grey,white +selection=dimGrey,black +OIA=black,blue,blue,white,red + +cross-hair=white [CPE] -Label=CPE -Terminal=black,LightBlue1,PaleVioletRed1,pink,green,turquoise,yellow,white,black,LightBlue3,orange,MediumPurple1,paleGreen,paleTurquoise2,grey80,white -BaseAttributes=green,PaleVioletRed1,LightBlue1,white -SelectedText=dimGrey,black,dimGrey -Cursor=white,white -OIA=black,white,white,white,white +label=CPE +base=black,LightBlue1,PaleVioletRed1,pink,green,turquoise,yellow,white,black,LightBlue3,orange,MediumPurple1,paleGreen,paleTurquoise2,grey80,white +selection=dimGrey,black +OIA=black,turquoise,turquoise,white,red + +cross-hair=white [Green] -Label=Green -Label[pt_BR]=Verde -Terminal=black,green,green,green,green,green,green,green,green,green,green,green,green,green,green,green -BaseAttributes=green,green,green,green -SelectedText=dimGrey,green,dimGrey -Cursor=green,green -OIA=black,green,green,green,green +label=Green +label[pt_BR]=Verde + +base=black,green [WB] -Label=White on Black -Label[pt_BR]=Branco com fundo preto -Terminal=black,white,white,white,white,white,white,white,white,white,white,white,white,white,white,white -BaseAttributes=white,white,white,white -SelectedText=white,black,white -Cursor=white,white -OIA=black,white,white,white,white +label=White on Black +label[pt_BR]=Branco com fundo preto + +base=black,white [BW] -Label=Black on White -Label[pt_BR]=Preto com fundo branco -Terminal=white,black,black,black,black,black,black,black,black,black,black,black,black,black,black,black -BaseAttributes=black,black,black,black -SelectedText=black,white,black -Cursor=black,black -OIA=white,black,black,black,black +label=Black on White +label[pt_BR]=Preto com fundo branco + +base=white,black diff --git a/src/gtk/colors.c b/src/gtk/colors.c index 7f32153..33ad7df 100644 --- a/src/gtk/colors.c +++ b/src/gtk/colors.c @@ -35,13 +35,7 @@ /* void load_color_schemes(GtkWidget *widget, gchar *active) { - gchar *filename = build_data_filename("colors.conf",NULL); - if(!g_file_test(filename,G_FILE_TEST_IS_REGULAR)) - { - gtk_widget_set_sensitive(widget,FALSE); - g_warning("Unable to load color schemes in \"%s\"",filename); - } else { gchar ** group; @@ -139,6 +133,167 @@ } */ +static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr) +{ + #define V3270_COLOR_BASE V3270_COLOR_GRAY+1 + + const gchar * val; + int f; + + // Load base colors + val = g_key_file_get_string(conf,group,"base",NULL); + if(val) + { + // Process base colors + gchar **str = g_strsplit(val,",",V3270_COLOR_BASE); + + switch(g_strv_length(str)) + { + case 2: // Only 2 colors, create monocromatic table + gdk_color_parse(str[0],clr); + gdk_color_parse(str[1],clr+1); + + trace("%s color table is: monocromatic",group); + + for(f=2;f= 0 && id < V3270_COLOR_COUNT) + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel),clr+id); + } + + } + /** * Create a color scheme dropdown button * @@ -147,13 +302,75 @@ */ GtkWidget * color_scheme_new(GdkColor *clr) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *widget = gtk_combo_box_text_new(); -#else - GtkWidget *widget = gtk_combo_box_new(); -#endif // GTK(3,0,0) + gchar * filename = build_data_filename("colors.conf",NULL); + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_POINTER); + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + GtkWidget * widget = gtk_combo_box_new_with_model(model); + GtkTreeIter iter; + + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL); + + gtk_widget_set_sensitive(widget,FALSE); + + if(!g_file_test(filename,G_FILE_TEST_IS_REGULAR)) + { + g_warning("Unable to load color schemes in \"%s\"",filename); + } + else + { + GKeyFile * conf = g_key_file_new(); + GError * err = NULL; + + g_key_file_load_from_file(conf,filename,G_KEY_FILE_NONE,&err); + if(err) + { + g_warning("Error \"%s\" loading %s",err->message,filename); + g_error_free(err); + } + else + { + gsize len = 0; + gchar **group = g_key_file_get_groups(conf,&len); + GdkColor * table = g_new0(GdkColor,(len*V3270_COLOR_COUNT)); + int pos = 0; + int g; + + g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(color_scheme_changed),table); + + g_object_set_data_full(G_OBJECT(widget),"colortable",table,g_free); + + for(g=0;g