1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2006-2007 Async Open Source,
3  *                         Johan Dahlin <jdahlin@async.com.br>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library 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  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef __GTK_BUILDER_H__
20 #define __GTK_BUILDER_H__
21 
22 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
23 #error "Only <gtk/gtk.h> can be included directly."
24 #endif
25 
26 #include <gtk/gtkbuilderscope.h>
27 #include <gtk/gtkwidget.h>
28 
29 G_BEGIN_DECLS
30 
31 #define GTK_TYPE_BUILDER                 (gtk_builder_get_type ())
32 #define GTK_BUILDER(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_BUILDER, GtkBuilder))
33 #define GTK_BUILDER_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BUILDER, GtkBuilderClass))
34 #define GTK_IS_BUILDER(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_BUILDER))
35 #define GTK_IS_BUILDER_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_BUILDER))
36 #define GTK_BUILDER_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_BUILDER, GtkBuilderClass))
37 
38 #define GTK_BUILDER_ERROR                (gtk_builder_error_quark ())
39 
40 typedef struct _GtkBuilderClass   GtkBuilderClass;
41 
42 /**
43  * GtkBuilderError:
44  * @GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION: A type-func attribute didn’t name
45  *  a function that returns a `GType`.
46  * @GTK_BUILDER_ERROR_UNHANDLED_TAG: The input contained a tag that `GtkBuilder`
47  *  can’t handle.
48  * @GTK_BUILDER_ERROR_MISSING_ATTRIBUTE: An attribute that is required by
49  *  `GtkBuilder` was missing.
50  * @GTK_BUILDER_ERROR_INVALID_ATTRIBUTE: `GtkBuilder` found an attribute that
51  *  it doesn’t understand.
52  * @GTK_BUILDER_ERROR_INVALID_TAG: `GtkBuilder` found a tag that
53  *  it doesn’t understand.
54  * @GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE: A required property value was
55  *  missing.
56  * @GTK_BUILDER_ERROR_INVALID_VALUE: `GtkBuilder` couldn’t parse
57  *  some attribute value.
58  * @GTK_BUILDER_ERROR_VERSION_MISMATCH: The input file requires a newer version
59  *  of GTK.
60  * @GTK_BUILDER_ERROR_DUPLICATE_ID: An object id occurred twice.
61  * @GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED: A specified object type is of the same type or
62  *  derived from the type of the composite class being extended with builder XML.
63  * @GTK_BUILDER_ERROR_TEMPLATE_MISMATCH: The wrong type was specified in a composite class’s template XML
64  * @GTK_BUILDER_ERROR_INVALID_PROPERTY: The specified property is unknown for the object class.
65  * @GTK_BUILDER_ERROR_INVALID_SIGNAL: The specified signal is unknown for the object class.
66  * @GTK_BUILDER_ERROR_INVALID_ID: An object id is unknown.
67  * @GTK_BUILDER_ERROR_INVALID_FUNCTION: A function could not be found. This often happens
68  *   when symbols are set to be kept private. Compiling code with -rdynamic or using the
69  *   `gmodule-export-2.0` pkgconfig module can fix this problem.
70  *
71  * Error codes that identify various errors that can occur while using
72  * `GtkBuilder`.
73  */
74 typedef enum
75 {
76   GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION,
77   GTK_BUILDER_ERROR_UNHANDLED_TAG,
78   GTK_BUILDER_ERROR_MISSING_ATTRIBUTE,
79   GTK_BUILDER_ERROR_INVALID_ATTRIBUTE,
80   GTK_BUILDER_ERROR_INVALID_TAG,
81   GTK_BUILDER_ERROR_MISSING_PROPERTY_VALUE,
82   GTK_BUILDER_ERROR_INVALID_VALUE,
83   GTK_BUILDER_ERROR_VERSION_MISMATCH,
84   GTK_BUILDER_ERROR_DUPLICATE_ID,
85   GTK_BUILDER_ERROR_OBJECT_TYPE_REFUSED,
86   GTK_BUILDER_ERROR_TEMPLATE_MISMATCH,
87   GTK_BUILDER_ERROR_INVALID_PROPERTY,
88   GTK_BUILDER_ERROR_INVALID_SIGNAL,
89   GTK_BUILDER_ERROR_INVALID_ID,
90   GTK_BUILDER_ERROR_INVALID_FUNCTION
91 } GtkBuilderError;
92 
93 GDK_AVAILABLE_IN_ALL
94 GQuark gtk_builder_error_quark (void);
95 
96 GDK_AVAILABLE_IN_ALL
97 GType        gtk_builder_get_type                (void) G_GNUC_CONST;
98 GDK_AVAILABLE_IN_ALL
99 GtkBuilder*  gtk_builder_new                     (void);
100 
101 GDK_AVAILABLE_IN_ALL
102 gboolean     gtk_builder_add_from_file           (GtkBuilder    *builder,
103                                                   const char    *filename,
104                                                   GError       **error);
105 GDK_AVAILABLE_IN_ALL
106 gboolean     gtk_builder_add_from_resource       (GtkBuilder    *builder,
107                                                   const char    *resource_path,
108                                                   GError       **error);
109 GDK_AVAILABLE_IN_ALL
110 gboolean     gtk_builder_add_from_string         (GtkBuilder    *builder,
111                                                   const char    *buffer,
112                                                   gssize         length,
113                                                   GError       **error);
114 GDK_AVAILABLE_IN_ALL
115 gboolean     gtk_builder_add_objects_from_file   (GtkBuilder    *builder,
116                                                   const char    *filename,
117                                                   const char   **object_ids,
118                                                   GError       **error);
119 GDK_AVAILABLE_IN_ALL
120 gboolean     gtk_builder_add_objects_from_resource(GtkBuilder    *builder,
121                                                   const char    *resource_path,
122                                                   const char   **object_ids,
123                                                   GError       **error);
124 GDK_AVAILABLE_IN_ALL
125 gboolean     gtk_builder_add_objects_from_string (GtkBuilder    *builder,
126                                                   const char    *buffer,
127                                                   gssize         length,
128                                                   const char   **object_ids,
129                                                   GError       **error);
130 GDK_AVAILABLE_IN_ALL
131 GObject*     gtk_builder_get_object              (GtkBuilder    *builder,
132                                                   const char    *name);
133 GDK_AVAILABLE_IN_ALL
134 GSList*      gtk_builder_get_objects             (GtkBuilder    *builder);
135 GDK_AVAILABLE_IN_ALL
136 void         gtk_builder_expose_object           (GtkBuilder    *builder,
137                                                   const char    *name,
138                                                   GObject       *object);
139 GDK_AVAILABLE_IN_ALL
140 GObject *    gtk_builder_get_current_object      (GtkBuilder    *builder);
141 GDK_AVAILABLE_IN_ALL
142 void         gtk_builder_set_current_object      (GtkBuilder    *builder,
143                                                   GObject       *current_object);
144 GDK_AVAILABLE_IN_ALL
145 void         gtk_builder_set_translation_domain  (GtkBuilder   	*builder,
146                                                   const char   	*domain);
147 GDK_AVAILABLE_IN_ALL
148 const char * gtk_builder_get_translation_domain  (GtkBuilder   	*builder);
149 GDK_AVAILABLE_IN_ALL
150 GtkBuilderScope *gtk_builder_get_scope           (GtkBuilder    *builder);
151 GDK_AVAILABLE_IN_ALL
152 void         gtk_builder_set_scope               (GtkBuilder    *builder,
153                                                   GtkBuilderScope *scope);
154 GDK_AVAILABLE_IN_ALL
155 GType        gtk_builder_get_type_from_name      (GtkBuilder   	*builder,
156                                                   const char   	*type_name);
157 
158 GDK_AVAILABLE_IN_ALL
159 gboolean     gtk_builder_value_from_string       (GtkBuilder    *builder,
160 						  GParamSpec   	*pspec,
161                                                   const char   	*string,
162                                                   GValue       	*value,
163 						  GError       **error);
164 GDK_AVAILABLE_IN_ALL
165 gboolean     gtk_builder_value_from_string_type  (GtkBuilder    *builder,
166 						  GType        	 type,
167                                                   const char   	*string,
168                                                   GValue       	*value,
169 						  GError       **error);
170 GDK_AVAILABLE_IN_ALL
171 GtkBuilder * gtk_builder_new_from_file           (const char    *filename);
172 GDK_AVAILABLE_IN_ALL
173 GtkBuilder * gtk_builder_new_from_resource       (const char    *resource_path);
174 GDK_AVAILABLE_IN_ALL
175 GtkBuilder * gtk_builder_new_from_string         (const char    *string,
176                                                   gssize         length);
177 
178 GDK_AVAILABLE_IN_ALL
179 GClosure *   gtk_builder_create_closure          (GtkBuilder    *builder,
180                                                   const char    *function_name,
181                                                   GtkBuilderClosureFlags flags,
182                                                   GObject       *object,
183                                                   GError       **error);
184 
185 
186 
187 /**
188  * GTK_BUILDER_WARN_INVALID_CHILD_TYPE:
189  * @object: the `GtkBuildable` on which the warning occurred
190  * @type: the unexpected type value
191  *
192  * This macro should be used to emit a warning about and unexpected @type value
193  * in a `GtkBuildable` add_child implementation.
194  */
195 #define GTK_BUILDER_WARN_INVALID_CHILD_TYPE(object, type) \
196   g_warning ("'%s' is not a valid child type of '%s'", type, g_type_name (G_OBJECT_TYPE (object)))
197 
198 GDK_AVAILABLE_IN_ALL
199 gboolean  gtk_builder_extend_with_template  (GtkBuilder    *builder,
200                                              GObject       *object,
201                                              GType          template_type,
202                                              const char    *buffer,
203                                              gssize         length,
204                                              GError       **error);
205 
206 G_END_DECLS
207 
208 #endif /* __GTK_BUILDER_H__ */
209