diff --git a/Makefile.in b/Makefile.in index cc3e9c1..b479d69 100644 --- a/Makefile.in +++ b/Makefile.in @@ -313,6 +313,13 @@ install-shared: \ $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@ + # Install default configs + @mkdir -p $(datarootdir)/pw3270 + + @$(INSTALL_DATA) \ + colors.conf \ + $(datarootdir)/pw3270 + install-static: \ $(BINRLS)/static/$(LIBNAME).a diff --git a/colors.conf b/colors.conf new file mode 100644 index 0000000..bc8c8e8 --- /dev/null +++ b/colors.conf @@ -0,0 +1,103 @@ +# +# 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.; 51 Franklin +# St; Fifth Floor; Boston; MA 02110-1301 USA +# +# +# Contatos: +# +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) +# erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) +# + +[default] +label=PW3270 default + +base=#000000;#7890F0;#FF0000;#FF00FF;#00FF00;#00FFFF;#FFFF00;#FFFFFF;#000000;#000080;#FFA200;#800080;#008000;#008080;#A0A000;#C0C0C0 +field=#00FF00;#FF0000;#00FFFF;#FFFFFF +selection=#404040;#ffffff +OIA=#000000;#00FF00;#7890F0;#FFFFFF;#FF0000 + +cross-hair=#00FF00 + +[X3270] +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 + +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 + +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 +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 + +base=black;green + +[WB] +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 +base=white;black + +[selenized] + +# https://github.com/jan-warchol/selenized +label=Selenized color palette by Jan Warchoł + +base=rgb(24,24,24);rgb(79,156,254);rgb(237,74,70);rgb(235,110,183);rgb(131,199,70);rgb(86,216,201);rgb(239,197,65);rgb(222,222,222);rgb(59,59,59);rgb(54,142,171);rgb(250,145,83);rgb(165,128,226);rgb(112,180,51);rgb(65,199,185);rgb(219,179,45);rgb(119,119,119) +field=rgb(131,199,70);rgb(237,74,70);rgb(65,199,185);rgb(250,145,83) +selection=rgb(37,37,37);rgb(222,222,222) +OIA=rgb(24,24,24);rgb(222,222,222);rgb(79,156,254);rgb(131,199,70);rgb(239,197,65) +cross-hair=rgb(222,222,222) + diff --git a/src/dialogs/colorscheme.c b/src/dialogs/colorscheme.c index cf98751..98d6c61 100644 --- a/src/dialogs/colorscheme.c +++ b/src/dialogs/colorscheme.c @@ -38,7 +38,9 @@ #include #include + #include #include + #include "../v3270/marshal.h" #define V3270_COLOR_BASE V3270_COLOR_GRAY+1 @@ -48,33 +50,260 @@ { GtkComboBoxClass parent_class; - }; struct _V3270ColorScheme { - GtkComboBox parent; + GtkComboBox parent; + GdkRGBA * schemes; + + + }; + enum + { + CHANGED, + LAST_SIGNAL }; + static guint color_signal[LAST_SIGNAL] = { 0 }; + G_DEFINE_TYPE(V3270ColorScheme, V3270ColorScheme, GTK_TYPE_COMBO_BOX); /*--[ Implement ]------------------------------------------------------------------------------------*/ + static void changed(GtkComboBox *widget) + { + GdkRGBA * clr = NULL; + GValue value = { 0, }; + GtkTreeIter iter; + + if(!gtk_combo_box_get_active_iter(widget,&iter)) + return; + + gtk_tree_model_get_value(gtk_combo_box_get_model(widget),&iter,1,&value); + clr = g_value_get_pointer(&value); + + debug("%s=%p",__FUNCTION__,clr); + g_signal_emit(widget, color_signal[CHANGED], 0, clr); + + } + static void V3270ColorScheme_class_init(G_GNUC_UNUSED V3270ColorSchemeClass *klass) { + GObjectClass * gobject_class = G_OBJECT_CLASS(klass); + + klass->parent_class.changed = changed; + + color_signal[CHANGED] = + g_signal_new( + "update-colors", + G_OBJECT_CLASS_TYPE (gobject_class), + G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + v3270_VOID__VOID_POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER, 0 + ); + + debug("changed_signal=%d",(int) color_signal[CHANGED]); } static void V3270ColorScheme_init(V3270ColorScheme *widget) { + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_POINTER); + GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); + + 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_combo_box_set_model(GTK_COMBO_BOX(widget), model); + } - LIB3270_EXPORT GtkWidget * v3270_color_scheme_new(GdkRGBA *colors) + static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkRGBA *clr) { - GtkWidget *widget = GTK_WIDGET(g_object_new(GTK_TYPE_V3270_COLOR_SCHEME, NULL)); + const gchar * val; + size_t 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 + v3270_set_mono_color_table(clr,str[1],str[0]); + break; + + case V3270_COLOR_BASE: // All colors, update it + for(f=0;fschemes = g_new0(GdkRGBA,(len*V3270_COLOR_COUNT)); + + for(g=0;gschemes+index; + const gchar * label = g_key_file_get_locale_string(conf,group[g],"label",NULL,NULL); + + load_color_scheme(conf,group[g],clr); + + // Set it in the combobox + gtk_list_store_append((GtkListStore *) model,&iter); + gtk_list_store_set((GtkListStore *) model, &iter, + 0, label ? label : group[g], + 1, clr, + -1); + + // move to next color list + index += V3270_COLOR_COUNT; + } + g_strfreev(group); return widget; } diff --git a/src/include/v3270.h b/src/include/v3270.h index 5b16c8a..8bdc83f 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -215,7 +215,7 @@ LIB3270_EXPORT const GdkRGBA * v3270_get_color_table(GtkWidget *widget); LIB3270_EXPORT void v3270_set_mono_color_table(GdkRGBA *table, const gchar *fg, const gchar *bg); LIB3270_EXPORT void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, v3270FontInfo *font, GdkRectangle *rect, GdkRGBA *color); - LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkRGBA *color); + LIB3270_EXPORT void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, const GdkRGBA *color); LIB3270_EXPORT GdkRGBA * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); // Misc diff --git a/src/include/v3270/colorscheme.h b/src/include/v3270/colorscheme.h index 8372361..cc303c3 100644 --- a/src/include/v3270/colorscheme.h +++ b/src/include/v3270/colorscheme.h @@ -47,7 +47,7 @@ /*--[ Prototipes ]-----------------------------------------------------------------------------------*/ - LIB3270_EXPORT GtkWidget * v3270_color_scheme_new(GdkRGBA *colors); + LIB3270_EXPORT GtkWidget * v3270_color_scheme_new(); G_END_DECLS diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index a4cf725..d11dd78 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -36,6 +36,8 @@ #include #include #include + #include + #include #include /*---[ Implement ]----------------------------------------------------------------------------------*/ @@ -88,6 +90,19 @@ static void trace_window_destroy(G_GNUC_UNUSED GtkWidget *widget, H3270 *hSessio lib3270_set_toggle(hSession,LIB3270_TOGGLE_NETWORK_TRACE,0); } +static void color_scheme_changed(GtkWidget *widget, const GdkRGBA *colors, GtkWidget *terminal) { + + debug("%s=%p",__FUNCTION__,colors); + + int f; + for(f=0;fwidget); g_signal_emit(info->widget, v3270_widget_signal[SIGNAL_PRINT_DONE], 0, prt, (guint) result); - debug("%s",__FUNCTION__); if(info->font.scaled) cairo_scaled_font_destroy(info->font.scaled); -- libgit2 0.21.2