1
1
// Take a look at the license at the top of the repository in the LICENSE file.
2
2
3
- use crate :: Builder ;
3
+ use crate :: { Builder , Widget } ;
4
4
use glib:: prelude:: * ;
5
5
use glib:: translate:: * ;
6
6
use glib:: GString ;
7
7
use glib:: Object ;
8
8
use std:: path:: Path ;
9
+ use std:: ptr;
9
10
10
11
impl Builder {
11
12
#[ doc( alias = "gtk_builder_new_from_file" ) ]
@@ -26,13 +27,36 @@ pub trait BuilderExtManual: 'static {
26
27
27
28
#[ doc( alias = "gtk_builder_add_from_file" ) ]
28
29
fn add_from_file < T : AsRef < Path > > ( & self , file_path : T ) -> Result < ( ) , glib:: Error > ;
30
+ #[ doc( alias = "gtk_builder_add_from_resource" ) ]
31
+ fn add_from_resource ( & self , resource_path : & str ) -> Result < ( ) , glib:: Error > ;
32
+ #[ doc( alias = "gtk_builder_add_from_string" ) ]
33
+ fn add_from_string ( & self , buffer : & str ) -> Result < ( ) , glib:: Error > ;
34
+
35
+ #[ doc( alias = "gtk_builder_add_objects_from_resource" ) ]
36
+ fn add_objects_from_resource (
37
+ & self ,
38
+ resource_path : & str ,
39
+ object_ids : & [ & str ] ,
40
+ ) -> Result < ( ) , glib:: Error > ;
41
+ #[ doc( alias = "gtk_builder_add_objects_from_string" ) ]
42
+ fn add_objects_from_string ( & self , buffer : & str , object_ids : & [ & str ] )
43
+ -> Result < ( ) , glib:: Error > ;
44
+
29
45
#[ doc( alias = "gtk_builder_connect_signals_full" ) ]
30
46
fn connect_signals <
31
47
P : FnMut ( & Builder , & str ) -> Box < dyn Fn ( & [ glib:: Value ] ) -> Option < glib:: Value > + ' static > ,
32
48
> (
33
49
& self ,
34
50
func : P ,
35
51
) ;
52
+
53
+ #[ doc( alias = "gtk_builder_extend_with_template" ) ]
54
+ fn extend_with_template (
55
+ & self ,
56
+ widget : & impl IsA < Widget > ,
57
+ template_type : glib:: types:: Type ,
58
+ buffer : & str ,
59
+ ) -> Result < ( ) , glib:: Error > ;
36
60
}
37
61
38
62
impl < O : IsA < Builder > > BuilderExtManual for O {
@@ -62,6 +86,88 @@ impl<O: IsA<Builder>> BuilderExtManual for O {
62
86
}
63
87
}
64
88
89
+ fn add_from_resource ( & self , resource_path : & str ) -> Result < ( ) , glib:: Error > {
90
+ unsafe {
91
+ let mut error = ptr:: null_mut ( ) ;
92
+ let exit_code = ffi:: gtk_builder_add_from_resource (
93
+ self . as_ref ( ) . to_glib_none ( ) . 0 ,
94
+ resource_path. to_glib_none ( ) . 0 ,
95
+ & mut error,
96
+ ) ;
97
+ assert_eq ! ( exit_code == 0 , !error. is_null( ) ) ;
98
+ if error. is_null ( ) {
99
+ Ok ( ( ) )
100
+ } else {
101
+ Err ( from_glib_full ( error) )
102
+ }
103
+ }
104
+ }
105
+
106
+ fn add_from_string ( & self , buffer : & str ) -> Result < ( ) , glib:: Error > {
107
+ let length = buffer. len ( ) as usize ;
108
+ unsafe {
109
+ let mut error = ptr:: null_mut ( ) ;
110
+ let exit_code = ffi:: gtk_builder_add_from_string (
111
+ self . as_ref ( ) . to_glib_none ( ) . 0 ,
112
+ buffer. to_glib_none ( ) . 0 ,
113
+ length,
114
+ & mut error,
115
+ ) ;
116
+ assert_eq ! ( exit_code == 0 , !error. is_null( ) ) ;
117
+ if error. is_null ( ) {
118
+ Ok ( ( ) )
119
+ } else {
120
+ Err ( from_glib_full ( error) )
121
+ }
122
+ }
123
+ }
124
+
125
+ fn add_objects_from_resource (
126
+ & self ,
127
+ resource_path : & str ,
128
+ object_ids : & [ & str ] ,
129
+ ) -> Result < ( ) , glib:: Error > {
130
+ unsafe {
131
+ let mut error = ptr:: null_mut ( ) ;
132
+ let exit_code = ffi:: gtk_builder_add_objects_from_resource (
133
+ self . as_ref ( ) . to_glib_none ( ) . 0 ,
134
+ resource_path. to_glib_none ( ) . 0 ,
135
+ object_ids. to_glib_none ( ) . 0 ,
136
+ & mut error,
137
+ ) ;
138
+ assert_eq ! ( exit_code == 0 , !error. is_null( ) ) ;
139
+ if error. is_null ( ) {
140
+ Ok ( ( ) )
141
+ } else {
142
+ Err ( from_glib_full ( error) )
143
+ }
144
+ }
145
+ }
146
+
147
+ fn add_objects_from_string (
148
+ & self ,
149
+ buffer : & str ,
150
+ object_ids : & [ & str ] ,
151
+ ) -> Result < ( ) , glib:: Error > {
152
+ let length = buffer. len ( ) as usize ;
153
+ unsafe {
154
+ let mut error = ptr:: null_mut ( ) ;
155
+ let exit_code = ffi:: gtk_builder_add_objects_from_string (
156
+ self . as_ref ( ) . to_glib_none ( ) . 0 ,
157
+ buffer. to_glib_none ( ) . 0 ,
158
+ length,
159
+ object_ids. to_glib_none ( ) . 0 ,
160
+ & mut error,
161
+ ) ;
162
+ assert_eq ! ( exit_code == 0 , !error. is_null( ) ) ;
163
+ if error. is_null ( ) {
164
+ Ok ( ( ) )
165
+ } else {
166
+ Err ( from_glib_full ( error) )
167
+ }
168
+ }
169
+ }
170
+
65
171
fn connect_signals <
66
172
P : FnMut ( & Builder , & str ) -> Box < dyn Fn ( & [ glib:: Value ] ) -> Option < glib:: Value > + ' static > ,
67
173
> (
@@ -110,4 +216,30 @@ impl<O: IsA<Builder>> BuilderExtManual for O {
110
216
) ;
111
217
}
112
218
}
219
+
220
+ fn extend_with_template (
221
+ & self ,
222
+ widget : & impl IsA < Widget > ,
223
+ template_type : glib:: types:: Type ,
224
+ buffer : & str ,
225
+ ) -> Result < ( ) , glib:: Error > {
226
+ let length = buffer. len ( ) as usize ;
227
+ unsafe {
228
+ let mut error = ptr:: null_mut ( ) ;
229
+ let exit_code = ffi:: gtk_builder_extend_with_template (
230
+ self . as_ref ( ) . to_glib_none ( ) . 0 ,
231
+ widget. as_ref ( ) . to_glib_none ( ) . 0 ,
232
+ template_type. into_glib ( ) ,
233
+ buffer. to_glib_none ( ) . 0 ,
234
+ length,
235
+ & mut error,
236
+ ) ;
237
+ assert_eq ! ( exit_code == 0 , !error. is_null( ) ) ;
238
+ if error. is_null ( ) {
239
+ Ok ( ( ) )
240
+ } else {
241
+ Err ( from_glib_full ( error) )
242
+ }
243
+ }
244
+ }
113
245
}
0 commit comments