diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2013-07-29 11:46:14 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2013-09-25 15:49:55 -0300 |
commit | 7bf4dc64be6d3df76ea728f38c441b798285789e (patch) | |
tree | 228f201376e6e6ba0c99861940fd736f657792b6 | |
parent | 1f18f8a513cbb5d75d73cffb9d39853be4c7b8e2 (diff) | |
download | glade-7bf4dc64be6d3df76ea728f38c441b798285789e.tar.gz |
Added project css property support
-rw-r--r-- | gladeui/glade-project-properties.c | 78 | ||||
-rw-r--r-- | gladeui/glade-project-properties.ui | 40 |
2 files changed, 118 insertions, 0 deletions
diff --git a/gladeui/glade-project-properties.c b/gladeui/glade-project-properties.c index c4d28199..ca1af240 100644 --- a/gladeui/glade-project-properties.c +++ b/gladeui/glade-project-properties.c @@ -66,6 +66,10 @@ static void on_license_textview_populate_popup (GtkTextView *t GladeProjectProperties *properties); static void on_glade_project_properties_hide (GtkWidget *widget, GladeProjectProperties *properties); +static void on_css_filechooser_file_set (GtkFileChooserButton *widget, + GladeProjectProperties *properties); +static void on_css_checkbutton_toggled (GtkWidget *widget, + GladeProjectProperties *properties); /* Project callbacks */ static void project_resource_path_changed (GladeProject *project, GParamSpec *pspec, @@ -81,6 +85,9 @@ static void project_targets_changed (GladeProject *p static void project_license_changed (GladeProject *project, GParamSpec *pspec, GladeProjectProperties *properties); +static void project_css_provider_path_changed (GladeProject *project, + GParamSpec *pspec, + GladeProjectProperties *properties); struct _GladeProjectPropertiesPrivate { @@ -100,6 +107,9 @@ struct _GladeProjectPropertiesPrivate GtkWidget *template_checkbutton; GtkTextBuffer *license_textbuffer; + GtkWidget *css_filechooser; + GtkWidget *css_checkbutton; + GHashTable *target_radios; gboolean ignore_ui_cb; }; @@ -163,6 +173,8 @@ glade_project_properties_class_init (GladeProjectPropertiesClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, template_combobox); gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, toolkit_box); gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, license_textbuffer); + gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, css_filechooser); + gtk_widget_class_bind_template_child_private (widget_class, GladeProjectProperties, css_checkbutton); /* Declare the callback ports that this widget class exposes, to bind with <signal> * connections defined in the GtkBuilder xml @@ -179,6 +191,8 @@ glade_project_properties_class_init (GladeProjectPropertiesClass *klass) gtk_widget_class_bind_template_callback (widget_class, on_relative_path_entry_changed); gtk_widget_class_bind_template_callback (widget_class, on_license_textview_populate_popup); gtk_widget_class_bind_template_callback (widget_class, on_glade_project_properties_hide); + gtk_widget_class_bind_template_callback (widget_class, on_css_filechooser_file_set); + gtk_widget_class_bind_template_callback (widget_class, on_css_checkbutton_toggled); } /******************************************************** @@ -335,6 +349,8 @@ glade_project_properties_set_project (GladeProjectProperties *properties, G_CALLBACK (project_template_changed), properties); g_signal_connect (priv->project, "notify::translation-domain", G_CALLBACK (project_domain_changed), properties); + g_signal_connect (priv->project, "notify::css-provider-path", + G_CALLBACK (project_css_provider_path_changed), properties); g_signal_connect (priv->project, "targets-changed", G_CALLBACK (project_targets_changed), properties); g_signal_connect (priv->project, "notify::license", @@ -345,6 +361,7 @@ glade_project_properties_set_project (GladeProjectProperties *properties, project_template_changed (project, NULL, properties); project_domain_changed (project, NULL, properties); + project_css_provider_path_changed (project, NULL, properties); } static void @@ -812,6 +829,40 @@ on_glade_project_properties_hide (GtkWidget *widget, g_free (license); } +static void +on_css_checkbutton_toggled (GtkWidget *widget, GladeProjectProperties *properties) +{ + GladeProjectPropertiesPrivate *priv = properties->priv; + + if (priv->ignore_ui_cb) + return; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) + { + gtk_widget_set_sensitive (priv->css_filechooser, TRUE); + } + else + { + gtk_widget_set_sensitive (priv->css_filechooser, FALSE); + glade_project_set_css_provider_path (priv->project, NULL); + } +} + +static void +on_css_filechooser_file_set (GtkFileChooserButton *widget, + GladeProjectProperties *properties) +{ + GladeProjectPropertiesPrivate *priv = properties->priv; + const gchar *path; + + if (priv->ignore_ui_cb) + return; + + path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); + g_message ("%s %s", __func__, path); + glade_project_set_css_provider_path (priv->project, path); +} + /****************************************************** * Project Callbacks * ******************************************************/ @@ -958,6 +1009,33 @@ project_license_changed (GladeProject *project, priv->ignore_ui_cb = FALSE; } +static void +project_css_provider_path_changed (GladeProject *project, + GParamSpec *pspec, + GladeProjectProperties *properties) +{ + GladeProjectPropertiesPrivate *priv = properties->priv; + const gchar *filename = glade_project_get_css_provider_path (project); + GtkFileChooser *chooser = GTK_FILE_CHOOSER (priv->css_filechooser); + + priv->ignore_ui_cb = TRUE; + + if (filename) + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->css_checkbutton), TRUE); + gtk_widget_set_sensitive (priv->css_filechooser, TRUE); + gtk_file_chooser_set_filename (chooser, filename); + } + else + { + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->css_checkbutton), FALSE); + gtk_widget_set_sensitive (priv->css_filechooser, FALSE); + gtk_file_chooser_unselect_all (chooser); + } + + priv->ignore_ui_cb = FALSE; +} + /****************************************************** * API * ******************************************************/ diff --git a/gladeui/glade-project-properties.ui b/gladeui/glade-project-properties.ui index 2a6605cb..eac2896c 100644 --- a/gladeui/glade-project-properties.ui +++ b/gladeui/glade-project-properties.ui @@ -3,6 +3,14 @@ <interface domain="glade"> <!-- interface-requires gtk+ 3.8 --> <object class="GtkTextBuffer" id="license_textbuffer"/> + <object class="GtkFileFilter" id="css_filter"> + <mime-types> + <mime-type>text/css</mime-type> + </mime-types> + <patterns> + <pattern>*.css</pattern> + </patterns> + </object> <template class="GladeProjectProperties" parent="GtkDialog"> <property name="can_focus">False</property> <property name="border_width">5</property> @@ -110,6 +118,38 @@ <property name="height">1</property> </packing> </child> + <child> + <object class="GtkFileChooserButton" id="css_filechooser"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="filter">css_filter</property> + <property name="title" translatable="yes">Select a CSS to use as custom style provider</property> + <signal name="file-set" handler="on_css_filechooser_file_set" swapped="no"/> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="css_checkbutton"> + <property name="label" translatable="yes">Custom CSS style provider:</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + <signal name="toggled" handler="on_css_checkbutton_toggled" swapped="no"/> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> </object> </child> <child type="label"> |