libglade helpers.
[mediadatabase.git] / gtk / medias.c
blob02c643033d03d43b4be8d7a41fcc6e872e105027
1 /* -*- Mode: C ; c-basic-offset: 2 -*- */
2 /*****************************************************************************
4 * $Id: medias.c,v 1.4 2005/02/18 02:12:47 nedko Exp $
6 * DESCRIPTION:
7 *
9 * NOTES:
12 *****************************************************************************/
14 #include <time.h>
15 #include <stdlib.h>
16 #include <string.h>
17 #include <stdio.h>
18 #include <gtk/gtk.h>
20 #include "../result.h"
21 #include "../libdb/libdb.h"
22 #include "../libfrontend/db.h"
23 #include "common.h"
24 #include "helper.h"
25 #include "media.h"
26 #include "menu.h"
27 #include "path.h"
28 #include "glade.h"
30 enum
32 COL_MEDIAID = 0,
33 COL_MEDIAICON,
34 COL_MEDIANAME,
35 COL_MEDIAFILES,
36 COL_MEDIASIZE,
37 COL_MEDIADATE,
38 COL_MEDIALOCATION,
39 COL_MEDIACOMMENT,
40 NUM_COLS
43 void
44 media_callback(
45 void *pUserContext,
46 mediadb_uint nMediaID,
47 mediadb_mediatype nType,
48 const char *pszName,
49 const char *pszComment,
50 mediadb_uint nTimeAdded,
51 mediadb_uint nTotalFiles,
52 mediadb_uint nTotalSize,
53 mediadb_uint nLocationID,
54 const char *pszLocation
57 GtkTreeIter iter;
58 char strTime[26];
59 time_t time = nTimeAdded;
60 char strTotalSize[MAX_SIZE_DESCRIPTION];
61 struct tm tm;
62 GdkPixbuf * pIcon;
63 GError * error = NULL;
64 char * pszIcon;
65 gchar * pszIconFullname;
67 /* ctime_r(&time, strTime); */
68 /* strTime[strlen(strTime) - 1] = 0; */
70 localtime_r(&time, &tm);
71 sprintf(strTime,
72 "%u-%02u-%02u %02u:%02u:%02u",
73 1900+tm.tm_year,
74 1+tm.tm_mon,
75 tm.tm_mday,
76 tm.tm_hour,
77 tm.tm_min,
78 tm.tm_sec);
80 get_size_description(nTotalSize, strTotalSize);
82 pIcon = NULL;
84 if (nType == MEDIADB_MT_AUDIO)
86 pszIcon = "icon_acd.png";
88 else if (nType == MEDIADB_MT_DATA)
90 pszIcon = "icon_cd.png";
92 else
94 pszIcon = NULL;
97 if (pszIcon != NULL)
99 pszIconFullname = path_get_data_filename(pszIcon);
100 if (pszIconFullname != NULL)
102 pIcon = gdk_pixbuf_new_from_file(pszIconFullname, &error);
103 if (error)
105 g_warning("Could not load icon: %s\n", error->message);
106 g_error_free(error);
107 error = NULL;
110 g_free(pszIconFullname);
112 else
114 g_warning("Could not find icon %s\n", pszIcon);
118 gtk_list_store_prepend(
119 (GtkListStore *)pUserContext,
120 &iter);
121 gtk_list_store_set(
122 (GtkListStore *)pUserContext,
123 &iter,
124 COL_MEDIAID, (guint)nMediaID,
125 COL_MEDIAICON, pIcon,
126 COL_MEDIANAME, pszName,
127 COL_MEDIAFILES, (guint)nTotalFiles,
128 COL_MEDIASIZE, strTotalSize,
129 COL_MEDIADATE, strTime,
130 COL_MEDIALOCATION, pszLocation,
131 COL_MEDIACOMMENT, pszComment,
132 -1);
135 static GtkTreeModel *
136 create_and_fill_model(void)
138 mediadb_result r;
139 GtkListStore *pStore;
140 GtkWidget *pDialog;
142 pStore = gtk_list_store_new(
143 NUM_COLS,
144 G_TYPE_UINT, /* COL_MEDIAID */
145 GDK_TYPE_PIXBUF, /* COL_MEDIAICON */
146 G_TYPE_STRING, /* COL_MEDIANAME */
147 G_TYPE_UINT, /* COL_MEDIAFILES */
148 G_TYPE_STRING, /* COL_MEDIASIZE */
149 G_TYPE_STRING, /* COL_MEDIADATE */
150 G_TYPE_STRING, /* COL_MEDIALOCATION */
151 G_TYPE_STRING); /* COL_MEDIACOMMENT */
153 r = mediadb_media_get_all(
154 g_hDB,
155 media_callback,
156 pStore);
157 if (MEDIADB_IS_ERROR(r))
159 g_warning("%s\n", mediadb_get_error_message(g_hDB));
161 pDialog = gtk_message_dialog_new(
162 GTK_WINDOW(pMainWindow),
163 GTK_DIALOG_DESTROY_WITH_PARENT,
164 GTK_MESSAGE_ERROR,
165 GTK_BUTTONS_CLOSE,
166 "%s",
167 mediadb_get_error_message(g_hDB));
169 gtk_dialog_run(GTK_DIALOG(pDialog));
170 gtk_widget_destroy(pDialog);
173 return GTK_TREE_MODEL(pStore);
176 void
177 view_onRowActivated(
178 GtkTreeView *pTreeView,
179 GtkTreePath *pPath,
180 GtkTreeViewColumn *pColumn,
181 gpointer userdata)
183 GtkTreeModel *pModel;
184 GtkTreeIter iter;
185 unsigned int nMediaID;
187 pModel = gtk_tree_view_get_model(pTreeView);
189 if (gtk_tree_model_get_iter(pModel, &iter, pPath))
191 gtk_tree_model_get(pModel, &iter, COL_MEDIAID, &nMediaID, -1);
193 CreateMediaWindow(nMediaID);
197 static void
198 setup_view_and_model(GtkWidget *pTreeView)
200 GtkTreeViewColumn *col;
201 GtkCellRenderer *renderer;
202 GtkTreeModel *model;
203 GtkCellRenderer * pRendererPixbuf;
205 renderer = gtk_cell_renderer_text_new();
206 pRendererPixbuf = gtk_cell_renderer_pixbuf_new();
208 /* --- Column #1 --- */
210 col = gtk_tree_view_column_new_with_attributes(
211 "ID",
212 renderer,
213 "text", COL_MEDIAID,
214 NULL);
216 gtk_tree_view_append_column(
217 GTK_TREE_VIEW(pTreeView),
218 col);
220 /* --- Column #2 --- */
222 col = gtk_tree_view_column_new();
224 gtk_tree_view_column_set_title(col, "Name");
226 gtk_tree_view_column_pack_start(col, pRendererPixbuf, FALSE);
227 gtk_tree_view_column_set_attributes(col, pRendererPixbuf,
228 "pixbuf", COL_MEDIAICON,
229 NULL);
231 gtk_tree_view_column_pack_end(col, renderer, TRUE);
232 gtk_tree_view_column_set_attributes(col,
233 renderer,
234 "text", COL_MEDIANAME,
235 NULL);
237 gtk_tree_view_append_column(
238 GTK_TREE_VIEW(pTreeView),
239 col);
241 gtk_tree_view_column_set_resizable(col, TRUE);
242 // gtk_tree_view_column_set_max_width(col, 200);
243 // gtk_tree_view_column_set_min_width(col, 200);
245 /* --- Column #3 --- */
247 col = gtk_tree_view_column_new_with_attributes(
248 "Location",
249 renderer,
250 "text", COL_MEDIALOCATION,
251 NULL);
253 gtk_tree_view_append_column(
254 GTK_TREE_VIEW(pTreeView),
255 col);
257 /* --- Column #4 --- */
259 col = gtk_tree_view_column_new_with_attributes(
260 "Files Size",
261 renderer,
262 "text", COL_MEDIASIZE,
263 NULL);
265 gtk_tree_view_append_column(
266 GTK_TREE_VIEW(pTreeView),
267 col);
269 /* --- Column #5 --- */
271 col = gtk_tree_view_column_new_with_attributes(
272 "Files Count",
273 renderer,
274 "text", COL_MEDIAFILES,
275 NULL);
277 gtk_tree_view_append_column(
278 GTK_TREE_VIEW(pTreeView),
279 col);
281 /* --- Column #6 --- */
283 col = gtk_tree_view_column_new_with_attributes(
284 "Date added",
285 renderer,
286 "text", COL_MEDIADATE,
287 NULL);
289 gtk_tree_view_append_column(
290 GTK_TREE_VIEW(pTreeView),
291 col);
293 /* --- Column #7 --- */
295 col = gtk_tree_view_column_new_with_attributes(
296 "Comment",
297 renderer,
298 "text", COL_MEDIACOMMENT,
299 NULL);
301 gtk_tree_view_append_column(
302 GTK_TREE_VIEW(pTreeView),
303 col);
305 model = create_and_fill_model();
307 gtk_tree_view_set_model(GTK_TREE_VIEW(pTreeView), model);
309 g_object_unref(model); /* destroy model automatically with view */
311 g_signal_connect(
312 pTreeView,
313 "row-activated",
314 (GCallback)view_onRowActivated,
315 NULL);
318 GtkWidget *
319 CreateMediasWindow()
321 GtkWidget *pMediasWindow;
323 pMediasWindow = construct_glade_widget("medias_window");
325 setup_view_and_model(get_glade_widget("medias_treeview"));
327 gtk_widget_show_all(pMediasWindow);
329 return pMediasWindow;
332 /*****************************************************************************
334 * Modifications log:
336 * !!! WARNING !!! Following lines are automatically updated by the CVS system.
338 * $Log: medias.c,v $
339 * Revision 1.4 2005/02/18 02:12:47 nedko
340 * Use path module to access project specific data files.
341 * Use libglade.
343 * Revision 1.3 2004/08/31 22:40:15 nedko
344 * Partitally implemented search feature.
346 * Revision 1.2 2004/05/22 00:36:24 nedko
347 * set WM_WINDOWS_ROLE
349 * Revision 1.1 2004/05/21 23:43:38 nedko
350 * Implement media window.
352 *****************************************************************************/