1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 /*
3  * Brasero
4  * Copyright (C) Philippe Rouquier 2005-2009 <bonfire-app@wanadoo.fr>
5  *
6  *  Brasero is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  * brasero is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with brasero.  If not, write to:
18  * 	The Free Software Foundation, Inc.,
19  * 	51 Franklin Street, Fifth Floor
20  * 	Boston, MA  02110-1301, USA.
21  */
22 
23 #ifndef _SEARCH_ENGINE_H
24 #define _SEARCH_ENGINE_H
25 
26 #include <glib.h>
27 #include <glib-object.h>
28 
29 #include <gtk/gtk.h>
30 
31 G_BEGIN_DECLS
32 
33 enum {
34 	BRASERO_SEARCH_TREE_HIT_COL		= 0,
35 	BRASERO_SEARCH_TREE_NB_COL
36 };
37 
38 typedef enum {
39 	BRASERO_SEARCH_SCOPE_ANY		= 0,
40 	BRASERO_SEARCH_SCOPE_VIDEO		= 1,
41 	BRASERO_SEARCH_SCOPE_MUSIC		= 1 << 1,
42 	BRASERO_SEARCH_SCOPE_PICTURES	= 1 << 2,
43 	BRASERO_SEARCH_SCOPE_DOCUMENTS	= 1 << 3,
44 } BraseroSearchScope;
45 
46 #define BRASERO_TYPE_SEARCH_ENGINE         (brasero_search_engine_get_type ())
47 #define BRASERO_SEARCH_ENGINE(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), BRASERO_TYPE_SEARCH_ENGINE, BraseroSearchEngine))
48 #define BRASERO_IS_SEARCH_ENGINE(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), BRASERO_TYPE_SEARCH_ENGINE))
49 #define BRASERO_SEARCH_ENGINE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), BRASERO_TYPE_SEARCH_ENGINE, BraseroSearchEngineIface))
50 
51 typedef struct _BraseroSearchEngine        BraseroSearchEngine;
52 typedef struct _BraseroSearchEngineIface   BraseroSearchEngineIface;
53 
54 struct _BraseroSearchEngineIface {
55 	GTypeInterface g_iface;
56 
57 	/* <Signals> */
58 	void	(*search_error)				(BraseroSearchEngine *search,
59 							 GError *error);
60 	void	(*search_finished)			(BraseroSearchEngine *search);
61 	void	(*hit_removed)				(BraseroSearchEngine *search,
62 					                 gpointer hit);
63 	void	(*hit_added)				(BraseroSearchEngine *search,
64 						         gpointer hit);
65 
66 	/* <Virtual functions> */
67 	gboolean	(*is_available)			(BraseroSearchEngine *search);
68 	gboolean	(*query_new)			(BraseroSearchEngine *search,
69 					                 const gchar *keywords);
70 	gboolean	(*query_set_scope)		(BraseroSearchEngine *search,
71 					                 BraseroSearchScope scope);
72 	gboolean	(*query_set_mime)		(BraseroSearchEngine *search,
73 					                 const gchar **mimes);
74 	gboolean	(*query_start)			(BraseroSearchEngine *search);
75 
76 	gboolean	(*add_hits)			(BraseroSearchEngine *search,
77 					                 GtkTreeModel *model,
78 					                 gint range_start,
79 					                 gint range_end);
80 
81 	gint		(*num_hits)			(BraseroSearchEngine *engine);
82 
83 	const gchar*	(*uri_from_hit)			(BraseroSearchEngine *engine,
84 				                         gpointer hit);
85 	const gchar *	(*mime_from_hit)		(BraseroSearchEngine *engine,
86 				                	 gpointer hit);
87 	gint		(*score_from_hit)		(BraseroSearchEngine *engine,
88 							 gpointer hit);
89 };
90 
91 GType brasero_search_engine_get_type (void);
92 
93 BraseroSearchEngine *
94 brasero_search_engine_new_default (void);
95 
96 gboolean
97 brasero_search_engine_is_available (BraseroSearchEngine *search);
98 
99 gint
100 brasero_search_engine_num_hits (BraseroSearchEngine *search);
101 
102 gboolean
103 brasero_search_engine_new_query (BraseroSearchEngine *search,
104                                  const gchar *keywords);
105 
106 gboolean
107 brasero_search_engine_set_query_scope (BraseroSearchEngine *search,
108                                        BraseroSearchScope scope);
109 
110 gboolean
111 brasero_search_engine_set_query_mime (BraseroSearchEngine *search,
112                                       const gchar **mimes);
113 
114 gboolean
115 brasero_search_engine_start_query (BraseroSearchEngine *search);
116 
117 void
118 brasero_search_engine_query_finished (BraseroSearchEngine *search);
119 
120 void
121 brasero_search_engine_query_error (BraseroSearchEngine *search,
122                                    GError *error);
123 
124 void
125 brasero_search_engine_hit_removed (BraseroSearchEngine *search,
126                                    gpointer hit);
127 void
128 brasero_search_engine_hit_added (BraseroSearchEngine *search,
129                                  gpointer hit);
130 
131 const gchar *
132 brasero_search_engine_uri_from_hit (BraseroSearchEngine *search,
133                                      gpointer hit);
134 const gchar *
135 brasero_search_engine_mime_from_hit (BraseroSearchEngine *search,
136                                      gpointer hit);
137 gint
138 brasero_search_engine_score_from_hit (BraseroSearchEngine *search,
139                                       gpointer hit);
140 
141 gint
142 brasero_search_engine_add_hits (BraseroSearchEngine *search,
143                                 GtkTreeModel *model,
144                                 gint range_start,
145                                 gint range_end);
146 
147 G_END_DECLS
148 
149 #endif /* _SEARCH_ENGINE_H */
150