]> Pileus Git - ~andy/gtk/blob - gtk/gtkrecentchooserwidget.c
More of the same
[~andy/gtk] / gtk / gtkrecentchooserwidget.c
1 /* GTK - The GIMP Toolkit
2  * gtkrecentchooserwidget.c: embeddable recently used resources chooser widget
3  * Copyright (C) 2006 Emmanuele Bassi
4  * 
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.
9  *
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.
14  *
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.
19  */
20
21 #include <config.h>
22
23 #include "gtkrecentchooserwidget.h"
24 #include "gtkrecentchooserdefault.h"
25 #include "gtkrecentchooserutils.h"
26 #include "gtktypebuiltins.h"
27 #include "gtkalias.h"
28
29 struct _GtkRecentChooserWidgetPrivate
30 {
31   GtkRecentManager *manager;
32   
33   GtkWidget *chooser;
34 };
35
36 #define GTK_RECENT_CHOOSER_WIDGET_GET_PRIVATE(obj)      (GTK_RECENT_CHOOSER_WIDGET (obj)->priv)
37
38 static GObject *gtk_recent_chooser_widget_constructor  (GType                  type,
39                                                         guint                  n_params,
40                                                         GObjectConstructParam *params);
41 static void     gtk_recent_chooser_widget_set_property (GObject               *object,
42                                                         guint                  prop_id,
43                                                         const GValue          *value,
44                                                         GParamSpec            *pspec);
45 static void     gtk_recent_chooser_widget_get_property (GObject               *object,
46                                                         guint                  prop_id,
47                                                         GValue                *value,
48                                                         GParamSpec            *pspec);
49 static void     gtk_recent_chooser_widget_finalize     (GObject               *object);
50
51
52 G_DEFINE_TYPE_WITH_CODE (GtkRecentChooserWidget,
53                          gtk_recent_chooser_widget,
54                          GTK_TYPE_VBOX,
55                          G_IMPLEMENT_INTERFACE (GTK_TYPE_RECENT_CHOOSER,
56                                                 _gtk_recent_chooser_delegate_iface_init))
57
58 static void
59 gtk_recent_chooser_widget_class_init (GtkRecentChooserWidgetClass *klass)
60 {
61   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
62
63   gobject_class->constructor = gtk_recent_chooser_widget_constructor;
64   gobject_class->set_property = gtk_recent_chooser_widget_set_property;
65   gobject_class->get_property = gtk_recent_chooser_widget_get_property;
66   gobject_class->finalize = gtk_recent_chooser_widget_finalize;
67
68   _gtk_recent_chooser_install_properties (gobject_class);
69
70   g_type_class_add_private (klass, sizeof (GtkRecentChooserWidgetPrivate));
71 }
72
73
74 static void
75 gtk_recent_chooser_widget_init (GtkRecentChooserWidget *widget)
76 {
77   widget->priv = G_TYPE_INSTANCE_GET_PRIVATE (widget, GTK_TYPE_RECENT_CHOOSER_WIDGET,
78                                               GtkRecentChooserWidgetPrivate);
79 }
80
81 static GObject *
82 gtk_recent_chooser_widget_constructor (GType                  type,
83                                        guint                  n_params,
84                                        GObjectConstructParam *params)
85 {
86   GObject *object;
87   GtkRecentChooserWidgetPrivate *priv;
88
89   object = G_OBJECT_CLASS (gtk_recent_chooser_widget_parent_class)->constructor (type,
90                                                                                  n_params,
91                                                                                  params);
92
93   priv = GTK_RECENT_CHOOSER_WIDGET_GET_PRIVATE (object);
94   priv->chooser = _gtk_recent_chooser_default_new (priv->manager);
95   
96   
97   gtk_container_add (GTK_CONTAINER (object), priv->chooser);
98   gtk_widget_show (priv->chooser);
99   _gtk_recent_chooser_set_delegate (GTK_RECENT_CHOOSER (object),
100                                     GTK_RECENT_CHOOSER (priv->chooser));
101
102   return object;
103 }
104
105 static void
106 gtk_recent_chooser_widget_set_property (GObject      *object,
107                                         guint         prop_id,
108                                         const GValue *value,
109                                         GParamSpec   *pspec)
110 {
111   GtkRecentChooserWidgetPrivate *priv;
112
113   priv = GTK_RECENT_CHOOSER_WIDGET_GET_PRIVATE (object);
114   
115   switch (prop_id)
116     {
117     case GTK_RECENT_CHOOSER_PROP_RECENT_MANAGER:
118       priv->manager = g_value_get_object (value);
119       break;
120     default:
121       g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value);
122       break;
123     }
124 }
125
126 static void
127 gtk_recent_chooser_widget_get_property (GObject    *object,
128                                         guint       prop_id,
129                                         GValue     *value,
130                                         GParamSpec *pspec)
131 {
132   GtkRecentChooserWidgetPrivate *priv;
133
134   priv = GTK_RECENT_CHOOSER_WIDGET_GET_PRIVATE (object);
135
136   g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value);
137 }
138
139 static void
140 gtk_recent_chooser_widget_finalize (GObject *object)
141 {
142   GtkRecentChooserWidgetPrivate *priv;
143   
144   priv = GTK_RECENT_CHOOSER_WIDGET_GET_PRIVATE (object);
145   priv->manager = NULL;
146   
147   G_OBJECT_CLASS (gtk_recent_chooser_widget_parent_class)->finalize (object);
148 }
149
150 /*
151  * Public API
152  */
153
154 /**
155  * gtk_recent_chooser_widget_new:
156  * 
157  * Creates a new #GtkRecentChooserWidget object.  This is an embeddable widget
158  * used to access the recently used resources list.
159  *
160  * Return value: a new #GtkRecentChooserWidget
161  *
162  * Since: 2.10
163  */
164 GtkWidget *
165 gtk_recent_chooser_widget_new (void)
166 {
167   return g_object_new (GTK_TYPE_RECENT_CHOOSER_WIDGET, NULL);
168 }
169
170 /**
171  * gtk_recent_chooser_widget_new_for_manager:
172  * @manager: a #GtkRecentManager
173  *
174  * Creates a new #GtkRecentChooserWidget with a specified recent manager.
175  *
176  * This is useful if you have implemented your own recent manager, or if you
177  * have a customized instance of a #GtkRecentManager object.
178  *
179  * Return value: a new #GtkRecentChooserWidget
180  *
181  * Since: 2.10
182  */
183 GtkWidget *
184 gtk_recent_chooser_widget_new_for_manager (GtkRecentManager *manager)
185 {
186   g_return_val_if_fail (GTK_IS_RECENT_MANAGER (manager), NULL);
187   
188   return g_object_new (GTK_TYPE_RECENT_CHOOSER_WIDGET,
189                        "recent-manager", manager,
190                        NULL);
191 }
192
193 #define __GTK_RECENT_CHOOSER_WIDGET_C__
194 #include "gtkaliasdef.c"