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()
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 __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)
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)
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)
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()
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()
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
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)
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)
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()
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()
def setUp(self): """Do the test basic setup.""" self.dialog = Dialog()
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))
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()
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()
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)
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()
def export_python_dialog(self): MainControl.export_python() Dialog().message_dialog("Exporting as python", "Exported successfully!", self.main_window)
def export_xml_dialog(self): MainControl.export_xml() Dialog().message_dialog("Exporting as xml", "Exported successfully!", self.main_window)
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)
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
def setUp(self): self.dialog = Dialog()
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)