summaryrefslogtreecommitdiffstats
path: root/src/gs-category-tile.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gs-category-tile.c')
-rw-r--r--src/gs-category-tile.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/gs-category-tile.c b/src/gs-category-tile.c
new file mode 100644
index 0000000..b434478
--- /dev/null
+++ b/src/gs-category-tile.c
@@ -0,0 +1,93 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ * vi:set noexpandtab tabstop=8 shiftwidth=8:
+ *
+ * Copyright (C) 2013 Matthias Clasen <mclasen@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include "config.h"
+
+#include "gs-category-tile.h"
+#include "gs-common.h"
+
+struct _GsCategoryTile
+{
+ GtkButton parent_instance;
+
+ GsCategory *cat;
+ GtkWidget *label;
+ GtkWidget *image;
+};
+
+G_DEFINE_TYPE (GsCategoryTile, gs_category_tile, GTK_TYPE_BUTTON)
+
+GsCategory *
+gs_category_tile_get_category (GsCategoryTile *tile)
+{
+ g_return_val_if_fail (GS_IS_CATEGORY_TILE (tile), NULL);
+
+ return tile->cat;
+}
+
+static void
+gs_category_tile_refresh (GsCategoryTile *tile)
+{
+ /* set labels */
+ gtk_label_set_label (GTK_LABEL (tile->label),
+ gs_category_get_name (tile->cat));
+ gtk_image_set_from_icon_name (GTK_IMAGE (tile->image),
+ gs_category_get_icon (tile->cat),
+ GTK_ICON_SIZE_MENU);
+}
+
+void
+gs_category_tile_set_category (GsCategoryTile *tile, GsCategory *cat)
+{
+ g_return_if_fail (GS_IS_CATEGORY_TILE (tile));
+ g_return_if_fail (GS_IS_CATEGORY (cat));
+
+ g_set_object (&tile->cat, cat);
+ gs_category_tile_refresh (tile);
+}
+
+static void
+gs_category_tile_destroy (GtkWidget *widget)
+{
+ GsCategoryTile *tile = GS_CATEGORY_TILE (widget);
+
+ g_clear_object (&tile->cat);
+
+ GTK_WIDGET_CLASS (gs_category_tile_parent_class)->destroy (widget);
+}
+
+static void
+gs_category_tile_init (GsCategoryTile *tile)
+{
+ gtk_widget_set_has_window (GTK_WIDGET (tile), FALSE);
+ gtk_widget_init_template (GTK_WIDGET (tile));
+}
+
+static void
+gs_category_tile_class_init (GsCategoryTileClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->destroy = gs_category_tile_destroy;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/Software/gs-category-tile.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryTile, label);
+ gtk_widget_class_bind_template_child (widget_class, GsCategoryTile, image);
+}
+
+GtkWidget *
+gs_category_tile_new (GsCategory *cat)
+{
+ GsCategoryTile *tile;
+
+ tile = g_object_new (GS_TYPE_CATEGORY_TILE, NULL);
+ gs_category_tile_set_category (tile, cat);
+
+ return GTK_WIDGET (tile);
+}