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 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 159 GtkTreeModel * model;
143 160 GtkTreeIter iter;
144   - GValue value = { 0, };
  161 + GdkColor * clr;
145 162 int id;
146 163  
147   - gtk_widget_set_sensitive(widget,FALSE);
  164 + gtk_widget_set_sensitive(color,FALSE);
148 165  
149 166 if(!gtk_tree_selection_get_selected(selection,&model,&iter))
150 167 return;
... ... @@ -156,8 +173,13 @@
156 173 if(id < 0 || id >= V3270_COLOR_COUNT)
157 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 185 void editcolors_action(GtkAction *action, GtkWidget *widget)
... ... @@ -224,6 +246,7 @@
224 246 GtkWidget * panned = gtk_hbox_new(FALSE,2);
225 247 GtkWidget * tree;
226 248 GtkWidget * color;
  249 + GdkColor saved[V3270_COLOR_COUNT];
227 250  
228 251 {
229 252 // Color dialog setup
... ... @@ -232,6 +255,8 @@
232 255 gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(color),FALSE);
233 256 gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(color),TRUE);
234 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 262 // Tree view with all available colors
... ... @@ -255,13 +280,18 @@
255 280 gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL);
256 281 gtk_tree_store_set((GtkTreeStore *) model, &parent, 0, gettext(node[title++].text), 1, V3270_COLOR_COUNT, -1);
257 282  
258   -
259 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 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 291 for(f=0;f<V3270_COLOR_COUNT;f++)
264 292 {
  293 + saved[f] = *(v3270_get_color(widget,f));
  294 +
265 295 if(f == node[title].id)
266 296 {
267 297 gtk_tree_store_append((GtkTreeStore *) model,&parent,NULL);
... ... @@ -285,11 +315,25 @@
285 315 gtk_widget_show_all(panned);
286 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 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 217  
218 218 // Colors
219 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 220 void v3270_set_color_table(GdkColor *table, const gchar *colors);
223 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 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 846 }
847 847  
848 848 v3270_set_color_table(GTK_V3270(widget)->color,colors);
849   -
850 849 g_signal_emit(widget,v3270_widget_signal[SIGNAL_UPDATE_CONFIG], 0, "colors", colors);
851 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 871 void v3270_set_color_table(GdkColor *table, const gchar *colors)
856 872 {
857 873 gchar **clr;
... ... @@ -864,7 +880,7 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors)
864 880 {
865 881 case V3270_COLOR_COUNT: // Complete string
866 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 884 break;
869 885  
870 886 default:
... ... @@ -872,12 +888,13 @@ void v3270_set_color_table(GdkColor *table, const gchar *colors)
872 888 g_warning("Color table has %d elements; should be %d.",cnt,V3270_COLOR_COUNT);
873 889  
874 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 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 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 905 void v3270_set_font_family(GtkWidget *widget, const gchar *name)
915 906 {
916 907 v3270 * terminal;
... ...