Commit 27bc20aa3440a449b48aeb340c23ba6ac30ce995

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

Implementing clipboard settings dialog.

src/dialogs/settings/clipboard.c
... ... @@ -32,16 +32,112 @@
32 32 *
33 33 */
34 34  
35   - #include <internals.h>
  35 + #include "private.h"
36 36 #include <v3270/settings.h>
37 37 #include <lib3270/log.h>
38 38  
  39 +/*--[ Constants ]------------------------------------------------------------------------------------*/
  40 +
  41 + enum {
  42 + COPY_SETTINGS,
  43 + PASTE_SETTINGS,
  44 + HTML_SETTINGS,
  45 +
  46 + GRID_COUNT
  47 + };
  48 +
  49 + static const struct ToggleButtonDefinition toggles[] = {
  50 + {
  51 + .left = 0,
  52 + .top = 0,
  53 + .width = 1,
  54 + .grid = COPY_SETTINGS,
  55 + .id = LIB3270_TOGGLE_RECTANGLE_SELECT,
  56 + },
  57 +
  58 + {
  59 + .left = 2,
  60 + .top = 0,
  61 + .width = 1,
  62 + .grid = COPY_SETTINGS,
  63 + .id = LIB3270_TOGGLE_MARGINED_PASTE,
  64 + },
  65 +
  66 + {
  67 + .left = 0,
  68 + .top = 0,
  69 + .width = 1,
  70 + .grid = PASTE_SETTINGS,
  71 + .id = LIB3270_TOGGLE_SMART_PASTE,
  72 + }
  73 +
  74 + };
  75 +
  76 + static const struct ComboBoxDefinition combos[] = {
  77 +
  78 + {
  79 + .grid = HTML_SETTINGS,
  80 + .left = 0,
  81 + .top = 0,
  82 + .width = 1,
  83 + .height = 1,
  84 + .label = N_("Font"),
  85 +// .tooltip =
  86 +
  87 + .n_columns = 2,
  88 + .types = (const GType []) {
  89 + G_TYPE_STRING,
  90 + G_TYPE_UINT
  91 + }
  92 +
  93 + },
  94 +
  95 + {
  96 + .grid = HTML_SETTINGS,
  97 + .left = 0,
  98 + .top = 1,
  99 + .width = 1,
  100 + .height = 1,
  101 + .label = N_("Color theme"),
  102 +// .tooltip =
  103 +
  104 + .n_columns = 1,
  105 + .types = (const GType []) {
  106 + G_TYPE_STRING
  107 + }
  108 +
  109 + },
  110 +
  111 + {
  112 + .grid = COPY_SETTINGS,
  113 + .left = 0,
  114 + .top = 1,
  115 + .width = 1,
  116 + .height = 1,
  117 + .label = N_("Format"),
  118 +// .tooltip =
  119 +
  120 + .n_columns = 2,
  121 + .types = (const GType []) {
  122 + G_TYPE_STRING,
  123 + G_TYPE_UINT
  124 + }
  125 +
  126 + },
  127 +
  128 + };
  129 +
39 130 /*--[ Globals ]--------------------------------------------------------------------------------------*/
40 131  
41 132 typedef struct _V3270ClipboardSettings {
42 133  
43 134 V3270Settings parent;
44 135  
  136 + struct {
  137 + GtkToggleButton * toggles[G_N_ELEMENTS(toggles)]; ///< @brief Toggle checks.
  138 + GtkComboBox * combos[G_N_ELEMENTS(combos)]; ///< @brief Combo-boxes.
  139 + } input;
  140 +
45 141  
46 142 } V3270ClipboardSettings;
47 143  
... ... @@ -70,6 +166,71 @@ static void V3270ClipboardSettings_class_init(V3270ClipboardSettingsClass *klass
70 166  
71 167 static void V3270ClipboardSettings_init(V3270ClipboardSettings *widget) {
72 168  
  169 + size_t ix;
  170 + GtkWidget * grids[GRID_COUNT];
  171 +
  172 + // Create grids
  173 + {
  174 + static const gchar * labels[GRID_COUNT] = {
  175 + N_("Copy options"),
  176 + N_("Common paste options"),
  177 + N_("HTML Paste options")
  178 + };
  179 +
  180 + for(ix = 0; ix < G_N_ELEMENTS(labels); ix++) {
  181 +
  182 + grids[ix] = gtk_grid_new();
  183 +
  184 + gtk_grid_set_row_spacing(GTK_GRID(grids[ix]),6);
  185 + gtk_grid_set_column_spacing(GTK_GRID(grids[ix]),12);
  186 +
  187 + gtk_grid_attach(
  188 + GTK_GRID(widget),
  189 + v3270_dialog_create_frame(grids[ix],g_dgettext(PACKAGE_NAME,labels[ix])),
  190 + 0,ix,1,1
  191 + );
  192 +
  193 + }
  194 +
  195 + }
  196 +
  197 + v3270_settings_create_toggle_buttons(toggles, G_N_ELEMENTS(toggles), grids, widget->input.toggles);
  198 + v3270_settings_create_combos(combos, G_N_ELEMENTS(combos), grids, widget->input.combos);
  199 +
  200 + // Setup combos
  201 + {
  202 + GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new();
  203 + GtkTreeIter iter;
  204 + GtkListStore * model;
  205 +
  206 + for(ix = 0; ix < G_N_ELEMENTS(combos); ix++) {
  207 + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combos[ix]), text_renderer, TRUE);
  208 + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combos[ix]), text_renderer, "text", 0, NULL);
  209 + }
  210 +
  211 + // Copy format combo
  212 + static const gchar * copy_formats[] = {
  213 + N_("Plain text only"),
  214 + N_("Complete with terminal attributes")
  215 + };
  216 +
  217 + model = GTK_LIST_STORE(gtk_combo_box_get_model(widget->input.combos[2]));
  218 + for(ix = 0;ix < G_N_ELEMENTS(copy_formats); ix++) {
  219 +
  220 + gtk_list_store_append(model, &iter);
  221 + gtk_list_store_set(
  222 + model,
  223 + &iter,
  224 + 0, g_dgettext(PACKAGE_NAME, copy_formats[ix]),
  225 + 1, (guint) ix,
  226 + -1
  227 + );
  228 +
  229 + }
  230 +
  231 +
  232 + }
  233 +
73 234 }
74 235  
75 236 GtkWidget * v3270_clipboard_settings_new() {
... ... @@ -82,11 +243,20 @@ GtkWidget * v3270_clipboard_settings_new() {
82 243 return GTK_WIDGET(settings);
83 244 }
84 245  
85   -static void apply(GtkWidget *w, GtkWidget *terminal) {
  246 +static void load(GtkWidget *w, GtkWidget *terminal) {
  247 +
  248 + V3270ClipboardSettings *widget = (V3270ClipboardSettings *) w;
  249 +
  250 + v3270_settings_load_toggle_buttons(toggles, G_N_ELEMENTS(toggles), terminal, widget->input.toggles);
86 251  
87 252 }
88 253  
89   -static void load(GtkWidget *w, GtkWidget *terminal) {
  254 +static void apply(GtkWidget *w, GtkWidget *terminal) {
  255 +
  256 + V3270ClipboardSettings *widget = (V3270ClipboardSettings *) w;
  257 +
  258 + v3270_settings_apply_toggle_buttons(toggles,G_N_ELEMENTS(toggles),terminal,widget->input.toggles);
90 259  
91 260 }
92 261  
  262 +
... ...
src/dialogs/settings/host.c
... ... @@ -766,13 +766,7 @@ static void apply(GtkWidget *w, GtkWidget *terminal)
766 766 }
767 767  
768 768 // Apply toggles
769   - size_t toggle;
770   -
771   - for(toggle = 0; toggle < G_N_ELEMENTS(toggleList); toggle++)
772   - {
773   - if(widget->input.toggles[toggle])
774   - v3270_set_toggle(terminal, toggleList[toggle].id, gtk_toggle_button_get_active(widget->input.toggles[toggle]));
775   - }
  769 + v3270_settings_apply_toggle_buttons(toggleList,G_N_ELEMENTS(toggleList),terminal,widget->input.toggles);
776 770  
777 771 // Apply oversize
778 772 lib3270_set_oversize(hSession,gtk_entry_get_text(widget->input.entry[ENTRY_OVERSIZE]));
... ... @@ -900,13 +894,7 @@ static void load(GtkWidget *w, GtkWidget *terminal)
900 894 }
901 895  
902 896 // Load toggles
903   - size_t toggle;
904   -
905   - for(toggle = 0; toggle < G_N_ELEMENTS(toggleList); toggle++)
906   - {
907   - if(widget->input.toggles[toggle])
908   - gtk_toggle_button_set_active(widget->input.toggles[toggle],v3270_get_toggle(terminal,toggleList[toggle].id));
909   - }
  897 + v3270_settings_load_toggle_buttons(toggleList, G_N_ELEMENTS(toggleList), terminal, widget->input.toggles);
910 898  
911 899 // Load oversize
912 900 const char * oversize = lib3270_get_oversize(hSession);
... ...
src/dialogs/settings/private.h
... ... @@ -44,6 +44,8 @@
44 44 };
45 45  
46 46 G_GNUC_INTERNAL void v3270_settings_create_toggle_buttons(const struct ToggleButtonDefinition * definitions, size_t length, GtkWidget **grids, GtkToggleButton **toggles);
  47 + G_GNUC_INTERNAL void v3270_settings_load_toggle_buttons(const struct ToggleButtonDefinition * definitions, size_t length, GtkWidget *terminal, GtkToggleButton **toggles);
  48 + G_GNUC_INTERNAL void v3270_settings_apply_toggle_buttons(const struct ToggleButtonDefinition * definitions, size_t length, GtkWidget *terminal, GtkToggleButton **toggles);
47 49  
48 50 /// @brief Entry field factory.
49 51 struct EntryFieldDefinition {
... ... @@ -58,4 +60,18 @@
58 60  
59 61 G_GNUC_INTERNAL void v3270_settings_create_entry_fields(const struct EntryFieldDefinition * definitions, size_t length, GtkWidget **grids, GtkEntry **entries);
60 62  
  63 + /// @brief Combo Box factory
  64 + struct ComboBoxDefinition {
  65 +
  66 + ENTRY_FIELD_HEAD
  67 +
  68 + unsigned short grid;
  69 +
  70 + gint n_columns;
  71 + const GType *types;
  72 +
  73 + };
  74 +
  75 + G_GNUC_INTERNAL void v3270_settings_create_combos(const struct ComboBoxDefinition * definitions, size_t length, GtkWidget **grids, GtkComboBox **combos);
  76 +
61 77 #endif // PRIVATE_H_INCLUDED
... ...
src/dialogs/settings/tools.c
... ... @@ -58,6 +58,32 @@
58 58  
59 59 }
60 60  
  61 + void v3270_settings_load_toggle_buttons(const struct ToggleButtonDefinition * definitions, size_t length, GtkWidget *terminal, GtkToggleButton **toggles) {
  62 +
  63 + size_t toggle;
  64 +
  65 + for(toggle = 0; toggle < length; toggle++) {
  66 +
  67 + if(toggles[toggle])
  68 + gtk_toggle_button_set_active(toggles[toggle],v3270_get_toggle(terminal,definitions[toggle].id));
  69 +
  70 + }
  71 +
  72 + }
  73 +
  74 + void v3270_settings_apply_toggle_buttons(const struct ToggleButtonDefinition * definitions, size_t length, GtkWidget *terminal, GtkToggleButton **toggles) {
  75 +
  76 + size_t toggle;
  77 +
  78 + for(toggle = 0; toggle < length; toggle++) {
  79 +
  80 + if(toggles[toggle])
  81 + v3270_set_toggle(terminal, definitions[toggle].id, gtk_toggle_button_get_active(toggles[toggle]));
  82 +
  83 + }
  84 +
  85 + }
  86 +
61 87 void v3270_settings_create_entry_fields(const struct EntryFieldDefinition * definitions, size_t length, GtkWidget **grids, GtkEntry **entries) {
62 88  
63 89 size_t entry;
... ... @@ -78,3 +104,31 @@
78 104  
79 105 }
80 106  
  107 + void v3270_settings_create_combos(const struct ComboBoxDefinition * definitions, size_t length, GtkWidget **grids, GtkComboBox **combos) {
  108 +
  109 + size_t combo;
  110 +
  111 + for(combo = 0; combo < length; combo++) {
  112 +
  113 + if(definitions[combo].n_columns) {
  114 +
  115 + GtkTreeModel * model = GTK_TREE_MODEL(gtk_list_store_newv(definitions[combo].n_columns,(GType *) definitions[combo].types));
  116 + combos[combo] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
  117 +
  118 + } else {
  119 +
  120 + combos[combo] = GTK_COMBO_BOX(gtk_combo_box_new());
  121 +
  122 + }
  123 +
  124 + v3270_grid_attach(
  125 + GTK_GRID(grids[definitions[combo].grid]),
  126 + (struct v3270_entry_field *) & definitions[combo],
  127 + GTK_WIDGET(combos[combo])
  128 + );
  129 +
  130 + }
  131 +
  132 + }
  133 +
  134 +
... ...