Exemple #1
0
 def mouseReleaseEvent(self, event):
     if self.isEnabled():
         self.add_button.setDown(False)
         ctrl.ui.set_scope(self.key)
         ctrl.deselect_objects()
         ctrl.call_watchers(self, 'scope_changed')
     QtWidgets.QFrame.mouseReleaseEvent(self, event)
Exemple #2
0
 def mouseReleaseEvent(self, event):
     if self.isEnabled():
         self.add_button.setDown(False)
         ctrl.ui.set_scope(self.key)
         ctrl.deselect_objects()
         ctrl.call_watchers(self, 'scope_changed')
     QtWidgets.QFrame.mouseReleaseEvent(self, event)
Exemple #3
0
    def compute_angle_for_pos(self, event_pos, adjustment):
        """

        :param top_left:
        """
        edge = self._host
        start_pos, end_point = self.get_label_line_positions()
        # closest_magnet = self.find_closest_magnet(top_left, start_pos)
        # line_x = top_left.x() + closest_magnet[0] - start_pos.x()
        # line_y = top_left.y() + closest_magnet[1] - start_pos.y()
        line_x = event_pos.x() - start_pos.x()
        line_y = event_pos.y() - start_pos.y()
        rad = math.atan2(line_y, line_x)
        edge_angle = (360 - edge.get_angle_at(self.label_start))
        my_angle = math.degrees(rad)
        if my_angle < 0:
            my_angle += 360
        a1 = my_angle - edge_angle
        a2 = my_angle - edge_angle + 360
        if abs(a1) < abs(a2):
            new_angle = a1
        else:
            new_angle = a2
        self.label_angle = new_angle
        self.label_dist = math.hypot(line_x, line_y)
        ctrl.call_watchers(edge, 'edge_label_adjust', 'adjustment', adjustment)
Exemple #4
0
 def switch_project(self, i):
     self.forest.retire_from_drawing()
     self.forest_keeper = self.forest_keepers[i]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
     self.change_forest()
     self.ui_manager.update_projects_menu()
     return self.forest_keeper
Exemple #5
0
    def compute_angle_for_pos(self, event_pos, adjustment):
        """

        :param top_left:
        """
        edge = self._host
        start_pos, end_point = self.get_label_line_positions()
        # closest_magnet = self.find_closest_magnet(top_left, start_pos)
        # line_x = top_left.x() + closest_magnet[0] - start_pos.x()
        # line_y = top_left.y() + closest_magnet[1] - start_pos.y()
        line_x = event_pos.x() - start_pos.x()
        line_y = event_pos.y() - start_pos.y()
        rad = math.atan2(line_y, line_x)
        edge_angle = (360 - edge.get_angle_at(self.label_start))
        my_angle = math.degrees(rad)
        if my_angle < 0:
            my_angle += 360
        a1 = my_angle - edge_angle
        a2 = my_angle - edge_angle + 360
        if abs(a1) < abs(a2):
            new_angle = a1
        else:
            new_angle = a2
        self.label_angle = new_angle
        self.label_dist = math.hypot(line_x, line_y)
        ctrl.call_watchers(edge, 'edge_label_adjust', 'adjustment', adjustment)
Exemple #6
0
 def change_view_mode(self, syntactic_mode):
     t = time.time()
     ctrl.settings.set('syntactic_mode', syntactic_mode, level=g.FOREST)
     label_text_mode = ctrl.settings.get('label_text_mode')
     if syntactic_mode:
         self.old_label_mode = label_text_mode
         if label_text_mode == g.NODE_LABELS:
             ctrl.settings.set('label_text_mode', g.SYN_LABELS, level=g.FOREST)
         elif label_text_mode == g.NODE_LABELS_FOR_LEAVES:
             ctrl.settings.set('label_text_mode', g.SYN_LABELS_FOR_LEAVES, level=g.FOREST)
     else:
         if self.old_label_mode == g.NODE_LABELS or \
                         self.old_label_mode == g.NODE_LABELS_FOR_LEAVES:
             ctrl.settings.set('label_text_mode', self.old_label_mode, level=g.FOREST)
     nodes = list(self.nodes.values())
     for node in nodes:
         node.update_label()
         node.update_visibility(skip_label=True)
     ctrl.call_watchers(self, 'view_mode_changed', value=syntactic_mode)
     if syntactic_mode:
         if ctrl.main.color_manager.paper().value() < 100:
             ctrl.settings.set('temp_color_theme', 'dk_gray', level=g.FOREST)
         else:
             ctrl.settings.set('temp_color_theme', 'gray', level=g.FOREST)
     else:
         ctrl.settings.set('temp_color_theme', '', level=g.FOREST)
     ctrl.main.update_colors()
Exemple #7
0
 def switch_project(self, i):
     self.forest.retire_from_drawing()
     self.forest_keeper = self.forest_keepers[i]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
     self.change_forest()
     self.ui_manager.update_projects_menu()
     return self.forest_keeper
Exemple #8
0
 def init_forest_keepers(self):
     """ Put empty forest keepers (Kataja documents) in place -- you want to do this after
     plugins have changed the classes that implement these.
     :return:
     """
     self.forest_keepers = [classes.get('KatajaDocument')()]
     self.forest_keeper = self.forest_keepers[0]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
Exemple #9
0
 def init_forest_keepers(self):
     """ Put empty forest keepers (Kataja documents) in place -- you want to do this after
     plugins have changed the classes that implement these.
     :return:
     """
     self.forest_keepers = [classes.get('KatajaDocument')()]
     self.forest_keeper = self.forest_keepers[0]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
Exemple #10
0
    def resizeEvent(self, event):
        """

        :param event:
        """
        QtWidgets.QGraphicsView.resizeEvent(self, event)
        #self._last_rect = self.mapToScene(self.rect()).boundingRect()
        ctrl.call_watchers(self, 'viewport_changed')
Exemple #11
0
    def resizeEvent(self, event):
        """

        :param event:
        """
        QtWidgets.QGraphicsView.resizeEvent(self, event)
        # self._last_rect = self.mapToScene(self.rect()).boundingRect()
        ctrl.call_watchers(self, "viewport_changed")
Exemple #12
0
 def call_watchers(self, signal, field_name=None, value=None):
     """ Alert (UI) objects that are watching for changes for given field
     in this object
     :param signal:
     :param field_name:
     :param value:
     :return:
     """
     ctrl.call_watchers(self, signal, field_name, value)
Exemple #13
0
 def call_watchers(self, signal, field_name=None, value=None):
     """ Alert (UI) objects that are watching for changes for given field
     in this object
     :param signal:
     :param field_name:
     :param value:
     :return:
     """
     ctrl.call_watchers(self, signal, field_name, value)
Exemple #14
0
    def set_color(self,
                  key,
                  color,
                  compute_companions=False,
                  contrast=65,
                  can_save=True):
        """ In its simplest, put a color to palette dict. If palette is not custom palette and
        color is not going to custom colors slot, then make a new palette and switch to use
        it."""

        if self.theme_key in self.default_themes and not key.startswith(
                'custom'):
            new_key, name = self.create_custom_theme_from_modification(
                key, color, contrast)
            ctrl.settings.set('color_theme', new_key, level=PREFS)
            ctrl.settings.set('color_theme', new_key, level=DOCUMENT)
            self.update_custom_themes()
            ctrl.main.update_colors(randomise=False, animate=False)
            ctrl.call_watchers(self, 'color_themes_changed')
        else:
            self.d[key] = color
            if compute_companions:
                if key == 'content1':
                    self.compute_palette(color.getHsvF()[:3],
                                         contrast=contrast)
                    self.d['content2'] = adjust_lightness(color, 8)
                    self.d['content3'] = adjust_lightness(color, -8)
                elif key == 'background1':
                    r, g, b, a = self.drawing().getRgbF()
                    h, s, l = rgb_to_husl(r, g, b)
                    if l < 0.7:
                        self.d['background2'] = adjust_lightness(color, -8)
                    else:
                        self.d['background2'] = adjust_lightness(color, 8)
            if key.startswith('custom') and can_save:
                if 'custom_colors' in ctrl.settings.s_document:
                    ctrl.settings.s_document['custom_colors'][
                        key] = color.getRgbF()
                else:
                    ctrl.settings.s_document['custom_colors'] = {
                        key: color.getRgbF()
                    }
                prefs.custom_colors[key] = color.getRgbF()
            if self.theme_key in self.custom_themes:
                # same theme_data object also lives in prefs, updating it once does them both
                theme_data = self.custom_themes[self.theme_key]
                c = theme_data['colors']
                for key, color in self.d.items():
                    c[key] = color.getRgbF()
                if not self.theme_key in prefs.custom_themes:
                    prefs.custom_themes[self.theme_key] = theme_data
                elif prefs.custom_themes[self.theme_key] is not theme_data:
                    prefs.custom_themes[self.theme_key] = theme_data

            self.background_lightness = self.d['background1'].lightnessF()
            ctrl.main.update_colors(randomise=False, animate=False)
Exemple #15
0
    def reset_preferences(self):
        """

        :return:
        """
        prefs.restore_default_preferences(qt_prefs, running_environment, classes)
        ctrl.call_watchers(self, 'color_themes_changed')
        if self.ui_manager.preferences_dialog:
            self.ui_manager.preferences_dialog.close()
        self.ui_manager.preferences_dialog = PreferencesDialog(self)
        self.ui_manager.preferences_dialog.open()
        self.ui_manager.preferences_dialog.trigger_all_updates()
Exemple #16
0
    def reset_preferences(self):
        """

        :return:
        """
        prefs.restore_default_preferences(qt_prefs, running_environment,
                                          classes)
        ctrl.call_watchers(self, 'color_themes_changed')
        if self.ui_manager.preferences_dialog:
            self.ui_manager.preferences_dialog.close()
        self.ui_manager.preferences_dialog = PreferencesDialog(self)
        self.ui_manager.preferences_dialog.open()
        self.ui_manager.preferences_dialog.trigger_all_updates()
Exemple #17
0
    def watch_alerted(self, obj, signal, field_name, value):
        """ Receives alerts from signals that this object has chosen to listen.
         This method will try to sort out the received signals and act accordingly.

        :param obj: the object causing the alarm
        :param signal: identifier for type of the alarm
        :param field_name: name of the field of the object causing the alarm
        :param value: value given to the field
        :return:
        """
        if signal == 'document_changed':
            self.update_custom_themes()
            self.update_custom_colors()
            ctrl.call_watchers(self, 'color_themes_changed')
Exemple #18
0
 def instant_fit_to_view(self, target_rect):
     """ Fit the current scene into view, snugly
     :param target_rect: scene rect that contains all of the items we want to fit into view.
     """
     sr = self.sceneRect()
     # if self.zoom_anim:
     #    self.zoom_anim.stop()
     if target_rect.right() > sr.right() or target_rect.bottom() > sr.bottom():
         self.setSceneRect(sr + QtCore.QMarginsF(0, 0, 500, 500))
     if target_rect.left() < sr.left() or target_rect.top() < sr.top():
         self.setSceneRect(sr + QtCore.QMarginsF(500, 500, 0, 0))
     self.fitInView(target_rect, 1)
     self._fit_scale = self.transform().m11()
     ctrl.call_watchers(self, "viewport_changed")
Exemple #19
0
 def instant_fit_to_view(self, target_rect):
     """ Fit the current scene into view, snugly
     :param target_rect: scene rect that contains all of the items we want to fit into view.
     """
     sr = self.sceneRect()
     #if self.zoom_anim:
     #    self.zoom_anim.stop()
     if target_rect.right() > sr.right() or target_rect.bottom() > sr.bottom():
         self.setSceneRect(sr + QtCore.QMarginsF(0, 0, 500, 500))
     if target_rect.left() < sr.left() or target_rect.top() < sr.top():
         self.setSceneRect(sr + QtCore.QMarginsF(500, 500, 0, 0))
     self.fitInView(target_rect, 1)
     self._fit_scale = self.transform().m11()
     ctrl.call_watchers(self, 'viewport_changed')
Exemple #20
0
    def watch_alerted(self, obj, signal, field_name, value):
        """ Receives alerts from signals that this object has chosen to listen.
         This method will try to sort out the received signals and act accordingly.

        :param obj: the object causing the alarm
        :param signal: identifier for type of the alarm
        :param field_name: name of the field of the object causing the alarm
        :param value: value given to the field
        :return:
        """
        if signal == 'document_changed':
            self.update_custom_themes()
            self.update_custom_colors()
            ctrl.call_watchers(self, 'color_themes_changed')
Exemple #21
0
 def update_colors(self, randomise=False, animate=True):
     cm = self.color_manager
     old_gradient_base = cm.paper()
     cm.update_colors(randomise=randomise)
     self.app.setPalette(cm.get_qt_palette())
     self.update_style_sheet()
     ctrl.call_watchers(self, 'palette_changed')
     if cm.gradient:
         if old_gradient_base != cm.paper() and animate:
             self.graph_scene.fade_background_gradient(old_gradient_base, cm.paper())
         else:
             self.graph_scene.setBackgroundBrush(cm.gradient)
     else:
         self.graph_scene.setBackgroundBrush(qt_prefs.no_brush)
     self.update()
Exemple #22
0
 def create_new_project(self):
     names = [fk.name for fk in self.forest_keepers]
     name_base = 'New project'
     name = 'New project'
     c = 1
     while name in names:
         name = '%s %s' % (name_base, c)
         c += 1
     self.forest.retire_from_drawing()
     self.forest_keepers.append(classes.KatajaDocument(name=name))
     self.forest_keeper = self.forest_keepers[-1]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
     self.change_forest()
     self.ui_manager.update_projects_menu()
     return self.forest_keeper
Exemple #23
0
 def create_new_project(self):
     names = [fk.name for fk in self.forest_keepers]
     name_base = 'New project'
     name = 'New project'
     c = 1
     while name in names:
         name = '%s %s' % (name_base, c)
         c += 1
     self.forest.retire_from_drawing()
     self.forest_keepers.append(classes.KatajaDocument(name=name))
     self.forest_keeper = self.forest_keepers[-1]
     ctrl.call_watchers(self.forest_keeper, 'document_changed')
     self.change_forest()
     self.ui_manager.update_projects_menu()
     return self.forest_keeper
Exemple #24
0
 def change_view_mode(self, syntactic_mode):
     ctrl.settings.set('syntactic_mode', syntactic_mode, level=g.FOREST)
     ctrl.settings.set('show_node_labels', not syntactic_mode, level=g.FOREST)
     for node in list(self.nodes.values()):
         node.update_label()
         node.update_label_visibility()
         node.update_visibility()
     ctrl.call_watchers(self, 'view_mode_changed', value=syntactic_mode)
     if syntactic_mode:
         if ctrl.main.color_manager.paper().value() < 100:
             ctrl.settings.set('temp_color_theme', 'dk_gray', level=g.FOREST)
         else:
             ctrl.settings.set('temp_color_theme', 'gray', level=g.FOREST)
     else:
         ctrl.settings.set('temp_color_theme', '', level=g.FOREST)
     ctrl.main.update_colors()
Exemple #25
0
 def update_colors(self, randomise=False, animate=True):
     t = time.time()
     cm = self.color_manager
     old_gradient_base = cm.paper()
     cm.update_colors(randomise=randomise)
     self.app.setPalette(cm.get_qt_palette())
     self.update_style_sheet()
     ctrl.call_watchers(self, 'palette_changed')
     if cm.gradient:
         if old_gradient_base != cm.paper() and animate:
             self.graph_scene.fade_background_gradient(
                 old_gradient_base, cm.paper())
         else:
             self.graph_scene.setBackgroundBrush(cm.gradient)
     else:
         self.graph_scene.setBackgroundBrush(qt_prefs.no_brush)
     self.update()
Exemple #26
0
    def create_theme_from_current_color(self):
        storage = {}
        for key, col in self.d.items():
            storage[key] = col.getRgbF()

        theme = {
            'name': self.get_color_name(self.hsv),
            'build': 'fixed',
            'hsv': self.hsv,
            'custom': True,
            'contrast': self.theme_contrast,
            'colors': storage
        }
        prefs.custom_themes[self.current_hex] = theme
        self.update_custom_themes()
        ctrl.call_watchers(self, 'color_themes_changed')
        return self.current_hex, theme['name']
Exemple #27
0
    def create_theme_from_current_color(self):
        storage = {}
        for key, col in self.d.items():
            storage[key] = col.getRgbF()

        theme = {
            'name': self.get_color_name(self.hsv),
            'build': 'fixed',
            'hsv': self.hsv,
            'custom': True,
            'contrast': self.theme_contrast,
            'colors': storage
        }
        prefs.custom_themes[self.current_hex] = theme
        self.update_custom_themes()
        ctrl.call_watchers(self, 'color_themes_changed')
        return self.current_hex, theme['name']
Exemple #28
0
    def set_color(self, key, color, compute_companions=False, contrast=65, can_save=True):
        """ In its simplest, put a color to palette dict. If palette is not custom palette and
        color is not going to custom colors slot, then make a new palette and switch to use
        it."""

        if self.theme_key in self.default_themes and not key.startswith('custom'):
            new_key, name = self.create_custom_theme_from_modification(key, color, contrast)
            ctrl.settings.set('color_theme', new_key, level=PREFS)
            ctrl.settings.set('color_theme', new_key, level=DOCUMENT)
            self.update_custom_themes()
            ctrl.main.update_colors(randomise=False, animate=False)
            ctrl.call_watchers(self, 'color_themes_changed')
        else:
            self.d[key] = color
            if compute_companions:
                if key == 'content1':
                    self.compute_palette(color.getHsvF()[:3], contrast=contrast)
                    self.d['content2'] = adjust_lightness(color, 8)
                    self.d['content3'] = adjust_lightness(color, -8)
                elif key == 'background1':
                    r, g, b, a = self.drawing().getRgbF()
                    h, s, l = rgb_to_husl(r, g, b)
                    if l < 0.7:
                        self.d['background2'] = adjust_lightness(color, -8)
                    else:
                        self.d['background2'] = adjust_lightness(color, 8)
            if key.startswith('custom') and can_save:
                if 'custom_colors' in ctrl.settings.s_document:
                    ctrl.settings.s_document['custom_colors'][key] = color.getRgbF()
                else:
                    ctrl.settings.s_document['custom_colors'] = {key: color.getRgbF()}
                prefs.custom_colors[key] = color.getRgbF()
            if self.theme_key in self.custom_themes:
                # same theme_data object also lives in prefs, updating it once does them both
                theme_data = self.custom_themes[self.theme_key]
                c = theme_data['colors']
                for key, color in self.d.items():
                    c[key] = color.getRgbF()
                if not self.theme_key in prefs.custom_themes:
                    prefs.custom_themes[self.theme_key] = theme_data
                elif prefs.custom_themes[self.theme_key] is not theme_data:
                    prefs.custom_themes[self.theme_key] = theme_data

            ctrl.main.update_colors(randomise=False, animate=False)
Exemple #29
0
    def scale_view_by(self, delta):
        """

        :param delta:
        :return:
        """
        if delta < 1.0 and self._scale_factor == 0.3:
            return self._scale_factor
        elif delta > 1.0 and self._scale_factor == 9.0:
            return self._scale_factor
        factor = self.transform().scale(delta, delta).m11()
        if factor < 0.3:
            factor = 0.3
        elif factor > 9.0:
            factor = 9.0
        self.resetTransform()
        self.scale(factor, factor)
        ctrl.call_watchers(self, "viewport_changed")
        return factor
Exemple #30
0
    def scale_view_by(self, delta):
        """

        :param delta:
        :return:
        """
        if delta < 1.0 and self._scale_factor == 0.3:
            return self._scale_factor
        elif delta > 1.0 and self._scale_factor == 9.0:
            return self._scale_factor
        factor = self.transform().scale(delta, delta).m11()
        if factor < 0.3:
            factor = 0.3
        elif factor > 9.0:
            factor = 9.0
        self.resetTransform()
        self.scale(factor, factor)
        ctrl.call_watchers(self, 'viewport_changed')
        return factor
Exemple #31
0
    def method(self):
        """ Change edge shape for selection or in currently active edge type.
        :return: None
        """
        selector = self.sender()
        color_key = selector.receive_color_selection()
        if not color_key:
            return

        # Update color for selected edges
        if ctrl.ui.scope_is_selection:
            for edge in ctrl.selected:
                if isinstance(edge, Edge):
                    edge.color_id = color_key
                    edge.update()
        # ... or update color for all edges of this type
        else:
            ctrl.settings.set_edge_setting('color_id', color_key,
                                           edge_type=ctrl.ui.active_edge_type, level=FOREST)
            for edge in ctrl.forest.edges.values():
                edge.update()
        ctrl.call_watchers(self, 'active_edge_color_changed')  # shape_selector needs this
        if color_key:
            log.info('(s) Changed relation color to: %s' % ctrl.cm.get_color_name(color_key))
Exemple #32
0
    def method(self):
        """ Change edge shape for selection or in currently active edge type.
        :return: None
        """
        selector = self.sender()
        color_key = selector.receive_color_selection()
        if not color_key:
            return

        # Update color for selected edges
        if ctrl.ui.scope_is_selection:
            for edge in ctrl.selected:
                if isinstance(edge, Edge):
                    edge.color_id = color_key
                    edge.update()
        # ... or update color for all edges of this type
        else:
            ctrl.settings.set_edge_setting('color_id', color_key,
                                           edge_type=ctrl.ui.active_edge_type, level=FOREST)
            for edge in ctrl.forest.edges.values():
                edge.update()
        ctrl.call_watchers(self, 'active_edge_color_changed')  # shape_selector needs this
        if color_key:
            log.info('(s) Changed relation color to: %s' % ctrl.cm.get_color_name(color_key))
Exemple #33
0
 def scrollContentsBy(self, x, y):
     ctrl.call_watchers(self, "viewport_changed")
     QtWidgets.QGraphicsView.scrollContentsBy(self, x, y)
Exemple #34
0
 def remove_custom_theme(self, theme_key):
     if theme_key in prefs.custom_themes:
         del prefs.custom_themes[theme_key]
     if theme_key in self.custom_themes:
         del self.custom_themes[theme_key]
     ctrl.call_watchers(self, 'color_themes_changed')
Exemple #35
0
    def method(self, filename=''):
        """ Open file browser to load a kataja data file
        :param filename: optional filename, if given, no file dialog is displayed
        :return: None
        """
        m = ctrl.main
        # fileName  = QtGui.QFileDialog.getOpenFileName(self,
        # self.tr("Open File"),
        # QtCore.QDir.currentPath())
        file_help = """All (*.kataja *.zkataja *.dict *.zdict *.json *.zjson);;
    Kataja files (*.kataja);; Packed Kataja files (*.zkataja);;
    Python dict dumps (*.dict);; Packed python dicts (*.zdict);;
    JSON dumps (*.json);; Packed JSON (*.zjson);;
    Text files containing bracket trees (*.txt, *.tex)"""

        # inspection doesn't recognize that getOpenFileName is static, switch it
        # off:
        # noinspection PyTypeChecker,PyCallByClass
        if not filename:
            filename, filetypes = QtWidgets.QFileDialog.getOpenFileName(ctrl.main,
                                                                        "Open "
                                                                        "KatajaMain "
                                                                        "trees", "",
                                                                        file_help)
        if not filename:
            return
        save_format = 'dict'
        zipped = False
        for key, value, in file_extensions.items():
            if filename.endswith(value):
                i = key.split('.')
                zipped = len(i) == 2
                save_format = i[0]
                break

        m.clear_all()
        if zipped:
            if save_format == 'json' or save_format == 'dict':
                f = gzip.open(filename, 'rt')
            elif save_format == 'pickle':
                f = gzip.open(filename, 'rb')
            else:
                log.info("Failed to load '%s'. Unknown format." % filename)
                return
        else:
            if save_format == 'pickle':
                f = open(filename, 'rb')
            else:
                f = open(filename, 'r')
                # import codecs
                # f = codecs.open(filename, 'rb', encoding = 'utf-8')

        if save_format == 'pickle':
            pickle_worker = pickle.Unpickler(f)
            data = pickle_worker.load()
        elif save_format == 'dict':
            data = ast.literal_eval(f.read())
            # data = eval(f.read())
        elif save_format == 'json':
            data = json.load(f)
        else:
            f.close()
            log.info("Failed to load '%s'. Unknown format." % filename)
            return

        f.close()
        # prefs.update(data['preferences'].__dict__)
        # qt_prefs.update(prefs)
        ctrl.disable_undo()
        m.load_objects(data, m)
        ctrl.resume_undo()
        ctrl.call_watchers(self.forest_keeper, 'document_changed')
        m.change_forest()
        log.info("Loaded '%s'." % filename)
Exemple #36
0
 def remove_custom_theme(self, theme_key):
     if theme_key in prefs.custom_themes:
         del prefs.custom_themes[theme_key]
     if theme_key in self.custom_themes:
         del self.custom_themes[theme_key]
     ctrl.call_watchers(self, 'color_themes_changed')
Exemple #37
0
    def method(self, filename=''):
        """ Open file browser to load a kataja data file
        :param filename: optional filename, if given, no file dialog is displayed
        :return: None
        """
        m = ctrl.main
        # fileName  = QtGui.QFileDialog.getOpenFileName(self,
        # self.tr("Open File"),
        # QtCore.QDir.currentPath())
        file_help = """All (*.kataja *.zkataja *.dict *.zdict *.json *.zjson);;
    Kataja files (*.kataja);; Packed Kataja files (*.zkataja);;
    Python dict dumps (*.dict);; Packed python dicts (*.zdict);;
    JSON dumps (*.json);; Packed JSON (*.zjson);;
    Text files containing bracket trees (*.txt, *.tex)"""

        # inspection doesn't recognize that getOpenFileName is static, switch it
        # off:
        # noinspection PyTypeChecker,PyCallByClass
        if not filename:
            filename, filetypes = QtWidgets.QFileDialog.getOpenFileName(ctrl.main,
                                                                        "Open "
                                                                        "KatajaMain "
                                                                        "trees", "",
                                                                        file_help)
        if not filename:
            return
        save_format = 'dict'
        zipped = False
        for key, value, in file_extensions.items():
            if filename.endswith(value):
                i = key.split('.')
                zipped = len(i) == 2
                save_format = i[0]
                break

        m.clear_all()
        if zipped:
            if save_format == 'json' or save_format == 'dict':
                f = gzip.open(filename, 'rt')
            elif save_format == 'pickle':
                f = gzip.open(filename, 'rb')
            else:
                log.info("Failed to load '%s'. Unknown format." % filename)
                return
        else:
            if save_format == 'pickle':
                f = open(filename, 'rb')
            else:
                f = open(filename, 'r')
                # import codecs
                # f = codecs.open(filename, 'rb', encoding = 'utf-8')

        if save_format == 'pickle':
            pickle_worker = pickle.Unpickler(f)
            data = pickle_worker.load()
        elif save_format == 'dict':
            data = ast.literal_eval(f.read())
            # data = eval(f.read())
        elif save_format == 'json':
            data = json.load(f)
        else:
            f.close()
            log.info("Failed to load '%s'. Unknown format." % filename)
            return

        f.close()
        # prefs.update(data['preferences'].__dict__)
        # qt_prefs.update(prefs)
        ctrl.disable_undo()
        m.load_objects(data, m)
        ctrl.resume_undo()
        ctrl.call_watchers(self.forest_keeper, 'document_changed')
        m.change_forest()
        log.info("Loaded '%s'." % filename)
Exemple #38
0
    def resize_ui_font(self):

        qt_prefs.toggle_large_ui_font(prefs.large_ui_text, prefs.fonts)
        ctrl.call_watchers(self, 'ui_font_changed')
        ctrl.ui.redraw_panels()
Exemple #39
0
 def scrollContentsBy(self, x, y):
     ctrl.call_watchers(self, 'viewport_changed')
     QtWidgets.QGraphicsView.scrollContentsBy(self, x, y)