Commit 67471cd984cebc743d1634a4d6d9d2246c6a2fc2

Authored by perry.werneck@gmail.com
1 parent 73dcb9dd

Implementando controle de cores

src/gtk/colors.c
... ... @@ -32,106 +32,6 @@
32 32  
33 33 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 34  
35   -/*
36   - void load_color_schemes(GtkWidget *widget, gchar *active)
37   - {
38   -
39   - else
40   - {
41   - gchar ** group;
42   - GKeyFile * conf = g_key_file_new();
43   - int f = 0;
44   - gboolean found = FALSE;
45   -
46   -#if !GTK_CHECK_VERSION(3,0,0)
47   - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_STRING);
48   - GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
49   - GtkTreeIter iter;
50   -
51   - gtk_combo_box_set_model(GTK_COMBO_BOX(widget),model);
52   -
53   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget), renderer, TRUE);
54   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget), renderer, "text", 0, NULL);
55   -
56   -#endif // !GTK(3,0,0)
57   -
58   - g_key_file_load_from_file(conf,filename,G_KEY_FILE_NONE,NULL);
59   -
60   - group = g_key_file_get_groups(conf,NULL);
61   -
62   - for(f=0;group[f];f++)
63   - {
64   - gchar *str = g_strjoin( ",", g_key_file_get_string(conf,group[f],"Terminal",NULL),
65   - g_key_file_get_string(conf,group[f],"BaseAttributes",NULL),
66   - g_key_file_get_string(conf,group[f],"SelectedText",NULL),
67   - g_key_file_get_string(conf,group[f],"Cursor",NULL),
68   - g_key_file_get_string(conf,group[f],"OIA",NULL),
69   - NULL
70   - );
71   -#if GTK_CHECK_VERSION(3,0,0)
72   -
73   - gtk_combo_box_text_insert( GTK_COMBO_BOX_TEXT(widget),
74   - f,
75   - str,
76   - g_key_file_get_locale_string(conf,group[f],"Label",NULL,NULL));
77   -
78   -
79   - if(active && !g_strcasecmp(active,str))
80   - {
81   - found = TRUE;
82   - gtk_combo_box_set_active(GTK_COMBO_BOX(widget),f);
83   - }
84   -#else
85   -
86   - gtk_list_store_append((GtkListStore *) model,&iter);
87   - gtk_list_store_set((GtkListStore *) model, &iter,
88   - 0, g_key_file_get_locale_string(conf,group[f],"Label",NULL,NULL),
89   - 1, str,
90   - -1);
91   -
92   - if(active && !g_strcasecmp(active,str))
93   - {
94   - found = TRUE;
95   - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter);
96   - }
97   -
98   -#endif // GTK(3,0,0)
99   -
100   - g_free(str);
101   - }
102   -
103   - g_strfreev(group);
104   - g_key_file_free(conf);
105   -
106   - if(active && !found)
107   - {
108   -#if GTK_CHECK_VERSION(3,0,0)
109   -
110   - gtk_combo_box_text_insert( GTK_COMBO_BOX_TEXT(widget),
111   - 0,
112   - active,
113   - _( "Custom colors") );
114   - gtk_combo_box_set_active(GTK_COMBO_BOX(widget),0);
115   -
116   -#else
117   -
118   - gtk_list_store_append((GtkListStore *) model,&iter);
119   - gtk_list_store_set((GtkListStore *) model, &iter,
120   - 0, _( "Custom colors" ),
121   - 1, active,
122   - -1);
123   -
124   - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter);
125   -#endif
126   - }
127   -
128   - gtk_widget_set_sensitive(widget,TRUE);
129   -
130   - }
131   -
132   - g_free(filename);
133   - }
134   -*/
135 35  
136 36 static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
137 37 {
... ... @@ -294,13 +194,28 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
294 194  
295 195 }
296 196  
  197 + static gboolean compare_colors(const GdkColor *colora, const GdkColor *colorb)
  198 + {
  199 + int f;
  200 +
  201 + for(f=0;f<V3270_COLOR_COUNT;f++)
  202 + {
  203 + if(!gdk_color_equal(colora+f,colorb+f))
  204 + return FALSE;
  205 + }
  206 +
  207 + return TRUE;
  208 + }
  209 +
297 210 /**
298 211 * Create a color scheme dropdown button
299 212 *
300 213 * @param clr Pointer to current color table
301 214 *
  215 + * @return Combobox widget with colors.conf loaded and set
  216 + *
302 217 */
303   - GtkWidget * color_scheme_new(GdkColor *clr)
  218 + GtkWidget * color_scheme_new(const GdkColor *current)
304 219 {
305 220 gchar * filename = build_data_filename("colors.conf",NULL);
306 221 GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_POINTER);
... ... @@ -355,6 +270,13 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
355 270 1, clr,
356 271 -1);
357 272  
  273 + if(compare_colors(clr,current) && current)
  274 + {
  275 + // It's the same color, select iter
  276 + trace("Current color scheme is \"%s\"",group[g]);
  277 + gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widget),&iter);
  278 + }
  279 +
358 280 // move to next color list
359 281 pos += V3270_COLOR_COUNT;
360 282 }
... ... @@ -558,7 +480,7 @@ static void load_color_scheme(GKeyFile *conf, const gchar *group, GdkColor *clr)
558 480 // Color scheme combo
559 481 {
560 482 GtkWidget * box = gtk_hbox_new(FALSE,2);
561   - GtkWidget * button = color_scheme_new(NULL);
  483 + GtkWidget * button = color_scheme_new(v3270_get_color_table(widget));
562 484  
563 485 g_object_set_data(G_OBJECT(button),"terminal_widget",widget);
564 486 g_object_set_data(G_OBJECT(button),"color_selection_widget",color);
... ...
src/gtk/v3270/v3270.h
... ... @@ -218,6 +218,7 @@
218 218 // Colors
219 219 void v3270_set_colors(GtkWidget *widget, const gchar *);
220 220 void v3270_set_color_table(GdkColor *table, const gchar *colors);
  221 + const GdkColor * v3270_get_color_table(GtkWidget *widget);
221 222 void v3270_draw_element(cairo_t *cr, unsigned char chr, unsigned short attr, H3270 *session, guint height, GdkRectangle *rect, GdkColor *color);
222 223 void v3270_set_color(GtkWidget *widget, enum V3270_COLOR id, GdkColor *color);
223 224 GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id);
... ...
src/gtk/v3270/widget.c
... ... @@ -868,6 +868,12 @@ GdkColor * v3270_get_color(GtkWidget *widget, enum V3270_COLOR id)
868 868 return GTK_V3270(widget)->color+id;
869 869 }
870 870  
  871 +const GdkColor * v3270_get_color_table(GtkWidget *widget)
  872 +{
  873 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  874 + return GTK_V3270(widget)->color;
  875 +}
  876 +
871 877 void v3270_set_color_table(GdkColor *table, const gchar *colors)
872 878 {
873 879 gchar **clr;
... ...