3 * Copyright (C) 2001-2009 Jim Evins <evins@snaught.com>.
5 * This file is part of gLabels.
7 * gLabels is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * gLabels is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with gLabels. If not, see <http://www.gnu.org/licenses/>.
23 #include "wdgt-media-select.h"
25 #include <glib/gi18n.h>
26 #include <gtk/gtkbuilder.h>
27 #include <gtk/gtknotebook.h>
28 #include <gtk/gtkcombobox.h>
29 #include <gtk/gtktreeview.h>
30 #include <gtk/gtktreeselection.h>
31 #include <gtk/gtkliststore.h>
32 #include <gtk/gtkcellrenderertext.h>
33 #include <gtk/gtkcellrendererpixbuf.h>
34 #include <gtk/gtkstock.h>
37 #include "mini-preview-pixbuf-cache.h"
42 #include <libglabels/db.h>
46 /*===========================================*/
48 /*===========================================*/
54 PREVIEW_COLUMN_STOCK_SIZE,
59 struct _glWdgtMediaSelectPrivate {
64 guint current_page_num;
67 GtkWidget *recent_tab_vbox;
68 GtkWidget *recent_treeview;
69 GtkListStore *recent_store;
71 gint search_all_page_num;
72 GtkWidget *search_all_tab_vbox;
73 GtkWidget *brand_combo;
74 GtkWidget *page_size_combo;
75 GtkWidget *category_combo;
76 GtkWidget *search_all_treeview;
77 GtkListStore *search_all_store;
79 /* Prevent recursion */
80 gboolean stop_signals;
88 typedef void (*glWdgtMediaSelectSignal) (GObject * object, gpointer data);
91 /*===========================================*/
93 /*===========================================*/
95 static gint wdgt_media_select_signals[LAST_SIGNAL] = { 0 };
98 /*===========================================*/
99 /* Local function prototypes */
100 /*===========================================*/
102 static void gl_wdgt_media_select_finalize (GObject *object);
104 static void gl_wdgt_media_select_construct (glWdgtMediaSelect *media_select);
106 static void filter_changed_cb (GtkComboBox *combo,
108 static void selection_changed_cb (GtkTreeSelection *selection,
110 static void page_changed_cb (GtkNotebook *notebook,
111 GtkNotebookPage *page,
115 static gchar *get_layout_desc (const lglTemplate *template);
116 static gchar *get_label_size_desc (const lglTemplate *template);
117 static void load_recent_list (GtkListStore *store,
118 GtkTreeSelection *selection,
120 static void load_search_all_list (GtkListStore *store,
121 GtkTreeSelection *selection,
125 /****************************************************************************/
126 /* Boilerplate Object stuff. */
127 /****************************************************************************/
128 G_DEFINE_TYPE (glWdgtMediaSelect, gl_wdgt_media_select, GTK_TYPE_VBOX);
132 gl_wdgt_media_select_class_init (glWdgtMediaSelectClass *class)
134 GObjectClass *object_class = G_OBJECT_CLASS (class);
136 gl_debug (DEBUG_MEDIA_SELECT, "START");
138 gl_wdgt_media_select_parent_class = g_type_class_peek_parent (class);
140 object_class->finalize = gl_wdgt_media_select_finalize;
142 wdgt_media_select_signals[CHANGED] =
143 g_signal_new ("changed",
144 G_OBJECT_CLASS_TYPE(object_class),
146 G_STRUCT_OFFSET (glWdgtMediaSelectClass, changed),
148 gl_marshal_VOID__VOID,
151 gl_debug (DEBUG_MEDIA_SELECT, "END");
156 gl_wdgt_media_select_init (glWdgtMediaSelect *media_select)
158 gl_debug (DEBUG_MEDIA_SELECT, "START");
160 media_select->priv = g_new0 (glWdgtMediaSelectPrivate, 1);
162 gl_debug (DEBUG_MEDIA_SELECT, "END");
167 gl_wdgt_media_select_finalize (GObject *object)
169 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (object);
171 gl_debug (DEBUG_MEDIA_SELECT, "START");
173 g_return_if_fail (object != NULL);
174 g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (object));
176 if (media_select->priv->builder)
178 g_object_unref (media_select->priv->builder);
180 g_object_unref (media_select->priv->recent_store);
181 g_object_unref (media_select->priv->search_all_store);
182 g_free (media_select->priv);
184 G_OBJECT_CLASS (gl_wdgt_media_select_parent_class)->finalize (object);
186 gl_debug (DEBUG_MEDIA_SELECT, "END");
191 gl_wdgt_media_select_new (void)
193 glWdgtMediaSelect *media_select;
195 gl_debug (DEBUG_MEDIA_SELECT, "START");
197 media_select = g_object_new (gl_wdgt_media_select_get_type (), NULL);
199 gl_wdgt_media_select_construct (media_select);
201 gl_debug (DEBUG_MEDIA_SELECT, "END");
203 return GTK_WIDGET (media_select);
207 /*--------------------------------------------------------------------------*/
208 /* PRIVATE. Construct composite widget. */
209 /*--------------------------------------------------------------------------*/
211 gl_wdgt_media_select_construct (glWdgtMediaSelect *media_select)
214 static gchar *object_ids[] = { "wdgt_media_select_hbox", NULL };
215 GError *error = NULL;
217 GList *brands = NULL;
218 GList *page_sizes = NULL;
219 GList *categories = NULL;
220 GList *search_all_names = NULL;
221 const gchar *page_size_id;
222 gchar *page_size_name;
223 GtkCellRenderer *renderer;
224 GtkTreeViewColumn *column;
225 GtkTreeSelection *recent_selection;
226 GtkTreeSelection *search_all_selection;
228 gl_debug (DEBUG_MEDIA_SELECT, "START");
230 g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (media_select));
231 g_return_if_fail (media_select->priv != NULL);
233 builder = gtk_builder_new ();
234 gtk_builder_add_objects_from_file (builder,
235 GLABELS_BUILDER_DIR "wdgt-media-select.builder",
239 g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
240 g_error_free (error);
244 gl_util_get_builder_widgets (builder,
245 "wdgt_media_select_hbox", &hbox,
246 "notebook", &media_select->priv->notebook,
248 "recent_tab_vbox", &media_select->priv->recent_tab_vbox,
250 "recent_treeview", &media_select->priv->recent_treeview,
251 "search_all_tab_vbox", &media_select->priv->search_all_tab_vbox,
252 "brand_combo", &media_select->priv->brand_combo,
253 "page_size_combo", &media_select->priv->page_size_combo,
254 "category_combo", &media_select->priv->category_combo,
255 "search_all_treeview", &media_select->priv->search_all_treeview,
258 gtk_container_add (GTK_CONTAINER (media_select), hbox);
259 media_select->priv->builder = builder;
261 media_select->priv->recent_page_num =
262 gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
263 media_select->priv->recent_tab_vbox);
264 media_select->priv->search_all_page_num =
265 gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
266 media_select->priv->search_all_tab_vbox);
268 /* Recent templates treeview */
269 media_select->priv->recent_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
270 gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->recent_treeview),
271 GTK_TREE_MODEL (media_select->priv->recent_store));
272 renderer = gtk_cell_renderer_pixbuf_new ();
273 column = gtk_tree_view_column_new_with_attributes ("", renderer,
274 "pixbuf", PREVIEW_COLUMN,
275 "stock-id", PREVIEW_COLUMN_STOCK,
276 "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
278 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
279 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
280 renderer = gtk_cell_renderer_text_new ();
281 column = gtk_tree_view_column_new_with_attributes ("", renderer,
282 "markup", DESCRIPTION_COLUMN,
284 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
285 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
286 recent_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
287 load_recent_list (media_select->priv->recent_store, recent_selection, gl_prefs->recent_templates);
289 page_size_id = gl_prefs_get_page_size ();
290 page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
292 /* Brand selection control */
293 gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->brand_combo));
294 brands = lgl_db_get_brand_list (NULL, NULL);
295 brands = g_list_prepend (brands, g_strdup (_("Any")));
296 gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->brand_combo), brands);
297 lgl_db_free_brand_list (brands);
298 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo),
301 /* Page size selection control */
302 gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->page_size_combo));
303 page_sizes = lgl_db_get_paper_name_list ();
304 page_sizes = g_list_prepend (page_sizes, g_strdup (_("Any")));
305 gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->page_size_combo), page_sizes);
306 lgl_db_free_paper_name_list (page_sizes);
307 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
310 /* Category selection control */
311 gl_util_combo_box_add_text_model (GTK_COMBO_BOX (media_select->priv->category_combo));
312 categories = lgl_db_get_category_name_list ();
313 categories = g_list_prepend (categories, g_strdup (_("Any")));
314 gl_util_combo_box_set_strings (GTK_COMBO_BOX (media_select->priv->category_combo), categories);
315 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
317 lgl_db_free_category_name_list (categories);
319 /* Search all treeview */
320 media_select->priv->search_all_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
321 gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
322 GTK_TREE_MODEL (media_select->priv->search_all_store));
323 renderer = gtk_cell_renderer_pixbuf_new ();
324 column = gtk_tree_view_column_new_with_attributes ("", renderer,
325 "pixbuf", PREVIEW_COLUMN,
326 "stock-id", PREVIEW_COLUMN_STOCK,
327 "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
329 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
330 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
331 renderer = gtk_cell_renderer_text_new ();
332 column = gtk_tree_view_column_new_with_attributes ("", renderer,
333 "markup", DESCRIPTION_COLUMN,
335 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
336 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
337 search_all_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
338 search_all_names = lgl_db_get_template_name_list_all (NULL, page_size_id, NULL);
339 load_search_all_list (media_select->priv->search_all_store, search_all_selection, search_all_names);
340 lgl_db_free_template_name_list (search_all_names);
342 /* Connect signals to controls */
343 g_signal_connect (G_OBJECT (media_select->priv->brand_combo), "changed",
344 G_CALLBACK (filter_changed_cb),
346 g_signal_connect (G_OBJECT (media_select->priv->page_size_combo), "changed",
347 G_CALLBACK (filter_changed_cb),
349 g_signal_connect (G_OBJECT (media_select->priv->category_combo), "changed",
350 G_CALLBACK (filter_changed_cb),
352 g_signal_connect (G_OBJECT (recent_selection), "changed",
353 G_CALLBACK (selection_changed_cb),
355 g_signal_connect (G_OBJECT (search_all_selection), "changed",
356 G_CALLBACK (selection_changed_cb),
358 g_signal_connect (G_OBJECT (media_select->priv->notebook), "switch-page",
359 G_CALLBACK (page_changed_cb),
362 g_free (page_size_name);
364 gtk_widget_show_all (GTK_WIDGET (media_select));
365 if ( gl_prefs->recent_templates )
367 gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
368 media_select->priv->recent_page_num);
372 gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
373 media_select->priv->search_all_page_num);
376 gl_debug (DEBUG_MEDIA_SELECT, "END");
380 /*--------------------------------------------------------------------------*/
381 /* PRIVATE. modify widget due to change in selection */
382 /*--------------------------------------------------------------------------*/
384 filter_changed_cb (GtkComboBox *combo,
387 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
389 gchar *page_size_name, *page_size_id;
390 gchar *category_name, *category_id;
391 GList *search_all_names;
392 GtkTreeSelection *selection;
394 gl_debug (DEBUG_MEDIA_SELECT, "START");
397 media_select->priv->stop_signals = TRUE;
399 /* Update template selections for new filter settings */
400 brand = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo));
401 page_size_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
402 category_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
403 if ( brand && strlen(brand) &&
404 page_size_name && strlen(page_size_name) &&
405 category_name && strlen(category_name) )
407 gl_debug (DEBUG_MEDIA_SELECT, "brand = \"%s\"", brand);
408 gl_debug (DEBUG_MEDIA_SELECT, "page_size_name = \"%s\"", page_size_name);
409 gl_debug (DEBUG_MEDIA_SELECT, "category_name = \"%s\"", category_name);
410 if (!g_utf8_collate (brand, _("Any")))
415 page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
416 category_id = lgl_db_lookup_category_id_from_name (category_name);
417 gl_debug (DEBUG_MEDIA_SELECT, "page_size_id = \"%s\"", page_size_id);
418 gl_debug (DEBUG_MEDIA_SELECT, "category_id = \"%s\"", category_id);
419 search_all_names = lgl_db_get_template_name_list_all (brand, page_size_id, category_id);
420 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
421 load_search_all_list (media_select->priv->search_all_store, selection, search_all_names);
422 lgl_db_free_template_name_list (search_all_names);
423 g_free (page_size_id);
424 g_free (category_id);
426 /* Emit our "changed" signal */
427 g_signal_emit (G_OBJECT (user_data),
428 wdgt_media_select_signals[CHANGED], 0);
431 g_free (page_size_name);
432 g_free (category_name);
435 media_select->priv->stop_signals = FALSE;
437 gl_debug (DEBUG_MEDIA_SELECT, "END");
441 /*--------------------------------------------------------------------------*/
442 /* PRIVATE. modify widget due to change in selection */
443 /*--------------------------------------------------------------------------*/
445 selection_changed_cb (GtkTreeSelection *selection,
448 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
450 if (media_select->priv->stop_signals) return;
452 gl_debug (DEBUG_MEDIA_SELECT, "START");
454 /* Emit our "changed" signal */
455 g_signal_emit (G_OBJECT (user_data),
456 wdgt_media_select_signals[CHANGED], 0);
458 gl_debug (DEBUG_MEDIA_SELECT, "END");
462 /*--------------------------------------------------------------------------*/
463 /* PRIVATE. modify widget due to change in selection */
464 /*--------------------------------------------------------------------------*/
466 page_changed_cb (GtkNotebook *notebook,
467 GtkNotebookPage *page,
471 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
473 if (media_select->priv->stop_signals) return;
475 gl_debug (DEBUG_MEDIA_SELECT, "START");
478 * Store new current page, because this signal is emitted before the actual page change.
480 media_select->priv->current_page_num = page_num;
482 /* Emit our "changed" signal */
483 g_signal_emit (G_OBJECT (user_data),
484 wdgt_media_select_signals[CHANGED], 0);
486 gl_debug (DEBUG_MEDIA_SELECT, "END");
490 /****************************************************************************/
491 /* query selected label template name. */
492 /****************************************************************************/
494 gl_wdgt_media_select_get_name (glWdgtMediaSelect *media_select)
497 GtkTreeSelection *selection;
502 gl_debug (DEBUG_MEDIA_SELECT, "START");
504 page_num = media_select->priv->current_page_num;
505 if (page_num == media_select->priv->recent_page_num)
507 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
509 else if (page_num == media_select->priv->search_all_page_num)
511 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
515 g_print ("notebook page = %d\n", page_num);
516 g_assert_not_reached ();
519 if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_NONE)
525 gtk_tree_selection_get_selected (selection, &model, &iter);
526 gtk_tree_model_get (model, &iter, NAME_COLUMN, &name, -1);
529 gl_debug (DEBUG_MEDIA_SELECT, "END");
534 /****************************************************************************/
535 /* set selected label template name. */
536 /****************************************************************************/
538 gl_wdgt_media_select_set_name (glWdgtMediaSelect *media_select,
541 GtkTreeSelection *selection;
548 gl_debug (DEBUG_MEDIA_SELECT, "START");
550 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
551 g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
553 model = GTK_TREE_MODEL (media_select->priv->search_all_store);
555 for ( flag = gtk_tree_model_get_iter_first (model, &iter);
557 flag = gtk_tree_model_iter_next(model, &iter) )
559 gtk_tree_model_get (model, &iter, NAME_COLUMN, &name_i, -1);
560 if (strcasecmp(name, name_i) == 0)
562 gtk_tree_selection_select_iter (selection, &iter);
563 path = gtk_tree_model_get_path (model, &iter);
564 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
568 gtk_tree_path_free (path);
573 gl_debug (DEBUG_MEDIA_SELECT, "END");
577 /****************************************************************************/
578 /* query current filter parameters. */
579 /****************************************************************************/
581 gl_wdgt_media_select_get_filter_parameters (glWdgtMediaSelect *media_select,
582 gchar **page_size_id,
585 gchar *page_size_name, *category_name;
587 gl_debug (DEBUG_MEDIA_SELECT, "");
589 g_free (*page_size_id);
590 g_free (*category_id);
593 gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
595 *page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
598 gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
600 *category_id = lgl_db_lookup_category_id_from_name (category_name);
602 g_free (page_size_name);
603 g_free (category_name);
607 /****************************************************************************/
608 /* set filter parameters. */
609 /****************************************************************************/
611 gl_wdgt_media_select_set_filter_parameters (glWdgtMediaSelect *media_select,
612 const gchar *page_size_id,
613 const gchar *category_id)
615 gchar *page_size_name;
616 gchar *category_name;
618 gl_debug (DEBUG_MEDIA_SELECT, "START");
620 page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
621 if (page_size_name == NULL)
623 page_size_name = g_strdup (_("Any"));
626 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
629 category_name = lgl_db_lookup_category_name_from_id (category_id);
630 if (category_name == NULL)
632 category_name = g_strdup (_("Any"));
635 gl_util_combo_box_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
637 g_free (page_size_name);
638 g_free (category_name);
640 gl_debug (DEBUG_MEDIA_SELECT, "END");
644 /*--------------------------------------------------------------------------*/
645 /* PRIVATE. Get a description of the layout and number of labels. */
646 /*--------------------------------------------------------------------------*/
648 get_layout_desc (const lglTemplate *template)
650 const lglTemplateFrame *frame;
654 frame = (lglTemplateFrame *)template->frames->data;
656 n_labels = lgl_template_frame_get_n_labels (frame);
658 string = g_strdup_printf (_("%d per sheet"), n_labels);
664 /*--------------------------------------------------------------------------*/
665 /* PRIVATE. Get label size description. */
666 /*--------------------------------------------------------------------------*/
668 get_label_size_desc (const lglTemplate *template)
671 const gchar *units_string;
672 gdouble units_per_point;
673 const lglTemplateFrame *frame;
674 gchar *string = NULL;
676 units = gl_prefs_get_units ();
677 units_string = gl_prefs_get_units_string ();
678 units_per_point = gl_prefs_get_units_per_point ();
680 frame = (lglTemplateFrame *)template->frames->data;
682 switch (frame->shape) {
683 case LGL_TEMPLATE_FRAME_SHAPE_RECT:
684 if ( units == LGL_UNITS_INCH ) {
687 xstr = gl_util_fraction (frame->rect.w*units_per_point);
688 ystr = gl_util_fraction (frame->rect.h*units_per_point);
689 string = g_strdup_printf (_("%s x %s %s"),
690 xstr, ystr, units_string);
694 string = g_strdup_printf (_("%.5g x %.5g %s"),
695 frame->rect.w*units_per_point,
696 frame->rect.h*units_per_point,
700 case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
701 if ( units == LGL_UNITS_INCH ) {
704 dstr = gl_util_fraction (2.0*frame->round.r*units_per_point);
705 string = g_strdup_printf (_("%s %s diameter"),
709 string = g_strdup_printf (_("%.5g %s diameter"),
710 2.0*frame->round.r*units_per_point,
714 case LGL_TEMPLATE_FRAME_SHAPE_CD:
715 if ( units == LGL_UNITS_INCH ) {
718 dstr = gl_util_fraction (2.0*frame->cd.r1*units_per_point);
719 string = g_strdup_printf (_("%s %s diameter"),
723 string = g_strdup_printf (_("%.5g %s diameter"),
724 2.0*frame->cd.r1*units_per_point,
736 /*--------------------------------------------------------------------------*/
737 /* PRIVATE. Load list store from template name list. */
738 /*--------------------------------------------------------------------------*/
740 load_recent_list (GtkListStore *store,
741 GtkTreeSelection *selection,
746 lglTemplate *template;
752 gl_debug (DEBUG_MEDIA_SELECT, "START");
754 gtk_list_store_clear (store);
759 for ( p=list; p!=NULL; p=p->next )
762 gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
764 template = lgl_db_lookup_template_from_name (p->data);
765 pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
767 size = get_label_size_desc (template);
768 layout = get_layout_desc (template);
769 description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
771 template->description,
777 lgl_template_free (template);
779 gtk_list_store_append (store, &iter);
780 gtk_list_store_set (store, &iter,
781 NAME_COLUMN, p->data,
782 PREVIEW_COLUMN, pixbuf,
783 DESCRIPTION_COLUMN, description,
786 g_object_unref (G_OBJECT (pixbuf));
787 g_free (description);
790 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
791 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
792 gtk_tree_selection_select_iter (selection, &iter);
797 gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
798 _("No recent templates found."),
799 _("Try selecting a template from the \"Search all templates\" page."));
800 gtk_list_store_append (store, &iter);
801 gtk_list_store_set (store, &iter,
802 NAME_COLUMN, "empty",
803 PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
804 PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
805 DESCRIPTION_COLUMN, text,
809 gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
813 gl_debug (DEBUG_MEDIA_SELECT, "END");
817 /*--------------------------------------------------------------------------*/
818 /* PRIVATE. Load list store from template name list. */
819 /*--------------------------------------------------------------------------*/
821 load_search_all_list (GtkListStore *store,
822 GtkTreeSelection *selection,
827 lglTemplate *template;
833 gl_debug (DEBUG_MEDIA_SELECT, "START");
835 gtk_list_store_clear (store);
840 for ( p=list; p!=NULL; p=p->next )
843 gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
845 template = lgl_db_lookup_template_from_name (p->data);
846 pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
848 size = get_label_size_desc (template);
849 layout = get_layout_desc (template);
850 description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
852 template->description,
858 lgl_template_free (template);
860 gtk_list_store_append (store, &iter);
861 gtk_list_store_set (store, &iter,
862 NAME_COLUMN, p->data,
863 PREVIEW_COLUMN, pixbuf,
864 DESCRIPTION_COLUMN, description,
867 g_object_unref (G_OBJECT (pixbuf));
868 g_free (description);
871 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
872 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
873 gtk_tree_selection_select_iter (selection, &iter);
878 gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
880 _("Try selecting a different brand, page size or category."));
881 gtk_list_store_append (store, &iter);
882 gtk_list_store_set (store, &iter,
883 NAME_COLUMN, "empty",
884 PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
885 PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
886 DESCRIPTION_COLUMN, text,
890 gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
894 gl_debug (DEBUG_MEDIA_SELECT, "END");
900 * Local Variables: -- emacs
902 * c-basic-offset: 8 -- emacs
903 * tab-width: 8 -- emacs
904 * indent-tabs-mode: nil -- emacs