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 False if diagram.file_name is "Untitled" or save_as: while True: name = Dialog().save_dialog(self.main_window, title=_("Save Diagram"), filename=System.get_user_dir() + "/" + 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.file_name = name self.main_window.work_area.rename_diagram(diagram) 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 export_diagram(self): """ This method exports the diagram. """ diagram = self.main_window.work_area.get_current_diagram() if diagram is None: return False while True: name = SaveDialog(self.main_window, title=_("Export diagram as png"), filename=System.get_user_dir() + "/" + diagram.file_name + ".png", filetype="png").run() if name is None: return if name.find(".png") == -1: name = name + ".png" if name is not None and os.path.exists(name) is True: msg = _("File exists. Overwrite?") result = ConfirmDialog(msg, self.main_window).run() if result == Gtk.ResponseType.OK: break result, message = DiagramControl(diagram).export_png(name) if not result: MessageDialog("Error", message, self.main_window).run()
def save_python(cls, port): """ This method save the port in user space in python extension. Returns: * **Types** (:class:`boolean<boolean>`) """ from mosaicode.system import System parser = PythonParser() parser.class_name = port.label.replace(' ', '') parser.dependencies = [{'from':'mosaicode.model.port', 'import':'Port'}] parser.inherited_classes = ['Port'] parser.setAttribute('type', port.type) parser.setAttribute('language', port.language) parser.setAttribute('label', port.label) parser.setAttribute('color', port.color) parser.setAttribute('multiple', port.multiple) parser.setAttribute('code', str(port.code)) try: data_dir = System.get_user_dir() + "/extensions/" data_dir = data_dir + port.language + "/ports/" if not os.path.isdir(data_dir): try: os.makedirs(data_dir) except: pass file_name = data_dir + port.label.lower().replace(' ', '_') + ".py" parser.save(file_name) except IOError as e: return False return True
def add_port(cls, port): # first, save it from mosaicode.system import System as System System() path = System.get_user_dir() + "/extensions/" path = path + port.language + "/ports/" PortPersistence.save_xml(port, path)
def export_diagram(self): """ This method exports the diagram. """ diagram = self.main_window.work_area.get_current_diagram() if diagram is None: return False while True: name = Dialog().save_dialog(self.main_window, title=_("Export diagram as png"), filename=System.get_user_dir() + "/" + 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 add_new_block(cls, block): # Save it from mosaicode.system import System System() path = System.get_user_dir() + "/extensions/" path = path + block.language + "/" + block.framework + "/" BlockPersistence.save_xml(block, path)
def __select_save(self, diagram): """ This method selects a name to save the file. """ while True: file_name = diagram.file_name if file_name == "Untitled": file_name = System.get_user_dir() + "/" + diagram.file_name self.save_dialog = SaveDialog(self.main_window, title=_("Save Diagram"), filename=file_name, filetype="*.mscd") name = self.save_dialog.run() if name is None: return False, "User canceled the operation" if os.path.exists(name) is True: msg = _("File exists. Overwrite?") self.confirm_dialog = ConfirmDialog(msg, self.main_window) result = self.confirm_dialog.run() if result == Gtk.ResponseType.CANCEL: continue if not name.endswith("mscd"): name = name + ".mscd" diagram.file_name = name break return True, "Success"
def save(cls, prefs): """ This method save the diagram. Returns: * **Types** (:class:`boolean<boolean>`) """ parser = XMLParser() parser.addTag(tag_name) parser.setTagAttr(tag_name, 'default_directory', prefs.default_directory) parser.setTagAttr(tag_name, 'default_filename', prefs.default_filename) parser.setTagAttr(tag_name, 'grid', prefs.grid) parser.setTagAttr(tag_name, 'network_port', prefs.port) parser.setTagAttr(tag_name, 'width', prefs.width) parser.setTagAttr(tag_name, 'height', prefs.height) parser.setTagAttr(tag_name, 'hpaned_work_area', prefs.hpaned_work_area) parser.setTagAttr(tag_name, 'vpaned_bottom', prefs.vpaned_bottom) parser.setTagAttr(tag_name, 'vpaned_left', prefs.vpaned_left) parser.appendToTag(tag_name, 'recent_files') for key in prefs.recent_files: parser.appendToTag('recent_files', 'name', value=key) try: from mosaicode.system import System file_name = System.get_user_dir() + "/" + prefs.conf_file_path confFile = file(os.path.expanduser(file_name), 'w') confFile.write(parser.prettify()) confFile.close() except IOError as e: return False return True
def add_code_template(cls, code_template): # save it from mosaicode.system import System as System System() path = System.get_user_dir() + "/extensions/" path = path + code_template.language + "/" CodeTemplatePersistence.save_xml(code_template, path)
def export_python(cls): from mosaicode.system import System as System System() ports = System.get_ports() for port in ports: path = System.get_user_dir() + "/extensions/" path = path + port.language + "/ports/" PortPersistence.save_python(ports[port])
def export_xml(cls): from mosaicode.system import System as System System() code_templates = System.get_code_templates() for code_template in code_templates: path = System.get_user_dir() + "/extensions/" path = path + code_template.language + "/" CodeTemplatePersistence.save_xml(code_templates[code_template])
def export_python(cls): from mosaicode.system import System System() blocks = System.get_blocks() for block in blocks: path = System.get_user_dir() + "/extensions/" path = path + block.language + "/" + block.framework + "/" BlockPersistence.save_python(blocks[block], path)
def add_code_template(cls, code_template): # save it from mosaicode.system import System as System System() path = os.path.join(System.get_user_dir(), "extensions") path = os.path.join(path, code_template.language) path = os.path.join(path, "codetemplates") CodeTemplatePersistence.save(code_template, path)
def export_xml(cls): from mosaicode.system import System as System System() ports = System.get_ports() for key in ports: path = System.get_user_dir() path = os.path.join(path, 'extensions', ports[key].language, 'ports') PortPersistence.save_xml(ports[key], path)
def export_xml(cls): from mosaicode.system import System as System System() code_templates = System.get_code_templates() for key in code_templates: path = System.get_user_dir() path = os.path.join(path, 'extensions', code_templates[key].language, 'codetemplates') CodeTemplatePersistence.save_xml(code_templates[key], path)
def delete_plugin(cls, plugin): from mosaicode.system import System if plugin.source == "xml": data_dir = System.get_user_dir() + "/extensions/" file_name = data_dir + plugin.type + ".xml" os.remove(file_name) System.plugins.pop(plugin.type, None) return True else: return False
def import_extensions(self): import urllib.request url = "https://alice.dcomp.ufsj.edu.br/mosaicode/extensions/" resource_file = url + "resource.txt" # download and read resource list for line in urllib.request.urlopen(resource_file): file_name = line.decode('utf-8') # download zip file file_path = os.path.join(System.get_user_dir(), file_name) urllib.request.urlretrieve(url + file_name, file_path) # extract it zip_file = zipfile.ZipFile(file_path, 'r') destination = os.path.join(System.get_user_dir(), "extensions") zip_file.extractall(destination) MessageDialog( "Success", "Extensions imported successfully!", self.main_window).run() System.reload()
def delete_block(cls, block): from mosaicode.system import System if block.source == "xml": data_dir = System.get_user_dir() + "/extensions/" file_name = data_dir + block.type + ".xml" os.remove(file_name) System.blocks.pop(block.type, None) return True else: return False
def add_new_block(cls, block): # Save it from mosaicode.system import System System() path = os.path.join(System.get_user_dir(),"extensions") path = os.path.join(path, block.language) path = os.path.join(path, "blocks") path = os.path.join(path, block.extension) path = os.path.join(path, block.group) BlockPersistence.save(block, path)
def save(cls, block): """ This method save the block in user space. Returns: * **Types** (:class:`boolean<boolean>`) """ from mosaicode.system import System block.source = "xml" parser = XMLParser() main = parser.addTag(tag_name) parser.setTagAttr(tag_name, 'type', block.type) parser.setTagAttr(tag_name, 'language', block.language) parser.setTagAttr(tag_name, 'framework', block.framework) parser.setTagAttr(tag_name, 'label', block.label) parser.setTagAttr(tag_name, 'group', block.group) parser.setTagAttr(tag_name, 'color', block.color) parser.setTagAttr(tag_name, 'help', block.help) parser.setTagAttr(tag_name, 'source', block.source) count = 0 for code in block.codes: parser.appendToTag(tag_name, 'code' + str(count)).string = str( block.codes[count]) count = count + 1 parser.appendToTag(tag_name, 'properties') for key in block.properties: parser.appendToTag('properties', 'property', value=key) parser.appendToTag(tag_name, 'in_ports') for key in block.in_ports: parser.appendToTag('in_ports', 'port', value=key) parser.appendToTag(tag_name, 'out_ports') for key in block.out_ports: parser.appendToTag('out_ports', 'port', value=key) try: data_dir = System.get_user_dir() + "/extensions/" data_dir = data_dir + block.language + "/" + block.framework + "/" if not os.path.isdir(data_dir): try: os.makedirs(data_dir) except: pass file_name = data_dir + block.type + ".xml" block_file = file(os.path.expanduser(file_name), 'w') block_file.write(parser.getXML()) block_file.close() except IOError as e: return False return True
def export_port(cls, output): from mosaicode.system import System as System System() ports = System.get_ports() for port in ports: path = System.get_user_dir() + "/extensions/" path = path + port.language + "/ports/" if output == "xml": PortPersistence.save_xml(ports[port], path) else: PortPersistence.save_python(ports[port])
def export_block(cls, output): from mosaicode.system import System as System System() blocks = System.get_blocks() for block in blocks: path = System.get_user_dir() + "/extensions/" path = path + block.language + "/" + block.framework + "/" if output == "xml": BlockPersistence.save_xml(blocks[block], path) else: BlockPersistence.save_python(blocks[block], path)
def delete_port(cls, port_key): from mosaicode.system import System port = System.ports[port_key] if port.source == "xml": data_dir = System.get_user_dir() + "/extensions/" file_name = data_dir + port.type + ".xml" os.remove(file_name) System.ports.pop(port_key, None) return True else: return False
def select_open(self): """ This method open a selected file. """ file_name = Dialog().open_dialog("Open Diagram", self.main_window, filetype="mscd", path=System.get_user_dir()) if file_name is None or file_name == "": return self.open(file_name)
def delete_code_template(cls, code_template_key): from mosaicode.system import System code_template = System.code_templates[code_template_key] if code_template.source == "xml": data_dir = System.get_user_dir() + "/extensions/" file_name = data_dir + code_template.type + ".xml" os.remove(file_name) System.code_templates.pop(code_template_key, None) return True else: return False
def set_recent_files(self, file_name): if file_name in System.get_preferences().recent_files: System.get_preferences().recent_files.remove(file_name) System.get_preferences().recent_files.insert(0, file_name) if len(System.get_preferences().recent_files) > 10: System.get_preferences().recent_files.pop() self.main_window.menu.update_recent_files( System.get_preferences().recent_files) PreferencesPersistence.save(System.get_preferences(), System.get_user_dir())
def export_xml(cls): from mosaicode.system import System as System System() blocks = System.get_blocks() for key in blocks: path = System.get_user_dir() path = os.path.join(path, 'extensions', blocks[key].language, 'block', blocks[key].extension, blocks[key].group) BlockPersistence.save_xml(blocks[key], path)
def export_code_template(cls, output): from mosaicode.system import System as System System() code_templates = System.get_code_templates() for code_template in code_templates: path = System.get_user_dir() + "/extensions/" path = path + code_template.language + "/" if output == "xml": CodeTemplatePersistence.save_xml(code_templates[code_template]) else: CodeTemplatePersistence.save_python( code_templates[code_template], path)
def exit(self, widget=None, data=None): """ This method close main window. Returns: * **Types** (:class:`boolean<boolean>`) """ PreferencesPersistence.save(System.properties, System.get_user_dir()) if self.main_window.work_area.close_tabs(): Gtk.main_quit() else: return True
def select_open(self, path=None): """ This method open a selected file. """ if path is None: path = System.get_user_dir() self.open_dialog = OpenDialog("Open Diagram", self.main_window, filetype="mscd", path=path) file_name = self.open_dialog.run() if file_name is None or file_name == "": return self.open(file_name)