Edit data/Makefile.am, Makefile.am and configure.ac to pass make dist.
[mmediamanager.git] / libmmanager-gtk / mm-gtk-application-view.c
blobbb1075166d88997369856ad9d0931477109f046e
1 /* MManager - a Desktop wide manager for multimedia applications.
3 * Copyright (C) 2008 Cosimo Cecchi <cosimoc@gnome.org>
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
21 #include "mm-gtk-application-view.h"
22 #include "mm-gtk-application-store.h"
24 #include <libmmanager/mm-application.h>
25 #include <libmmanager/mm-category.h>
27 #include <gtk/gtk.h>
29 #define MM_GTK_APPLICATION_VIEW_GET_PRIVATE(o) \
30 (G_TYPE_INSTANCE_GET_PRIVATE ((o), MM_GTK_TYPE_APPLICATION_VIEW, MMGtkApplicationViewDetails))
32 struct _MMGtkApplicationViewDetails {
33 MMGtkApplicationStore *store;
36 enum {
37 APPLICATION_SELECTED,
38 CATEGORY_SELECTED,
39 MMTYPE_SELECTED,
40 LAST_SIGNAL
43 static guint view_signals[LAST_SIGNAL] = { 0 };
45 G_DEFINE_TYPE (MMGtkApplicationView, mm_gtk_application_view, GTK_TYPE_TREE_VIEW);
47 static void
48 view_selection_changed_cb (GtkTreeSelection *selection,
49 MMGtkApplicationView *view)
51 GtkTreeIter iter;
52 GtkTreeModel *model;
53 GValue val = { 0, };
54 int depth;
56 gtk_tree_selection_get_selected (selection, &model, &iter);
57 depth = gtk_tree_store_iter_depth (GTK_TREE_STORE (model),
58 &iter);
59 if (depth == 0) {
60 MMApplicationType type;
62 /* we're selecting an application type */
63 gtk_tree_model_get_value (model, &iter,
64 MM_GTK_APP_STORE_TYPE_COLUMN,
65 &val);
66 type = g_value_get_enum (&val);
68 g_signal_emit (view, view_signals[MMTYPE_SELECTED],
69 0, type);
70 } else if (depth == 1) {
71 MMApplication *app;
73 /* we're selecting an application */
74 gtk_tree_model_get_value (model, &iter,
75 MM_GTK_APP_STORE_APP_COLUMN,
76 &val);
77 app = g_value_dup_object (&val);
78 g_signal_emit (view, view_signals[APPLICATION_SELECTED],
79 0, app);
80 } else if (depth == 2) {
81 MMCategory *cat;
83 /* we're selecting a category */
84 gtk_tree_model_get_value (model, &iter,
85 MM_GTK_APP_STORE_CAT_COLUMN,
86 &val);
87 cat = g_value_dup_object (&val);
88 g_signal_emit (view, view_signals[CATEGORY_SELECTED],
89 0, cat);
92 g_value_unset (&val);
95 static GObject *
96 impl_constructor (GType type, guint n_construct_properties,
97 GObjectConstructParam *construct_params)
99 GObject *object;
100 MMGtkApplicationView *view;
101 MMGtkApplicationViewDetails *details;
102 GtkCellRenderer *renderer;
103 GtkTreeViewColumn *col;
104 GtkTreeSelection *selection;
106 object = G_OBJECT_CLASS (mm_gtk_application_view_parent_class)->constructor (type, n_construct_properties,
107 construct_params);
108 view = MM_GTK_APPLICATION_VIEW (object);
109 details = MM_GTK_APPLICATION_VIEW_GET_PRIVATE (view);
111 details->store = mm_gtk_application_store_new ();
112 gtk_tree_view_set_model (GTK_TREE_VIEW (view), GTK_TREE_MODEL (details->store));
114 renderer = gtk_cell_renderer_pixbuf_new ();
115 col = gtk_tree_view_column_new_with_attributes ("gicon",
116 renderer,
117 "gicon", MM_GTK_APP_STORE_GICON_COLUMN,
118 NULL);
119 gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
121 renderer = gtk_cell_renderer_text_new ();
122 col = gtk_tree_view_column_new_with_attributes ("app-name",
123 renderer,
124 "text", MM_GTK_APP_STORE_NAME_COLUMN,
125 NULL);
126 gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
128 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
129 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
130 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
131 g_signal_connect_object (selection, "changed",
132 G_CALLBACK (view_selection_changed_cb), view, 0);
134 return object;
137 static void
138 mm_gtk_application_view_class_init (MMGtkApplicationViewClass *klass)
140 GObjectClass *oclass = G_OBJECT_CLASS (klass);
141 oclass->constructor = impl_constructor;
143 view_signals[APPLICATION_SELECTED] =
144 g_signal_new ("application_selected",
145 G_OBJECT_CLASS_TYPE (oclass),
146 G_SIGNAL_RUN_LAST,
147 G_STRUCT_OFFSET (MMGtkApplicationViewClass, application_selected),
148 NULL, NULL,
149 g_cclosure_marshal_VOID__POINTER,
150 G_TYPE_NONE,
152 G_TYPE_POINTER);
153 view_signals[CATEGORY_SELECTED] =
154 g_signal_new ("category_selected",
155 G_OBJECT_CLASS_TYPE (oclass),
156 G_SIGNAL_RUN_LAST,
157 G_STRUCT_OFFSET (MMGtkApplicationViewClass, category_selected),
158 NULL, NULL,
159 g_cclosure_marshal_VOID__POINTER,
160 G_TYPE_NONE,
162 G_TYPE_POINTER);
163 view_signals[MMTYPE_SELECTED] =
164 g_signal_new ("mmtype_selected",
165 G_OBJECT_CLASS_TYPE (oclass),
166 G_SIGNAL_RUN_LAST,
167 G_STRUCT_OFFSET (MMGtkApplicationViewClass, mmtype_selected),
168 NULL, NULL,
169 g_cclosure_marshal_VOID__POINTER,
170 G_TYPE_NONE,
172 G_TYPE_POINTER);
174 g_type_class_add_private (klass, sizeof (MMGtkApplicationViewDetails));
177 static void
178 mm_gtk_application_view_init (MMGtkApplicationView *self)
182 MMGtkApplicationView*
183 mm_gtk_application_view_new (void)
185 return g_object_new (MM_GTK_TYPE_APPLICATION_VIEW, NULL);