Commit b8b2fc1900a4a04954cc270685b74685c8b24b36
1 parent
96c566b7
Exists in
master
and in
5 other branches
Implementando dialogo de configuracao de cores
Showing
3 changed files
with
76 additions
and
41 deletions
Show diff stats
src/gtk/colors.c
| @@ -137,14 +137,31 @@ | @@ -137,14 +137,31 @@ | ||
| 137 | g_free(filename); | 137 | g_free(filename); |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | - static void color_selected(GtkTreeSelection *selection, GtkWidget *widget) | 140 | + static void color_changed(GtkColorSelection *colorselection, GtkWidget *widget) |
| 141 | { | 141 | { |
| 142 | + GdkColor clr; | ||
| 143 | + int id = (int) g_object_get_data(G_OBJECT(colorselection),"colorid"); | ||
| 144 | + | ||
| 145 | + if(id < 0 || id >= V3270_COLOR_COUNT) | ||
| 146 | + return; | ||
| 147 | + | ||
| 148 | + gtk_color_selection_get_current_color(colorselection,&clr); | ||
| 149 | + v3270_set_color(widget,id,&clr); | ||
| 150 | + v3270_reload(widget); | ||
| 151 | + gtk_widget_queue_draw(widget); | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + static void color_selected(GtkTreeSelection *selection, GtkWidget *color) | ||
| 155 | + { | ||
| 156 | + GtkWidget * widget = g_object_get_data(G_OBJECT(selection),"v3270"); | ||
| 157 | + GdkColor * saved = g_object_get_data(G_OBJECT(selection),"lastcolors"); | ||
| 158 | + GValue value = { 0, }; | ||
| 142 | GtkTreeModel * model; | 159 | GtkTreeModel * model; |
| 143 | GtkTreeIter iter; | 160 | GtkTreeIter iter; |
| 144 | - GValue value = { 0, }; | 161 | + GdkColor * clr; |
| 145 | int id; | 162 | int id; |
| 146 | 163 | ||
| 147 | - gtk_widget_set_sensitive(widget,FALSE); | 164 | + gtk_widget_set_sensitive(color,FALSE); |
| 148 | 165 | ||
| 149 | if(!gtk_tree_selection_get_selected(selection,&model,&iter)) | 166 | if(!gtk_tree_selection_get_selected(selection,&model,&iter)) |
| 150 | return; | 167 | return; |
| @@ -156,8 +173,13 @@ | @@ -156,8 +173,13 @@ | ||
| 156 | if(id < 0 || id >= V3270_COLOR_COUNT) | 173 | if(id < 0 || id >= V3270_COLOR_COUNT) |
| 157 | return; | 174 | return; |
| 158 | 175 | ||
| 176 | + g_object_set_data(G_OBJECT(color),"colorid",(gpointer) id); | ||
| 177 | + clr = v3270_get_color(widget,id); | ||
| 178 | + | ||
| 179 | + gtk_color_selection_set_previous_color(GTK_COLOR_SELECTION(color),saved+id); | ||
| 180 | + gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(color),clr); | ||
| 159 | 181 | ||
| 160 | - gtk_widget_set_sensitive(widget,TRUE); | 182 | + gtk_widget_set_sensitive(color,TRUE); |
| 161 | } | 183 | } |
| 162 | 184 | ||
| 163 | void editcolors_action(GtkAction *action, GtkWidget *widget) | 185 | void editcolors_action(GtkAction *action, GtkWidget *widget) |
| @@ -224,6 +246,7 @@ | @@ -224,6 +246,7 @@ | ||
| 224 | GtkWidget * panned = gtk_hbox_new(FALSE,2); | 246 | GtkWidget * panned = gtk_hbox_new(FALSE,2); |
| 225 | GtkWidget * tree; | 247 | GtkWidget * tree; |
| 226 | GtkWidget * color; | 248 | GtkWidget * color; |
| 249 | + GdkColor saved[V3270_COLOR_COUNT]; | ||
| 227 | 250 | ||
| 228 | { | 251 | { |
| 229 | // Color dialog setup | 252 | // Color dialog setup |
| @@ -232,6 +255,8 @@ | @@ -232,6 +255,8 @@ | ||
| 232 | gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(color),FALSE); | 255 | gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(color),FALSE); |
| 233 | gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(color),TRUE); | 256 | gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(color),TRUE); |
| 234 | gtk_box_pack_end(GTK_BOX(panned),color,TRUE,TRUE,0); | 257 | gtk_box_pack_end(GTK_BOX(panned),color,TRUE,TRUE,0); |
| 258 | + g_object_set_data(G_OBJECT(color),"colorid",(gpointer) -1); | ||
| 259 | + g_signal_connect(G_OBJECT(color),"color-changed",G_CALLBACK(color_changed),widget); | ||
| 235 | } | 260 | } |
| 236 | 261 | ||
| 237 | // Tree view with all available colors | 262 | // Tree view with all available colors |
| @@ -255,13 +280,18 @@ | @@ -255,13 +280,18 @@ | ||
| 255 | gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL); | 280 | gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL); |
| 256 | gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1); | 281 | gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1); |
| 257 | 282 | ||
| 258 | - | ||
| 259 | select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree)); | 283 | select = gtk_tree_view_get_selection(GTK_TREE_VIEW (tree)); |
| 284 | + | ||
| 285 | + g_object_set_data(G_OBJECT(select),"v3270",widget); | ||
| 286 | + g_object_set_data(G_OBJECT(select),"lastcolors",saved); | ||
| 287 | + | ||
| 260 | gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); | 288 | gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); |
| 261 | - g_signal_connect(G_OBJECT (select),"changed",G_CALLBACK(color_selected),color); | 289 | + g_signal_connect(G_OBJECT(select),"changed",G_CALLBACK(color_selected),color); |
| 262 | 290 | ||
| 263 | for(f=0;f<V3270_COLOR_COUNT;f++) | 291 | for(f=0;f<V3270_COLOR_COUNT;f++) |
| 264 | { | 292 | { |
| 293 | + saved[f] = *(v3270_get_color(widget,f)); | ||
| 294 | + | ||
| 265 | if(f == node[title].id) | 295 | if(f == node[title].id) |
| 266 | { | 296 | { |
| 267 | gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL); | 297 | gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL); |
| @@ -285,11 +315,25 @@ | @@ -285,11 +315,25 @@ | ||
| 285 | gtk_widget_show_all(panned); | 315 | gtk_widget_show_all(panned); |
| 286 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(panned),TRUE,TRUE,2); | 316 | gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(panned),TRUE,TRUE,2); |
| 287 | 317 | ||
| 288 | - gtk_dialog_run(GTK_DIALOG(dialog)); | 318 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
| 319 | + { | ||
| 320 | + // Acepted, save in configuration file | ||
| 321 | + } | ||
| 322 | + else | ||
| 323 | + { | ||
| 324 | + // Rejected, restore original colors | ||
| 325 | + int f; | ||
| 289 | 326 | ||
| 327 | + for(f=0;f<V3270_COLOR_COUNT;f++) | ||
| 328 | + v3270_set_color(widget,f,saved+f); | ||
| 329 | + } | ||
| 290 | 330 | ||
| 291 | gtk_widget_destroy(dialog); | 331 | gtk_widget_destroy(dialog); |
| 292 | 332 | ||
| 333 | + // Redraw widget | ||
| 334 | + v3270_reload(widget); | ||
| 335 | + gtk_widget_queue_draw(widget); | ||
| 336 | + | ||
| 293 | } | 337 | } |
| 294 | 338 | ||
| 295 | 339 |
src/gtk/v3270/v3270.h
| @@ -217,10 +217,10 @@ | @@ -217,10 +217,10 @@ | ||
| 217 | 217 | ||
| 218 | // Colors | 218 | // Colors |
| 219 | void v3270_set_colors(GtkWidget *widget, const gchar *); | 219 | void v3270_set_colors(GtkWidget *widget, const gchar *); |
| 220 | - void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, const gchar *name); | ||
| 221 | - int v3270_set_color_entry(GdkColor *clr, enum V3270_COLOR id, const gchar *name); | ||
| 222 | void v3270_set_color_table(GdkColor *table, const gchar *colors); | 220 | void v3270_set_color_table(GdkColor *table, const gchar *colors); |
| 223 | void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *color); | 221 | void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *color); |
| 222 | + void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkColor *color); | ||
| 223 | + GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id); | ||
| 224 | 224 | ||
| 225 | G_END_DECLS | 225 | G_END_DECLS |
| 226 | 226 |
src/gtk/v3270/widget.c
| @@ -846,12 +846,28 @@ void v3270_set_colors(GtkWidget *widget, const gchar *colors) | @@ -846,12 +846,28 @@ void v3270_set_colors(GtkWidget *widget, const gchar *colors) | ||
| 846 | } | 846 | } |
| 847 | 847 | ||
| 848 | v3270_set_color_table(GTK_V3270(widget)->color,colors); | 848 | v3270_set_color_table(GTK_V3270(widget)->color,colors); |
| 849 | - | ||
| 850 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors); | 849 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors); |
| 851 | v3270_reload(widget); | 850 | v3270_reload(widget); |
| 852 | 851 | ||
| 853 | } | 852 | } |
| 854 | 853 | ||
| 854 | +void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkColor *color) | ||
| 855 | +{ | ||
| 856 | + g_return_if_fail(GTK_IS_V3270(widget)); | ||
| 857 | + | ||
| 858 | + GTK_V3270(widget)->color[id] = *color; | ||
| 859 | + | ||
| 860 | +#if !GTK_CHECK_VERSION(3,0,0) | ||
| 861 | + gdk_colormap_alloc_color(gtk_widget_get_default_colormap(),color,TRUE,TRUE); | ||
| 862 | +#endif // !GTK(3,0,0) | ||
| 863 | + | ||
| 864 | +} | ||
| 865 | +GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id) | ||
| 866 | +{ | ||
| 867 | + g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | ||
| 868 | + return GTK_V3270(widget)->color+id; | ||
| 869 | +} | ||
| 870 | + | ||
| 855 | void v3270_set_color_table(GdkColor *table, const gchar *colors) | 871 | void v3270_set_color_table(GdkColor *table, const gchar *colors) |
| 856 | { | 872 | { |
| 857 | gchar **clr; | 873 | gchar **clr; |
| @@ -864,7 +880,7 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | @@ -864,7 +880,7 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | ||
| 864 | { | 880 | { |
| 865 | case V3270_COLOR_COUNT: // Complete string | 881 | case V3270_COLOR_COUNT: // Complete string |
| 866 | for(f=0;f < V3270_COLOR_COUNT;f++) | 882 | for(f=0;f < V3270_COLOR_COUNT;f++) |
| 867 | - v3270_set_color_entry(table,f,clr[f]); | 883 | + gdk_color_parse(clr[f],table+f); |
| 868 | break; | 884 | break; |
| 869 | 885 | ||
| 870 | default: | 886 | default: |
| @@ -872,12 +888,13 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | @@ -872,12 +888,13 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | ||
| 872 | g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT); | 888 | g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT); |
| 873 | 889 | ||
| 874 | for(f=0;f < cnt;f++) | 890 | for(f=0;f < cnt;f++) |
| 875 | - v3270_set_color_entry(table,f,clr[f]); | 891 | + gdk_color_parse(clr[f],table+f); |
| 892 | + | ||
| 876 | for(f=cnt; f < V3270_COLOR_COUNT;f++) | 893 | for(f=cnt; f < V3270_COLOR_COUNT;f++) |
| 877 | - v3270_set_color_entry(table,f,clr[cnt-1]); | 894 | + gdk_color_parse(clr[cnt-1],table+f); |
| 878 | 895 | ||
| 879 | - v3270_set_color_entry(table,V3270_COLOR_OIA_BACKGROUND,clr[0]); | ||
| 880 | - v3270_set_color_entry(table,V3270_COLOR_SELECTED_BG,clr[0]); | 896 | + clr[V3270_COLOR_OIA_BACKGROUND] = clr[0]; |
| 897 | + clr[V3270_COLOR_SELECTED_BG] = clr[0]; | ||
| 881 | 898 | ||
| 882 | } | 899 | } |
| 883 | 900 | ||
| @@ -885,32 +902,6 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | @@ -885,32 +902,6 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors) | ||
| 885 | 902 | ||
| 886 | } | 903 | } |
| 887 | 904 | ||
| 888 | -int v3270_set_color_entry(GdkColor *clr, enum V3270_COLOR id, const gchar *name) | ||
| 889 | -{ | ||
| 890 | - if(id >= V3270_COLOR_COUNT) | ||
| 891 | - return -1; | ||
| 892 | - | ||
| 893 | - gdk_color_parse(name,clr+id); | ||
| 894 | - | ||
| 895 | - return 0; | ||
| 896 | -} | ||
| 897 | - | ||
| 898 | -void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, const gchar *name) | ||
| 899 | -{ | ||
| 900 | - v3270 * terminal = GTK_V3270(widget); | ||
| 901 | - | ||
| 902 | - if(v3270_set_color_entry(terminal->color,id,name)) | ||
| 903 | - return; | ||
| 904 | - | ||
| 905 | -#if(GTK_CHECK_VERSION(3,0,0)) | ||
| 906 | - | ||
| 907 | -#else | ||
| 908 | - gdk_colormap_alloc_color(gtk_widget_get_default_colormap(),terminal->color+id,TRUE,TRUE); | ||
| 909 | -#endif | ||
| 910 | - | ||
| 911 | - | ||
| 912 | -} | ||
| 913 | - | ||
| 914 | void v3270_set_font_family(GtkWidget *widget, const gchar *name) | 905 | void v3270_set_font_family(GtkWidget *widget, const gchar *name) |
| 915 | { | 906 | { |
| 916 | v3270 * terminal; | 907 | v3270 * terminal; |