1#![allow(deprecated)]
5
6use crate::{ffi, CellRenderer, CellRendererMode, CellRendererText, TreeIter, TreeModel, TreePath};
7use glib::{
8 object::ObjectType as _,
9 prelude::*,
10 signal::{connect_raw, SignalHandlerId},
11 translate::*,
12};
13use std::boxed::Box as Box_;
14
15glib::wrapper! {
16 #[doc(alias = "GtkCellRendererCombo")]
17 pub struct CellRendererCombo(Object<ffi::GtkCellRendererCombo>) @extends CellRendererText, CellRenderer;
18
19 match fn {
20 type_ => || ffi::gtk_cell_renderer_combo_get_type(),
21 }
22}
23
24impl CellRendererCombo {
25 #[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
26 #[allow(deprecated)]
27 #[doc(alias = "gtk_cell_renderer_combo_new")]
28 pub fn new() -> CellRendererCombo {
29 assert_initialized_main_thread!();
30 unsafe { CellRenderer::from_glib_none(ffi::gtk_cell_renderer_combo_new()).unsafe_cast() }
31 }
32
33 pub fn builder() -> CellRendererComboBuilder {
38 CellRendererComboBuilder::new()
39 }
40
41 #[doc(alias = "has-entry")]
42 pub fn has_entry(&self) -> bool {
43 ObjectExt::property(self, "has-entry")
44 }
45
46 #[doc(alias = "has-entry")]
47 pub fn set_has_entry(&self, has_entry: bool) {
48 ObjectExt::set_property(self, "has-entry", has_entry)
49 }
50
51 pub fn model(&self) -> Option<TreeModel> {
52 ObjectExt::property(self, "model")
53 }
54
55 pub fn set_model<P: IsA<TreeModel>>(&self, model: Option<&P>) {
56 ObjectExt::set_property(self, "model", model)
57 }
58
59 #[doc(alias = "text-column")]
60 pub fn text_column(&self) -> i32 {
61 ObjectExt::property(self, "text-column")
62 }
63
64 #[doc(alias = "text-column")]
65 pub fn set_text_column(&self, text_column: i32) {
66 ObjectExt::set_property(self, "text-column", text_column)
67 }
68
69 #[doc(alias = "changed")]
70 pub fn connect_changed<F: Fn(&Self, TreePath, &TreeIter) + 'static>(
71 &self,
72 f: F,
73 ) -> SignalHandlerId {
74 unsafe extern "C" fn changed_trampoline<
75 F: Fn(&CellRendererCombo, TreePath, &TreeIter) + 'static,
76 >(
77 this: *mut ffi::GtkCellRendererCombo,
78 path_string: *mut std::ffi::c_char,
79 new_iter: *mut ffi::GtkTreeIter,
80 f: glib::ffi::gpointer,
81 ) {
82 let f: &F = &*(f as *const F);
83 let path = from_glib_full(crate::ffi::gtk_tree_path_new_from_string(path_string));
84 f(&from_glib_borrow(this), path, &from_glib_borrow(new_iter))
85 }
86 unsafe {
87 let f: Box_<F> = Box_::new(f);
88 connect_raw(
89 self.as_ptr() as *mut _,
90 c"changed".as_ptr() as *const _,
91 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
92 changed_trampoline::<F> as *const (),
93 )),
94 Box_::into_raw(f),
95 )
96 }
97 }
98
99 #[doc(alias = "has-entry")]
100 pub fn connect_has_entry_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
101 unsafe extern "C" fn notify_has_entry_trampoline<F: Fn(&CellRendererCombo) + 'static>(
102 this: *mut ffi::GtkCellRendererCombo,
103 _param_spec: glib::ffi::gpointer,
104 f: glib::ffi::gpointer,
105 ) {
106 let f: &F = &*(f as *const F);
107 f(&from_glib_borrow(this))
108 }
109 unsafe {
110 let f: Box_<F> = Box_::new(f);
111 connect_raw(
112 self.as_ptr() as *mut _,
113 c"notify::has-entry".as_ptr() as *const _,
114 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
115 notify_has_entry_trampoline::<F> as *const (),
116 )),
117 Box_::into_raw(f),
118 )
119 }
120 }
121
122 #[doc(alias = "model")]
123 pub fn connect_model_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
124 unsafe extern "C" fn notify_model_trampoline<F: Fn(&CellRendererCombo) + 'static>(
125 this: *mut ffi::GtkCellRendererCombo,
126 _param_spec: glib::ffi::gpointer,
127 f: glib::ffi::gpointer,
128 ) {
129 let f: &F = &*(f as *const F);
130 f(&from_glib_borrow(this))
131 }
132 unsafe {
133 let f: Box_<F> = Box_::new(f);
134 connect_raw(
135 self.as_ptr() as *mut _,
136 c"notify::model".as_ptr() as *const _,
137 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
138 notify_model_trampoline::<F> as *const (),
139 )),
140 Box_::into_raw(f),
141 )
142 }
143 }
144
145 #[doc(alias = "text-column")]
146 pub fn connect_text_column_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
147 unsafe extern "C" fn notify_text_column_trampoline<F: Fn(&CellRendererCombo) + 'static>(
148 this: *mut ffi::GtkCellRendererCombo,
149 _param_spec: glib::ffi::gpointer,
150 f: glib::ffi::gpointer,
151 ) {
152 let f: &F = &*(f as *const F);
153 f(&from_glib_borrow(this))
154 }
155 unsafe {
156 let f: Box_<F> = Box_::new(f);
157 connect_raw(
158 self.as_ptr() as *mut _,
159 c"notify::text-column".as_ptr() as *const _,
160 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
161 notify_text_column_trampoline::<F> as *const (),
162 )),
163 Box_::into_raw(f),
164 )
165 }
166 }
167}
168
169impl Default for CellRendererCombo {
170 fn default() -> Self {
171 Self::new()
172 }
173}
174
175#[must_use = "The builder must be built to be used"]
180pub struct CellRendererComboBuilder {
181 builder: glib::object::ObjectBuilder<'static, CellRendererCombo>,
182}
183
184impl CellRendererComboBuilder {
185 fn new() -> Self {
186 Self {
187 builder: glib::object::Object::builder(),
188 }
189 }
190
191 pub fn has_entry(self, has_entry: bool) -> Self {
192 Self {
193 builder: self.builder.property("has-entry", has_entry),
194 }
195 }
196
197 pub fn model(self, model: &impl IsA<TreeModel>) -> Self {
198 Self {
199 builder: self.builder.property("model", model.clone().upcast()),
200 }
201 }
202
203 pub fn text_column(self, text_column: i32) -> Self {
204 Self {
205 builder: self.builder.property("text-column", text_column),
206 }
207 }
208
209 pub fn align_set(self, align_set: bool) -> Self {
210 Self {
211 builder: self.builder.property("align-set", align_set),
212 }
213 }
214
215 pub fn alignment(self, alignment: pango::Alignment) -> Self {
216 Self {
217 builder: self.builder.property("alignment", alignment),
218 }
219 }
220
221 pub fn attributes(self, attributes: &pango::AttrList) -> Self {
222 Self {
223 builder: self.builder.property("attributes", attributes.clone()),
224 }
225 }
226
227 pub fn background(self, background: impl Into<glib::GString>) -> Self {
228 Self {
229 builder: self.builder.property("background", background.into()),
230 }
231 }
232
233 pub fn background_rgba(self, background_rgba: &gdk::RGBA) -> Self {
234 Self {
235 builder: self.builder.property("background-rgba", background_rgba),
236 }
237 }
238
239 pub fn background_set(self, background_set: bool) -> Self {
240 Self {
241 builder: self.builder.property("background-set", background_set),
242 }
243 }
244
245 pub fn editable(self, editable: bool) -> Self {
246 Self {
247 builder: self.builder.property("editable", editable),
248 }
249 }
250
251 pub fn editable_set(self, editable_set: bool) -> Self {
252 Self {
253 builder: self.builder.property("editable-set", editable_set),
254 }
255 }
256
257 pub fn ellipsize(self, ellipsize: pango::EllipsizeMode) -> Self {
258 Self {
259 builder: self.builder.property("ellipsize", ellipsize),
260 }
261 }
262
263 pub fn ellipsize_set(self, ellipsize_set: bool) -> Self {
264 Self {
265 builder: self.builder.property("ellipsize-set", ellipsize_set),
266 }
267 }
268
269 pub fn family(self, family: impl Into<glib::GString>) -> Self {
270 Self {
271 builder: self.builder.property("family", family.into()),
272 }
273 }
274
275 pub fn family_set(self, family_set: bool) -> Self {
276 Self {
277 builder: self.builder.property("family-set", family_set),
278 }
279 }
280
281 pub fn font(self, font: impl Into<glib::GString>) -> Self {
282 Self {
283 builder: self.builder.property("font", font.into()),
284 }
285 }
286
287 pub fn font_desc(self, font_desc: &pango::FontDescription) -> Self {
288 Self {
289 builder: self.builder.property("font-desc", font_desc),
290 }
291 }
292
293 pub fn foreground(self, foreground: impl Into<glib::GString>) -> Self {
294 Self {
295 builder: self.builder.property("foreground", foreground.into()),
296 }
297 }
298
299 pub fn foreground_rgba(self, foreground_rgba: &gdk::RGBA) -> Self {
300 Self {
301 builder: self.builder.property("foreground-rgba", foreground_rgba),
302 }
303 }
304
305 pub fn foreground_set(self, foreground_set: bool) -> Self {
306 Self {
307 builder: self.builder.property("foreground-set", foreground_set),
308 }
309 }
310
311 pub fn language(self, language: impl Into<glib::GString>) -> Self {
312 Self {
313 builder: self.builder.property("language", language.into()),
314 }
315 }
316
317 pub fn language_set(self, language_set: bool) -> Self {
318 Self {
319 builder: self.builder.property("language-set", language_set),
320 }
321 }
322
323 pub fn markup(self, markup: impl Into<glib::GString>) -> Self {
324 Self {
325 builder: self.builder.property("markup", markup.into()),
326 }
327 }
328
329 pub fn max_width_chars(self, max_width_chars: i32) -> Self {
330 Self {
331 builder: self.builder.property("max-width-chars", max_width_chars),
332 }
333 }
334
335 pub fn placeholder_text(self, placeholder_text: impl Into<glib::GString>) -> Self {
336 Self {
337 builder: self
338 .builder
339 .property("placeholder-text", placeholder_text.into()),
340 }
341 }
342
343 pub fn rise(self, rise: i32) -> Self {
344 Self {
345 builder: self.builder.property("rise", rise),
346 }
347 }
348
349 pub fn rise_set(self, rise_set: bool) -> Self {
350 Self {
351 builder: self.builder.property("rise-set", rise_set),
352 }
353 }
354
355 pub fn scale(self, scale: f64) -> Self {
356 Self {
357 builder: self.builder.property("scale", scale),
358 }
359 }
360
361 pub fn scale_set(self, scale_set: bool) -> Self {
362 Self {
363 builder: self.builder.property("scale-set", scale_set),
364 }
365 }
366
367 pub fn single_paragraph_mode(self, single_paragraph_mode: bool) -> Self {
368 Self {
369 builder: self
370 .builder
371 .property("single-paragraph-mode", single_paragraph_mode),
372 }
373 }
374
375 pub fn size(self, size: i32) -> Self {
376 Self {
377 builder: self.builder.property("size", size),
378 }
379 }
380
381 pub fn size_points(self, size_points: f64) -> Self {
382 Self {
383 builder: self.builder.property("size-points", size_points),
384 }
385 }
386
387 pub fn size_set(self, size_set: bool) -> Self {
388 Self {
389 builder: self.builder.property("size-set", size_set),
390 }
391 }
392
393 pub fn stretch(self, stretch: pango::Stretch) -> Self {
394 Self {
395 builder: self.builder.property("stretch", stretch),
396 }
397 }
398
399 pub fn stretch_set(self, stretch_set: bool) -> Self {
400 Self {
401 builder: self.builder.property("stretch-set", stretch_set),
402 }
403 }
404
405 pub fn strikethrough(self, strikethrough: bool) -> Self {
406 Self {
407 builder: self.builder.property("strikethrough", strikethrough),
408 }
409 }
410
411 pub fn strikethrough_set(self, strikethrough_set: bool) -> Self {
412 Self {
413 builder: self
414 .builder
415 .property("strikethrough-set", strikethrough_set),
416 }
417 }
418
419 pub fn style(self, style: pango::Style) -> Self {
420 Self {
421 builder: self.builder.property("style", style),
422 }
423 }
424
425 pub fn style_set(self, style_set: bool) -> Self {
426 Self {
427 builder: self.builder.property("style-set", style_set),
428 }
429 }
430
431 pub fn text(self, text: impl Into<glib::GString>) -> Self {
432 Self {
433 builder: self.builder.property("text", text.into()),
434 }
435 }
436
437 pub fn underline(self, underline: pango::Underline) -> Self {
438 Self {
439 builder: self.builder.property("underline", underline),
440 }
441 }
442
443 pub fn underline_set(self, underline_set: bool) -> Self {
444 Self {
445 builder: self.builder.property("underline-set", underline_set),
446 }
447 }
448
449 pub fn variant(self, variant: pango::Variant) -> Self {
450 Self {
451 builder: self.builder.property("variant", variant),
452 }
453 }
454
455 pub fn variant_set(self, variant_set: bool) -> Self {
456 Self {
457 builder: self.builder.property("variant-set", variant_set),
458 }
459 }
460
461 pub fn weight(self, weight: i32) -> Self {
462 Self {
463 builder: self.builder.property("weight", weight),
464 }
465 }
466
467 pub fn weight_set(self, weight_set: bool) -> Self {
468 Self {
469 builder: self.builder.property("weight-set", weight_set),
470 }
471 }
472
473 pub fn width_chars(self, width_chars: i32) -> Self {
474 Self {
475 builder: self.builder.property("width-chars", width_chars),
476 }
477 }
478
479 pub fn wrap_mode(self, wrap_mode: pango::WrapMode) -> Self {
480 Self {
481 builder: self.builder.property("wrap-mode", wrap_mode),
482 }
483 }
484
485 pub fn wrap_width(self, wrap_width: i32) -> Self {
486 Self {
487 builder: self.builder.property("wrap-width", wrap_width),
488 }
489 }
490
491 pub fn cell_background(self, cell_background: impl Into<glib::GString>) -> Self {
492 Self {
493 builder: self
494 .builder
495 .property("cell-background", cell_background.into()),
496 }
497 }
498
499 pub fn cell_background_rgba(self, cell_background_rgba: &gdk::RGBA) -> Self {
500 Self {
501 builder: self
502 .builder
503 .property("cell-background-rgba", cell_background_rgba),
504 }
505 }
506
507 pub fn cell_background_set(self, cell_background_set: bool) -> Self {
508 Self {
509 builder: self
510 .builder
511 .property("cell-background-set", cell_background_set),
512 }
513 }
514
515 pub fn height(self, height: i32) -> Self {
516 Self {
517 builder: self.builder.property("height", height),
518 }
519 }
520
521 pub fn is_expanded(self, is_expanded: bool) -> Self {
522 Self {
523 builder: self.builder.property("is-expanded", is_expanded),
524 }
525 }
526
527 pub fn is_expander(self, is_expander: bool) -> Self {
528 Self {
529 builder: self.builder.property("is-expander", is_expander),
530 }
531 }
532
533 pub fn mode(self, mode: CellRendererMode) -> Self {
534 Self {
535 builder: self.builder.property("mode", mode),
536 }
537 }
538
539 pub fn sensitive(self, sensitive: bool) -> Self {
540 Self {
541 builder: self.builder.property("sensitive", sensitive),
542 }
543 }
544
545 pub fn visible(self, visible: bool) -> Self {
546 Self {
547 builder: self.builder.property("visible", visible),
548 }
549 }
550
551 pub fn width(self, width: i32) -> Self {
552 Self {
553 builder: self.builder.property("width", width),
554 }
555 }
556
557 pub fn xalign(self, xalign: f32) -> Self {
558 Self {
559 builder: self.builder.property("xalign", xalign),
560 }
561 }
562
563 pub fn xpad(self, xpad: u32) -> Self {
564 Self {
565 builder: self.builder.property("xpad", xpad),
566 }
567 }
568
569 pub fn yalign(self, yalign: f32) -> Self {
570 Self {
571 builder: self.builder.property("yalign", yalign),
572 }
573 }
574
575 pub fn ypad(self, ypad: u32) -> Self {
576 Self {
577 builder: self.builder.property("ypad", ypad),
578 }
579 }
580
581 #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
584 pub fn build(self) -> CellRendererCombo {
585 assert_initialized_main_thread!();
586 self.builder.build()
587 }
588}