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