示例#1
0
    def add_widget_to_parent(self,
                             widget,
                             target,
                             from_undo=False,
                             from_kv=False,
                             kv_str='',
                             extra_args={}):
        '''This function is used to add the widget to the target.
        :param from_undo: this action is comming from undo
        :param target: target will receive the widget
        :param widget: widget to be added
        '''
        added = False
        if widget is None:
            return False

        with self.sandbox:
            if target is None:
                self.root = widget
                self.sandbox.add_widget(widget)
                widget.size = self.sandbox.size
                added = True
            else:
                if extra_args and self.from_drag:
                    self.drag_wigdet(widget, target, extra_args=extra_args)
                else:
                    target.add_widget(widget)
                    added = True
        if not added:
            return False

        self.widgettree.refresh()

        if not from_kv:
            if not kv_str and hasattr(widget, '_KD_KV_STR'):
                kv_str = widget._KD_KV_STR
                del widget._KD_KV_STR
            self.kv_code_input.add_widget_to_parent(widget,
                                                    target,
                                                    kv_str=kv_str)
        if not from_undo:
            root = App.get_running_app().root
            root.undo_manager.push_operation(
                WidgetOperation('add', widget, target, self, ''))
示例#2
0
    def remove_widget_from_parent(self,
                                  widget,
                                  from_undo=False,
                                  from_kv=False):
        '''This function is used to remove widget its parent.
        :param from_undo: is comming from an undo action
        :param widget: widget to be removed
        '''

        parent = None
        d = get_designer()
        if not widget:
            return

        removed_str = ''
        if not from_kv:
            removed_str = self.kv_code_input.remove_widget_from_parent(widget)
        if widget != self.root:
            parent = widget.parent
            if parent is None and hasattr(widget, 'KD__last_parent'):
                parent = widget.KD__last_parent
            if isinstance(parent.parent, Carousel):
                parent.parent.remove_widget(widget)
            elif isinstance(parent, ScreenManager):
                if isinstance(widget, Screen):
                    parent.remove_widget(widget)
                else:
                    parent.real_remove_widget(widget)
            else:
                parent.remove_widget(widget)
        else:
            self.root.parent.remove_widget(self.root)
            self.root = None

        # if is designer
        if hasattr(d, 'ui_creator'):
            d.ui_creator.widgettree.refresh()
        if not from_undo and hasattr(d, 'ui_creator'):
            d.undo_manager.push_operation(
                WidgetOperation('remove', widget, parent, self, removed_str))
示例#3
0
    def add_widget_to_parent(self,
                             widget,
                             target,
                             from_undo=False,
                             from_kv=False,
                             kv_str='',
                             extra_args={}):
        '''This function is used to add the widget to the target.
        '''
        added = False
        if target is None:
            with self.sandbox:
                self.root = widget
                self.sandbox.add_widget(widget)
                widget.size = self.sandbox.size
                added = True

        else:
            with self.sandbox:
                if extra_args and self.from_drag:
                    self.drag_wigdet(widget, target, extra_args=extra_args)

                else:
                    target.add_widget(widget)
                    added = True

        if not added:
            return False

        self.widgettree.refresh()

        if not from_kv:
            self.kv_code_input.add_widget_to_parent(widget,
                                                    target,
                                                    kv_str=kv_str)
        if not from_undo:
            root = App.get_running_app().root
            root.undo_manager.push_operation(
                WidgetOperation('add', widget, target, self, ''))
示例#4
0
    def remove_widget_from_parent(self,
                                  widget,
                                  from_undo=False,
                                  from_kv=False):
        '''This function is used to remove widget its parent.
        '''

        parent = None
        root = App.get_running_app().root
        if not widget:
            return

        removed_str = ''
        if not from_kv:
            removed_str = self.kv_code_input.remove_widget_from_parent(
                widget, parent)
        if widget != self.root:
            parent = widget.parent
            if isinstance(parent.parent, Carousel):
                parent.parent.remove_widget(widget)

            elif isinstance(parent, ScreenManager):
                if isinstance(widget, Screen):
                    parent.remove_widget(widget)
                else:
                    parent.real_remove_widget(widget)

            else:
                parent.remove_widget(widget)
        else:
            self.root.parent.remove_widget(self.root)
            self.root = None

        # self.tree.delete(widget)
        if root is not None:
            root.ui_creator.widgettree.refresh()
        if not from_undo and root is not None:
            root.undo_manager.push_operation(
                WidgetOperation('remove', widget, parent, self, removed_str))