Beispiel #1
0
    def __on_save(self, widget=None, data=None):
        new_port = Port()
        for widget in self.side_panel.get_children():
            try:
                new_port.__dict__[widget.get_name()] = widget.get_value()
            except:
                pass

        if new_port.type == "":
            message = "Type can not be empty"
            Dialog().message_dialog("Error", message, self.block_editor)
            return
        if new_port.label == "":
            message = "Label can not be empty"
            Dialog().message_dialog("Error", message, self.block_editor)
            return
        if new_port.name == "":
            message = "Name can not be empty"
            Dialog().message_dialog("Error", message, self.block_editor)
            return
        contains = False
        i = 0
        for port in self.block.ports:
            if port.label == new_port.label:
                self.block.ports[i] = new_port
                contains = True
            i += 1
        if not contains:
            self.block.ports.append(new_port)
        self.__populate_list()
        self.__clean_side_panel()
 def __on_props_edit_ok(self, widget=None, data=None):
     configuration = {}
     for widget in self.side_panel.get_children():
         try:
             configuration[widget.get_name()] = widget.get_value()
         except:
             pass
     if "label" not in configuration or "name" not in configuration or \
             "value" not in configuration:
         return
     if configuration["label"] == "":
         message = "Label can not be empty"
         Dialog().message_dialog("Error", message, self.block_editor)
         return
     if configuration["name"] == "":
         message = "Name can not be empty"
         Dialog().message_dialog("Error", message, self.block_editor)
         return
     contains = False
     i = 0
     for props in self.block.properties:
         if props["label"] == configuration["label"]:
             self.block.properties[i] = configuration
             contains = True
         i += 1
     if not contains:
         self.block.properties.append(configuration)
     self.__populate_property()
     self.__clean_side_panel()
Beispiel #3
0
    def close_tab(self, position=None):
        """
        This method close a tab.

            Parameters:
                * **position**
            Returns:
                * **Types** (:class:`boolean<boolean>`)
        """
        if position is None:
            position = self.get_current_page()
        diagram = self.get_nth_page(position)

        if diagram is None:
            return False

        if diagram.modified:
            self.dialog = Dialog().confirm_dialog(
                _("Diagram ") + diagram.file_name +
                _("is not saved.\nIf you close it"
                  ", changes will be lost.\n"
                  "Confirm?"), self.main_window)
            result = self.dialog.run()
            self.dialog.destroy()
            if result == Gtk.ResponseType.CANCEL:
                return False

        self.remove_page(position)
        self.diagrams.pop(position)
        return True
Beispiel #4
0
    def __get_code_generator(self, diagram):

        if diagram.language is None:
            message = "You shall not generate the code of an empty diagram!"
            Dialog().message_dialog("Error", message, self.main_window)
            return None

        if diagram.code_template is not None:
            return CodeGenerator(diagram)

        template_list = []
        code_templates = System.get_code_templates()

        for key in code_templates:
            if code_templates[key].language == diagram.language:
                template_list.append(code_templates[key])

        if len(template_list) == 0:
            message = "Generator not available for the language " + diagram.language + "."
            Dialog().message_dialog("Error", message, self.main_window)
            return None

        if len(template_list) == 1:
            diagram.code_template = deepcopy(template_list[0])
            return CodeGenerator(diagram)

        select = SelectCodeTemplate(self.main_window, template_list)
        diagram.code_template = deepcopy(select.get_value())
        return CodeGenerator(diagram)
Beispiel #5
0
    def export_diagram(self):
        """
        This method exports the diagram.
        """
        diagram = self.main_window.work_area.get_current_diagram()
        if diagram is None:
            return

        while True:
            name = Dialog().save_dialog(self.main_window,
                                        title=_("Export diagram as png"),
                                        filename=diagram.file_name + ".png",
                                        filetype="png")

            if name is None:
                return
            if name.find(".png") == -1:
                name = name + ".png"
            if Dialog().confirm_overwrite(name, self.main_window):
                break

        result, message = DiagramControl(diagram).export_png(name)

        if not result:
            Dialog().message_dialog("Error", message, self.main_window)
Beispiel #6
0
    def save(self, save_as=False):
        """
        This method save the file.
        """
        diagram = self.main_window.work_area.get_current_diagram()
        if diagram is None:
            return

        if diagram.file_name is "Untitled" or save_as:
            while True:
                name = Dialog().save_dialog(self.main_window,
                                            title=_("Save Diagram"),
                                            filename=diagram.file_name,
                                            filetype="mscd")
                if name and not name.endswith("mscd"):
                    name = (("%s" + ".mscd") % name)
                if Dialog().confirm_overwrite(name, self.main_window):
                    diagram.set_file_name(name)
                    break
        result, message = False, ""

        if diagram.file_name is not None:
            if len(diagram.file_name) > 0:
                result, message = DiagramControl(diagram).save()

        if not result:
            Dialog().message_dialog("Error", message, self.main_window)
Beispiel #7
0
 def __delete(self, widget=None, data=None):
     block = self.block_notebook.get_selected_block()
     if block is None:
         return
     dialog = Dialog().confirm_dialog(_("Are you sure?"), self)
     result = dialog.run()
     dialog.destroy()
     if result == Gtk.ResponseType.OK:
         self.main_window.main_control.delete_block(block)
         self.update()
 def __delete(self, widget=None, data=None):
     name = self.__get_selected()
     if name is None:
         return
     dialog = Dialog().confirm_dialog(_("Are you sure?"), self)
     result = dialog.run()
     dialog.destroy()
     if result == Gtk.ResponseType.OK:
         self.main_window.main_control.delete_port(name)
         self.__update()
Beispiel #9
0
 def delete_code_template(self, code_template_name):
     filename = CodeTemplateControl.delete_code_template(code_template_name)
     if filename is None:
         message = "This code template is a python file installed in the System.\n"
         message = message + "Sorry, you can't remove it"
         Dialog().message_dialog("Error", message, self.main_window)
     else:
         Dialog().message_dialog("Info", "File " + filename + " deleted.",
                                 self.main_window)
     System.reload()
 def __property_delete(self, widget=None, data=None):
     treeselection = self.props_tree_view.get_selection()
     model, iterac = treeselection.get_selected()
     if iterac is None:
         return None
     dialog = Dialog().confirm_dialog(_("Are you sure?"), self.block_editor)
     result = dialog.run()
     dialog.destroy()
     if result != Gtk.ResponseType.OK:
         return
     path = model.get_path(iterac)
     del self.block.get_properties()[int(str(path))]
     self.__populate_property()
     self.__clean_side_panel()
Beispiel #11
0
    def add_block(self, block):
        """
        This method add a block.

        Parameters:

                * **Types** (:class:`block<>`)
        Returns:

            * **Types** (:class:`boolean<boolean>`)
        """
        diagram = self.main_window.work_area.get_current_diagram()
        if diagram is None:
            return False
        new_block = BlockModel(block)
        new_block = deepcopy(new_block)
        new_block = Block(diagram, new_block)
        if not DiagramControl(diagram).add_block(new_block):
            message = "Block language is different from diagram language.\n" +\
                "Diagram is expecting to generate " + diagram.language + \
                " code while block is writen in " + block.language
            Dialog().message_dialog("Error", message, self.main_window)
            return None
        diagram.redraw()
        return new_block
Beispiel #12
0
    def save_source(self, code=None):
        """
        This method saves the source code.
        """
        diagram = self.main_window.work_area.get_current_diagram()
        if diagram is None:
            return

        generator = DiagramControl(diagram).get_code_template()
        while True:
            name = Dialog().save_dialog(self.main_window,
                        filename = generator.get_dir_name() + \
                            generator.get_filename())
            if Dialog().confirm_overwrite(name, self.main_window):
                diagram.set_file_name(name)
                break

        generator.save_code(name=name, code=code)
Beispiel #13
0
 def select_open(self):
     """
     This method open a selected file.
     """
     file_name = Dialog().open_dialog("Open Diagram",
                                      self.main_window,
                                      filetype="mscd")
     if file_name is None or file_name == "":
         return
     self.open(file_name)
Beispiel #14
0
    def __delete(self, widget=None, data=None):
        treeselection = None
        treeselection = self.tree_view.get_selection()
        model, iterac = treeselection.get_selected()
        if iterac is None:
            return None
        path = model.get_path(iterac)
        name = model.get_value(model.get_iter(path), 0)

        dialog = Dialog().confirm_dialog(_("Are you sure?"), self)
        result = dialog.run()
        dialog.destroy()
        if result != Gtk.ResponseType.OK:
            return
        path = model.get_path(iterac)

        del self.codes[name]
        self.__populate_list()
        self.__clean_side_panel()
Beispiel #15
0
 def __add_code_part(self, widget=None, data=None):
     name = ""
     code = ""
     for widget in self.side_panel.get_children():
         if widget.get_name() == "name":
             name = widget.get_value()
         if widget.get_name() == "code":
             code = widget.get_value()
     if name == "":
         message = "Code Part Name can not be empty"
         Dialog().message_dialog("Error", message, self)
         return
     if code == "":
         message = "Code can not be empty"
         Dialog().message_dialog("Error", message, self)
         return
     contains = False
     i = 0
     self.codes[name] = code
     self.__populate_list()
     self.__clean_side_panel()
 def __on_save(self, widget=None, data=None):
     new_port = {}
     for widget in self.side_panel.get_children():
         try:
             new_port[widget.get_name()] = widget.get_value()
         except:
             pass
     if "label" not in new_port or "name" not in new_port or \
             "type" not in new_port:
         return
     if new_port["type"] == "":
         message = "Type can not be empty"
         Dialog().message_dialog("Error", message, self.plugin_editor)
         return
     if new_port["label"] == "":
         message = "Label can not be empty"
         Dialog().message_dialog("Error", message, self.plugin_editor)
         return
     if new_port["name"] == "":
         message = "Name can not be empty"
         Dialog().message_dialog("Error", message, self.plugin_editor)
         return
     contains = False
     i = 0
     collection = None
     if self.selected_port == "Input":
         collection = self.plugin.in_ports
     else:
         collection = self.plugin.out_ports
     for port in collection:
         if port["label"] == new_port["label"]:
             collection[i] = new_port
             contains = True
         i += 1
     if not contains:
         collection.append(new_port)
     self.__populate_lists()
     self.__clean_side_panel()
    def __property_delete(self, widget=None, data=None):
        treeselection = None
        if data == "Input":
            treeselection = self.input_tree_view.get_selection()
        else:
            treeselection = self.output_tree_view.get_selection()
        model, iterac = treeselection.get_selected()
        if iterac is None:
            return None
        dialog = Dialog().confirm_dialog(_("Are you sure?"),
                                         self.plugin_editor)
        result = dialog.run()
        dialog.destroy()
        if result != Gtk.ResponseType.OK:
            return
        path = model.get_path(iterac)

        if data == "Input":
            del self.plugin.in_ports[int(str(path))]
        else:
            del self.plugin.out_ports[int(str(path))]
        self.__populate_lists()
        self.__clean_side_panel()
Beispiel #18
0
 def setUp(self):
     """Do the test basic setup."""
     self.dialog = Dialog()
Beispiel #19
0
class TestDialog(TestCase):
    def setUp(self):
        """Do the test basic setup."""
        self.dialog = Dialog()

    # ----------------------------------------------------------------------x
    def test_open_dialog(self):

        # Deve-se apertar o botão CANCEL
        title = "Open"
        main_window = None
        filetype = None
        self.assertIsNone(self.dialog.open_dialog(title, main_window,
                                                  filetype))

        # Deve-se pesquisar um arquivo para abrir
        title = "Open"
        main_window = MainWindow()
        filetype = "xml"
        self.assertIsNotNone(
            self.dialog.open_dialog(title, main_window, filetype))

        #title = None
        #main_window = None
        #filetype = None
        #self.assertIsNone(self.dialog.open_dialog(title, main_window, filetype))

    # ----------------------------------------------------------------------x
    def test_save_dialog(self):
        main_window = MainWindow()
        title = "Save"
        filetype = None
        self.assertIsNone(self.dialog.save_dialog(main_window, title,
                                                  filetype))

        # TESTANDO O BOTAO CANCEL
        main_window = MainWindow()
        title = "Save"
        filetype = "XML"
        self.assertIsNone(self.dialog.save_dialog(main_window, title,
                                                  filetype))

        # TESTANDO O BOTAO OK
        main_window = MainWindow()
        title = "Save"
        filetype = "XML"
        self.assertIsNotNone(
            self.dialog.save_dialog(main_window, title, filetype))

    # ----------------------------------------------------------------------x
    def test_confirm_overwrite(self):

        name = "/home/lucas/Faculdade/2017-1/Iniciacao/Mosaicode/mosaicode/test/files_for_test/output/Dialog_Overwrite.mscd"
        main_window = None
        self.assertTrue(self.dialog.confirm_overwrite(name, main_window))

        # Testando o botão CANCEL
        name = "/home/lucas/Faculdade/2017-1/Iniciacao/Mosaicode/mosaicode/test/files_for_test/input/Teste1.mscd"
        main_window = None
        self.assertFalse(self.dialog.confirm_overwrite(name, main_window))

        # Testando o botão OK
        name = "/home/lucas/Faculdade/2017-1/Iniciacao/Mosaicode/mosaicode/test/files_for_test/input/Teste1.mscd"
        main_window = None
        self.assertTrue(self.dialog.confirm_overwrite(name, main_window))

        name = ""
        main_window = MainWindow()
        self.assertTrue(self.dialog.confirm_overwrite(name, main_window))

        # NAO TRABALHA COM None
        #name = None
        #main_window = MainWindow()
        #self.assertTrue(self.dialog.confirm_overwrite(name, main_window))

    # ----------------------------------------------------------------------x
    def test_message_dialog(self):

        title = "Testando Message Dialog 1"
        message = "Realizando teste no message dialog"
        main_window = None
        self.assertIsNone(
            self.dialog.message_dialog(title, message, main_window))

        title = "Testando Message Dialog 2"
        message = "main_window = MainWindow()"
        main_window = MainWindow()
        self.assertIsNone(
            self.dialog.message_dialog(title, message, main_window))

    # ----------------------------------------------------------------------x
    def test_confirm_dialog(self):
        message = "Testando confirm dialog"
        main_window = None
        self.assertIsNotNone(self.dialog.confirm_dialog(message, main_window))
Beispiel #20
0
 def delete_block(self, block):
     if not BlockControl.delete_block(block):
         message = "This block is a python file installed in the System.\n"
         message = message + "Sorry, you can't remove it"
         Dialog().message_dialog("Error", message, self.main_window)
     self.update_blocks()
Beispiel #21
0
 def delete_port(self, port_key):
     if not PortControl.delete_port(port_key):
         message = "This port is a python file installed in the System.\n"
         message = message + "Sorry, you can't remove it"
         Dialog().message_dialog("Error", message, self.main_window)
     System.reload()
Beispiel #22
0
 def delete_code_template(self, code_template_name):
     if not CodeTemplateControl.delete_code_template(code_template_name):
         message = "This code template is a python file installed in the System.\n"
         message = message + "Sorry, you can't remove it"
         Dialog().message_dialog("Error", message, self.main_window)
Beispiel #23
0
 def delete_plugin(self, plugin):
     if not BlockControl.delete_plugin(plugin):
         message = "This plugin is a python file installed in the System.\n"
         message = message + "Sorry, you can't remove it"
         Dialog().message_dialog("Error", message, self.main_window)
     self.main_window.block_notebook.update()
Beispiel #24
0
 def export_python_dialog(self):
     MainControl.export_python()
     Dialog().message_dialog("Exporting as python",
                             "Exported successfully!", self.main_window)
Beispiel #25
0
 def export_xml_dialog(self):
     MainControl.export_xml()
     Dialog().message_dialog("Exporting as xml", "Exported successfully!",
                             self.main_window)
Beispiel #26
0
 def export_xml_dialog(self):
     self.export_xml()
     Dialog().message_dialog(
         "Exported all extensions as XML",
         "Check " + System.get_user_dir() + "/extensions/",
         self.main_window)
Beispiel #27
0
class WorkArea(Gtk.Notebook):
    """
    This class contains methods related the WorkArea class.
    """
    def __init__(self, main_window):
        Gtk.Notebook.__init__(self)
        self.main_window = main_window
        self.set_scrollable(True)
        self.diagrams = []
        self.connect("switch-page", self.__on_switch_page)
        self.connect("page-removed", self.__on_page_removed)

    # ----------------------------------------------------------------------
    def __on_page_removed(self, notebook, child, page_num):
        if self.get_n_pages() == 0:
            self.main_window.set_title("")

    # ----------------------------------------------------------------------
    def __on_switch_page(self, notebook, child, page_num):
        self.main_window.set_title(child.file_name)

    # ----------------------------------------------------------------------
    def add_diagram(self, diagram):
        """
        This method add a  new diagram page.

            Parameters:
                * **diagram** (:class:`Diagram<mosaicode.GUI.diagram`)
        """
        name = diagram.patch_name
        index = self.append_page(diagram,
                                 self.__create_tab_label(name, diagram))
        self.show_all()
        self.diagrams.append(diagram)
        self.set_current_page(self.get_n_pages() - 1)

    # ----------------------------------------------------------------------
    def close_tab(self, position=None):
        """
        This method close a tab.

            Parameters:
                * **position**
            Returns:
                * **Types** (:class:`boolean<boolean>`)
        """
        if position is None:
            position = self.get_current_page()
        diagram = self.get_nth_page(position)

        if diagram is None:
            return False

        if diagram.modified:
            self.dialog = Dialog().confirm_dialog(
                _("Diagram ") + diagram.file_name +
                _("is not saved.\nIf you close it"
                  ", changes will be lost.\n"
                  "Confirm?"), self.main_window)
            result = self.dialog.run()
            self.dialog.destroy()
            if result == Gtk.ResponseType.CANCEL:
                return False

        self.remove_page(position)
        self.diagrams.pop(position)
        return True

    # ----------------------------------------------------------------------
    def __create_tab_label(self, text, frame):
        """
        This method create a tab label.
            Parameters:
                * **text** (:class:`str<str>`)
            Returns:
                * **box**
        """
        box = Gtk.HBox()
        button = Gtk.Button()
        image = Gtk.Image().new_from_stock(Gtk.STOCK_CLOSE, Gtk.IconSize.MENU)
        button.set_image(image)
        button.set_relief(Gtk.ReliefStyle.NONE)
        button.connect('clicked', self.__on_close_button_clicked, frame)
        label = Gtk.Label(text)
        box.add(label)
        box.add(button)
        box.show_all()
        return box

    # ----------------------------------------------------------------------
    def __on_close_button_clicked(self, widget, frame):
        index = -1
        for tab in self.get_children():
            index += 1
            if tab == frame:
                break
        self.close_tab(index)

    # ----------------------------------------------------------------------
    def get_current_diagram(self):
        """
        This method get current diagram page.
            Return
                * **Types** (:class:`int<int>`)
        """

        if self.get_current_page() > -1:
            return self.diagrams[self.get_current_page()]
        else:
            return None

    # ----------------------------------------------------------------------
    def get_diagrams(self):
        return self.diagrams

    # ----------------------------------------------------------------------
    def rename_diagram(self, diagram):
        """
        This method rename a diagram page.

            Parameters:
                * **diagram** (:class:`diagram<mosaicode.GUI.diagram>`)
        """
        index = -1
        for page in self.get_children():
            index += 1
            if page == diagram:
                break
        tab = self.get_nth_page(index)
        if tab is None:
            return
        hbox = self.get_tab_label(tab)
        label = hbox.get_children()[0]
        name = diagram.patch_name
        if diagram.modified:
            name = "* " + name
        label.set_text(name)
        self.main_window.set_title(diagram.file_name)

    # ----------------------------------------------------------------------
    def resize(self, data):
        """
        This method resize a diagram page.

            Parameters:
                * **data**

        """
        for diagram in self.diagrams:
            diagram.resize(data)

    # ----------------------------------------------------------------------
    def close_tabs(self):
        """
        This method close tabs.

            Returns:
               * **boolean** (:class:`boolean<boolean>`)
        """
        n_pages = self.get_n_pages()
        for i in range(n_pages):
            if not self.close_tab(0):
                return False
        return True
Beispiel #28
0
 def setUp(self):
     self.dialog = Dialog()
Beispiel #29
0
 def export_python_dialog(self):
     self.export_python()
     Dialog().message_dialog(
         "Exported all extensions as Python classes",
         "Check " + System.get_user_dir() + "/extensions/",
         self.main_window)