Blame src/prefs/dzl-preferences-page.c

rpm-build f53ec4
/* dzl-preferences-page.c
rpm-build f53ec4
 *
rpm-build f53ec4
 * Copyright (C) 2015-2017 Christian Hergert <chergert@redhat.com>
rpm-build f53ec4
 *
rpm-build f53ec4
 * This program is free software: you can redistribute it and/or modify
rpm-build f53ec4
 * it under the terms of the GNU General Public License as published by
rpm-build f53ec4
 * the Free Software Foundation, either version 3 of the License, or
rpm-build f53ec4
 * (at your option) any later version.
rpm-build f53ec4
 *
rpm-build f53ec4
 * This program is distributed in the hope that it will be useful,
rpm-build f53ec4
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
rpm-build f53ec4
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
rpm-build f53ec4
 * GNU General Public License for more details.
rpm-build f53ec4
 *
rpm-build f53ec4
 * You should have received a copy of the GNU General Public License
rpm-build f53ec4
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
rpm-build f53ec4
 */
rpm-build f53ec4
rpm-build f53ec4
#include "config.h"
rpm-build f53ec4
rpm-build f53ec4
#include <glib/gi18n.h>
rpm-build f53ec4
rpm-build f53ec4
#include "prefs/dzl-preferences-group.h"
rpm-build f53ec4
#include "prefs/dzl-preferences-group-private.h"
rpm-build f53ec4
#include "prefs/dzl-preferences-page.h"
rpm-build f53ec4
#include "prefs/dzl-preferences-page-private.h"
rpm-build f53ec4
rpm-build f53ec4
enum {
rpm-build f53ec4
  PROP_0,
rpm-build f53ec4
  PROP_PRIORITY,
rpm-build f53ec4
  LAST_PROP
rpm-build f53ec4
};
rpm-build f53ec4
rpm-build f53ec4
G_DEFINE_TYPE (DzlPreferencesPage, dzl_preferences_page, GTK_TYPE_BIN)
rpm-build f53ec4
rpm-build f53ec4
static GParamSpec *properties [LAST_PROP];
rpm-build f53ec4
rpm-build f53ec4
static void
rpm-build f53ec4
dzl_preferences_page_finalize (GObject *object)
rpm-build f53ec4
{
rpm-build f53ec4
  DzlPreferencesPage *self = (DzlPreferencesPage *)object;
rpm-build f53ec4
rpm-build f53ec4
  g_clear_pointer (&self->groups_by_name, g_hash_table_unref);
rpm-build f53ec4
rpm-build f53ec4
  G_OBJECT_CLASS (dzl_preferences_page_parent_class)->finalize (object);
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
static void
rpm-build f53ec4
dzl_preferences_page_get_property (GObject    *object,
rpm-build f53ec4
                                   guint       prop_id,
rpm-build f53ec4
                                   GValue     *value,
rpm-build f53ec4
                                   GParamSpec *pspec)
rpm-build f53ec4
{
rpm-build f53ec4
  DzlPreferencesPage *self = DZL_PREFERENCES_PAGE (object);
rpm-build f53ec4
rpm-build f53ec4
  switch (prop_id)
rpm-build f53ec4
    {
rpm-build f53ec4
    case PROP_PRIORITY:
rpm-build f53ec4
      g_value_set_int (value, self->priority);
rpm-build f53ec4
      break;
rpm-build f53ec4
rpm-build f53ec4
    default:
rpm-build f53ec4
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
rpm-build f53ec4
    }
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
static void
rpm-build f53ec4
dzl_preferences_page_set_property (GObject      *object,
rpm-build f53ec4
                                   guint         prop_id,
rpm-build f53ec4
                                   const GValue *value,
rpm-build f53ec4
                                   GParamSpec   *pspec)
rpm-build f53ec4
{
rpm-build f53ec4
  DzlPreferencesPage *self = DZL_PREFERENCES_PAGE (object);
rpm-build f53ec4
rpm-build f53ec4
  switch (prop_id)
rpm-build f53ec4
    {
rpm-build f53ec4
    case PROP_PRIORITY:
rpm-build f53ec4
      self->priority = g_value_get_int (value);
rpm-build f53ec4
      break;
rpm-build f53ec4
rpm-build f53ec4
    default:
rpm-build f53ec4
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
rpm-build f53ec4
    }
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
static void
rpm-build f53ec4
dzl_preferences_page_class_init (DzlPreferencesPageClass *klass)
rpm-build f53ec4
{
rpm-build f53ec4
  GObjectClass *object_class = G_OBJECT_CLASS (klass);
rpm-build f53ec4
  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
rpm-build f53ec4
rpm-build f53ec4
  object_class->finalize = dzl_preferences_page_finalize;
rpm-build f53ec4
  object_class->get_property = dzl_preferences_page_get_property;
rpm-build f53ec4
  object_class->set_property = dzl_preferences_page_set_property;
rpm-build f53ec4
rpm-build f53ec4
  properties [PROP_PRIORITY] =
rpm-build f53ec4
    g_param_spec_int ("priority",
rpm-build f53ec4
                      "Priority",
rpm-build f53ec4
                      "Priority",
rpm-build f53ec4
                      G_MININT,
rpm-build f53ec4
                      G_MAXINT,
rpm-build f53ec4
                      0,
rpm-build f53ec4
                      (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
rpm-build f53ec4
rpm-build f53ec4
  g_object_class_install_properties (object_class, LAST_PROP, properties);
rpm-build f53ec4
rpm-build f53ec4
  gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/dazzle/ui/dzl-preferences-page.ui");
rpm-build f53ec4
  gtk_widget_class_bind_template_child (widget_class, DzlPreferencesPage, box);
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
static void
rpm-build f53ec4
dzl_preferences_page_init (DzlPreferencesPage *self)
rpm-build f53ec4
{
rpm-build f53ec4
  self->groups_by_name = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
rpm-build f53ec4
rpm-build f53ec4
  gtk_widget_init_template (GTK_WIDGET (self));
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
void
rpm-build f53ec4
dzl_preferences_page_add_group (DzlPreferencesPage  *self,
rpm-build f53ec4
                                DzlPreferencesGroup *group)
rpm-build f53ec4
{
rpm-build f53ec4
  gchar *name = NULL;
rpm-build f53ec4
rpm-build f53ec4
  g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
rpm-build f53ec4
  g_return_if_fail (DZL_IS_PREFERENCES_GROUP (group));
rpm-build f53ec4
rpm-build f53ec4
  g_object_get (group, "name", &name, NULL);
rpm-build f53ec4
rpm-build f53ec4
  if (g_hash_table_contains (self->groups_by_name, name))
rpm-build f53ec4
    {
rpm-build f53ec4
      g_free (name);
rpm-build f53ec4
      return;
rpm-build f53ec4
    }
rpm-build f53ec4
rpm-build f53ec4
  g_hash_table_insert (self->groups_by_name, name, group);
rpm-build f53ec4
rpm-build f53ec4
  gtk_container_add_with_properties (GTK_CONTAINER (self->box), GTK_WIDGET (group),
rpm-build f53ec4
                                     "priority", dzl_preferences_group_get_priority (group),
rpm-build f53ec4
                                     NULL);
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
/**
rpm-build f53ec4
 * dzl_preferences_page_get_group:
rpm-build f53ec4
 *
rpm-build f53ec4
 * Returns: (transfer none) (nullable): An #DzlPreferencesGroup or %NULL.
rpm-build f53ec4
 */
rpm-build f53ec4
DzlPreferencesGroup *
rpm-build f53ec4
dzl_preferences_page_get_group (DzlPreferencesPage *self,
rpm-build f53ec4
                                const gchar        *name)
rpm-build f53ec4
{
rpm-build f53ec4
  g_return_val_if_fail (DZL_IS_PREFERENCES_PAGE (self), NULL);
rpm-build f53ec4
  g_return_val_if_fail (name != NULL, NULL);
rpm-build f53ec4
rpm-build f53ec4
  return g_hash_table_lookup (self->groups_by_name, name);
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
void
rpm-build f53ec4
dzl_preferences_page_set_map (DzlPreferencesPage *self,
rpm-build f53ec4
                              GHashTable         *map)
rpm-build f53ec4
{
rpm-build f53ec4
  DzlPreferencesGroup *group;
rpm-build f53ec4
  GHashTableIter iter;
rpm-build f53ec4
rpm-build f53ec4
  g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
rpm-build f53ec4
rpm-build f53ec4
  g_hash_table_iter_init (&iter, self->groups_by_name);
rpm-build f53ec4
rpm-build f53ec4
  while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&group))
rpm-build f53ec4
    dzl_preferences_group_set_map (group, map);
rpm-build f53ec4
}
rpm-build f53ec4
rpm-build f53ec4
void
rpm-build f53ec4
dzl_preferences_page_refilter (DzlPreferencesPage *self,
rpm-build f53ec4
                               DzlPatternSpec     *spec)
rpm-build f53ec4
{
rpm-build f53ec4
  DzlPreferencesGroup *group;
rpm-build f53ec4
  GHashTableIter iter;
rpm-build f53ec4
  guint count = 0;
rpm-build f53ec4
rpm-build f53ec4
  g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
rpm-build f53ec4
rpm-build f53ec4
  g_hash_table_iter_init (&iter, self->groups_by_name);
rpm-build f53ec4
  while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&group))
rpm-build f53ec4
    count += dzl_preferences_group_refilter (group, spec);
rpm-build f53ec4
  gtk_widget_set_visible (GTK_WIDGET (self), count > 0);
rpm-build f53ec4
}