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 35  
36 36 /*--[ Widget definition ]----------------------------------------------------------------------------*/
37 37  
  38 +/*
38 39 static const struct _colortable
39 40 {
40 41 unsigned short colors;
... ... @@ -45,6 +46,7 @@
45 46 { 8, N_( "8 colors" ) },
46 47 { 2, N_( "Monochrome" ) },
47 48 };
  49 + */
48 50  
49 51 enum _entry
50 52 {
... ... @@ -54,7 +56,101 @@
54 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 155 struct _V3270HostSelectWidget
60 156 {
... ... @@ -64,7 +160,7 @@
64 160 {
65 161 GtkEntry * entry[ENTRY_COUNT]; /**< @brief Entry fields for host & service name */
66 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 165 } input;
70 166  
... ... @@ -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 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 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 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 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 271 GtkTreeIter iter;
  272 + unsigned int value = combos[combo].get(hSession);
193 273  
194 274 if(gtk_tree_model_get_iter_first(model,&iter))
195 275 {
  276 + GValue gVal = { 0, };
  277 +
196 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 285 break;
206 286 }
207 287  
208 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 351 {
292 352 widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));
293 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 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 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 392 gtk_widget_show_all(GTK_WIDGET(widget));
... ...
src/dialogs/settings/dialog.c
... ... @@ -137,7 +137,7 @@ static void dispose(GObject *object)
137 137 {
138 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 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 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 234 switch(response_id)
235 235 {
236 236 case GTK_RESPONSE_APPLY:
237 237 debug("%s:apply",__FUNCTION__);
238   - v3270_settings_dialog_apply(dialog);
  238 + v3270_settings_dialog_apply(GTK_WIDGET(dialog));
239 239 break;
240 240  
241 241 case GTK_RESPONSE_CANCEL:
242 242 case GTK_RESPONSE_DELETE_EVENT:
243 243 debug("%s:cancel",__FUNCTION__);
244   - v3270_settings_dialog_revert(dialog);
  244 + v3270_settings_dialog_revert(GTK_WIDGET(dialog));
245 245 break;
246 246  
247 247 default:
... ...