Skip to main content

gtk/auto/
font_chooser_dialog.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5#[cfg(feature = "v3_24")]
6#[cfg_attr(docsrs, doc(cfg(feature = "v3_24")))]
7use crate::FontChooserLevel;
8use crate::{
9    Align, Application, Bin, Buildable, Container, Dialog, FontChooser, ResizeMode, Widget, Window,
10    WindowPosition, WindowType, ffi,
11};
12use glib::{prelude::*, translate::*};
13
14glib::wrapper! {
15    /// The [`FontChooserDialog`][crate::FontChooserDialog] widget is a dialog for selecting a font.
16    /// It implements the [`FontChooser`][crate::FontChooser] interface.
17    ///
18    /// # GtkFontChooserDialog as GtkBuildable
19    ///
20    /// The GtkFontChooserDialog implementation of the [`Buildable`][crate::Buildable]
21    /// interface exposes the buttons with the names “select_button”
22    /// and “cancel_button”.
23    ///
24    /// # Implements
25    ///
26    /// [`DialogExt`][trait@crate::prelude::DialogExt], [`GtkWindowExt`][trait@crate::prelude::GtkWindowExt], [`BinExt`][trait@crate::prelude::BinExt], [`ContainerExt`][trait@crate::prelude::ContainerExt], [`WidgetExt`][trait@crate::prelude::WidgetExt], [`trait@glib::ObjectExt`], [`BuildableExt`][trait@crate::prelude::BuildableExt], [`FontChooserExt`][trait@crate::prelude::FontChooserExt], [`DialogExtManual`][trait@crate::prelude::DialogExtManual], [`GtkWindowExtManual`][trait@crate::prelude::GtkWindowExtManual], [`ContainerExtManual`][trait@crate::prelude::ContainerExtManual], [`WidgetExtManual`][trait@crate::prelude::WidgetExtManual], [`BuildableExtManual`][trait@crate::prelude::BuildableExtManual]
27    #[doc(alias = "GtkFontChooserDialog")]
28    pub struct FontChooserDialog(Object<ffi::GtkFontChooserDialog, ffi::GtkFontChooserDialogClass>) @extends Dialog, Window, Bin, Container, Widget, @implements Buildable, FontChooser;
29
30    match fn {
31        type_ => || ffi::gtk_font_chooser_dialog_get_type(),
32    }
33}
34
35impl FontChooserDialog {
36    pub const NONE: Option<&'static FontChooserDialog> = None;
37
38    /// Creates a new [`FontChooserDialog`][crate::FontChooserDialog].
39    /// ## `title`
40    /// Title of the dialog, or [`None`]
41    /// ## `parent`
42    /// Transient parent of the dialog, or [`None`]
43    ///
44    /// # Returns
45    ///
46    /// a new [`FontChooserDialog`][crate::FontChooserDialog]
47    #[doc(alias = "gtk_font_chooser_dialog_new")]
48    pub fn new(title: Option<&str>, parent: Option<&impl IsA<Window>>) -> FontChooserDialog {
49        assert_initialized_main_thread!();
50        unsafe {
51            Widget::from_glib_none(ffi::gtk_font_chooser_dialog_new(
52                title.to_glib_none().0,
53                parent.map(|p| p.as_ref()).to_glib_none().0,
54            ))
55            .unsafe_cast()
56        }
57    }
58
59    // rustdoc-stripper-ignore-next
60    /// Creates a new builder-pattern struct instance to construct [`FontChooserDialog`] objects.
61    ///
62    /// This method returns an instance of [`FontChooserDialogBuilder`](crate::builders::FontChooserDialogBuilder) which can be used to create [`FontChooserDialog`] objects.
63    pub fn builder() -> FontChooserDialogBuilder {
64        FontChooserDialogBuilder::new()
65    }
66}
67
68impl Default for FontChooserDialog {
69    fn default() -> Self {
70        glib::object::Object::new::<Self>()
71    }
72}
73
74// rustdoc-stripper-ignore-next
75/// A [builder-pattern] type to construct [`FontChooserDialog`] objects.
76///
77/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
78#[must_use = "The builder must be built to be used"]
79pub struct FontChooserDialogBuilder {
80    builder: glib::object::ObjectBuilder<'static, FontChooserDialog>,
81}
82
83impl FontChooserDialogBuilder {
84    fn new() -> Self {
85        Self {
86            builder: glib::object::Object::builder(),
87        }
88    }
89
90    /// [`true`] if the dialog uses a [`HeaderBar`][crate::HeaderBar] for action buttons
91    /// instead of the action-area.
92    ///
93    /// For technical reasons, this property is declared as an integer
94    /// property, but you should only set it to [`true`] or [`false`].
95    pub fn use_header_bar(self, use_header_bar: i32) -> Self {
96        Self {
97            builder: self.builder.property("use-header-bar", use_header_bar),
98        }
99    }
100
101    /// Whether the window should receive the input focus.
102    pub fn accept_focus(self, accept_focus: bool) -> Self {
103        Self {
104            builder: self.builder.property("accept-focus", accept_focus),
105        }
106    }
107
108    /// The [`Application`][crate::Application] associated with the window.
109    ///
110    /// The application will be kept alive for at least as long as it
111    /// has any windows associated with it (see [`ApplicationExtManual::hold()`][crate::gio::prelude::ApplicationExtManual::hold()]
112    /// for a way to keep it alive without windows).
113    ///
114    /// Normally, the connection between the application and the window
115    /// will remain until the window is destroyed, but you can explicitly
116    /// remove it by setting the :application property to [`None`].
117    pub fn application(self, application: &impl IsA<Application>) -> Self {
118        Self {
119            builder: self
120                .builder
121                .property("application", application.clone().upcast()),
122        }
123    }
124
125    /// The widget to which this window is attached.
126    /// See [`GtkWindowExt::set_attached_to()`][crate::prelude::GtkWindowExt::set_attached_to()].
127    ///
128    /// Examples of places where specifying this relation is useful are
129    /// for instance a [`Menu`][crate::Menu] created by a [`ComboBox`][crate::ComboBox], a completion
130    /// popup window created by [`Entry`][crate::Entry] or a typeahead search entry
131    /// created by [`TreeView`][crate::TreeView].
132    pub fn attached_to(self, attached_to: &impl IsA<Widget>) -> Self {
133        Self {
134            builder: self
135                .builder
136                .property("attached-to", attached_to.clone().upcast()),
137        }
138    }
139
140    /// Whether the window should be decorated by the window manager.
141    pub fn decorated(self, decorated: bool) -> Self {
142        Self {
143            builder: self.builder.property("decorated", decorated),
144        }
145    }
146
147    pub fn default_height(self, default_height: i32) -> Self {
148        Self {
149            builder: self.builder.property("default-height", default_height),
150        }
151    }
152
153    pub fn default_width(self, default_width: i32) -> Self {
154        Self {
155            builder: self.builder.property("default-width", default_width),
156        }
157    }
158
159    /// Whether the window frame should have a close button.
160    pub fn deletable(self, deletable: bool) -> Self {
161        Self {
162            builder: self.builder.property("deletable", deletable),
163        }
164    }
165
166    pub fn destroy_with_parent(self, destroy_with_parent: bool) -> Self {
167        Self {
168            builder: self
169                .builder
170                .property("destroy-with-parent", destroy_with_parent),
171        }
172    }
173
174    /// Whether the window should receive the input focus when mapped.
175    pub fn focus_on_map(self, focus_on_map: bool) -> Self {
176        Self {
177            builder: self.builder.property("focus-on-map", focus_on_map),
178        }
179    }
180
181    /// Whether 'focus rectangles' are currently visible in this window.
182    ///
183    /// This property is maintained by GTK+ based on user input
184    /// and should not be set by applications.
185    pub fn focus_visible(self, focus_visible: bool) -> Self {
186        Self {
187            builder: self.builder.property("focus-visible", focus_visible),
188        }
189    }
190
191    /// The window gravity of the window. See [`GtkWindowExt::move_()`][crate::prelude::GtkWindowExt::move_()] and [`gdk::Gravity`][crate::gdk::Gravity] for
192    /// more details about window gravity.
193    pub fn gravity(self, gravity: gdk::Gravity) -> Self {
194        Self {
195            builder: self.builder.property("gravity", gravity),
196        }
197    }
198
199    /// Whether the titlebar should be hidden during maximization.
200    pub fn hide_titlebar_when_maximized(self, hide_titlebar_when_maximized: bool) -> Self {
201        Self {
202            builder: self
203                .builder
204                .property("hide-titlebar-when-maximized", hide_titlebar_when_maximized),
205        }
206    }
207
208    pub fn icon(self, icon: &gdk_pixbuf::Pixbuf) -> Self {
209        Self {
210            builder: self.builder.property("icon", icon.clone()),
211        }
212    }
213
214    /// The :icon-name property specifies the name of the themed icon to
215    /// use as the window icon. See [`IconTheme`][crate::IconTheme] for more details.
216    pub fn icon_name(self, icon_name: impl Into<glib::GString>) -> Self {
217        Self {
218            builder: self.builder.property("icon-name", icon_name.into()),
219        }
220    }
221
222    /// Whether mnemonics are currently visible in this window.
223    ///
224    /// This property is maintained by GTK+ based on user input,
225    /// and should not be set by applications.
226    pub fn mnemonics_visible(self, mnemonics_visible: bool) -> Self {
227        Self {
228            builder: self
229                .builder
230                .property("mnemonics-visible", mnemonics_visible),
231        }
232    }
233
234    pub fn modal(self, modal: bool) -> Self {
235        Self {
236            builder: self.builder.property("modal", modal),
237        }
238    }
239
240    pub fn resizable(self, resizable: bool) -> Self {
241        Self {
242            builder: self.builder.property("resizable", resizable),
243        }
244    }
245
246    pub fn role(self, role: impl Into<glib::GString>) -> Self {
247        Self {
248            builder: self.builder.property("role", role.into()),
249        }
250    }
251
252    pub fn screen(self, screen: &gdk::Screen) -> Self {
253        Self {
254            builder: self.builder.property("screen", screen.clone()),
255        }
256    }
257
258    pub fn skip_pager_hint(self, skip_pager_hint: bool) -> Self {
259        Self {
260            builder: self.builder.property("skip-pager-hint", skip_pager_hint),
261        }
262    }
263
264    pub fn skip_taskbar_hint(self, skip_taskbar_hint: bool) -> Self {
265        Self {
266            builder: self
267                .builder
268                .property("skip-taskbar-hint", skip_taskbar_hint),
269        }
270    }
271
272    /// The :startup-id is a write-only property for setting window's
273    /// startup notification identifier. See [`GtkWindowExt::set_startup_id()`][crate::prelude::GtkWindowExt::set_startup_id()]
274    /// for more details.
275    pub fn startup_id(self, startup_id: impl Into<glib::GString>) -> Self {
276        Self {
277            builder: self.builder.property("startup-id", startup_id.into()),
278        }
279    }
280
281    pub fn title(self, title: impl Into<glib::GString>) -> Self {
282        Self {
283            builder: self.builder.property("title", title.into()),
284        }
285    }
286
287    /// The transient parent of the window. See [`GtkWindowExt::set_transient_for()`][crate::prelude::GtkWindowExt::set_transient_for()] for
288    /// more details about transient windows.
289    pub fn transient_for(self, transient_for: &impl IsA<Window>) -> Self {
290        Self {
291            builder: self
292                .builder
293                .property("transient-for", transient_for.clone().upcast()),
294        }
295    }
296
297    pub fn type_(self, type_: WindowType) -> Self {
298        Self {
299            builder: self.builder.property("type", type_),
300        }
301    }
302
303    pub fn type_hint(self, type_hint: gdk::WindowTypeHint) -> Self {
304        Self {
305            builder: self.builder.property("type-hint", type_hint),
306        }
307    }
308
309    pub fn urgency_hint(self, urgency_hint: bool) -> Self {
310        Self {
311            builder: self.builder.property("urgency-hint", urgency_hint),
312        }
313    }
314
315    pub fn window_position(self, window_position: WindowPosition) -> Self {
316        Self {
317            builder: self.builder.property("window-position", window_position),
318        }
319    }
320
321    pub fn border_width(self, border_width: u32) -> Self {
322        Self {
323            builder: self.builder.property("border-width", border_width),
324        }
325    }
326
327    pub fn child(self, child: &impl IsA<Widget>) -> Self {
328        Self {
329            builder: self.builder.property("child", child.clone().upcast()),
330        }
331    }
332
333    pub fn resize_mode(self, resize_mode: ResizeMode) -> Self {
334        Self {
335            builder: self.builder.property("resize-mode", resize_mode),
336        }
337    }
338
339    pub fn app_paintable(self, app_paintable: bool) -> Self {
340        Self {
341            builder: self.builder.property("app-paintable", app_paintable),
342        }
343    }
344
345    pub fn can_default(self, can_default: bool) -> Self {
346        Self {
347            builder: self.builder.property("can-default", can_default),
348        }
349    }
350
351    pub fn can_focus(self, can_focus: bool) -> Self {
352        Self {
353            builder: self.builder.property("can-focus", can_focus),
354        }
355    }
356
357    pub fn events(self, events: gdk::EventMask) -> Self {
358        Self {
359            builder: self.builder.property("events", events),
360        }
361    }
362
363    /// Whether to expand in both directions. Setting this sets both [`hexpand`][struct@crate::Widget#hexpand] and [`vexpand`][struct@crate::Widget#vexpand]
364    pub fn expand(self, expand: bool) -> Self {
365        Self {
366            builder: self.builder.property("expand", expand),
367        }
368    }
369
370    /// Whether the widget should grab focus when it is clicked with the mouse.
371    ///
372    /// This property is only relevant for widgets that can take focus.
373    ///
374    /// Before 3.20, several widgets (GtkButton, GtkFileChooserButton,
375    /// GtkComboBox) implemented this property individually.
376    pub fn focus_on_click(self, focus_on_click: bool) -> Self {
377        Self {
378            builder: self.builder.property("focus-on-click", focus_on_click),
379        }
380    }
381
382    /// How to distribute horizontal space if widget gets extra space, see [`Align`][crate::Align]
383    pub fn halign(self, halign: Align) -> Self {
384        Self {
385            builder: self.builder.property("halign", halign),
386        }
387    }
388
389    pub fn has_default(self, has_default: bool) -> Self {
390        Self {
391            builder: self.builder.property("has-default", has_default),
392        }
393    }
394
395    pub fn has_focus(self, has_focus: bool) -> Self {
396        Self {
397            builder: self.builder.property("has-focus", has_focus),
398        }
399    }
400
401    /// Enables or disables the emission of [`query-tooltip`][struct@crate::Widget#query-tooltip] on `widget`.
402    /// A value of [`true`] indicates that `widget` can have a tooltip, in this case
403    /// the widget will be queried using [`query-tooltip`][struct@crate::Widget#query-tooltip] to determine
404    /// whether it will provide a tooltip or not.
405    ///
406    /// Note that setting this property to [`true`] for the first time will change
407    /// the event masks of the GdkWindows of this widget to include leave-notify
408    /// and motion-notify events. This cannot and will not be undone when the
409    /// property is set to [`false`] again.
410    pub fn has_tooltip(self, has_tooltip: bool) -> Self {
411        Self {
412            builder: self.builder.property("has-tooltip", has_tooltip),
413        }
414    }
415
416    pub fn height_request(self, height_request: i32) -> Self {
417        Self {
418            builder: self.builder.property("height-request", height_request),
419        }
420    }
421
422    /// Whether to expand horizontally. See [`WidgetExt::set_hexpand()`][crate::prelude::WidgetExt::set_hexpand()].
423    pub fn hexpand(self, hexpand: bool) -> Self {
424        Self {
425            builder: self.builder.property("hexpand", hexpand),
426        }
427    }
428
429    /// Whether to use the [`hexpand`][struct@crate::Widget#hexpand] property. See [`WidgetExt::is_hexpand_set()`][crate::prelude::WidgetExt::is_hexpand_set()].
430    pub fn hexpand_set(self, hexpand_set: bool) -> Self {
431        Self {
432            builder: self.builder.property("hexpand-set", hexpand_set),
433        }
434    }
435
436    pub fn is_focus(self, is_focus: bool) -> Self {
437        Self {
438            builder: self.builder.property("is-focus", is_focus),
439        }
440    }
441
442    /// Sets all four sides' margin at once. If read, returns max
443    /// margin on any side.
444    pub fn margin(self, margin: i32) -> Self {
445        Self {
446            builder: self.builder.property("margin", margin),
447        }
448    }
449
450    /// Margin on bottom side of widget.
451    ///
452    /// This property adds margin outside of the widget's normal size
453    /// request, the margin will be added in addition to the size from
454    /// [`WidgetExt::set_size_request()`][crate::prelude::WidgetExt::set_size_request()] for example.
455    pub fn margin_bottom(self, margin_bottom: i32) -> Self {
456        Self {
457            builder: self.builder.property("margin-bottom", margin_bottom),
458        }
459    }
460
461    /// Margin on end of widget, horizontally. This property supports
462    /// left-to-right and right-to-left text directions.
463    ///
464    /// This property adds margin outside of the widget's normal size
465    /// request, the margin will be added in addition to the size from
466    /// [`WidgetExt::set_size_request()`][crate::prelude::WidgetExt::set_size_request()] for example.
467    pub fn margin_end(self, margin_end: i32) -> Self {
468        Self {
469            builder: self.builder.property("margin-end", margin_end),
470        }
471    }
472
473    /// Margin on start of widget, horizontally. This property supports
474    /// left-to-right and right-to-left text directions.
475    ///
476    /// This property adds margin outside of the widget's normal size
477    /// request, the margin will be added in addition to the size from
478    /// [`WidgetExt::set_size_request()`][crate::prelude::WidgetExt::set_size_request()] for example.
479    pub fn margin_start(self, margin_start: i32) -> Self {
480        Self {
481            builder: self.builder.property("margin-start", margin_start),
482        }
483    }
484
485    /// Margin on top side of widget.
486    ///
487    /// This property adds margin outside of the widget's normal size
488    /// request, the margin will be added in addition to the size from
489    /// [`WidgetExt::set_size_request()`][crate::prelude::WidgetExt::set_size_request()] for example.
490    pub fn margin_top(self, margin_top: i32) -> Self {
491        Self {
492            builder: self.builder.property("margin-top", margin_top),
493        }
494    }
495
496    pub fn name(self, name: impl Into<glib::GString>) -> Self {
497        Self {
498            builder: self.builder.property("name", name.into()),
499        }
500    }
501
502    pub fn no_show_all(self, no_show_all: bool) -> Self {
503        Self {
504            builder: self.builder.property("no-show-all", no_show_all),
505        }
506    }
507
508    /// The requested opacity of the widget. See [`WidgetExt::set_opacity()`][crate::prelude::WidgetExt::set_opacity()] for
509    /// more details about window opacity.
510    ///
511    /// Before 3.8 this was only available in GtkWindow
512    pub fn opacity(self, opacity: f64) -> Self {
513        Self {
514            builder: self.builder.property("opacity", opacity),
515        }
516    }
517
518    pub fn parent(self, parent: &impl IsA<Container>) -> Self {
519        Self {
520            builder: self.builder.property("parent", parent.clone().upcast()),
521        }
522    }
523
524    pub fn receives_default(self, receives_default: bool) -> Self {
525        Self {
526            builder: self.builder.property("receives-default", receives_default),
527        }
528    }
529
530    pub fn sensitive(self, sensitive: bool) -> Self {
531        Self {
532            builder: self.builder.property("sensitive", sensitive),
533        }
534    }
535
536    /// Sets the text of tooltip to be the given string, which is marked up
537    /// with the [Pango text markup language][PangoMarkupFormat].
538    /// Also see [`Tooltip::set_markup()`][crate::Tooltip::set_markup()].
539    ///
540    /// This is a convenience property which will take care of getting the
541    /// tooltip shown if the given string is not [`None`]: [`has-tooltip`][struct@crate::Widget#has-tooltip]
542    /// will automatically be set to [`true`] and there will be taken care of
543    /// [`query-tooltip`][struct@crate::Widget#query-tooltip] in the default signal handler.
544    ///
545    /// Note that if both [`tooltip-text`][struct@crate::Widget#tooltip-text] and [`tooltip-markup`][struct@crate::Widget#tooltip-markup]
546    /// are set, the last one wins.
547    pub fn tooltip_markup(self, tooltip_markup: impl Into<glib::GString>) -> Self {
548        Self {
549            builder: self
550                .builder
551                .property("tooltip-markup", tooltip_markup.into()),
552        }
553    }
554
555    /// Sets the text of tooltip to be the given string.
556    ///
557    /// Also see [`Tooltip::set_text()`][crate::Tooltip::set_text()].
558    ///
559    /// This is a convenience property which will take care of getting the
560    /// tooltip shown if the given string is not [`None`]: [`has-tooltip`][struct@crate::Widget#has-tooltip]
561    /// will automatically be set to [`true`] and there will be taken care of
562    /// [`query-tooltip`][struct@crate::Widget#query-tooltip] in the default signal handler.
563    ///
564    /// Note that if both [`tooltip-text`][struct@crate::Widget#tooltip-text] and [`tooltip-markup`][struct@crate::Widget#tooltip-markup]
565    /// are set, the last one wins.
566    pub fn tooltip_text(self, tooltip_text: impl Into<glib::GString>) -> Self {
567        Self {
568            builder: self.builder.property("tooltip-text", tooltip_text.into()),
569        }
570    }
571
572    /// How to distribute vertical space if widget gets extra space, see [`Align`][crate::Align]
573    pub fn valign(self, valign: Align) -> Self {
574        Self {
575            builder: self.builder.property("valign", valign),
576        }
577    }
578
579    /// Whether to expand vertically. See [`WidgetExt::set_vexpand()`][crate::prelude::WidgetExt::set_vexpand()].
580    pub fn vexpand(self, vexpand: bool) -> Self {
581        Self {
582            builder: self.builder.property("vexpand", vexpand),
583        }
584    }
585
586    /// Whether to use the [`vexpand`][struct@crate::Widget#vexpand] property. See [`WidgetExt::is_vexpand_set()`][crate::prelude::WidgetExt::is_vexpand_set()].
587    pub fn vexpand_set(self, vexpand_set: bool) -> Self {
588        Self {
589            builder: self.builder.property("vexpand-set", vexpand_set),
590        }
591    }
592
593    pub fn visible(self, visible: bool) -> Self {
594        Self {
595            builder: self.builder.property("visible", visible),
596        }
597    }
598
599    pub fn width_request(self, width_request: i32) -> Self {
600        Self {
601            builder: self.builder.property("width-request", width_request),
602        }
603    }
604
605    /// The font description as a string, e.g. "Sans Italic 12".
606    pub fn font(self, font: impl Into<glib::GString>) -> Self {
607        Self {
608            builder: self.builder.property("font", font.into()),
609        }
610    }
611
612    /// The font description as a [`pango::FontDescription`][crate::pango::FontDescription].
613    pub fn font_desc(self, font_desc: &pango::FontDescription) -> Self {
614        Self {
615            builder: self.builder.property("font-desc", font_desc),
616        }
617    }
618
619    /// The language for which the [`font-features`][struct@crate::FontChooser#font-features] were
620    /// selected, in a format that is compatible with CSS and with Pango
621    /// attributes.
622    #[cfg(feature = "v3_24")]
623    #[cfg_attr(docsrs, doc(cfg(feature = "v3_24")))]
624    pub fn language(self, language: impl Into<glib::GString>) -> Self {
625        Self {
626            builder: self.builder.property("language", language.into()),
627        }
628    }
629
630    /// The level of granularity to offer for selecting fonts.
631    #[cfg(feature = "v3_24")]
632    #[cfg_attr(docsrs, doc(cfg(feature = "v3_24")))]
633    pub fn level(self, level: FontChooserLevel) -> Self {
634        Self {
635            builder: self.builder.property("level", level),
636        }
637    }
638
639    /// The string with which to preview the font.
640    pub fn preview_text(self, preview_text: impl Into<glib::GString>) -> Self {
641        Self {
642            builder: self.builder.property("preview-text", preview_text.into()),
643        }
644    }
645
646    /// Whether to show an entry to change the preview text.
647    pub fn show_preview_entry(self, show_preview_entry: bool) -> Self {
648        Self {
649            builder: self
650                .builder
651                .property("show-preview-entry", show_preview_entry),
652        }
653    }
654
655    // rustdoc-stripper-ignore-next
656    /// Build the [`FontChooserDialog`].
657    #[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
658    pub fn build(self) -> FontChooserDialog {
659        assert_initialized_main_thread!();
660        self.builder.build()
661    }
662}