Commit 8a99c3c74019612996ebb856e30866c52eaa2497

Authored by Perry Werneck
1 parent d8c13e00
Exists in master and in 1 other branch develop

Refactoring host selection widget.

src/dialogs/hostselect.c
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
35 35
36 /*--[ Widget definition ]----------------------------------------------------------------------------*/ 36 /*--[ Widget definition ]----------------------------------------------------------------------------*/
37 37
  38 +/*
38 static const struct _colortable 39 static const struct _colortable
39 { 40 {
40 unsigned short colors; 41 unsigned short colors;
@@ -45,6 +46,7 @@ @@ -45,6 +46,7 @@
45 { 8, N_( "8 colors" ) }, 46 { 8, N_( "8 colors" ) },
46 { 2, N_( "Monochrome" ) }, 47 { 2, N_( "Monochrome" ) },
47 }; 48 };
  49 + */
48 50
49 enum _entry 51 enum _entry
50 { 52 {
@@ -54,7 +56,101 @@ @@ -54,7 +56,101 @@
54 ENTRY_COUNT 56 ENTRY_COUNT
55 }; 57 };
56 58
57 - static const gchar *comboLabel[] = { N_("System _type"), N_("_Color table") }; 59 + static const struct Combos
  60 + {
  61 + gint top;
  62 + gint left;
  63 + const gchar * label;
  64 + const gchar * tooltip;
  65 + const unsigned int * values;
  66 + const gchar **labels;
  67 +
  68 + unsigned int (*get)(const H3270 *);
  69 + int (*set)(H3270 *, unsigned int);
  70 +
  71 + } combos[] =
  72 + {
  73 + {
  74 + .top = 2,
  75 + .left = 0,
  76 +
  77 + .label = N_("System _type"),
  78 + .get = (unsigned int (*)(const H3270 *)) lib3270_get_host_type,
  79 + .set = (int (*)(H3270 *, unsigned int)) lib3270_set_host_type,
  80 +
  81 + .values = (const unsigned int [])
  82 + {
  83 + LIB3270_HOST_S390,
  84 + LIB3270_HOST_AS400,
  85 + LIB3270_HOST_TSO,
  86 + 0,
  87 + },
  88 +
  89 + .labels = (const gchar *[])
  90 + {
  91 + N_( "IBM S/390" ),
  92 + N_( "IBM AS/400" ),
  93 + N_( "Other (TSO)" ),
  94 + N_( "Other (VM/CMS)" ),
  95 + NULL
  96 + }
  97 +
  98 + },
  99 + {
  100 + .top = 2,
  101 + .left = 3,
  102 +
  103 + .label = N_("_Color table"),
  104 + .get = lib3270_get_color_type,
  105 + .set = lib3270_set_color_type,
  106 +
  107 + .values = (const unsigned int [])
  108 + {
  109 + 0,
  110 + 2,
  111 + 8,
  112 + 16,
  113 + },
  114 +
  115 + .labels = (const gchar *[])
  116 + {
  117 + N_( "System default"),
  118 + N_( "Monochrome" ),
  119 + N_( "8 colors" ),
  120 + N_( "16 colors" ),
  121 + NULL
  122 + }
  123 +
  124 + },
  125 + {
  126 + .top = 3,
  127 + .left = 0,
  128 +
  129 + .label = N_("_Model"),
  130 + .tooltip = N_("The model of 3270 display to be emulated"),
  131 +
  132 + .get = lib3270_get_model_number,
  133 + .set = lib3270_set_model_number,
  134 +
  135 + .values = (const unsigned int [])
  136 + {
  137 + 2,
  138 + 3,
  139 + 4,
  140 + 5
  141 + },
  142 +
  143 + .labels = (const gchar *[])
  144 + {
  145 + N_( "Model 2 - 80x24" ),
  146 + N_( "Model 3 - 80x32" ),
  147 + N_( "Model 4 - 80x43" ),
  148 + N_( "Model 5 - 132x27" ),
  149 + NULL
  150 + }
  151 +
  152 + }
  153 + };
58 154
59 struct _V3270HostSelectWidget 155 struct _V3270HostSelectWidget
60 { 156 {
@@ -64,7 +160,7 @@ @@ -64,7 +160,7 @@
64 { 160 {
65 GtkEntry * entry[ENTRY_COUNT]; /**< @brief Entry fields for host & service name */ 161 GtkEntry * entry[ENTRY_COUNT]; /**< @brief Entry fields for host & service name */
66 GtkToggleButton * ssl; /**< @brief SSL Connection? */ 162 GtkToggleButton * ssl; /**< @brief SSL Connection? */
67 - GtkComboBox * combo[G_N_ELEMENTS(comboLabel)]; /**< @brief Model & Color combobox */ 163 + GtkComboBox * combos[G_N_ELEMENTS(combos)]; /**< @brief Combo-boxes */
68 164
69 } input; 165 } input;
70 166
@@ -103,39 +199,22 @@ static void apply(GtkWidget *w, GtkWidget *terminal) @@ -103,39 +199,22 @@ static void apply(GtkWidget *w, GtkWidget *terminal)
103 199
104 } 200 }
105 201
106 - // Apply Host type 202 + // Apply combos.
  203 + size_t combo;
  204 + for(combo = 0; combo < G_N_ELEMENTS(combos); combo++)
107 { 205 {
108 GtkTreeIter iter; 206 GtkTreeIter iter;
109 207
110 - if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[0]), &iter)) 208 + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combos[combo]), &iter))
111 { 209 {
112 GValue value = { 0, }; 210 GValue value = { 0, };
113 - gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[0])),&iter,1,&value); 211 + gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combos[combo])),&iter,1,&value);
114 212
115 - lib3270_set_host_type(hSession,g_value_get_int(&value)); 213 + combos[combo].set(hSession,g_value_get_uint(&value));
116 214
117 g_value_unset(&value); 215 g_value_unset(&value);
118 216
119 } 217 }
120 -  
121 - }  
122 -  
123 - // Apply color type  
124 - {  
125 - GtkTreeIter iter;  
126 -  
127 - if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widget->input.combo[1]), &iter))  
128 - {  
129 - GValue value = { 0, };  
130 -  
131 - gtk_tree_model_get_value(gtk_combo_box_get_model(GTK_COMBO_BOX(widget->input.combo[1])),&iter,1,&value);  
132 -  
133 - lib3270_set_color_type(hSession,g_value_get_int(&value));  
134 -  
135 - g_value_unset(&value);  
136 -  
137 - }  
138 -  
139 } 218 }
140 219
141 } 220 }
@@ -184,53 +263,34 @@ static void load(GtkWidget *w, GtkWidget *terminal) @@ -184,53 +263,34 @@ static void load(GtkWidget *w, GtkWidget *terminal)
184 263
185 } 264 }
186 265
187 - LIB3270_HOST_TYPE type = lib3270_get_host_type(hSession);  
188 -  
189 - // Set host type 266 + size_t combo;
  267 + for(combo = 0; combo < G_N_ELEMENTS(combos); combo++)
190 { 268 {
191 - GtkTreeModel * model = gtk_combo_box_get_model(widget->input.combo[0]); 269 +
  270 + GtkTreeModel * model = gtk_combo_box_get_model(widget->input.combos[combo]);
192 GtkTreeIter iter; 271 GtkTreeIter iter;
  272 + unsigned int value = combos[combo].get(hSession);
193 273
194 if(gtk_tree_model_get_iter_first(model,&iter)) 274 if(gtk_tree_model_get_iter_first(model,&iter))
195 { 275 {
  276 + GValue gVal = { 0, };
  277 +
196 do 278 do
197 { 279 {
198 - GValue value = { 0, }; 280 + gtk_tree_model_get_value(model,&iter,1,&gVal);
199 281
200 - gtk_tree_model_get_value(model,&iter,1,&value);  
201 -  
202 - if(g_value_get_int(&value) == (int) type) 282 + if(g_value_get_uint(&gVal) == value)
203 { 283 {
204 - gtk_combo_box_set_active_iter(widget->input.combo[0],&iter); 284 + gtk_combo_box_set_active_iter(widget->input.combos[combo],&iter);
205 break; 285 break;
206 } 286 }
207 287
208 } while(gtk_tree_model_iter_next(model,&iter)); 288 } while(gtk_tree_model_iter_next(model,&iter));
209 - }  
210 - }  
211 -  
212 - // Set color type  
213 - {  
214 - GtkTreeModel * model = gtk_combo_box_get_model(widget->input.combo[1]);  
215 - GtkTreeIter iter;  
216 - int colors = (int) lib3270_get_color_type(hSession);  
217 289
218 - if(gtk_tree_model_get_iter_first(model,&iter))  
219 - {  
220 - do  
221 - {  
222 - GValue value = { 0, }; 290 + g_value_unset(&gVal);
223 291
224 - gtk_tree_model_get_value(model,&iter,1,&value);  
225 -  
226 - if(g_value_get_int(&value) == colors)  
227 - {  
228 - gtk_combo_box_set_active_iter(widget->input.combo[1],&iter);  
229 - break;  
230 - }  
231 -  
232 - } while(gtk_tree_model_iter_next(model,&iter));  
233 } 292 }
  293 +
234 } 294 }
235 295
236 } 296 }
@@ -291,56 +351,42 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -291,56 +351,42 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
291 { 351 {
292 widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." ))); 352 widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));
293 gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." )); 353 gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." ));
294 - 354 + gtk_widget_set_halign(GTK_WIDGET(widget->input.ssl),GTK_ALIGN_START);
295 gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1); 355 gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.ssl),3,1,1,1);
296 } 356 }
297 357
298 - // Host type 358 + // Create combo boxes
299 { 359 {
300 - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);  
301 GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); 360 GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
302 361
303 - widget->input.combo[0] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); 362 + size_t combo, item;
304 363
305 - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, TRUE);  
306 - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[0]), renderer, "text", 0, NULL); 364 + for(combo = 0; combo < G_N_ELEMENTS(combos); combo++) {
307 365
308 - const LIB3270_HOST_TYPE_ENTRY *entry = lib3270_get_option_list();  
309 - for(f=0;entry[f].name != NULL;f++)  
310 - {  
311 - GtkTreeIter iter;  
312 - gtk_list_store_append((GtkListStore *) model,&iter);  
313 - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(entry[f].description), 1, entry[f].type, -1);  
314 - } 366 + GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_UINT);
315 367
316 - } 368 + widget->input.combos[combo] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
317 369
318 - // Color table  
319 - {  
320 - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(2,G_TYPE_STRING,G_TYPE_INT);  
321 - GtkCellRenderer * renderer = gtk_cell_renderer_text_new(); 370 + if(combos[combo].tooltip)
  371 + gtk_widget_set_tooltip_markup(GTK_WIDGET(widget->input.combos[combo]),combos[combo].tooltip);
322 372
323 - widget->input.combo[1] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model)); 373 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combos[combo]), renderer, TRUE);
  374 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combos[combo]), renderer, "text", 0, NULL);
324 375
325 - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, TRUE);  
326 - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combo[1]), renderer, "text", 0, NULL); 376 + for(item = 0; combos[combo].labels[item]; item++)
  377 + {
  378 + GtkTreeIter iter;
  379 + gtk_list_store_append((GtkListStore *) model, &iter);
  380 + gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(combos[combo].labels[item]), 1, combos[combo].values[item], -1);
  381 + }
327 382
328 - for(f=0;f< (int) G_N_ELEMENTS(colortable);f++)  
329 - {  
330 - GtkTreeIter iter;  
331 - gtk_list_store_append((GtkListStore *) model,&iter);  
332 - gtk_list_store_set((GtkListStore *) model, &iter, 0, gettext(colortable[f].description), 1, colortable[f].colors, -1);  
333 - } 383 + GtkWidget *label = gtk_label_new_with_mnemonic(gettext(combos[combo].label));
  384 + gtk_widget_set_halign(label,GTK_ALIGN_END);
  385 + gtk_grid_attach(GTK_GRID(widget),label,combos[combo].left,combos[combo].top,1,1);
  386 + gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combos[combo]),combos[combo].left+1,combos[combo].top,2,1);
334 387
335 - } 388 + }
336 389
337 - // Host options  
338 - for(f=0;f< (int) G_N_ELEMENTS(comboLabel);f++)  
339 - {  
340 - GtkWidget *label = gtk_label_new_with_mnemonic(gettext(comboLabel[f]));  
341 - gtk_widget_set_halign(label,GTK_ALIGN_END);  
342 - gtk_grid_attach(GTK_GRID(widget),label,0,f+2,1,1);  
343 - gtk_grid_attach(GTK_GRID(widget),GTK_WIDGET(widget->input.combo[f]),1,f+2,2,1);  
344 } 390 }
345 391
346 gtk_widget_show_all(GTK_WIDGET(widget)); 392 gtk_widget_show_all(GTK_WIDGET(widget));
src/dialogs/settings/dialog.c
@@ -137,7 +137,7 @@ static void dispose(GObject *object) @@ -137,7 +137,7 @@ static void dispose(GObject *object)
137 { 137 {
138 debug("%s",__FUNCTION__); 138 debug("%s",__FUNCTION__);
139 139
140 - V3270SettingsDialog * widget = GTK_V3270_SETTINGS_DIALOG(object); 140 +// V3270SettingsDialog * widget = GTK_V3270_SETTINGS_DIALOG(object);
141 141
142 142
143 G_OBJECT_CLASS(V3270SettingsDialog_parent_class)->dispose(object); 143 G_OBJECT_CLASS(V3270SettingsDialog_parent_class)->dispose(object);
@@ -229,19 +229,19 @@ void v3270_settings_dialog_set_terminal_widget(GtkWidget *widget, GtkWidget *ter @@ -229,19 +229,19 @@ void v3270_settings_dialog_set_terminal_widget(GtkWidget *widget, GtkWidget *ter
229 ); 229 );
230 } 230 }
231 231
232 -void v3270_setttings_dialog_response(GtkDialog *dialog, gint response_id, GtkWidget *terminal) 232 +void v3270_setttings_dialog_response(GtkDialog *dialog, gint response_id, GtkWidget G_GNUC_UNUSED(*terminal))
233 { 233 {
234 switch(response_id) 234 switch(response_id)
235 { 235 {
236 case GTK_RESPONSE_APPLY: 236 case GTK_RESPONSE_APPLY:
237 debug("%s:apply",__FUNCTION__); 237 debug("%s:apply",__FUNCTION__);
238 - v3270_settings_dialog_apply(dialog); 238 + v3270_settings_dialog_apply(GTK_WIDGET(dialog));
239 break; 239 break;
240 240
241 case GTK_RESPONSE_CANCEL: 241 case GTK_RESPONSE_CANCEL:
242 case GTK_RESPONSE_DELETE_EVENT: 242 case GTK_RESPONSE_DELETE_EVENT:
243 debug("%s:cancel",__FUNCTION__); 243 debug("%s:cancel",__FUNCTION__);
244 - v3270_settings_dialog_revert(dialog); 244 + v3270_settings_dialog_revert(GTK_WIDGET(dialog));
245 break; 245 break;
246 246
247 default: 247 default: