def _startupLoading(self): confo = self.systconf['general'] force_clear_configuration = True version = ConfDB().get('GNS3/version', '0.0.1') try: # trick to test old version format (integer), before 0.8.2.1 release int(version) except ValueError: force_clear_configuration = False #for future releases if LooseVersion(VERSION) > str(version): # reset the tips dialog if self.mainWindow.tips_dialog: self.mainWindow.tips_dialog.checkBoxDontShowAgain.setChecked(False) if force_clear_configuration: self.mainWindow.raise_() reply = QMessageBox.question(self.mainWindow, translate("Application", "GNS3 configuration file"), translate("Application", "You have installed a new GNS3 version.\nIt is recommended to clear your old configuration, do you want to proceed?"), QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: ConfDB().clear() c = ConfDB() c.set('GNS3/version', VERSION) c.sync() globals.recordConfiguration = False QMessageBox.information(self.mainWindow, translate("Application", "GNS3 configuration file"), translate("Application", "Configuration cleared!\nPlease restart GNS3")) else: # if we cannot find our config file, we start the Wizard dialog configFile = unicode(ConfDB().fileName(), 'utf-8', errors='replace') if not os.access(configFile, os.F_OK): dialog = Wizard(parent=self.mainWindow) dialog.setModal(True) dialog.show() else: if self._file: self.mainWindow.load_netfile(self._file, load_instructions=True) elif confo.project_startup and os.access(configFile, os.F_OK): dialog = ProjectDialog(parent=self.mainWindow, newProject=True) dialog.setModal(True) dialog.show() if self.mainWindow.tips_dialog and self.mainWindow.tips_dialog.checkBoxDontShowAgain.isChecked() == False: self.showTipsDialog() else: self.mainWindow.createProject((None, None, None, False, False)) self.mainWindow.raise_() if self.mainWindow.tips_dialog and self.mainWindow.tips_dialog.checkBoxDontShowAgain.isChecked() == False: self.showTipsDialog()
def run(self, file): # Instantiation of Dynagen self.__dynagen = DynagenSub() self.systconf['dynamips'] = systemDynamipsConf() confo = self.systconf['dynamips'] confo.path = ConfDB().get('Dynamips/hypervisor_path', unicode('')) confo.port = int(ConfDB().get('Dynamips/hypervisor_port', 7200)) confo.baseUDP = int(ConfDB().get('Dynamips/hypervisor_baseUDP', 10000)) confo.baseConsole = int(ConfDB().get('Dynamips/hypervisor_baseConsole', 2000)) confo.baseAUX = int(ConfDB().get('Dynamips/hypervisor_baseAUX', 0)) confo.workdir = ConfDB().get('Dynamips/hypervisor_working_directory', unicode('')) confo.clean_workdir = ConfDB().value("Dynamips/clean_working_directory", QVariant(True)).toBool() confo.ghosting = ConfDB().value("Dynamips/dynamips_ghosting", QVariant(True)).toBool() confo.mmap = ConfDB().value("Dynamips/dynamips_mmap", QVariant(True)).toBool() confo.sparsemem = ConfDB().value("Dynamips/dynamips_sparsemem", QVariant(False)).toBool() confo.jitsharing = ConfDB().value("Dynamips/dynamips_jitsharing", QVariant(False)).toBool() if sys.platform.startswith('win'): confo.memory_limit = int(ConfDB().get("Dynamips/hypervisor_memory_usage_limit", 512)) else: confo.memory_limit = int(ConfDB().get("Dynamips/hypervisor_memory_usage_limit", 1024)) confo.udp_incrementation = int(ConfDB().get("Dynamips/hypervisor_udp_incrementation", 100)) confo.import_use_HypervisorManager = ConfDB().value("Dynamips/hypervisor_manager_import", QVariant(True)).toBool() confo.HypervisorManager_binding = ConfDB().get('Dynamips/hypervisor_manager_binding', unicode('127.0.0.1')) confo.allocateHypervisorPerIOS = ConfDB().value("Dynamips/allocate_hypervisor_per_IOS", QVariant(True)).toBool() # replace ~user and $HOME by home directory if os.environ.has_key("HOME"): confo.path = confo.path.replace('$HOME', os.environ["HOME"]) confo.workdir = confo.workdir.replace('$HOME', os.environ["HOME"]) confo.path = os.path.expanduser(confo.path) confo.workdir = os.path.expanduser(confo.workdir) # Qemu config self.systconf['qemu'] = systemQemuConf() confo = self.systconf['qemu'] confo.qemuwrapper_path = ConfDB().get('Qemu/qemuwrapper_path', unicode('')) confo.qemuwrapper_workdir = unicode(work_dir) #установка рабочей директории из myfile.py(вместо файла конфигурации) confo.qemu_path = ConfDB().get('Qemu/qemu_path', unicode('qemu')) confo.qemu_img_path = ConfDB().get('Qemu/qemu_img_path', unicode('qemu-img')) confo.external_hosts = qemu_server.split(',') #установка IP адреса сервера из myfile.py confo.enable_QemuManager = ConfDB().value("Qemu/enable_QemuManager", QVariant(True)).toBool() confo.import_use_QemuManager = ConfDB().value("Qemu/qemu_manager_import", QVariant(True)).toBool() confo.QemuManager_binding = ConfDB().get('Qemu/qemu_manager_binding', unicode('127.0.0.1')) #установка порта соединения к Qemuwrapper из myfile.py confo.qemuwrapper_port = qemu_port #установка начального значения UDP порта для кокретного VLAN confo.qemuwrapper_baseUDP = getConnectionPort(base_qemu_udp) #установка начального окна VNC для кокретного VLAN confo.qemuwrapper_baseConsole = getVideoPort(base_qemu_console) # Capture config self.systconf['capture'] = systemCaptureConf() confo = self.systconf['capture'] confo.workdir = ConfDB().get('Capture/working_directory', unicode('')) confo.cap_cmd = ConfDB().get('Capture/capture_reader_cmd', unicode('')) confo.auto_start = ConfDB().value('Capture/auto_start_cmd', QVariant(True)).toBool() # replace ~user and $HOME by home directory if os.environ.has_key("HOME"): confo.cap_cmd = confo.cap_cmd.replace('$HOME', os.environ["HOME"]) confo.workdir = confo.workdir.replace('$HOME', os.environ["HOME"]) confo.cap_cmd = os.path.expanduser(confo.cap_cmd) confo.workdir = os.path.expanduser(confo.workdir) # System general config self.systconf['general'] = systemGeneralConf() confo = self.systconf['general'] confo.lang = ConfDB().get('GNS3/lang', unicode('en')) confo.slow_start = int(ConfDB().get('GNS3/slow_start', 0)) confo.autosave = int(ConfDB().get('GNS3/autosave', 0)) confo.project_startup = ConfDB().value("GNS3/project_startup", QVariant(True)).toBool() confo.relative_paths = ConfDB().value("GNS3/relative_paths", QVariant(True)).toBool() confo.use_shell = ConfDB().value("GNS3/use_shell", QVariant(True)).toBool() confo.term_cmd = ConfDB().get('GNS3/console', unicode('')) confo.project_path = ConfDB().get('GNS3/project_directory', unicode('')) confo.ios_path = ConfDB().get('GNS3/ios_directory', unicode('')) confo.status_points = ConfDB().value("GNS3/gui_show_status_points", QVariant(True)).toBool() confo.manual_connection =ConfDB().value("GNS3/gui_use_manual_connection", QVariant(False)).toBool() confo.draw_selected_rectangle = ConfDB().value("GNS3/gui_draw_selected_rectangle", QVariant(False)).toBool() confo.scene_width = int(ConfDB().get('GNS3/scene_width', 2000)) confo.scene_height = int(ConfDB().get('GNS3/scene_height', 1000)) # replace ~user and $HOME by home directory if os.environ.has_key("HOME"): confo.term_cmd = confo.term_cmd.replace('$HOME', os.environ["HOME"]) confo.project_path = confo.project_path.replace('$HOME', os.environ["HOME"]) confo.ios_path = confo.ios_path.replace('$HOME', os.environ["HOME"]) confo.term_cmd = os.path.expanduser(confo.term_cmd) confo.project_path = os.path.expanduser(confo.project_path) confo.ios_path = os.path.expanduser(confo.ios_path) # Now systGeneral settings are loaded, load the translator self.translator = Translator() self.translator.switchLangTo(self.systconf['general'].lang) # HypervisorManager if globals.GApp.systconf['dynamips'].path: self.__HypervisorManager = HypervisorManager() # QemuManager self.__QemuManager = QemuManager() GNS_Conf().IOS_images() GNS_Conf().IOS_hypervisors() GNS_Conf().QEMU_images() GNS_Conf().PIX_images() GNS_Conf().JUNOS_images() GNS_Conf().ASA_images() GNS_Conf().IDS_images() GNS_Conf().Libraries() GNS_Conf().Symbols() # Workspace create a ` Scene' object, # so it also set self.__topology self.__workspace = Workspace() # seems strange to have mainWindow = Workspace, but actually, # we don't use MDI style, so there not so much difference. self.__mainWindow = self.__workspace # In GNS3, the `scene' represent the widget where all graphical stuff # are done (drawing Node, Animation), and in Qt, it's the QGraphicsView # which handle all this stuff. self.__scene = self.__mainWindow.graphicsView # Restore the geometry & state of the GUI self.mainWindow.restoreGeometry(ConfDB().value("GUIState/Geometry").toByteArray()) self.mainWindow.restoreState(ConfDB().value("GUIState/State").toByteArray()) self.mainWindow.show() configFile = unicode(ConfDB().fileName()) if not os.access(configFile, os.F_OK): dialog = Wizard() dialog.show() dialog.raise_() dialog.activateWindow() if file: self.mainWindow.loadNetfile(file) #Закомментировано появление окна, предлагающего создать проект #elif confo.project_startup and os.access(configFile, os.F_OK): # dialog = ProjectDialog() # dialog.show() # self.mainWindow.centerDialog(dialog) # dialog.raise_() # dialog.activateWindow() retcode = QApplication.exec_() self.__HypervisorManager = None self.__QemuManager = None if globals.recordConfiguration: # Save the geometry & state of the GUI ConfDB().set("GUIState/Geometry", self.mainWindow.saveGeometry()) ConfDB().set("GUIState/State", self.mainWindow.saveState()) self.syncConf() sys.exit(retcode)