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>
29 #include <libglabels/libglabels.h>
30 #include "mini-preview-pixbuf-cache.h"
33 #include "combo-util.h"
34 #include "builder-util.h"
41 /*===========================================*/
43 /*===========================================*/
49 PREVIEW_COLUMN_STOCK_SIZE,
54 struct _glWdgtMediaSelectPrivate {
59 guint current_page_num;
62 GtkWidget *recent_tab_vbox;
63 GtkWidget *recent_treeview;
64 GtkListStore *recent_store;
66 gint search_all_page_num;
67 GtkWidget *search_all_tab_vbox;
68 GtkWidget *brand_combo;
69 GtkWidget *page_size_combo;
70 GtkWidget *category_combo;
71 GtkWidget *search_all_treeview;
72 GtkListStore *search_all_store;
74 /* Prevent recursion */
75 gboolean stop_signals;
83 typedef void (*glWdgtMediaSelectSignal) (GObject * object, gpointer data);
86 /*===========================================*/
88 /*===========================================*/
90 static gint wdgt_media_select_signals[LAST_SIGNAL] = { 0 };
93 /*===========================================*/
94 /* Local function prototypes */
95 /*===========================================*/
97 static void gl_wdgt_media_select_finalize (GObject *object);
99 static void gl_wdgt_media_select_construct (glWdgtMediaSelect *media_select);
101 static void filter_changed_cb (GtkComboBox *combo,
103 static void selection_changed_cb (GtkTreeSelection *selection,
105 static void page_changed_cb (GtkNotebook *notebook,
106 GtkNotebookPage *page,
110 static gchar *get_layout_desc (const lglTemplate *template);
111 static gchar *get_label_size_desc (const lglTemplate *template);
112 static void load_recent_list (GtkListStore *store,
113 GtkTreeSelection *selection,
115 static void load_search_all_list (GtkListStore *store,
116 GtkTreeSelection *selection,
120 /****************************************************************************/
121 /* Boilerplate Object stuff. */
122 /****************************************************************************/
123 G_DEFINE_TYPE (glWdgtMediaSelect, gl_wdgt_media_select, GTK_TYPE_VBOX);
127 gl_wdgt_media_select_class_init (glWdgtMediaSelectClass *class)
129 GObjectClass *object_class = G_OBJECT_CLASS (class);
131 gl_debug (DEBUG_MEDIA_SELECT, "START");
133 gl_wdgt_media_select_parent_class = g_type_class_peek_parent (class);
135 object_class->finalize = gl_wdgt_media_select_finalize;
137 wdgt_media_select_signals[CHANGED] =
138 g_signal_new ("changed",
139 G_OBJECT_CLASS_TYPE(object_class),
141 G_STRUCT_OFFSET (glWdgtMediaSelectClass, changed),
143 gl_marshal_VOID__VOID,
146 gl_debug (DEBUG_MEDIA_SELECT, "END");
151 gl_wdgt_media_select_init (glWdgtMediaSelect *media_select)
153 gl_debug (DEBUG_MEDIA_SELECT, "START");
155 media_select->priv = g_new0 (glWdgtMediaSelectPrivate, 1);
157 gl_debug (DEBUG_MEDIA_SELECT, "END");
162 gl_wdgt_media_select_finalize (GObject *object)
164 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (object);
166 gl_debug (DEBUG_MEDIA_SELECT, "START");
168 g_return_if_fail (object != NULL);
169 g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (object));
171 if (media_select->priv->builder)
173 g_object_unref (media_select->priv->builder);
175 g_object_unref (media_select->priv->recent_store);
176 g_object_unref (media_select->priv->search_all_store);
177 g_free (media_select->priv);
179 G_OBJECT_CLASS (gl_wdgt_media_select_parent_class)->finalize (object);
181 gl_debug (DEBUG_MEDIA_SELECT, "END");
186 gl_wdgt_media_select_new (void)
188 glWdgtMediaSelect *media_select;
190 gl_debug (DEBUG_MEDIA_SELECT, "START");
192 media_select = g_object_new (gl_wdgt_media_select_get_type (), NULL);
194 gl_wdgt_media_select_construct (media_select);
196 gl_debug (DEBUG_MEDIA_SELECT, "END");
198 return GTK_WIDGET (media_select);
202 /*--------------------------------------------------------------------------*/
203 /* PRIVATE. Construct composite widget. */
204 /*--------------------------------------------------------------------------*/
206 gl_wdgt_media_select_construct (glWdgtMediaSelect *media_select)
209 static gchar *object_ids[] = { "wdgt_media_select_hbox", NULL };
210 GError *error = NULL;
212 GList *brands = NULL;
213 GList *page_sizes = NULL;
214 GList *categories = NULL;
215 GList *search_all_names = NULL;
216 const gchar *page_size_id;
217 gchar *page_size_name;
218 GtkCellRenderer *renderer;
219 GtkTreeViewColumn *column;
220 GtkTreeSelection *recent_selection;
221 GtkTreeSelection *search_all_selection;
223 gl_debug (DEBUG_MEDIA_SELECT, "START");
225 g_return_if_fail (GL_IS_WDGT_MEDIA_SELECT (media_select));
226 g_return_if_fail (media_select->priv != NULL);
228 builder = gtk_builder_new ();
229 gtk_builder_add_objects_from_file (builder,
230 GLABELS_BUILDER_DIR "wdgt-media-select.builder",
234 g_critical ("%s\n\ngLabels may not be installed correctly!", error->message);
235 g_error_free (error);
239 gl_builder_util_get_widgets (builder,
240 "wdgt_media_select_hbox", &hbox,
241 "notebook", &media_select->priv->notebook,
243 "recent_tab_vbox", &media_select->priv->recent_tab_vbox,
245 "recent_treeview", &media_select->priv->recent_treeview,
246 "search_all_tab_vbox", &media_select->priv->search_all_tab_vbox,
247 "brand_combo", &media_select->priv->brand_combo,
248 "page_size_combo", &media_select->priv->page_size_combo,
249 "category_combo", &media_select->priv->category_combo,
250 "search_all_treeview", &media_select->priv->search_all_treeview,
253 gtk_container_add (GTK_CONTAINER (media_select), hbox);
254 media_select->priv->builder = builder;
256 media_select->priv->recent_page_num =
257 gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
258 media_select->priv->recent_tab_vbox);
259 media_select->priv->search_all_page_num =
260 gtk_notebook_page_num (GTK_NOTEBOOK (media_select->priv->notebook),
261 media_select->priv->search_all_tab_vbox);
263 /* Recent templates treeview */
264 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);
265 gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->recent_treeview),
266 GTK_TREE_MODEL (media_select->priv->recent_store));
267 renderer = gtk_cell_renderer_pixbuf_new ();
268 column = gtk_tree_view_column_new_with_attributes ("", renderer,
269 "pixbuf", PREVIEW_COLUMN,
270 "stock-id", PREVIEW_COLUMN_STOCK,
271 "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
273 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
274 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
275 renderer = gtk_cell_renderer_text_new ();
276 column = gtk_tree_view_column_new_with_attributes ("", renderer,
277 "markup", DESCRIPTION_COLUMN,
279 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
280 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->recent_treeview), column);
281 recent_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
282 load_recent_list (media_select->priv->recent_store, recent_selection, gl_prefs->recent_templates);
284 page_size_id = gl_prefs_get_page_size ();
285 page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
287 /* Brand selection control */
288 gl_combo_util_add_text_model (GTK_COMBO_BOX (media_select->priv->brand_combo));
289 brands = lgl_db_get_brand_list (NULL, NULL);
290 brands = g_list_prepend (brands, g_strdup (_("Any")));
291 gl_combo_util_set_strings (GTK_COMBO_BOX (media_select->priv->brand_combo), brands);
292 lgl_db_free_brand_list (brands);
293 gl_combo_util_set_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo),
296 /* Page size selection control */
297 gl_combo_util_add_text_model (GTK_COMBO_BOX (media_select->priv->page_size_combo));
298 page_sizes = lgl_db_get_paper_name_list ();
299 page_sizes = g_list_prepend (page_sizes, g_strdup (_("Any")));
300 gl_combo_util_set_strings (GTK_COMBO_BOX (media_select->priv->page_size_combo), page_sizes);
301 lgl_db_free_paper_name_list (page_sizes);
302 gl_combo_util_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
305 /* Category selection control */
306 gl_combo_util_add_text_model (GTK_COMBO_BOX (media_select->priv->category_combo));
307 categories = lgl_db_get_category_name_list ();
308 categories = g_list_prepend (categories, g_strdup (_("Any")));
309 gl_combo_util_set_strings (GTK_COMBO_BOX (media_select->priv->category_combo), categories);
310 gl_combo_util_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
312 lgl_db_free_category_name_list (categories);
314 /* Search all treeview */
315 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);
316 gtk_tree_view_set_model (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
317 GTK_TREE_MODEL (media_select->priv->search_all_store));
318 renderer = gtk_cell_renderer_pixbuf_new ();
319 column = gtk_tree_view_column_new_with_attributes ("", renderer,
320 "pixbuf", PREVIEW_COLUMN,
321 "stock-id", PREVIEW_COLUMN_STOCK,
322 "stock-size", PREVIEW_COLUMN_STOCK_SIZE,
324 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
325 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
326 renderer = gtk_cell_renderer_text_new ();
327 column = gtk_tree_view_column_new_with_attributes ("", renderer,
328 "markup", DESCRIPTION_COLUMN,
330 gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
331 gtk_tree_view_append_column (GTK_TREE_VIEW (media_select->priv->search_all_treeview), column);
332 search_all_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
333 search_all_names = lgl_db_get_template_name_list_all (NULL, page_size_id, NULL);
334 load_search_all_list (media_select->priv->search_all_store, search_all_selection, search_all_names);
335 lgl_db_free_template_name_list (search_all_names);
337 /* Connect signals to controls */
338 g_signal_connect (G_OBJECT (media_select->priv->brand_combo), "changed",
339 G_CALLBACK (filter_changed_cb),
341 g_signal_connect (G_OBJECT (media_select->priv->page_size_combo), "changed",
342 G_CALLBACK (filter_changed_cb),
344 g_signal_connect (G_OBJECT (media_select->priv->category_combo), "changed",
345 G_CALLBACK (filter_changed_cb),
347 g_signal_connect (G_OBJECT (recent_selection), "changed",
348 G_CALLBACK (selection_changed_cb),
350 g_signal_connect (G_OBJECT (search_all_selection), "changed",
351 G_CALLBACK (selection_changed_cb),
353 g_signal_connect (G_OBJECT (media_select->priv->notebook), "switch-page",
354 G_CALLBACK (page_changed_cb),
357 g_free (page_size_name);
359 gtk_widget_show_all (GTK_WIDGET (media_select));
360 if ( gl_prefs->recent_templates )
362 gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
363 media_select->priv->recent_page_num);
367 gtk_notebook_set_current_page (GTK_NOTEBOOK (media_select->priv->notebook),
368 media_select->priv->search_all_page_num);
371 gl_debug (DEBUG_MEDIA_SELECT, "END");
375 /*--------------------------------------------------------------------------*/
376 /* PRIVATE. modify widget due to change in selection */
377 /*--------------------------------------------------------------------------*/
379 filter_changed_cb (GtkComboBox *combo,
382 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
384 gchar *page_size_name, *page_size_id;
385 gchar *category_name, *category_id;
386 GList *search_all_names;
387 GtkTreeSelection *selection;
389 gl_debug (DEBUG_MEDIA_SELECT, "START");
392 media_select->priv->stop_signals = TRUE;
394 /* Update template selections for new filter settings */
395 brand = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->brand_combo));
396 page_size_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
397 category_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
398 if ( brand && strlen(brand) &&
399 page_size_name && strlen(page_size_name) &&
400 category_name && strlen(category_name) )
402 gl_debug (DEBUG_MEDIA_SELECT, "brand = \"%s\"", brand);
403 gl_debug (DEBUG_MEDIA_SELECT, "page_size_name = \"%s\"", page_size_name);
404 gl_debug (DEBUG_MEDIA_SELECT, "category_name = \"%s\"", category_name);
405 if (!g_utf8_collate (brand, _("Any")))
410 page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
411 category_id = lgl_db_lookup_category_id_from_name (category_name);
412 gl_debug (DEBUG_MEDIA_SELECT, "page_size_id = \"%s\"", page_size_id);
413 gl_debug (DEBUG_MEDIA_SELECT, "category_id = \"%s\"", category_id);
414 search_all_names = lgl_db_get_template_name_list_all (brand, page_size_id, category_id);
415 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
416 load_search_all_list (media_select->priv->search_all_store, selection, search_all_names);
417 lgl_db_free_template_name_list (search_all_names);
418 g_free (page_size_id);
419 g_free (category_id);
421 /* Emit our "changed" signal */
422 g_signal_emit (G_OBJECT (user_data),
423 wdgt_media_select_signals[CHANGED], 0);
426 g_free (page_size_name);
427 g_free (category_name);
430 media_select->priv->stop_signals = FALSE;
432 gl_debug (DEBUG_MEDIA_SELECT, "END");
436 /*--------------------------------------------------------------------------*/
437 /* PRIVATE. modify widget due to change in selection */
438 /*--------------------------------------------------------------------------*/
440 selection_changed_cb (GtkTreeSelection *selection,
443 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
445 if (media_select->priv->stop_signals) return;
447 gl_debug (DEBUG_MEDIA_SELECT, "START");
449 /* Emit our "changed" signal */
450 g_signal_emit (G_OBJECT (user_data),
451 wdgt_media_select_signals[CHANGED], 0);
453 gl_debug (DEBUG_MEDIA_SELECT, "END");
457 /*--------------------------------------------------------------------------*/
458 /* PRIVATE. modify widget due to change in selection */
459 /*--------------------------------------------------------------------------*/
461 page_changed_cb (GtkNotebook *notebook,
462 GtkNotebookPage *page,
466 glWdgtMediaSelect *media_select = GL_WDGT_MEDIA_SELECT (user_data);
468 if (media_select->priv->stop_signals) return;
470 gl_debug (DEBUG_MEDIA_SELECT, "START");
473 * Store new current page, because this signal is emitted before the actual page change.
475 media_select->priv->current_page_num = page_num;
477 /* Emit our "changed" signal */
478 g_signal_emit (G_OBJECT (user_data),
479 wdgt_media_select_signals[CHANGED], 0);
481 gl_debug (DEBUG_MEDIA_SELECT, "END");
485 /****************************************************************************/
486 /* query selected label template name. */
487 /****************************************************************************/
489 gl_wdgt_media_select_get_name (glWdgtMediaSelect *media_select)
492 GtkTreeSelection *selection;
497 gl_debug (DEBUG_MEDIA_SELECT, "START");
499 page_num = media_select->priv->current_page_num;
500 if (page_num == media_select->priv->recent_page_num)
502 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->recent_treeview));
504 else if (page_num == media_select->priv->search_all_page_num)
506 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
510 g_print ("notebook page = %d\n", page_num);
511 g_assert_not_reached ();
514 if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_NONE)
520 gtk_tree_selection_get_selected (selection, &model, &iter);
521 gtk_tree_model_get (model, &iter, NAME_COLUMN, &name, -1);
524 gl_debug (DEBUG_MEDIA_SELECT, "END");
529 /****************************************************************************/
530 /* set selected label template name. */
531 /****************************************************************************/
533 gl_wdgt_media_select_set_name (glWdgtMediaSelect *media_select,
536 GtkTreeSelection *selection;
543 gl_debug (DEBUG_MEDIA_SELECT, "START");
545 selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (media_select->priv->search_all_treeview));
546 g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
548 model = GTK_TREE_MODEL (media_select->priv->search_all_store);
550 for ( flag = gtk_tree_model_get_iter_first (model, &iter);
552 flag = gtk_tree_model_iter_next(model, &iter) )
554 gtk_tree_model_get (model, &iter, NAME_COLUMN, &name_i, -1);
555 if (strcasecmp(name, name_i) == 0)
557 gtk_tree_selection_select_iter (selection, &iter);
558 path = gtk_tree_model_get_path (model, &iter);
559 gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (media_select->priv->search_all_treeview),
563 gtk_tree_path_free (path);
568 gl_debug (DEBUG_MEDIA_SELECT, "END");
572 /****************************************************************************/
573 /* query current filter parameters. */
574 /****************************************************************************/
576 gl_wdgt_media_select_get_filter_parameters (glWdgtMediaSelect *media_select,
577 gchar **page_size_id,
580 gchar *page_size_name, *category_name;
582 gl_debug (DEBUG_MEDIA_SELECT, "");
584 g_free (*page_size_id);
585 g_free (*category_id);
588 gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo));
590 *page_size_id = lgl_db_lookup_paper_id_from_name (page_size_name);
593 gtk_combo_box_get_active_text (GTK_COMBO_BOX (media_select->priv->category_combo));
595 *category_id = lgl_db_lookup_category_id_from_name (category_name);
597 g_free (page_size_name);
598 g_free (category_name);
602 /****************************************************************************/
603 /* set filter parameters. */
604 /****************************************************************************/
606 gl_wdgt_media_select_set_filter_parameters (glWdgtMediaSelect *media_select,
607 const gchar *page_size_id,
608 const gchar *category_id)
610 gchar *page_size_name;
611 gchar *category_name;
613 gl_debug (DEBUG_MEDIA_SELECT, "START");
615 page_size_name = lgl_db_lookup_paper_name_from_id (page_size_id);
616 if (page_size_name == NULL)
618 page_size_name = g_strdup (_("Any"));
621 gl_combo_util_set_active_text (GTK_COMBO_BOX (media_select->priv->page_size_combo),
624 category_name = lgl_db_lookup_category_name_from_id (category_id);
625 if (category_name == NULL)
627 category_name = g_strdup (_("Any"));
630 gl_combo_util_set_active_text (GTK_COMBO_BOX (media_select->priv->category_combo),
632 g_free (page_size_name);
633 g_free (category_name);
635 gl_debug (DEBUG_MEDIA_SELECT, "END");
639 /*--------------------------------------------------------------------------*/
640 /* PRIVATE. Get a description of the layout and number of labels. */
641 /*--------------------------------------------------------------------------*/
643 get_layout_desc (const lglTemplate *template)
645 const lglTemplateFrame *frame;
649 frame = (lglTemplateFrame *)template->frames->data;
651 n_labels = lgl_template_frame_get_n_labels (frame);
653 string = g_strdup_printf (_("%d per sheet"), n_labels);
659 /*--------------------------------------------------------------------------*/
660 /* PRIVATE. Get label size description. */
661 /*--------------------------------------------------------------------------*/
663 get_label_size_desc (const lglTemplate *template)
666 const gchar *units_string;
667 gdouble units_per_point;
668 const lglTemplateFrame *frame;
669 gchar *string = NULL;
671 units = gl_prefs_get_units ();
672 units_string = gl_prefs_get_units_string ();
673 units_per_point = gl_prefs_get_units_per_point ();
675 frame = (lglTemplateFrame *)template->frames->data;
677 switch (frame->shape) {
678 case LGL_TEMPLATE_FRAME_SHAPE_RECT:
679 if ( units == LGL_UNITS_INCH ) {
682 xstr = gl_str_util_fraction_to_string (frame->rect.w*units_per_point);
683 ystr = gl_str_util_fraction_to_string (frame->rect.h*units_per_point);
684 string = g_strdup_printf (_("%s x %s %s"),
685 xstr, ystr, units_string);
689 string = g_strdup_printf (_("%.5g x %.5g %s"),
690 frame->rect.w*units_per_point,
691 frame->rect.h*units_per_point,
695 case LGL_TEMPLATE_FRAME_SHAPE_ROUND:
696 if ( units == LGL_UNITS_INCH ) {
699 dstr = gl_str_util_fraction_to_string (2.0*frame->round.r*units_per_point);
700 string = g_strdup_printf (_("%s %s diameter"),
704 string = g_strdup_printf (_("%.5g %s diameter"),
705 2.0*frame->round.r*units_per_point,
709 case LGL_TEMPLATE_FRAME_SHAPE_CD:
710 if ( units == LGL_UNITS_INCH ) {
713 dstr = gl_str_util_fraction_to_string (2.0*frame->cd.r1*units_per_point);
714 string = g_strdup_printf (_("%s %s diameter"),
718 string = g_strdup_printf (_("%.5g %s diameter"),
719 2.0*frame->cd.r1*units_per_point,
731 /*--------------------------------------------------------------------------*/
732 /* PRIVATE. Load list store from template name list. */
733 /*--------------------------------------------------------------------------*/
735 load_recent_list (GtkListStore *store,
736 GtkTreeSelection *selection,
741 lglTemplate *template;
747 gl_debug (DEBUG_MEDIA_SELECT, "START");
749 gtk_list_store_clear (store);
754 for ( p=list; p!=NULL; p=p->next )
757 gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
759 template = lgl_db_lookup_template_from_name (p->data);
760 pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
762 size = get_label_size_desc (template);
763 layout = get_layout_desc (template);
764 description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
766 template->description,
772 lgl_template_free (template);
774 gtk_list_store_append (store, &iter);
775 gtk_list_store_set (store, &iter,
776 NAME_COLUMN, p->data,
777 PREVIEW_COLUMN, pixbuf,
778 DESCRIPTION_COLUMN, description,
781 g_object_unref (G_OBJECT (pixbuf));
782 g_free (description);
785 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
786 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
787 gtk_tree_selection_select_iter (selection, &iter);
792 gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
793 _("No recent templates found."),
794 _("Try selecting a template from the \"Search all templates\" page."));
795 gtk_list_store_append (store, &iter);
796 gtk_list_store_set (store, &iter,
797 NAME_COLUMN, "empty",
798 PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
799 PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
800 DESCRIPTION_COLUMN, text,
804 gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
808 gl_debug (DEBUG_MEDIA_SELECT, "END");
812 /*--------------------------------------------------------------------------*/
813 /* PRIVATE. Load list store from template name list. */
814 /*--------------------------------------------------------------------------*/
816 load_search_all_list (GtkListStore *store,
817 GtkTreeSelection *selection,
822 lglTemplate *template;
828 gl_debug (DEBUG_MEDIA_SELECT, "START");
830 gtk_list_store_clear (store);
835 for ( p=list; p!=NULL; p=p->next )
838 gl_debug (DEBUG_MEDIA_SELECT, "p->data = \"%s\"", p->data);
840 template = lgl_db_lookup_template_from_name (p->data);
841 pixbuf = gl_mini_preview_pixbuf_cache_get_pixbuf (p->data);
843 size = get_label_size_desc (template);
844 layout = get_layout_desc (template);
845 description = g_strdup_printf ("<b>%s: %s</b>\n%s\n%s",
847 template->description,
853 lgl_template_free (template);
855 gtk_list_store_append (store, &iter);
856 gtk_list_store_set (store, &iter,
857 NAME_COLUMN, p->data,
858 PREVIEW_COLUMN, pixbuf,
859 DESCRIPTION_COLUMN, description,
862 g_object_unref (G_OBJECT (pixbuf));
863 g_free (description);
866 gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
867 gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
868 gtk_tree_selection_select_iter (selection, &iter);
873 gchar *text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n%s",
875 _("Try selecting a different brand, page size or category."));
876 gtk_list_store_append (store, &iter);
877 gtk_list_store_set (store, &iter,
878 NAME_COLUMN, "empty",
879 PREVIEW_COLUMN_STOCK, GTK_STOCK_DIALOG_WARNING,
880 PREVIEW_COLUMN_STOCK_SIZE, GTK_ICON_SIZE_DIALOG,
881 DESCRIPTION_COLUMN, text,
885 gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
889 gl_debug (DEBUG_MEDIA_SELECT, "END");
895 * Local Variables: -- emacs
897 * c-basic-offset: 8 -- emacs
898 * tab-width: 8 -- emacs
899 * indent-tabs-mode: nil -- emacs