def _refreshInfo(self, docker_image): self.uiDockerVMInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Image name:", docker_image["imagename"]]) QtWidgets.QTreeWidgetItem( section_item, ["Default name format:", docker_image["default_name_format"]]) # FIXME: add more configuration options QtWidgets.QTreeWidgetItem( section_item, ["CMD:", str(docker_image["startcmd"])]) # QtWidgets.QTreeWidgetItem( # section_item, ["Server:", docker_image["server"]]) # # fill out the Network section # section_item = self._createSectionItem("Network") # QtWidgets.QTreeWidgetItem( # section_item, ["Adapters:", str(docker_image["adapters"])]) # QtWidgets.QTreeWidgetItem( # section_item, ["Use any adapter:", "{}".format( # docker_image["use_any_adapter"])]) # QtWidgets.QTreeWidgetItem( # section_item, ["Type:", docker_image["adapter_type"]]) self.uiDockerVMInfoTreeWidget.expandAll() self.uiDockerVMInfoTreeWidget.resizeColumnToContents(0) self.uiDockerVMInfoTreeWidget.resizeColumnToContents(1)
def __init__(self, parent): super().__init__(parent) self._notifs = [] self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowDoesNotAcceptFocus | QtCore.Qt.SubWindow) # QtCore.Qt.Tool) # QtCore.Qt.WindowStaysOnTopHint) self.setAttribute(QtCore.Qt.WA_ShowWithoutActivating) # | QtCore.Qt.WA_TranslucentBackground) self._layout = QtWidgets.QVBoxLayout() self._timer = QtCore.QTimer() self._timer.setInterval(1000) self._timer.timeout.connect(self._refreshSlot) self._timer.start() for i in range(0, MAX_ELEMENTS): l = QtWidgets.QLabel() l.setAlignment(QtCore.Qt.AlignTop) l.setWordWrap(True) l.hide() self._layout.addWidget(l) self.setLayout(self._layout)
def _refreshInfo(self, ethernet_hub): self.uiEthernetHubInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Template name:", ethernet_hub["name"]]) QtWidgets.QTreeWidgetItem( section_item, ["Default name format:", ethernet_hub["default_name_format"]]) try: QtWidgets.QTreeWidgetItem(section_item, [ "Server:", ComputeManager.instance().getCompute( ethernet_hub["server"]).name() ]) except KeyError: pass QtWidgets.QTreeWidgetItem( section_item, ["Number of ports:", str(len(ethernet_hub["ports_mapping"]))]) self.uiEthernetHubInfoTreeWidget.expandAll() self.uiEthernetHubInfoTreeWidget.resizeColumnToContents(0) self.uiEthernetHubInfoTreeWidget.resizeColumnToContents(1) self.uiEthernetHubsTreeWidget.setMaximumWidth( self.uiEthernetHubsTreeWidget.sizeHintForColumn(0) + 20)
def _refreshInfo(self, cloud_node): self.uiCloudNodeInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Template name:", cloud_node["name"]]) QtWidgets.QTreeWidgetItem( section_item, ["Default name format:", cloud_node["default_name_format"]]) try: QtWidgets.QTreeWidgetItem(section_item, [ "Server:", ComputeManager.instance().getCompute( cloud_node["server"]).name() ]) except KeyError: pass self.uiCloudNodeInfoTreeWidget.expandAll() self.uiCloudNodeInfoTreeWidget.resizeColumnToContents(0) self.uiCloudNodeInfoTreeWidget.resizeColumnToContents(1) self.uiCloudNodesTreeWidget.setMaximumWidth( self.uiCloudNodesTreeWidget.sizeHintForColumn(0) + 20)
def __init__(self): super().__init__() l1 = QtWidgets.QLabel() l1.setText("Hello World") vbox = QtWidgets.QVBoxLayout() vbox.addWidget(l1) self.setLayout(vbox) self.setStyleSheet("background-color:blue;") self._dialog = NotifDialog(self) log.addHandler(NotifDialogHandler(self._dialog)) log.info("test")
def _addMisingVariablesEdits(self): missing = [ v for v in self._variables if v.get("value", "").strip() == "" ] for i, variable in enumerate(missing, start=0): nameLabel = QtWidgets.QLabel() nameLabel.setText(variable.get("name", "")) self.gridLayout.addWidget(nameLabel, i, 0) valueEdit = QtWidgets.QLineEdit() valueEdit.setText(variable.get("value", "")) valueEdit.textChanged.connect( qpartial(self.onValueChange, variable)) self.gridLayout.addWidget(valueEdit, i, 1)
def __init__(self, parent=None): if parent is None: self._main = QtWidgets.QMainWindow() self._main.hide() parent = self._main super().__init__(parent) self.setupUi(self) self.uiNewPushButton.clicked.connect(self._newPushButtonSlot) self.uiDeletePushButton.clicked.connect(self._deletePushButtonSlot) # Center on screen screen = QtWidgets.QApplication.desktop().screenGeometry() self.move(screen.center() - self.rect().center()) if sys.platform.startswith("win"): appdata = os.path.expandvars("%APPDATA%") path = os.path.join(appdata, "GNS3") else: home = os.path.expanduser("~") path = os.path.join(home, ".config", "GNS3") self.profiles_path = os.path.join(path, "profiles") self.uiShowAtStartupCheckBox.setChecked( LocalConfig.instance().multiProfiles()) self._refresh()
def loadPreferences(self): """ Loads the server preferences. """ servers = Servers.instance() # load the servers settings servers_settings = servers.settings() self._populateWidgets(servers_settings) # load remote server preferences self._remote_servers.clear() self.uiRemoteServersTreeWidget.clear() for server_id, server in servers.remoteServers().items(): protocol = server.protocol() host = server.host() port = server.port() user = server.user() self._remote_servers[server_id] = server.settings() item = QtWidgets.QTreeWidgetItem(self.uiRemoteServersTreeWidget) item.setText(0, protocol) item.setText(1, host) item.setText(2, str(port)) item.setText(3, user) item.settings = server.settings() item.server_id = server_id self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
def _createSectionItem(self, name): section_item = QtWidgets.QTreeWidgetItem(self.uiDockerVMInfoTreeWidget) section_item.setText(0, name) font = section_item.font(0) font.setBold(True) section_item.setFont(0, font) return section_item
def _addMappingSlot(self): """ Adds a new mapping. """ source_port = self.uiSourcePortSpinBox.value() source_dlci = self.uiSourceDLCISpinBox.value() destination_port = self.uiDestinationPortSpinBox.value() destination_dlci = self.uiDestinationDLCISpinBox.value() if source_port == destination_port: QtWidgets.QMessageBox.critical(self, self._node.name(), "Same source and destination ports") return source = "{port}:{dlci}".format(port=source_port, dlci=source_dlci) destination = "{port}:{dlci}".format(port=destination_port, dlci=destination_dlci) if source in self._mapping or destination in self._mapping: QtWidgets.QMessageBox.critical(self, self._node.name(), "Mapping already defined") return item = QtWidgets.QTreeWidgetItem(self.uiMappingTreeWidget) item.setText(0, source) item.setText(1, destination) self.uiMappingTreeWidget.addTopLevelItem(item) self.uiSourcePortSpinBox.setValue(source_port + 1) self.uiSourceDLCISpinBox.setValue(source_dlci + 1) self.uiDestinationPortSpinBox.setValue(destination_port + 1) self.uiDestinationDLCISpinBox.setValue(destination_dlci + 1) self._mapping[source] = destination
def loadPreferences(self): """ Loads the ethernet hub preferences. """ self._ethernet_hubs = {} templates = TemplateManager.instance().templates() for template_id, template in templates.items(): if template.template_type( ) == "ethernet_hub" and not template.builtin(): name = template.name() server = template.compute_id() #TODO: use template id for the key key = "{server}:{name}".format(server=server, name=name) self._ethernet_hubs[key] = copy.deepcopy(template.settings()) self._items.clear() for key, ethernet_hub in self._ethernet_hubs.items(): item = QtWidgets.QTreeWidgetItem(self.uiEthernetHubsTreeWidget) item.setText(0, ethernet_hub["name"]) Controller.instance().getSymbolIcon( ethernet_hub["symbol"], qpartial(self._setItemIcon, item)) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) if self._items: self.uiEthernetHubsTreeWidget.setCurrentItem(self._items[0]) self.uiEthernetHubsTreeWidget.sortByColumn( 0, QtCore.Qt.AscendingOrder) self.uiEthernetHubsTreeWidget.setMaximumWidth( self.uiEthernetHubsTreeWidget.sizeHintForColumn(0) + 20)
def _addSummaryEntry(self, name, value): item = QtWidgets.QTreeWidgetItem(self.uiSummaryTreeWidget, [name, value]) item.setText(0, name) font = item.font(0) font.setBold(True) item.setFont(0, font)
def loadPreferences(self): """ Loads the Docker VM preferences. """ docker_module = Docker.instance() self._docker_containers = copy.deepcopy(docker_module.VMs()) self._items.clear() for key, docker_image in self._docker_containers.items(): item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget) item.setText(0, docker_image["name"]) Controller.instance().getSymbolIcon( docker_image["symbol"], qpartial(self._setItemIcon, item)) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) if self._items: self.uiDockerVMsTreeWidget.setCurrentItem(self._items[0]) self.uiDockerVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder) self.uiDockerVMsTreeWidget.setMaximumWidth( self.uiDockerVMsTreeWidget.sizeHintForColumn(0) + 10)
def _qemuVMNewSlot(self): """ Creates a new VM. """ wizard = QemuVMWizard(self._qemu_vms, parent=self) wizard.show() if wizard.exec_(): new_vm_settings = wizard.getSettings() key = "{server}:{name}".format(server=new_vm_settings["server"], name=new_vm_settings["name"]) if key in self._qemu_vms: QtWidgets.QMessageBox.critical( self, "New QEMU VM", "VM name {} already exists".format( new_vm_settings["name"])) return self._qemu_vms[key] = QEMU_VM_SETTINGS.copy() self._qemu_vms[key].update(new_vm_settings) item = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget) item.setText(0, self._qemu_vms[key]["name"]) item.setIcon(0, QtGui.QIcon(self._qemu_vms[key]["symbol"])) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) self.uiQemuVMsTreeWidget.setCurrentItem(item)
def loadSettings(self, settings, node, group=False): """ Loads the ATM bridge settings. :param settings: the settings (dictionary) :param node: Node instance :param group: indicates the settings apply to a group """ if not group: self.uiNameLineEdit.setText(settings["name"]) else: self.uiNameLineEdit.setEnabled(False) self.uiMappingTreeWidget.clear() self._mapping = {} self._node = node for ethernet_port, destination in settings["mappings"].items(): item = QtWidgets.QTreeWidgetItem(self.uiMappingTreeWidget) item.setText(0, ethernet_port) item.setText(1, destination) self.uiMappingTreeWidget.addTopLevelItem(item) self._mapping[ethernet_port] = destination self.uiMappingTreeWidget.resizeColumnToContents(0) self.uiMappingTreeWidget.resizeColumnToContents(1)
def main(): app = QtWidgets.QApplication(sys.argv) app.setOrganizationName("GNS3") app.setOrganizationDomain("gns3.net") app.setApplicationName("GNS3") app.setApplicationVersion(__version__) # We force a full garbage collect before exit # for unknow reason otherwise Qt Segfault on OSX in some #Â conditions import gc gc.collect() # Manage Ctrl + C or kill command def sigint_handler(*args): log.info("Signal received exiting the application") app.closeAllWindows() # signal.signal(signal.SIGINT, sigint_handler) # signal.signal(signal.SIGTERM, sigint_handler) mainwindow = IOUVMConverterWizard() mainwindow.show() exit_code = mainwindow.exec_() # We force a full garbage collect before exit # for unknow reason otherwise Qt Segfault on OSX in some #Â conditions import gc gc.collect() sys.exit(exit_code)
def _iouDeviceCopySlot(self): """ Copies an IOU device. """ item = self.uiIOUDevicesTreeWidget.currentItem() if item: key = item.data(0, QtCore.Qt.UserRole) copied_iou_device_settings = copy.deepcopy(self._iou_devices[key]) new_name, ok = QtWidgets.QInputDialog.getText( self, "Copy IOU template", "Template name:", QtWidgets.QLineEdit.Normal, "Copy of {}".format(copied_iou_device_settings["name"])) if ok: key = "{server}:{name}".format( server=copied_iou_device_settings["compute_id"], name=new_name) if key in self._iou_devices: QtWidgets.QMessageBox.critical( self, "IOU template", "IOU template name {} already exists".format(new_name)) return self._iou_devices[key] = IOU_DEVICE_SETTINGS.copy() self._iou_devices[key].update(copied_iou_device_settings) self._iou_devices[key]["name"] = new_name self._iou_devices[key].pop("template_id", None) item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget) item.setText(0, self._iou_devices[key]["name"]) Controller.instance().getSymbolIcon( self._iou_devices[key]["symbol"], qpartial(self._setItemIcon, item)) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) self.uiIOUDevicesTreeWidget.setCurrentItem(item)
def loadPreferences(self): """ Loads the VirtualBox VM preferences. """ self._virtualbox_vms = {} templates = TemplateManager.instance().templates() for template_id, template in templates.items(): if template.template_type( ) == "virtualbox" and not template.builtin(): vmname = template.settings()["vmname"] server = template.compute_id() #TODO: use template id for the key key = "{server}:{vmname}".format(server=server, vmname=vmname) self._virtualbox_vms[key] = copy.deepcopy(template.settings()) self._items.clear() for key, vbox_vm in self._virtualbox_vms.items(): item = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMsTreeWidget) item.setText(0, vbox_vm["name"]) Controller.instance().getSymbolIcon( vbox_vm["symbol"], qpartial(self._setItemIcon, item)) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) if self._items: self.uiVirtualBoxVMsTreeWidget.setCurrentItem(self._items[0]) self.uiVirtualBoxVMsTreeWidget.sortByColumn( 0, QtCore.Qt.AscendingOrder) self.uiVirtualBoxVMsTreeWidget.setMaximumWidth( self.uiVirtualBoxVMsTreeWidget.sizeHintForColumn(0) + 10)
def _addMappingSlot(self): """ Adds a new mapping. """ ethernet_port = self.uiEthernetPortSpinBox.value() atm_port = self.uiATMPortSpinBox.value() atm_vpi = self.uiATMVPISpinBox.value() atm_vci = self.uiATMVCISpinBox.value() if ethernet_port == atm_port: QtWidgets.QMessageBox.critical( self, self._node.name(), "Same source and destination ports") return destination = "{port}:{vpi}:{vci}".format(port=atm_port, vpi=atm_vpi, vci=atm_vci) if destination in self._mapping: QtWidgets.QMessageBox.critical(self, self._node.name(), "Mapping already defined") return item = QtWidgets.QTreeWidgetItem(self.uiMappingTreeWidget) item.setText(0, str(ethernet_port)) item.setText(1, destination) self.uiMappingTreeWidget.addTopLevelItem(item) self.uiEthernetPortSpinBox.setValue(ethernet_port + 1) self.uiATMPortSpinBox.setValue(atm_port + 1) self._mapping[ethernet_port] = destination
def _showContextualMenu(self): """Contextual menu.""" menu = QtWidgets.QMenu() change_symbol_action = QtWidgets.QAction("Change symbol", menu) change_symbol_action.setIcon( QtGui.QIcon(":/icons/node_conception.svg")) change_symbol_action.setEnabled( len(self.uiDockerVMsTreeWidget.selectedItems()) == 1) change_symbol_action.triggered.connect(self._changeSymbolSlot) menu.addAction(change_symbol_action) delete_action = QtWidgets.QAction("Delete", menu) delete_action.triggered.connect(self._dockerImageDeleteSlot) menu.addAction(delete_action) menu.exec_(QtGui.QCursor.pos())
def _remoteServerAddSlot(self): """ Adds a new remote server. """ protocol = self.uiRemoteServerProtocolComboBox.currentText().lower() host = self.uiRemoteServerPortLineEdit.text().strip() port = self.uiRemoteServerPortSpinBox.value() ram_limit = self.uiRAMLimitSpinBox.value() user = self.uiRemoteServerUserLineEdit.text().strip() password = self.uiRemoteServerPasswordLineEdit.text().strip() if not re.match( r"^[a-zA-Z0-9\.{}-]+$".format( "\u0370-\u1CDF\u2C00-\u30FF\u4E00-\u9FBF"), host): QtWidgets.QMessageBox.critical( self, "Remote server", "Invalid remote server hostname {}".format(host)) return if port is None or port < 1: QtWidgets.QMessageBox.critical( self, "Remote server", "Invalid remote server port {}".format(port)) return # check if the remote server is already defined for server in self._remote_servers.values(): if server["protocol"] == protocol and server[ "host"] == host and server["port"] == port and server[ "user"] == user: QtWidgets.QMessageBox.critical( self, "Remote server", "Remote server is already defined.") return settings = { "protocol": protocol, "host": host, "port": port, "ram_limit": ram_limit, "user": user, "password": password } # add a new entry in the tree widget item = QtWidgets.QTreeWidgetItem(self.uiRemoteServersTreeWidget) item.setText(0, protocol) item.setText(1, host) item.setText(2, str(port)) item.setText(3, user) item.settings = settings item.server_id = uuid.uuid4() # Create a temporary unique server id # keep track of this remote server self._remote_servers[item.server_id] = settings self.uiRemoteServerPortSpinBox.setValue( self.uiRemoteServerPortSpinBox.value() + 1) self.uiRemoteServersTreeWidget.resizeColumnToContents(0)
def _refreshInfo(self, vpcs_node): """ Refreshes the content of the tree widget. """ self.uiVPCSInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Template name:", vpcs_node["name"]]) QtWidgets.QTreeWidgetItem(section_item, ["Template ID:", vpcs_node.get("template_id", "none")]) QtWidgets.QTreeWidgetItem(section_item, ["Default name format:", vpcs_node["default_name_format"]]) QtWidgets.QTreeWidgetItem(section_item, ["Console type:", vpcs_node["console_type"]]) QtWidgets.QTreeWidgetItem(section_item, ["Auto start console:", "{}".format(vpcs_node["console_auto_start"])]) try: QtWidgets.QTreeWidgetItem(section_item, ["Server:", ComputeManager.instance().getCompute(vpcs_node["compute_id"]).name()]) except KeyError: pass if vpcs_node["base_script_file"]: QtWidgets.QTreeWidgetItem(section_item, ["Base script file:", vpcs_node["base_script_file"]]) self.uiVPCSInfoTreeWidget.expandAll() self.uiVPCSInfoTreeWidget.resizeColumnToContents(0) self.uiVPCSInfoTreeWidget.resizeColumnToContents(1) self.uiVPCSTreeWidget.setMaximumWidth(self.uiVPCSTreeWidget.sizeHintForColumn(0) + 20)
def _refreshInfo(self, docker_image): self.uiDockerVMInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Image name:", docker_image["image"]]) QtWidgets.QTreeWidgetItem( section_item, ["Server:", str(docker_image["server"])]) QtWidgets.QTreeWidgetItem( section_item, ["Console type:", str(docker_image["console_type"])]) QtWidgets.QTreeWidgetItem( section_item, ["Default name format:", docker_image["default_name_format"]]) QtWidgets.QTreeWidgetItem( section_item, ["Adapters:", str(docker_image["adapters"])]) if docker_image["start_command"]: QtWidgets.QTreeWidgetItem( section_item, ["Start command:", str(docker_image["start_command"])]) if docker_image["environment"]: QtWidgets.QTreeWidgetItem( section_item, ["Environment:", str(docker_image["environment"])]) self.uiDockerVMInfoTreeWidget.expandAll() self.uiDockerVMInfoTreeWidget.resizeColumnToContents(0) self.uiDockerVMInfoTreeWidget.resizeColumnToContents(1) self.uiDockerVMsTreeWidget.setMaximumWidth( self.uiDockerVMsTreeWidget.sizeHintForColumn(0) + 10)
def MessageBox(parent, title, message, details="", icon=QtWidgets.QMessageBox.Critical): msgbox = QtWidgets.QMessageBox(parent) msgbox.setWindowTitle(title) msgbox.setText(message) msgbox.setIcon(icon) if details: msgbox.setDetailedText(details) msgbox.exec_()
def _createSectionItem(self, name): """ Adds a new section to the tree widget. :param name: section name """ section_item = QtWidgets.QTreeWidgetItem(self.uiVPCSInfoTreeWidget) section_item.setText(0, name) font = section_item.font(0) font.setBold(True) section_item.setFont(0, font) return section_item
def _refreshInfo(self, traceng_node): """ Refreshes the content of the tree widget. """ self.uiTraceNGInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Template name:", traceng_node["name"]]) QtWidgets.QTreeWidgetItem(section_item, ["Template ID:", traceng_node.get("template_id", "none")]) QtWidgets.QTreeWidgetItem(section_item, ["IP address:", traceng_node["ip_address"]]) QtWidgets.QTreeWidgetItem(section_item, ["Default name format:", traceng_node["default_name_format"]]) try: QtWidgets.QTreeWidgetItem(section_item, ["Server:", ComputeManager.instance().getCompute(traceng_node["compute_id"]).name()]) except KeyError: pass self.uiTraceNGInfoTreeWidget.expandAll() self.uiTraceNGInfoTreeWidget.resizeColumnToContents(0) self.uiTraceNGInfoTreeWidget.resizeColumnToContents(1) self.uiTraceNGTreeWidget.setMaximumWidth(self.uiTraceNGTreeWidget.sizeHintForColumn(0) + 20)
def _populateRemoteServersTree(self): self.uiRemoteServersTreeWidget.clear() for compute in self._remote_computes.values(): item = QtWidgets.QTreeWidgetItem(self.uiRemoteServersTreeWidget) item.setText(0, compute.name()) item.setText(1, compute.protocol()) item.setText(2, compute.host()) item.setText(3, str(compute.port())) item.setText(4, compute.user()) item.compute = self._remote_computes[compute.id()] item.compute_id = compute.id() self.uiRemoteServersTreeWidget.resizeColumnToContents(0) self._remoteServerChangedSlot()
def _refreshInfo(self, cloud_node): """ Refreshes the content of the tree widget. """ self.uiCloudNodeInfoTreeWidget.clear() # fill out the General section section_item = self._createSectionItem("General") QtWidgets.QTreeWidgetItem(section_item, ["Template name:", cloud_node["name"]]) QtWidgets.QTreeWidgetItem( section_item, ["Template ID:", cloud_node.get("template_id", "none")]) if cloud_node["remote_console_type"] != "none": QtWidgets.QTreeWidgetItem( section_item, ["Console host:", cloud_node["remote_console_host"]]) QtWidgets.QTreeWidgetItem(section_item, [ "Console port:", "{}".format(cloud_node["remote_console_port"]) ]) if cloud_node["remote_console_type"] in ("http", "https"): QtWidgets.QTreeWidgetItem(section_item, [ "Console HTTP path:", cloud_node["remote_console_http_path"] ]) QtWidgets.QTreeWidgetItem( section_item, ["Console type:", cloud_node["remote_console_type"]]) QtWidgets.QTreeWidgetItem( section_item, ["Default name format:", cloud_node["default_name_format"]]) try: QtWidgets.QTreeWidgetItem(section_item, [ "Server:", ComputeManager.instance().getCompute( cloud_node["compute_id"]).name() ]) except KeyError: pass self.uiCloudNodeInfoTreeWidget.expandAll() self.uiCloudNodeInfoTreeWidget.resizeColumnToContents(0) self.uiCloudNodeInfoTreeWidget.resizeColumnToContents(1) self.uiCloudNodesTreeWidget.setMaximumWidth( self.uiCloudNodesTreeWidget.sizeHintForColumn(0) + 20)
def _dockerImageNewSlot(self): """Creates a new Docker image.""" wizard = DockerVMWizard(self._docker_images, parent=self) wizard.show() if wizard.exec_(): new_image_settings = wizard.getSettings() key = "{server}:{imagename}".format( server=new_image_settings["server"], imagename=new_image_settings["imagename"]) self._docker_images[key] = DOCKER_CONTAINER_SETTINGS.copy() self._docker_images[key].update(new_image_settings) item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget) item.setText(0, self._docker_images[key]["imagename"]) item.setIcon(0, QtGui.QIcon(self._docker_images[key]["symbol"])) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) self.uiDockerVMsTreeWidget.setCurrentItem(item)
def loadPreferences(self): """Loads the Docker VM preferences.""" docker_module = Docker.instance() self._docker_images = copy.deepcopy(docker_module.dockerImages()) self._items.clear() for key, docker_image in self._docker_images.items(): item = QtWidgets.QTreeWidgetItem(self.uiDockerVMsTreeWidget) item.setText(0, docker_image["imagename"]) item.setIcon(0, QtGui.QIcon(docker_image["symbol"])) item.setData(0, QtCore.Qt.UserRole, key) self._items.append(item) if self._items: self.uiDockerVMsTreeWidget.setCurrentItem(self._items[0]) self.uiDockerVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)