Esempio n. 1
0
    def _clean_old_kv(self, path):
        '''
        Removes widgets and rules already processed to this file
        :param path: file path - the same that in app_widgets
        '''
        for key in dict(self.app_widgets):
            wd = self.app_widgets[key]
            if path != wd.kv_path:
                continue
            wdg = get_app_widget(wd)
            if wdg is None:
                continue
            if wd.is_dynamic:
                del self.app_widgets[key]

            rules = Builder.match(wdg)

            # Cleaning widget rules
            for _rule in rules:
                for _tuple in Builder.rules[:]:
                    if _tuple[1] == _rule:
                        Builder.rules.remove(_tuple)
                        if wd.is_dynamic:
                            Factory.unregister(wd.name.split('@')[0])

            # Cleaning class rules
            for rule in Builder.rules[:]:
                if rule[1].name == '<' + wd.name + '>':
                    Builder.rules.remove(rule)
                    break
    def _clean_old_kv(self, path):
        '''
        Removes widgets and rules already processed to this file
        :param path: file path - the same that in app_widgets
        '''
        for key in dict(self.app_widgets):
            wd = self.app_widgets[key]
            if path != wd.kv_path:
                continue
            wdg = get_app_widget(wd)
            if wdg is None:
                p = get_designer().ui_creator.playground
                if p.root_name == wd.name:
                    wdg = p._last_root
                if not wdg:
                    continue
            if wd.is_dynamic:
                del self.app_widgets[key]

            rules = Builder.match(wdg)

            # Cleaning widget rules
            for _rule in rules:
                for _tuple in Builder.rules[:]:
                    if _tuple[1] == _rule:
                        Builder.rules.remove(_tuple)
                        if wd.is_dynamic:
                            Factory.unregister(wd.name.split('@')[0])

            # Cleaning class rules
            for rule in Builder.rules[:]:
                if rule[1].name == '<' + wd.name + '>':
                    Builder.rules.remove(rule)
                    break
Esempio n. 3
0
    def cleanup(self, stop_watcher=True):
        '''To cleanup everything loaded by previous project.
        '''

        if stop_watcher:
            self.proj_watcher.stop()

        # Remove all class rules and root rules of previous project
        rules = []

        try:
            rules = Builder.match(self.root_rule.widget)
            for _rule in rules:
                for _tuple in Builder.rules[:]:
                    if _tuple[1] == _rule:
                        Builder.rules.remove(_tuple)
        except:
            pass

        for _tuple in Builder.rules[:]:
            for _rule in self.class_rules:
                if "<" + _rule.name + ">" == _tuple[1].name:
                    Builder.rules.remove(_tuple)

        if self.root_rule and not self._is_root_already_in_factory and\
                hasattr(Factory, self.root_rule.name):
            Factory.unregister(self.root_rule.name)

        self._app_file = None
        self._app_class = None
        self._app_module = None
        self._app = None
        # Remove previous project directories
        for _dir in self._dir_list:
            try:
                sys.path.remove(_dir)
            except:
                pass

        self.kv_file_list = []
        self.file_list = []
        self._dir_list = []
        self.class_rules = []
        self.list_comments = []
        self.custom_widgets = []
        self.dict_file_type_and_path = {}
        self.root_rule = None
        self._root_rule = None
Esempio n. 4
0
    def reload_from_str(self, root_str):
        '''To reload from root_str
        '''

        rules = []
        # Cleaning root rules
        try:
            rules = Builder.match(self.root_rule.widget)
            for _rule in rules:
                for _tuple in Builder.rules[:]:
                    if _tuple[1] == _rule:
                        Builder.rules.remove(_tuple)
        except:
            pass

        # Cleaning class rules
        for _rule in self.class_rules:
            for rule in Builder.rules[:]:
                if rule[1].name == '<' + _rule.name + '>':
                    Builder.rules.remove(rule)
                    break

        root_widget = None
        # Remove all the 'app' lines
        root_str = re.sub(r'.+app+.+', '', root_str)

        root_widget = Builder.load_string(root_str)

        if not root_widget:
            root_widget = self.get_widget_of_class(self.root_rule.name)
            self.root_rule.widget = root_widget

        if not root_widget:
            root_name = root_str[:root_str.find('\n')]
            root_name = root_widget.replace(':', '').replace('<', '')
            root_name = root_widget.replace('>', '')
            root_widget = self.set_root_widget(root_name)

        return root_widget