diff options
author | rbuj <[email protected]> | 2020-12-02 10:19:16 +0100 |
---|---|---|
committer | raveit65 <[email protected]> | 2020-12-13 16:20:04 +0100 |
commit | 1f964c265a0f45c064d312dcd51f985e877cbc55 (patch) | |
tree | e7520456bc97ba82c19fdbbd9f5fd69807919069 /mateweather/mateweather-dialog.c | |
parent | fbca7353191c20b3ce70fe2390491305ba3968fa (diff) | |
download | mate-applets-1f964c265a0f45c064d312dcd51f985e877cbc55.tar.bz2 mate-applets-1f964c265a0f45c064d312dcd51f985e877cbc55.tar.xz |
mateweather: Use common subdirs - src, data
Diffstat (limited to 'mateweather/mateweather-dialog.c')
-rw-r--r-- | mateweather/mateweather-dialog.c | 368 |
1 files changed, 0 insertions, 368 deletions
diff --git a/mateweather/mateweather-dialog.c b/mateweather/mateweather-dialog.c deleted file mode 100644 index 02ca824c..00000000 --- a/mateweather/mateweather-dialog.c +++ /dev/null @@ -1,368 +0,0 @@ -/* $Id$ */ - -/* - * Papadimitriou Spiros <[email protected]> - * - * This code released under the GNU GPL. - * Read the file COPYING for more information. - * - * Main status dialog - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif /* HAVE_CONFIG_H */ - -#include <stdio.h> -#include <stdlib.h> -#include <assert.h> - -#include <gio/gio.h> - -#define MATEWEATHER_I_KNOW_THIS_IS_UNSTABLE - -#include "mateweather.h" -#include "mateweather-applet.h" -#include "mateweather-pref.h" -#include "mateweather-dialog.h" - -struct _MateWeatherDialog { - GtkDialog parent; - - GtkWidget *weather_notebook; - GtkWidget *cond_location; - GtkWidget *cond_update; - GtkWidget *cond_cond; - GtkWidget *cond_sky; - GtkWidget *cond_temp; - GtkWidget *cond_dew; - GtkWidget *cond_humidity; - GtkWidget *cond_wind; - GtkWidget *cond_pressure; - GtkWidget *cond_vis; - GtkWidget *cond_apparent; - GtkWidget *cond_sunrise; - GtkWidget *cond_sunset; - GtkWidget *cond_image; - GtkWidget *forecast_text; - GtkWidget *radar_image; - - MateWeatherApplet *applet; -}; - -enum { - PROP_0, - PROP_MATEWEATHER_APPLET, -}; - -G_DEFINE_TYPE (MateWeatherDialog, mateweather_dialog, GTK_TYPE_DIALOG); - -#define MONOSPACE_FONT_SCHEMA "org.mate.interface" -#define MONOSPACE_FONT_KEY "monospace-font-name" - -static void -response_cb (MateWeatherDialog *dialog, - gint id, - gpointer data) -{ - if (id == GTK_RESPONSE_OK) { - mateweather_update (dialog->applet); - mateweather_dialog_update (dialog); - } else { - gtk_widget_destroy (GTK_WIDGET (dialog)); - } -} - -static void -link_cb (GtkButton *button, - gpointer data) -{ - gtk_show_uri_on_window (NULL, - "http://www.weather.com/", - gtk_get_current_event_time (), - NULL); -} - -static gchar* -replace_multiple_new_lines(gchar* s) -{ - gchar *prev_s = s; - gint count; - gint i; - - if (s == NULL) { - return s; - } - - for (;*s != '\0';s++) { - - count = 0; - - if (*s == '\n') { - s++; - while (*s == '\n' || *s == ' ') { - count++; - s++; - } - } - for (i = count; i > 1; i--) { - *(s - i) = ' '; - } - } - return prev_s; -} - -static PangoFontDescription* get_system_monospace_font(void) -{ - PangoFontDescription *desc = NULL; - GSettings *settings; - char *name; - - settings = g_settings_new (MONOSPACE_FONT_SCHEMA); - name = g_settings_get_string (settings, MONOSPACE_FONT_KEY); - - if (name) { - desc = pango_font_description_from_string (name); - g_free (name); - } - - g_object_unref (settings); - - return desc; -} - -static void -override_widget_font (GtkWidget *widget, - PangoFontDescription *font) -{ - static gboolean provider_added = FALSE; - static GtkCssProvider *provider; - gchar *css; - gchar *family; - gchar *weight; - const gchar *style; - gchar *size; - - family = g_strdup_printf ("font-family: %s;", pango_font_description_get_family (font)); - - weight = g_strdup_printf ("font-weight: %d;", pango_font_description_get_weight (font)); - - if (pango_font_description_get_style (font) == PANGO_STYLE_NORMAL) - style = "font-style: normal;"; - else if (pango_font_description_get_style (font) == PANGO_STYLE_ITALIC) - style = "font-style: italic;"; - else - style = "font-style: oblique;"; - - size = g_strdup_printf ("font-size: %d%s;", - pango_font_description_get_size (font) / PANGO_SCALE, - pango_font_description_get_size_is_absolute (font) ? "px" : "pt"); - if (!provider_added) - provider = gtk_css_provider_new (); - - gtk_widget_set_name(GTK_WIDGET(widget), "MateWeatherAppletTextView"); - css = g_strdup_printf ("#MateWeatherAppletTextView { %s %s %s %s }", family, weight, style, size); - gtk_css_provider_load_from_data (provider, css, -1, NULL); - - if (!provider_added) { - gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (widget), - GTK_STYLE_PROVIDER (provider), - GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); - provider_added = TRUE; - } - - g_free (css); - g_free (family); - g_free (weight); - g_free (size); -} - -void -mateweather_dialog_update (MateWeatherDialog *dialog) -{ - WeatherInfo *info; - gchar *forecast; - GtkTextBuffer *buffer; - PangoFontDescription *font_desc; - const gchar *icon_name; - - /* Check for parallel network update in progress */ - if (dialog->applet->mateweather_info == NULL) - return; - - info = dialog->applet->mateweather_info; - - /* Update icon */ - icon_name = weather_info_get_icon_name (info); - gtk_image_set_from_icon_name (GTK_IMAGE (dialog->cond_image), - icon_name, GTK_ICON_SIZE_DIALOG); - - /* Update current condition fields and forecast */ - gtk_label_set_text (GTK_LABEL (dialog->cond_location), weather_info_get_location_name (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_update), weather_info_get_update (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_cond), weather_info_get_conditions (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_sky), weather_info_get_sky (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_temp), weather_info_get_temp (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_apparent), weather_info_get_apparent (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_dew), weather_info_get_dew (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_humidity), weather_info_get_humidity (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_wind), weather_info_get_wind (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_pressure), weather_info_get_pressure (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_vis), weather_info_get_visibility (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_sunrise), weather_info_get_sunrise (info)); - gtk_label_set_text (GTK_LABEL (dialog->cond_sunset), weather_info_get_sunset (info)); - - /* Update forecast */ - if (dialog->applet->mateweather_pref.location->zone_valid) { - font_desc = get_system_monospace_font (); - if (font_desc) { - override_widget_font (dialog->forecast_text, font_desc); - pango_font_description_free (font_desc); - } - - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dialog->forecast_text)); - forecast = g_strdup (weather_info_get_forecast (dialog->applet->mateweather_info)); - if (forecast) { - forecast = g_strstrip (replace_multiple_new_lines (forecast)); - gtk_text_buffer_set_text (buffer, forecast, -1); - g_free (forecast); - } else { - gtk_text_buffer_set_text (buffer, _("Forecast not currently available for this location."), -1); - } - gtk_widget_show (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 1)); - } else { - gtk_widget_hide (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 1)); - } - - /* Update radar map */ - if (dialog->applet->mateweather_pref.radar_enabled) { - GdkPixbufAnimation *radar; - - radar = weather_info_get_radar (info); - if (radar) { - gtk_image_set_from_animation (GTK_IMAGE (dialog->radar_image), radar); - } - gtk_widget_show (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 2)); - gtk_window_set_default_size (GTK_WINDOW (dialog), 570, 440); - } else { - gtk_widget_hide (gtk_notebook_get_nth_page (GTK_NOTEBOOK (dialog->weather_notebook), 2)); - gtk_window_set_default_size (GTK_WINDOW (dialog), 590, 340); - } -} - -static void -mateweather_dialog_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MateWeatherDialog *dialog; - - dialog = MATEWEATHER_DIALOG (object); - - switch (prop_id) { - case PROP_MATEWEATHER_APPLET: - dialog->applet = g_value_get_pointer (value); - break; - default: - /* We don't have any other property... */ - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -mateweather_dialog_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MateWeatherDialog *dialog; - - dialog = MATEWEATHER_DIALOG (object); - - switch (prop_id) { - case PROP_MATEWEATHER_APPLET: - g_value_set_pointer (value, dialog->applet); - break; - default: - /* We don't have any other property... */ - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -mateweather_dialog_init (MateWeatherDialog *dialog) -{ - gtk_widget_init_template (GTK_WIDGET (dialog)); -} - -static GObject* -mateweather_dialog_constructor (GType type, - guint n_construct_params, - GObjectConstructParam *construct_params) -{ - GObject *object; - MateWeatherDialog *self; - - object = G_OBJECT_CLASS (mateweather_dialog_parent_class)-> - constructor (type, n_construct_params, construct_params); - self = MATEWEATHER_DIALOG (object); - - mateweather_dialog_update (self); - - return object; -} - -GtkWidget* -mateweather_dialog_new (MateWeatherApplet *applet) -{ - return g_object_new(MATEWEATHER_TYPE_DIALOG, - "mateweather-applet", applet, - NULL); -} - -static void -mateweather_dialog_class_init (MateWeatherDialogClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->set_property = mateweather_dialog_set_property; - object_class->get_property = mateweather_dialog_get_property; - object_class->constructor = mateweather_dialog_constructor; - - /* This becomes an OBJECT property when MateWeatherApplet is redone */ - g_object_class_install_property (object_class, - PROP_MATEWEATHER_APPLET, - g_param_spec_pointer ("mateweather-applet", - "MateWeather Applet", - "The MateWeather Applet", - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - gtk_widget_class_set_template_from_resource (widget_class, - WEATHER_RESOURCE_PATH "mateweather-dialog.ui"); - - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, weather_notebook); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_location); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_update); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_cond); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sky); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_temp); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_dew); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_humidity); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_wind); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_pressure); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_vis); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_apparent); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sunrise); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_sunset); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, cond_image); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, forecast_text); - gtk_widget_class_bind_template_child (widget_class, MateWeatherDialog, radar_image); - - gtk_widget_class_bind_template_callback (widget_class, response_cb); - gtk_widget_class_bind_template_callback (widget_class, link_cb); -} |