1 /*
2 * Copyright (C) 2009 - 2011 Vivien Malerba <malerba@gnome-db.org>
3 * Copyright (C) 2010 David King <davidk@openismus.com>
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., 51 Franklin St, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19 */
20
21 #include <string.h>
22 #include <libgda/gda-config.h>
23 #include <libgda-ui/gdaui-provider-selector.h>
24 #include <libgda-ui/gdaui-combo.h>
25
26 struct _GdauiProviderSelectorPrivate {
27 gint dummy;
28 };
29
30 static void gdaui_provider_selector_class_init (GdauiProviderSelectorClass *klass);
31 static void gdaui_provider_selector_init (GdauiProviderSelector *selector,
32 GdauiProviderSelectorClass *klass);
33 static void gdaui_provider_selector_finalize (GObject *object);
34 static void gdaui_provider_selector_show (GtkWidget *widget);
35
36 static GObjectClass *parent_class = NULL;
37
38 /* column to display */
39 static gint cols[] = {0};
40
41 /*
42 * Private functions
43 */
44
45 static void
show_providers(GdauiProviderSelector * selector)46 show_providers (GdauiProviderSelector *selector)
47 {
48 GdaDataModel *model;
49
50 model = gda_config_list_providers ();
51 gdaui_combo_set_model (GDAUI_COMBO (selector), model, 1, cols);
52 g_object_unref (model);
53 }
54
55 static void
gdaui_provider_selector_show(GtkWidget * widget)56 gdaui_provider_selector_show (GtkWidget *widget)
57 {
58 GSList *list;
59 GValue *tmpval;
60 GdauiProviderSelector *selector;
61
62 selector = (GdauiProviderSelector *) widget;
63 GTK_WIDGET_CLASS (parent_class)->show (widget);
64 g_value_set_string (tmpval = gda_value_new (G_TYPE_STRING), "SQLite");
65 list = g_slist_append (NULL, tmpval);
66 _gdaui_combo_set_selected_ext (GDAUI_COMBO (selector), list, cols);
67 gda_value_free ((GValue *)(list->data));
68 g_slist_free (list);
69 }
70
71 /*
72 * GdauiProviderSelector class implementation
73 */
74
75 static void
gdaui_provider_selector_class_init(GdauiProviderSelectorClass * klass)76 gdaui_provider_selector_class_init (GdauiProviderSelectorClass *klass)
77 {
78 GObjectClass *object_class = G_OBJECT_CLASS (klass);
79
80 parent_class = g_type_class_peek_parent (klass);
81
82 object_class->finalize = gdaui_provider_selector_finalize;
83 GTK_WIDGET_CLASS (klass)->show = gdaui_provider_selector_show;
84 }
85
86 static void
gdaui_provider_selector_init(GdauiProviderSelector * selector,G_GNUC_UNUSED GdauiProviderSelectorClass * klass)87 gdaui_provider_selector_init (GdauiProviderSelector *selector,
88 G_GNUC_UNUSED GdauiProviderSelectorClass *klass)
89 {
90 g_return_if_fail (GDAUI_IS_PROVIDER_SELECTOR (selector));
91
92 selector->priv = g_new0 (GdauiProviderSelectorPrivate, 1);
93 show_providers (selector);
94 }
95
96 static void
gdaui_provider_selector_finalize(GObject * object)97 gdaui_provider_selector_finalize (GObject *object)
98 {
99 GdauiProviderSelector *selector = (GdauiProviderSelector *) object;
100
101 g_return_if_fail (GDAUI_IS_PROVIDER_SELECTOR (selector));
102
103 g_free (selector->priv);
104 selector->priv = NULL;
105
106 parent_class->finalize (object);
107 }
108
109 GType
gdaui_provider_selector_get_type(void)110 gdaui_provider_selector_get_type (void)
111 {
112 static GType type = 0;
113
114 if (G_UNLIKELY (type == 0)) {
115 static const GTypeInfo info = {
116 sizeof (GdauiProviderSelectorClass),
117 (GBaseInitFunc) NULL,
118 (GBaseFinalizeFunc) NULL,
119 (GClassInitFunc) gdaui_provider_selector_class_init,
120 NULL,
121 NULL,
122 sizeof (GdauiProviderSelector),
123 0,
124 (GInstanceInitFunc) gdaui_provider_selector_init,
125 0
126 };
127 type = g_type_register_static (GDAUI_TYPE_COMBO, "GdauiProviderSelector", &info, 0);
128 }
129 return type;
130 }
131
132 /**
133 * gdaui_provider_selector_new:
134 *
135 * Create a new #GdauiProviderSelector widget.
136 *
137 * Returns: (transfer full): the newly created widget.
138 */
139 GtkWidget *
gdaui_provider_selector_new(void)140 gdaui_provider_selector_new (void)
141 {
142 GdauiProviderSelector *selector;
143
144 selector = g_object_new (GDAUI_TYPE_PROVIDER_SELECTOR, NULL);
145 return GTK_WIDGET (selector);
146 }
147
148 /**
149 * gdaui_provider_selector_get_provider:
150 * @selector: a #GdauiProviderSelector widget
151 *
152 * Get the selected provider.
153 *
154 * Returns: (transfer none): the selected provider, or %NULL if no provider is selected
155 *
156 * Since: 4.2
157 */
158 const gchar *
gdaui_provider_selector_get_provider(GdauiProviderSelector * selector)159 gdaui_provider_selector_get_provider (GdauiProviderSelector *selector)
160 {
161 GSList *list;
162 const gchar *str;
163
164 g_return_val_if_fail (GDAUI_IS_PROVIDER_SELECTOR (selector), NULL);
165 list = _gdaui_combo_get_selected (GDAUI_COMBO (selector));
166 if (list && list->data) {
167 str = g_value_get_string ((GValue *)(list->data));
168 g_slist_free (list);
169 return str;
170 }
171 else
172 return NULL;
173 }
174
175 /**
176 * gdaui_provider_selector_set_provider:
177 * @selector: a #GdauiProviderSelector widget
178 * @provider: (allow-none): the provider to be selected, or %NULL for the default (SQLite)
179 *
180 * Forces @selector to be set on @provider
181 *
182 * Returns: %TRUE if @provider has been selected
183 *
184 * Since: 4.2
185 */
186 gboolean
gdaui_provider_selector_set_provider(GdauiProviderSelector * selector,const gchar * provider)187 gdaui_provider_selector_set_provider (GdauiProviderSelector *selector, const gchar *provider)
188 {
189 GSList *list;
190 gboolean retval;
191 GValue *tmpval;
192
193 g_return_val_if_fail (GDAUI_IS_PROVIDER_SELECTOR (selector), FALSE);
194
195 if (provider && *provider)
196 g_value_set_string (tmpval = gda_value_new (G_TYPE_STRING), provider);
197 else
198 g_value_set_string (tmpval = gda_value_new (G_TYPE_STRING), "SQLite");
199
200 list = g_slist_append (NULL, tmpval);
201 retval = _gdaui_combo_set_selected_ext (GDAUI_COMBO (selector), list, cols);
202 gda_value_free ((GValue *)(list->data));
203 g_slist_free (list);
204
205 return retval;
206 }
207
208 /**
209 * gdaui_provider_selector_get_provider_obj:
210 * @selector: a #GdauiProviderSelector widget
211 *
212 * Get the selected provider as a #GdaServerProvider object
213 *
214 * Returns: (transfer none): a #GdaServerProvider or %NULL if an error occurred
215 *
216 * Since: 4.2
217 */
218 GdaServerProvider *
gdaui_provider_selector_get_provider_obj(GdauiProviderSelector * selector)219 gdaui_provider_selector_get_provider_obj (GdauiProviderSelector *selector)
220 {
221 const gchar *pname;
222
223 g_return_val_if_fail (GDAUI_IS_PROVIDER_SELECTOR (selector), NULL);
224
225 pname = gdaui_provider_selector_get_provider (selector);
226 if (pname)
227 return gda_config_get_provider (pname, NULL);
228 else
229 return NULL;
230 }
231