diff --git a/src/pw3270/colors.c b/src/pw3270/colors.c index d391324..8494d62 100644 --- a/src/pw3270/colors.c +++ b/src/pw3270/colors.c @@ -41,637 +41,6 @@ /*--[ Implement ]------------------------------------------------------------------------------------*/ -/* -static void store_color_scheme(GtkWidget *widget) -{ - int f; - - GString *text = g_string_new(""); - // Base colors - // base=#000000,#7890F0,#FF0000,#FF00FF,#00FF00,#00FFFF,#FFFF00,#FFFFFF,#000000,#000080,#FFA200,#800080,#008000,#008080,#A0A000,#C0C0C0 - for(f=0;fstr); - g_string_truncate(text,0); - - // Field colors. - // field=#00FF00,#FF0000,#00FFFF,#FFFFFF - for(f=0;f<4;f++) - { - if(f) - g_string_append_c(text,';'); - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_FIELD+f))); - } - set_string_to_config("color-scheme","field","%s",text->str); - g_string_truncate(text,0); - - // Selection colors - // selection=#404040,#ffffff - for(f=0;f<2;f++) - { - if(f) - g_string_append_c(text,';'); - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_SELECTED_BG+f))); - } - set_string_to_config("color-scheme","selection","%s",text->str); - g_string_truncate(text,0); - - // OIA colors - // OIA=#000000,#00FF00,#7890F0,#FFFFFF,#FF0000 - for(f=0;f<5;f++) - { - if(f) - g_string_append_c(text,';'); - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_OIA_BACKGROUND+f))); - } - set_string_to_config("color-scheme","OIA","%s",text->str); - g_string_truncate(text,0); - - // Cross-hair - g_string_append_printf(text,"%s",gdk_rgba_to_string(v3270_get_color(widget,V3270_COLOR_CROSS_HAIR))); - - set_string_to_config("color-scheme","cross-hair","%s",text->str); - g_string_free(text,TRUE); - -} - -static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkRGBA *clr) -{ - 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 - v3270_set_mono_color_table(clr,str[1],str[0]); - break; - - case V3270_COLOR_BASE: // All colors, update it - for(f=0;f= 0 && id < V3270_COLOR_COUNT) - { -#if USE_GTK_COLOR_CHOOSER - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(colorsel),clr+id); -#else - gtk_color_selection_set_current_rgba(GTK_COLOR_SELECTION(colorsel),clr+id); -#endif // GTK_CHECK_VERSION - } - } - - } - - static gboolean compare_colors(const GdkRGBA *colora, const GdkRGBA *colorb) - { - int f; - - for(f=0;fmessage,filename); - g_error_free(err); - } - else - { - gsize len = 0; - gchar **group = g_key_file_get_groups(conf,&len); - GdkRGBA * table = g_new0(GdkRGBA,(len*V3270_COLOR_COUNT)); - int pos = 0; - int g; - gboolean found = FALSE; - - g_signal_connect(G_OBJECT(widget),"changed",G_CALLBACK(color_scheme_changed),0); - - g_object_set_data_full(G_OBJECT(widget),"colortable",table,g_free); - - for(g=0;g= V3270_COLOR_COUNT) - return; - - trace("Updating color %d",id); - - v3270_set_color(widget,id,clr); - v3270_reload(widget); - gtk_widget_queue_draw(widget); - - } -#else - static void color_changed(GtkWidget *colorselection, GtkWidget *widget) - { - GdkRGBA clr; - int id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colorselection),"colorid")); - - if(id < 0 || id >= V3270_COLOR_COUNT) - return; - - gtk_color_selection_get_current_rgba(GTK_COLOR_SELECTION(colorselection),&clr); - - v3270_set_color(widget,id,&clr); - v3270_reload(widget); - gtk_widget_queue_draw(widget); - } -#endif // GTK_CHECK_VERSION - - static void color_selected(GtkTreeSelection *selection, GtkWidget *color) - { - GtkWidget * widget = g_object_get_data(G_OBJECT(selection),"v3270"); -#if ! USE_GTK_COLOR_CHOOSER - GdkRGBA * saved = g_object_get_data(G_OBJECT(selection),"lastcolors"); -#endif // !GTK(3,4,0) - GValue value = { 0, }; - GtkTreeModel * model; - GtkTreeIter iter; - GdkRGBA * clr; - int id; - - gtk_widget_set_sensitive(color,FALSE); - - if(!gtk_tree_selection_get_selected(selection,&model,&iter)) - return; - - gtk_tree_model_get_value(model,&iter,1,&value); - - id = g_value_get_int(&value); - - if(id < 0 || id >= V3270_COLOR_COUNT) - return; - - g_object_set_data(G_OBJECT(color),"colorid",GINT_TO_POINTER(id)); - clr = v3270_get_color(widget,id); - -#if USE_GTK_COLOR_CHOOSER - { - GValue value; - - gtk_color_chooser_set_rgba(GTK_COLOR_CHOOSER(color),clr); - - g_value_init(&value, G_TYPE_BOOLEAN); - g_value_set_boolean(&value,FALSE); - g_object_set_property(G_OBJECT(color),"show-editor",&value); - } -#else - gtk_color_selection_set_previous_rgba(GTK_COLOR_SELECTION(color),saved+id); - gtk_color_selection_set_current_rgba(GTK_COLOR_SELECTION(color),clr); -#endif // GTK_CHECK_VERSION - - gtk_widget_set_sensitive(color,TRUE); - } - - void editcolors_action(GtkAction *action, GtkWidget *widget) - { -// static const gchar *custom = N_( "Custom colors" ); - - static const struct _node - { - int id; - const char *text; - } node[] = - { - { V3270_COLOR_BACKGROUND, N_( "Terminal colors" ) }, - { V3270_COLOR_FIELD, N_( "Field colors" ) }, - { V3270_COLOR_SELECTED_BG, N_( "Misc colors" ) }, - }; - - static const gchar *color_name[V3270_COLOR_COUNT] = - { - N_( "Background" ), // V3270_COLOR_BACKGROUND - N_( "Blue" ), // V3270_COLOR_BLUE - N_( "Red" ), // V3270_COLOR_RED - N_( "Pink" ), // V3270_COLOR_PINK - N_( "Green" ), // V3270_COLOR_GREEN - N_( "Turquoise" ), // V3270_COLOR_TURQUOISE - N_( "Yellow" ), // V3270_COLOR_YELLOW - N_( "White" ), // V3270_COLOR_WHITE - N_( "Black" ), // V3270_COLOR_BLACK - N_( "Dark Blue" ), // V3270_COLOR_DARK_BLUE - N_( "Orange" ), // V3270_COLOR_ORANGE - N_( "Purple" ), // V3270_COLOR_PURPLE - N_( "Dark Green" ), // V3270_COLOR_DARK_GREEN - N_( "Dark Turquoise" ), // V3270_COLOR_DARK_TURQUOISE - N_( "Mustard" ), // V3270_COLOR_MUSTARD - N_( "Gray" ), // V3270_COLOR_GRAY - - N_( "Normal/Unprotected" ), // V3270_COLOR_FIELD - N_( "Intensified/Unprotected" ), // V3270_COLOR_FIELD_INTENSIFIED - N_( "Normal/Protected" ), // V3270_COLOR_FIELD_PROTECTED - N_( "Intensified/Protected" ), // V3270_COLOR_FIELD_PROTECTED_INTENSIFIED - - N_( "Selection background" ), // TERMINAL_COLOR_SELECTED_BG - N_( "Selection foreground" ), // TERMINAL_COLOR_SELECTED_FG - - N_( "Cross hair cursor" ), // TERMINAL_COLOR_CROSS_HAIR - - // Oia Colors - N_( "OIA background" ), // TERMINAL_COLOR_OIA_BACKGROUND - N_( "OIA foreground" ), // TERMINAL_COLOR_OIA_FOREGROUND - N_( "OIA separator" ), // TERMINAL_COLOR_OIA_SEPARATOR - N_( "OIA status ok" ), // TERMINAL_COLOR_OIA_STATUS_OK - N_( "OIA Warning" ), // V3270_COLOR_OIA_STATUS_WARNING - N_( "OIA status invalid" ), // TERMINAL_COLOR_OIA_STATUS_INVALID - - }; - - const gchar * title = g_object_get_data(G_OBJECT(action),"title"); - GtkWidget * dialog = gtk_dialog_new_with_buttons ( gettext(title ? title : N_( "Color setup") ), - GTK_WINDOW(gtk_widget_get_toplevel(widget)), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - NULL ); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget * panned = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2); -#else - GtkWidget * panned = gtk_hbox_new(FALSE,2); -#endif // GTK(3,0,0) - - GtkWidget * tree; - GtkWidget * color; - GdkRGBA saved[V3270_COLOR_COUNT]; - - // Color dialog setup -#if USE_GTK_COLOR_CHOOSER - color = gtk_color_chooser_widget_new(); - gtk_widget_set_sensitive(color,0); - g_signal_connect(G_OBJECT(color),"color-activated",G_CALLBACK(color_activated),widget); -#else - color = gtk_color_selection_new(); - gtk_widget_set_sensitive(color,0); - gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(color),FALSE); - gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(color),TRUE); - g_signal_connect(G_OBJECT(color),"color-changed",G_CALLBACK(color_changed),widget); -#endif // GTK_CHECK_VERSION - - gtk_box_pack_end(GTK_BOX(panned),color,TRUE,TRUE,0); - g_object_set_data(G_OBJECT(color),"colorid",(gpointer) -1); - - // Tree view with all available colors - { - GtkTreeModel * model = (GtkTreeModel *) gtk_tree_store_new(2,G_TYPE_STRING,G_TYPE_INT); - GtkWidget * box; - GtkTreeIter iter; - GtkTreeIter parent; - GtkTreeSelection * select; - int f; - int title = 0; - - tree = gtk_tree_view_new_with_model(model); - - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree),FALSE); - gtk_tree_view_insert_column_with_attributes( GTK_TREE_VIEW(tree), - -1, - "color",gtk_cell_renderer_text_new(),"text", - 0, NULL ); - - gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL); - gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1); - - select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree)); - - g_object_set_data(G_OBJECT(select),"v3270",widget); - g_object_set_data(G_OBJECT(select),"lastcolors",saved); - - gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); - g_signal_connect(G_OBJECT(select),"changed",G_CALLBACK(color_selected),color); - - for(f=0;fstr); - g_string_free(str,TRUE); - - store_color_scheme(widget); - } - else - { - // Rejected, restore original colors - int f; - - for(f=0;f #include #include +#include #include #include #include #include +#include /*--[ Widget definition ]----------------------------------------------------------------------------*/ @@ -401,6 +403,18 @@ static GtkWidget * trace_window = NULL; update_window_title(window); } + static void save_terminal_settings(GtkWidget *widget, GtkWidget *window) + { + debug("%s",__FUNCTION__); + +#ifdef ENABLE_WINDOWS_REGISTRY + +#else + v3270_to_key_file(widget, get_application_keyfile(), "terminal"); +#endif // _WIN32 + + } + LIB3270_EXPORT void pw3270_set_session_name(GtkWidget *widget, const gchar *name) { g_return_if_fail(GTK_IS_PW3270(widget)); @@ -840,6 +854,7 @@ static GtkWidget * trace_window = NULL; g_signal_connect(widget->terminal,"field_clicked",G_CALLBACK(field_clicked),widget); g_signal_connect(widget->terminal,"toggle_changed",G_CALLBACK(toggle_changed),widget); g_signal_connect(widget->terminal,"session_changed",G_CALLBACK(session_changed),widget); + g_signal_connect(widget->terminal,"save_settings",G_CALLBACK(save_terminal_settings),widget); //g_signal_connect(widget->terminal,"print",G_CALLBACK(print_all),widget); -- libgit2 0.21.2