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,6 +48,8 @@
48 #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS)) 48 #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS))
49 #define GTK_PW3270_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PW3270_SETTINGS, PW3270SettingsClass)) 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 typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; 53 typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate;
52 54
53 typedef struct _PW3270Settings { 55 typedef struct _PW3270Settings {
src/objects/settings/dialog.c
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 46
47 static void add(GtkContainer *container, GtkWidget *widget); 47 static void add(GtkContainer *container, GtkWidget *widget);
48 static void page_changed(GtkNotebook *notebook, GtkWidget *child, guint page_num, PW3270SettingsDialog *dialog); 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 static void dialog_close(GtkDialog *dialog); 50 static void dialog_close(GtkDialog *dialog);
51 static void response(GtkDialog *dialog, gint response_id); 51 static void response(GtkDialog *dialog, gint response_id);
52 52
@@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) { @@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) {
120 gtk_widget_destroy(GTK_WIDGET(dialog)); 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 void response(GtkDialog *dialog, gint response_id) { 139 void response(GtkDialog *dialog, gint response_id) {
124 140
125 debug("%s(%d)",__FUNCTION__,response_id); 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 gtk_widget_destroy(GTK_WIDGET(dialog)); 162 gtk_widget_destroy(GTK_WIDGET(dialog));
128 } 163 }
129 164
@@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) { @@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) {
131 166
132 GtkWidget * label = NULL; 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 gtk_notebook_append_page( 178 gtk_notebook_append_page(
135 GTK_PW3270_SETTINGS_DIALOG(container)->tabs, 179 GTK_PW3270_SETTINGS_DIALOG(container)->tabs,
136 widget, 180 widget,
@@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint @@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint
143 gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); 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