Commit 7c91971fb6914c85f9ca34939078793934c7bd9e

Authored by Perry Werneck
1 parent bae5af0e

Refactoring application settings dialog & related widgets as gobjects.

src/include/pw3270/settings.h
... ... @@ -48,6 +48,8 @@
48 48 #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS))
49 49 #define GTK_PW3270_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PW3270_SETTINGS, PW3270SettingsClass))
50 50  
  51 + GType PW3270Settings_get_type(void);
  52 +
51 53 typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate;
52 54  
53 55 typedef struct _PW3270Settings {
... ...
src/objects/settings/dialog.c
... ... @@ -46,7 +46,7 @@
46 46  
47 47 static void add(GtkContainer *container, GtkWidget *widget);
48 48 static void page_changed(GtkNotebook *notebook, GtkWidget *child, guint page_num, PW3270SettingsDialog *dialog);
49   - static void switch_page(GtkNotebook *notebook, GtkWidget *settings, guint page_num, PW3270SettingsDialog *dialog);
  49 + static void switch_page(GtkNotebook *notebook, PW3270Settings *page, guint page_num, PW3270SettingsDialog *dialog);
50 50 static void dialog_close(GtkDialog *dialog);
51 51 static void response(GtkDialog *dialog, gint response_id);
52 52  
... ... @@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) {
120 120 gtk_widget_destroy(GTK_WIDGET(dialog));
121 121 }
122 122  
  123 +static void apply(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) {
  124 +
  125 + if(GTK_IS_PW3270_SETTINGS(widget)) {
  126 + GTK_PW3270_SETTINGS(widget)->apply(widget,GTK_PW3270_SETTINGS(widget)->settings);
  127 + }
  128 +
  129 +}
  130 +
  131 +static void revert(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) {
  132 +
  133 + if(GTK_IS_PW3270_SETTINGS(widget)) {
  134 + GTK_PW3270_SETTINGS(widget)->revert(widget,GTK_PW3270_SETTINGS(widget)->settings);
  135 + }
  136 +
  137 +}
  138 +
123 139 void response(GtkDialog *dialog, gint response_id) {
124 140  
125 141 debug("%s(%d)",__FUNCTION__,response_id);
126 142  
  143 + switch(response_id) {
  144 + case GTK_RESPONSE_APPLY:
  145 + gtk_container_foreach(
  146 + GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs),
  147 + (GtkCallback) apply,
  148 + dialog
  149 + );
  150 + break;
  151 +
  152 + case GTK_RESPONSE_CANCEL:
  153 + gtk_container_foreach(
  154 + GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs),
  155 + (GtkCallback) revert,
  156 + dialog
  157 + );
  158 + break;
  159 +
  160 + }
  161 +
127 162 gtk_widget_destroy(GTK_WIDGET(dialog));
128 163 }
129 164  
... ... @@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) {
131 166  
132 167 GtkWidget * label = NULL;
133 168  
  169 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  170 + gtk_container_set_border_width(GTK_CONTAINER(widget),18);
  171 +
  172 + if(GTK_IS_PW3270_SETTINGS(widget)) {
  173 + PW3270Settings * settings = GTK_PW3270_SETTINGS(widget);
  174 + label = gtk_label_new(settings->label);
  175 + settings->load(widget,settings->settings);
  176 + }
  177 +
134 178 gtk_notebook_append_page(
135 179 GTK_PW3270_SETTINGS_DIALOG(container)->tabs,
136 180 widget,
... ... @@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint
143 187 gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1);
144 188 }
145 189  
146   -void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), GtkWidget *settings, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) {
  190 +void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) {
147 191  
148   - /*
149   - debug("title: %s",settings->title);
150   - debug("label: %s",settings->label);
  192 + GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog));
151 193  
152   - if(dialog->has_subtitle) {
153   - GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog));
154   - if(header_bar) {
155   - gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar),settings->title);
156   - }
  194 + if(header_bar) {
  195 + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar),page->title);
157 196 }
158   - */
  197 +
159 198 }
160 199  
... ...