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: |