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; |