Exemplo n.º 1
0
    def __init__(self, model_object):
        super().__init__(None)
        self.__model_object = model_object

        if isinstance(model_object, Project):
            self.setIcon(
                0, image_loader.load_icon(model_object.metamodel.addon.icon))
            self.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable)
        else:
            self.setIcon(0, image_loader.load_icon(model_object.type.icon))
            self.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable
                          | Qt.ItemIsDragEnabled)
Exemplo n.º 2
0
    def __fill(self, drawing_area):
        for widget in self.__widgets:
            self.__vbox.removeWidget(widget)
            sip.delete(widget)

        self.__current_drawing_area = drawing_area
        self.__widgets = []

        if drawing_area is None:
            button = self.__add_button(self.__arrow, _('Select'), None,
                                       drawing_area, True)
            button.setEnabled(False)
            return

        current_connection = None
        current_element = None
        if isinstance(drawing_area.current_action, AddElementAction):
            current_element = drawing_area.current_action.element_type
        elif isinstance(drawing_area.current_action, AddTypedConnectionAction):
            current_connection = drawing_area.current_action.connection_type

        self.__add_button(
            self.__arrow, _('Select'), None, drawing_area,
            current_connection is None and current_element is None)

        self.__add_separator()

        diagram_type = drawing_area.diagram.type

        translation = diagram_type.metamodel.get_translation(
            Application().language.current_language)

        has_elements = False
        for element_type in diagram_type.element_types:
            self.__add_button(image_loader.load_icon(element_type.icon),
                              translation.translate(element_type),
                              (AddElementAction, element_type.id),
                              drawing_area, current_element == element_type.id)
            has_elements = True

        if has_elements:
            self.__add_separator()

        for connection_type in diagram_type.connection_types:
            self.__add_button(image_loader.load_icon(connection_type.icon),
                              translation.translate(connection_type),
                              (AddTypedConnectionAction, connection_type.id),
                              drawing_area,
                              current_connection == connection_type.id)
Exemplo n.º 3
0
    def __tab_lock_status_changed(self, event):
        widget_id = self.__get_tab_widget_id(event.tab)

        if widget_id is not None:
            icon = image_loader.load_icon(event.tab.icon)
            if event.tab.locked:
                icon = combine_icons(icon, ICONS.LOCKED, [self.iconSize()])
            self.setTabIcon(widget_id, icon)
Exemplo n.º 4
0
 def __open_tab(self, event):
     canvas = ScrolledCanvasWidget(self.__main_window,
                                   event.tab.drawing_area)
     icon = image_loader.load_icon(event.tab.icon)
     if event.tab.locked:
         icon = combine_icons(icon, ICONS.LOCKED, [self.iconSize()])
     self.addTab(canvas, icon, event.tab.name)
     self.__handle_last_tab()
Exemplo n.º 5
0
    def __init__(self, main_window, element):
        super().__init__()

        self.__main_window = main_window
        self.__element = element

        metamodel = element.project.metamodel

        sub_menu = self._add_sub_menu_item(_("Add Diagram"))
        for diagram_type in metamodel.diagram_types:
            self._add_type_menu_item(diagram_type,
                                     self.__create_diagram_action, sub_menu)

        direct_element_types = [
            element_type for element_type in metamodel.element_types
            if element_type.allow_direct_add
        ]
        if any(direct_element_types):
            for element_type in direct_element_types:
                self._add_type_menu_item(element_type,
                                         self.__create_element_action,
                                         format=_("Add '{0}'"))
        else:
            sub_menu = self._add_sub_menu_item(_("Add Element"))
            for element_type in metamodel.element_types:
                self._add_type_menu_item(element_type,
                                         self.__create_element_action,
                                         sub_menu)

        self.addSeparator()

        diagrams = [visual.diagram for visual in element.visuals]
        sub_menu = self._add_sub_menu_item(_("Show in Diagram"),
                                           len(diagrams) > 0)
        for diagram in diagrams:
            self._add_menu_item(load_icon(diagram.type.icon),
                                diagram.get_display_name(), None,
                                partial(self.__show_in_diagram, diagram),
                                sub_menu)

        self._add_menu_item("edit-delete", _("Delete"), DELETE_FROM_PROJECT,
                            self.__delete_element_action)

        self.addSeparator()

        if self.__element.has_ufl_dialog:
            self._add_menu_item(None, _("Properties..."), None,
                                self.__open_properties_action)
        else:
            self._add_menu_item(None, _("Properties..."), None)
Exemplo n.º 6
0
    def _add_type_menu_item(self,
                            type,
                            action=None,
                            sub_menu=None,
                            format="{0}"):
        translation = type.metamodel.get_translation(
            Application().language.current_language)

        ret = QAction(format.format(translation.translate(type)), sub_menu
                      or self)

        ret.setIcon(image_loader.load_icon(type.icon))

        if action is None:
            ret.setEnabled(False)
        else:
            ret.triggered.connect(partial(action, type))

        (sub_menu or self).addAction(ret)

        return ret
Exemplo n.º 7
0
 def __init__(self, template):
     translation = template.metamodel.get_translation(Application().language.current_language)
     super().__init__(translation.translate(template))
     self.setIcon(image_loader.load_icon(template.icon))
     self.__template = template
Exemplo n.º 8
0
    def __init__(self, main_window, drawing_area, elements):
        super().__init__()

        self.__main_window = main_window
        self.__elements = tuple(elements)
        self.__drawing_area = drawing_area
        self.__diagram = drawing_area.diagram

        translation = self.__diagram.type.metamodel.get_translation(
            Application().language.current_language)

        something_above = False
        something_below = False
        for element in self.__elements:
            if self.__diagram.get_visual_above(Application().ruler,
                                               element) is not None:
                something_above = True
            if self.__diagram.get_visual_below(Application().ruler,
                                               element) is not None:
                something_below = True

        first_diagram_item = None

        child_diagrams = [
            diagram for element in self.__elements
            for diagram in element.object.diagrams
            if diagram is not self.__diagram
        ]

        if any(child_diagrams):
            diagrams_menu = self._add_sub_menu_item(_("Show Diagram"))

            for diagram in child_diagrams:
                if diagram is not self.__diagram:
                    diagram_item = QAction(diagram.get_display_name(),
                                           diagrams_menu)
                    diagram_item.setIcon(
                        image_loader.load_icon(diagram.type.icon))
                    diagram_item.triggered.connect(
                        partial(self.__show_diagram, diagram))
                    diagrams_menu.addAction(diagram_item)
                    if first_diagram_item is None:
                        first_diagram_item = diagram_item
        else:
            self._add_sub_menu_item(_("Show Diagram"), enabled=False)

        self.addSeparator()

        if drawing_area.can_copy_snippet:
            self._add_menu_item("edit-cut", _("Cut"), QKeySequence.Cut,
                                self.__cut_action)
        else:
            self._add_menu_item("edit-cut", _("Cut"), QKeySequence.Cut)

        if drawing_area.can_copy_snippet:
            self._add_menu_item("edit-copy", _("Copy"), QKeySequence.Copy,
                                self.__copy_action)
        else:
            self._add_menu_item("edit-copy", _("Copy"), QKeySequence.Copy)

        if drawing_area.can_paste_snippet:
            self._add_menu_item("edit-paste", _("Paste"), QKeySequence.Paste,
                                self.__paste_action)
        else:
            self._add_menu_item("edit-paste", _("Paste"), QKeySequence.Paste)

        if drawing_area.can_paste_snippet_duplicate:
            self._add_menu_item("edit-paste", _("Paste Duplicate"),
                                PASTE_DUPLICATE, self.__duplicate_action)
        else:
            self._add_menu_item("edit-paste", _("Paste Duplicate"),
                                PASTE_DUPLICATE)

        self.addSeparator()

        self._add_menu_item(None, _("Hide"), QKeySequence.Delete, self.__hide)
        self._add_menu_item("edit-delete", _("Delete"), DELETE_FROM_PROJECT,
                            self.__delete)

        connections_to_show = []
        if len(self.__elements) == 1:
            for connection in self.__elements[0].object.connections:
                if not self.__diagram.contains(connection):
                    other = connection.get_other_end(self.__elements[0].object)
                    if self.__diagram.contains(other):
                        connections_to_show.append((connection, other))
        if connections_to_show:
            show_menu = self._add_sub_menu_item(_("Show Connection"))

            for connection, element in connections_to_show:
                self._add_menu_item(
                    None,
                    _("{0} to '{1}'").format(
                        translation.translate(connection.type),
                        element.get_display_name()), None,
                    partial(self.__show_connection, connection), show_menu)
        else:
            show_menu = self._add_sub_menu_item(_("Show Connection"),
                                                enabled=False)

        self.addSeparator()

        if len(self.__elements) == 1:
            self._add_menu_item(None, _("Find in the Project Tree"), None,
                                self.__show_in_project)
        else:
            self._add_menu_item(None, _("Find in the Project Tree"), None)

        if something_above or something_below:
            z_order_menu = self._add_sub_menu_item(_("Z-Order"))

            if something_below:
                self._add_menu_item("go-down", _("Lower"), Z_ORDER_LOWER,
                                    self.__z_order_back, z_order_menu)
            else:
                self._add_menu_item("go-down", _("Lower"), Z_ORDER_LOWER, None,
                                    z_order_menu)

            if something_above:
                self._add_menu_item("go-up", _("Raise"), Z_ORDER_RAISE,
                                    self.__z_order_forward, z_order_menu)
            else:
                self._add_menu_item("go-up", _("Raise"), Z_ORDER_RAISE, None,
                                    z_order_menu)

            if something_below:
                self._add_menu_item("go-bottom", _("Lower to Bottom"),
                                    Z_ORDER_TO_BOTTOM, self.__z_order_bottom,
                                    z_order_menu)
            else:
                self._add_menu_item("go-bottom", _("Lower to Bottom"),
                                    Z_ORDER_TO_BOTTOM, None, z_order_menu)

            if something_above:
                self._add_menu_item("go-top", _("Raise to Top"),
                                    Z_ORDER_TO_TOP, self.__z_order_top,
                                    z_order_menu)
            else:
                self._add_menu_item("go-top", _("Raise to Top"),
                                    Z_ORDER_TO_TOP, None, z_order_menu)
        else:
            self._add_sub_menu_item(_("Z-order"), False)

        if len(self.__elements
               ) == 1 and self.__elements[0].object.has_ufl_dialog:
            properties = self._add_menu_item(None, _("Properties..."), None,
                                             self.__edit_properties)
        else:
            properties = self._add_menu_item(None, _("Properties..."), None)

        if len(self.__elements) == 1:
            if self.__elements[
                    0].object.type.default_action == DefaultElementAction.subdiagram:
                if first_diagram_item is not None:
                    diagrams_menu.setDefaultAction(first_diagram_item)
                else:
                    self.setDefaultAction(properties)
            else:
                self.setDefaultAction(properties)