def build_form_widgets(self):
        """Build widgets to hold settings for edition."""
        ### create special list to hold widgets
        widgets = self.widgets = List2D()

        ### define an initial topleft relative to the
        ### topleft corner of the form 'rect'
        topleft = self.rect.move(5, 5).topleft

        ### instantiate a caption for the form

        caption_label = Object2D.from_surface(
            surface=(
                render_text(
                    text="Type id to move to respective node",
                    border_thickness=2,
                    border_color=(TEXT_SETTINGS["foreground_color"]),
                    **TEXT_SETTINGS,
                )
            ),
            coordinates_name="topleft",
            coordinates_value=topleft,
        )

        widgets.append(caption_label)

        ### update the topleft to a value a bit below
        ### the bottomleft corner of the widgets already
        ### in the versatile list
        topleft = widgets.rect.move(0, 20).bottomleft

        ### instantiate widgets for picking node id

        ## node id label

        node_id_label = Object2D.from_surface(
            surface=render_text(
                text="Node id:", **TEXT_SETTINGS
            ),
            coordinates_name="topleft",
            coordinates_value=topleft,
        )

        widgets.append(node_id_label)

        ## id intfloat entry

        midleft = node_id_label.rect.move(5, 0).midright

        self.id_entry = IntFloatEntry(
            value=0,
            min_value = 0,
            numeric_classes_hint='int',
            loop_holder=self,
            command=self.check_id_and_jump,
            width=100,
            coordinates_name='midleft',
            coordinates_value=midleft,
        )

        widgets.append(self.id_entry)

        ## go button

        midleft = self.id_entry.rect.move(5, 0).midright

        go_button = Button.from_text(
            text="Go to node",
            command=self.check_id_and_jump,
            coordinates_name='midleft',
            coordinates_value=midleft,
            **BUTTON_SETTINGS,
        )

        widgets.append(go_button)

        ## error label

        topleft = node_id_label.rect.move(0, 5).bottomleft

        self.error_label = Label(
            text='',
            coordinates_name='topleft',
            coordinates_value=topleft,
            **ERROR_TEXT_SETTINGS,
        )

        widgets.append(self.error_label)

        ### create and store behaviour for exiting the form
        ### (equivalent to setting the 'running' flag to False)
        self.leave = partial(setattr, self, "running", False)
Build widgets to hold settings for edition.
nodezator/editing/jumptonode.py