Commit 8a99c3c74019612996ebb856e30866c52eaa2497
1 parent
d8c13e00
Exists in
master
and in
1 other branch
Refactoring host selection widget.
Showing
2 changed files
with
141 additions
and
95 deletions
Show diff stats
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: |