Commit b8b2fc1900a4a04954cc270685b74685c8b24b36

Authored by perry.werneck@gmail.com
1 parent 96c566b7

Implementando dialogo de configuracao de cores

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;