mirror of
https://github.com/GNS3/gns3-gui.git
synced 2026-05-17 00:46:01 +03:00
Adds multi select support in all device template pages.
* Also adds "Delete" as part of the context menu of devices. * (Some methods are reordered for consistency; Legacy signaling is fixed to the new one where encountered) * Patched build_pyqt.py for Windows, and for it to remove the path of the .ui file in the comment. * Shrinked the minimum width of all preference dialogs. * Removed zorder nodes (PyQt5 complains...) and regenerated all preference dialogs.
This commit is contained in:
committed by
Julien Duponchelle
parent
fcd93c8db8
commit
f280445138
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/builtin/ui/cloud_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'cloud_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -63,28 +63,89 @@ class IOSRouterPreferencesPage(QtWidgets.QWidget, Ui_IOSRouterPreferencesPageWid
|
||||
self.uiNewIOSRouterPushButton.clicked.connect(self._iosRouterNewSlot)
|
||||
self.uiEditIOSRouterPushButton.clicked.connect(self._iosRouterEditSlot)
|
||||
self.uiDeleteIOSRouterPushButton.clicked.connect(self._iosRouterDeleteSlot)
|
||||
self.uiIOSRoutersTreeWidget.currentItemChanged.connect(self._iosRouterChangedSlot)
|
||||
self.uiIOSRoutersTreeWidget.itemSelectionChanged.connect(self._iosRouterChangedSlot)
|
||||
self.uiIOSRoutersTreeWidget.itemPressed.connect(self._iosRouterPressedSlot)
|
||||
self.uiDecompressIOSPushButton.clicked.connect(self._decompressIOSSlot)
|
||||
|
||||
def _iosRouterChangedSlot(self, current, previous):
|
||||
def _createSectionItem(self, name):
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiIOSRouterInfoTreeWidget)
|
||||
section_item.setText(0, name)
|
||||
font = section_item.font(0)
|
||||
font.setBold(True)
|
||||
section_item.setFont(0, font)
|
||||
return section_item
|
||||
|
||||
def _refreshInfo(self, ios_router):
|
||||
|
||||
self.uiIOSRouterInfoTreeWidget.clear()
|
||||
|
||||
# fill out the General section
|
||||
section_item = self._createSectionItem("General")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Name:", ios_router["name"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Server:", ios_router["server"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Platform:", ios_router["platform"]])
|
||||
if ios_router["chassis"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Chassis:", ios_router["chassis"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Image:", ios_router["image"]])
|
||||
if ios_router["idlepc"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Idle-PC:", ios_router["idlepc"]])
|
||||
if ios_router["startup_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Startup-config:", ios_router["startup_config"]])
|
||||
if ios_router["private_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Private-config:", ios_router["private_config"]])
|
||||
if ios_router["platform"] == "c7200":
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Midplane:", ios_router["midplane"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NPE:", ios_router["npe"]])
|
||||
|
||||
# fill out the Memories and disk section
|
||||
section_item = self._createSectionItem("Memories and disks")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "{} MiB".format(ios_router["ram"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "{} KiB".format(ios_router["nvram"])])
|
||||
if "iomem" in ios_router and ios_router["iomem"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["I/O memory:", "{}%".format(ios_router["iomem"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["PCMCIA disk0:", "{} MiB".format(ios_router["disk0"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["PCMCIA disk1:", "{} MiB".format(ios_router["disk1"])])
|
||||
|
||||
# fill out the Adapters section
|
||||
section_item = self._createSectionItem("Adapters")
|
||||
for slot_id in range(0, 7):
|
||||
slot = "slot{}".format(slot_id)
|
||||
if slot in ios_router and ios_router[slot]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Slot {}:".format(slot_id), ios_router[slot]])
|
||||
if section_item.childCount() == 0:
|
||||
self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(section_item))
|
||||
|
||||
# fill out the WICs section
|
||||
section_item = self._createSectionItem("WICs")
|
||||
for wic_id in range(0, 3):
|
||||
wic = "wic{}".format(wic_id)
|
||||
if wic in ios_router and ios_router[wic]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["WIC {}:".format(wic_id), ios_router[wic]])
|
||||
if section_item.childCount() == 0:
|
||||
self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(section_item))
|
||||
|
||||
self.uiIOSRouterInfoTreeWidget.expandAll()
|
||||
self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _iosRouterChangedSlot(self):
|
||||
"""
|
||||
Loads a selected an IOS router from the tree widget.
|
||||
|
||||
:param current: current QTreeWidgetItem instance
|
||||
:param previous: ignored
|
||||
"""
|
||||
|
||||
if not current:
|
||||
self.uiIOSRouterInfoTreeWidget.clear()
|
||||
return
|
||||
selection = self.uiIOSRoutersTreeWidget.selectedItems()
|
||||
self.uiDeleteIOSRouterPushButton.setEnabled(len(selection) != 0)
|
||||
single_selected = len(selection) == 1
|
||||
self.uiEditIOSRouterPushButton.setEnabled(single_selected)
|
||||
self.uiDecompressIOSPushButton.setEnabled(single_selected)
|
||||
|
||||
self.uiEditIOSRouterPushButton.setEnabled(True)
|
||||
self.uiDeleteIOSRouterPushButton.setEnabled(True)
|
||||
self.uiDecompressIOSPushButton.setEnabled(True)
|
||||
key = current.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
self._refreshInfo(ios_router)
|
||||
if single_selected:
|
||||
key = selection[0].data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
self._refreshInfo(ios_router)
|
||||
else:
|
||||
self.uiIOSRouterInfoTreeWidget.clear()
|
||||
|
||||
def _iosRouterNewSlot(self):
|
||||
"""
|
||||
@@ -153,11 +214,6 @@ class IOSRouterPreferencesPage(QtWidgets.QWidget, Ui_IOSRouterPreferencesPageWid
|
||||
self._items.append(item)
|
||||
self.uiIOSRoutersTreeWidget.setCurrentItem(item)
|
||||
|
||||
def _imageUploadComplete(self):
|
||||
if self._upload_image_progress_dialog.wasCanceled():
|
||||
return
|
||||
self._upload_image_progress_dialog.accept()
|
||||
|
||||
def _iosRouterEditSlot(self):
|
||||
"""
|
||||
Edits an IOS router.
|
||||
@@ -190,17 +246,138 @@ class IOSRouterPreferencesPage(QtWidgets.QWidget, Ui_IOSRouterPreferencesPageWid
|
||||
Deletes an IOS router.
|
||||
"""
|
||||
|
||||
for item in self.uiIOSRoutersTreeWidget.selectedItems():
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
|
||||
del self._ios_routers[key]
|
||||
self.uiIOSRoutersTreeWidget.takeTopLevelItem(self.uiIOSRoutersTreeWidget.indexOfTopLevelItem(item))
|
||||
if self._ios_routers == {}:
|
||||
self.uiEditIOSRouterPushButton.setEnabled(False)
|
||||
self.uiDeleteIOSRouterPushButton.setEnabled(False)
|
||||
self.uiDecompressIOSPushButton.setEnabled(False)
|
||||
|
||||
def _iosRouterPressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
|
||||
:param item: ignored
|
||||
:param column: ignored
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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.uiIOSRoutersTreeWidget.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._iosRouterDeleteSlot)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for an IOS router.
|
||||
"""
|
||||
|
||||
item = self.uiIOSRoutersTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=ios_router["default_symbol"], category=ios_router["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
ios_router["default_symbol"] = normal_symbol
|
||||
ios_router["hover_symbol"] = selected_symbol
|
||||
ios_router["category"] = category
|
||||
|
||||
del self._ios_routers[key]
|
||||
self.uiIOSRoutersTreeWidget.takeTopLevelItem(self.uiIOSRoutersTreeWidget.indexOfTopLevelItem(item))
|
||||
if self._ios_routers == {}:
|
||||
self.uiEditIOSRouterPushButton.setEnabled(False)
|
||||
self.uiDeleteIOSRouterPushButton.setEnabled(False)
|
||||
self.uiDecompressIOSPushButton.setEnabled(False)
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the IOS router preferences.
|
||||
"""
|
||||
|
||||
dynamips_module = Dynamips.instance()
|
||||
self._ios_routers = copy.deepcopy(dynamips_module.iosRouters())
|
||||
self._items.clear()
|
||||
|
||||
for key, ios_router in self._ios_routers.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
|
||||
item.setText(0, ios_router["name"])
|
||||
item.setIcon(0, QtGui.QIcon(ios_router["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
if self._items:
|
||||
self.uiIOSRoutersTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiIOSRoutersTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the IOS router preferences.
|
||||
"""
|
||||
|
||||
Dynamips.instance().setIOSRouters(self._ios_routers)
|
||||
|
||||
def _imageUploadComplete(self):
|
||||
if self._upload_image_progress_dialog.wasCanceled():
|
||||
return
|
||||
self._upload_image_progress_dialog.accept()
|
||||
|
||||
def _decompressIOSSlot(self):
|
||||
"""
|
||||
Slot to decompress an IOS image.
|
||||
"""
|
||||
|
||||
item = self.uiIOSRoutersTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
path = ios_router["image"]
|
||||
if not os.path.isfile(path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image file {} is does not exist".format(path))
|
||||
return
|
||||
try:
|
||||
if not isIOSCompressed(path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image {} is not compressed".format(os.path.basename(path)))
|
||||
return
|
||||
except (OSError, ValueError) as e:
|
||||
# errno 22, invalid argument means the file system where the IOS image is located doesn't support mmap
|
||||
if e.errno == 22:
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image {} cannot be memory mapped, most likely because the file system doesn't support it".format(os.path.basename(path)))
|
||||
else:
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "Could not determine if the IOS image is compressed: {}".format(e))
|
||||
return
|
||||
|
||||
decompressed_image_path = os.path.splitext(path)[0] + ".image"
|
||||
if os.path.isfile(decompressed_image_path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "Decompressed IOS image {} already exist".format(os.path.basename(decompressed_image_path)))
|
||||
return
|
||||
|
||||
thread = DecompressIOSThread(path, decompressed_image_path)
|
||||
progress_dialog = ProgressDialog(thread,
|
||||
"IOS image",
|
||||
"Decompressing IOS image {}...".format(path),
|
||||
"Cancel", busy=True, parent=self)
|
||||
progress_dialog.show()
|
||||
if progress_dialog.exec_() is not False:
|
||||
ios_router["image"] = decompressed_image_path
|
||||
self._refreshInfo(ios_router)
|
||||
thread.wait()
|
||||
|
||||
@staticmethod
|
||||
def getIOSImage(parent):
|
||||
@@ -318,175 +495,3 @@ class IOSRouterPreferencesPage(QtWidgets.QWidget, Ui_IOSRouterPreferencesPageWid
|
||||
decompressed_size = (decompressed_size / (1000 * 1000)) + 1
|
||||
# round up to the closest multiple of 32 (step of the RAM SpinBox)
|
||||
return math.ceil(decompressed_size / 32) * 32
|
||||
|
||||
def _decompressIOSSlot(self):
|
||||
"""
|
||||
Slot to decompress an IOS image.
|
||||
"""
|
||||
|
||||
item = self.uiIOSRoutersTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
path = ios_router["image"]
|
||||
if not os.path.isfile(path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image file {} is does not exist".format(path))
|
||||
return
|
||||
try:
|
||||
if not isIOSCompressed(path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image {} is not compressed".format(os.path.basename(path)))
|
||||
return
|
||||
except (OSError, ValueError) as e:
|
||||
# errno 22, invalid argument means the file system where the IOS image is located doesn't support mmap
|
||||
if e.errno == 22:
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "IOS image {} cannot be memory mapped, most likely because the file system doesn't support it".format(os.path.basename(path)))
|
||||
else:
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "Could not determine if the IOS image is compressed: {}".format(e))
|
||||
return
|
||||
|
||||
decompressed_image_path = os.path.splitext(path)[0] + ".image"
|
||||
if os.path.isfile(decompressed_image_path):
|
||||
QtWidgets.QMessageBox.critical(self, "IOS image", "Decompressed IOS image {} already exist".format(os.path.basename(decompressed_image_path)))
|
||||
return
|
||||
|
||||
thread = DecompressIOSThread(path, decompressed_image_path)
|
||||
progress_dialog = ProgressDialog(thread,
|
||||
"IOS image",
|
||||
"Decompressing IOS image {}...".format(path),
|
||||
"Cancel", busy=True, parent=self)
|
||||
progress_dialog.show()
|
||||
if progress_dialog.exec_() is not False:
|
||||
ios_router["image"] = decompressed_image_path
|
||||
self._refreshInfo(ios_router)
|
||||
thread.wait()
|
||||
|
||||
def _createSectionItem(self, name):
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiIOSRouterInfoTreeWidget)
|
||||
section_item.setText(0, name)
|
||||
font = section_item.font(0)
|
||||
font.setBold(True)
|
||||
section_item.setFont(0, font)
|
||||
return section_item
|
||||
|
||||
def _refreshInfo(self, ios_router):
|
||||
|
||||
self.uiIOSRouterInfoTreeWidget.clear()
|
||||
|
||||
# fill out the General section
|
||||
section_item = self._createSectionItem("General")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Name:", ios_router["name"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Server:", ios_router["server"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Platform:", ios_router["platform"]])
|
||||
if ios_router["chassis"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Chassis:", ios_router["chassis"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Image:", ios_router["image"]])
|
||||
if ios_router["idlepc"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Idle-PC:", ios_router["idlepc"]])
|
||||
if ios_router["startup_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Startup-config:", ios_router["startup_config"]])
|
||||
if ios_router["private_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Private-config:", ios_router["private_config"]])
|
||||
if ios_router["platform"] == "c7200":
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Midplane:", ios_router["midplane"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NPE:", ios_router["npe"]])
|
||||
|
||||
# fill out the Memories and disk section
|
||||
section_item = self._createSectionItem("Memories and disks")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "{} MiB".format(ios_router["ram"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "{} KiB".format(ios_router["nvram"])])
|
||||
if "iomem" in ios_router and ios_router["iomem"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["I/O memory:", "{}%".format(ios_router["iomem"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["PCMCIA disk0:", "{} MiB".format(ios_router["disk0"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["PCMCIA disk1:", "{} MiB".format(ios_router["disk1"])])
|
||||
|
||||
# fill out the Adapters section
|
||||
section_item = self._createSectionItem("Adapters")
|
||||
for slot_id in range(0, 7):
|
||||
slot = "slot{}".format(slot_id)
|
||||
if slot in ios_router and ios_router[slot]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Slot {}:".format(slot_id), ios_router[slot]])
|
||||
if section_item.childCount() == 0:
|
||||
self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(section_item))
|
||||
|
||||
# fill out the WICs section
|
||||
section_item = self._createSectionItem("WICs")
|
||||
for wic_id in range(0, 3):
|
||||
wic = "wic{}".format(wic_id)
|
||||
if wic in ios_router and ios_router[wic]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["WIC {}:".format(wic_id), ios_router[wic]])
|
||||
if section_item.childCount() == 0:
|
||||
self.uiIOSRouterInfoTreeWidget.takeTopLevelItem(self.uiIOSRouterInfoTreeWidget.indexOfTopLevelItem(section_item))
|
||||
|
||||
self.uiIOSRouterInfoTreeWidget.expandAll()
|
||||
self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiIOSRouterInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _iosRouterPressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
|
||||
:param item: ignored
|
||||
:param column: ignored
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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"))
|
||||
self.connect(change_symbol_action, QtCore.SIGNAL('triggered()'), self._changeSymbolSlot)
|
||||
menu.addAction(change_symbol_action)
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for an IOS router.
|
||||
"""
|
||||
|
||||
item = self.uiIOSRoutersTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
ios_router = self._ios_routers[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=ios_router["default_symbol"], category=ios_router["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
ios_router["default_symbol"] = normal_symbol
|
||||
ios_router["hover_symbol"] = selected_symbol
|
||||
ios_router["category"] = category
|
||||
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the IOS router preferences.
|
||||
"""
|
||||
|
||||
dynamips_module = Dynamips.instance()
|
||||
self._ios_routers = copy.deepcopy(dynamips_module.iosRouters())
|
||||
self._items.clear()
|
||||
|
||||
for key, ios_router in self._ios_routers.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiIOSRoutersTreeWidget)
|
||||
item.setText(0, ios_router["name"])
|
||||
item.setIcon(0, QtGui.QIcon(ios_router["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
if self._items:
|
||||
self.uiIOSRoutersTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiIOSRoutersTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the IOS router preferences.
|
||||
"""
|
||||
|
||||
Dynamips.instance().setIOSRouters(self._ios_routers)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/atm_bridge_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'atm_bridge_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/atm_switch_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'atm_switch_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>539</height>
|
||||
<width>435</width>
|
||||
<height>200</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -154,8 +154,6 @@
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder>spacer_2</zorder>
|
||||
<zorder>uiMemoryUsageOptimisationGroupBox</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/dynamips_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'dynamips_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_DynamipsPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, DynamipsPreferencesPageWidget):
|
||||
DynamipsPreferencesPageWidget.setObjectName("DynamipsPreferencesPageWidget")
|
||||
DynamipsPreferencesPageWidget.resize(430, 539)
|
||||
DynamipsPreferencesPageWidget.resize(435, 200)
|
||||
self.vboxlayout = QtWidgets.QVBoxLayout(DynamipsPreferencesPageWidget)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(DynamipsPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/ethernet_hub_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'ethernet_hub_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/ethernet_switch_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'ethernet_switch_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:55 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/frame_relay_switch_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'frame_relay_switch_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/ios_router_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'ios_router_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>560</width>
|
||||
<height>518</height>
|
||||
<width>505</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -38,6 +38,9 @@
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/ios_router_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'ios_router_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_IOSRouterPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, IOSRouterPreferencesPageWidget):
|
||||
IOSRouterPreferencesPageWidget.setObjectName("IOSRouterPreferencesPageWidget")
|
||||
IOSRouterPreferencesPageWidget.resize(560, 518)
|
||||
IOSRouterPreferencesPageWidget.resize(505, 350)
|
||||
self.gridLayout = QtWidgets.QGridLayout(IOSRouterPreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.uiIOSRoutersTreeWidget = QtWidgets.QTreeWidget(IOSRouterPreferencesPageWidget)
|
||||
@@ -30,6 +30,7 @@ class Ui_IOSRouterPreferencesPageWidget(object):
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiIOSRoutersTreeWidget.setFont(font)
|
||||
self.uiIOSRoutersTreeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.uiIOSRoutersTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiIOSRoutersTreeWidget.setRootIsDecorated(False)
|
||||
self.uiIOSRoutersTreeWidget.setObjectName("uiIOSRoutersTreeWidget")
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/dynamips/ui/ios_router_wizard.ui'
|
||||
# Form implementation generated from reading ui file 'ios_router_wizard.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:31 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -55,26 +55,64 @@ class IOUDevicePreferencesPage(QtWidgets.QWidget, Ui_IOUDevicePreferencesPageWid
|
||||
self.uiNewIOUDevicePushButton.clicked.connect(self._iouDeviceNewSlot)
|
||||
self.uiEditIOUDevicePushButton.clicked.connect(self._iouDeviceEditSlot)
|
||||
self.uiDeleteIOUDevicePushButton.clicked.connect(self._iouDeviceDeleteSlot)
|
||||
self.uiIOUDevicesTreeWidget.currentItemChanged.connect(self._iouDeviceChangedSlot)
|
||||
self.uiIOUDevicesTreeWidget.itemSelectionChanged.connect(self._iouDeviceChangedSlot)
|
||||
self.uiIOUDevicesTreeWidget.itemPressed.connect(self._iouDevicePressedSlot)
|
||||
|
||||
def _iouDeviceChangedSlot(self, current, previous):
|
||||
def _createSectionItem(self, name):
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiIOUDeviceInfoTreeWidget)
|
||||
section_item.setText(0, name)
|
||||
font = section_item.font(0)
|
||||
font.setBold(True)
|
||||
section_item.setFont(0, font)
|
||||
return section_item
|
||||
|
||||
def _refreshInfo(self, iou_device):
|
||||
|
||||
self.uiIOUDeviceInfoTreeWidget.clear()
|
||||
|
||||
# fill out the General section
|
||||
section_item = self._createSectionItem("General")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Name:", iou_device["name"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Server:", iou_device["server"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Image:", iou_device["image"]])
|
||||
if iou_device["initial_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Initial config:", iou_device["initial_config"]])
|
||||
|
||||
if iou_device["use_default_iou_values"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "default"])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "default"])
|
||||
else:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "{} MiB".format(iou_device["ram"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "{} KiB".format(iou_device["nvram"])])
|
||||
|
||||
# fill out the Network section
|
||||
section_item = self._createSectionItem("Network")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Ethernet adapters:", "{} ({} interfaces)".format(iou_device["ethernet_adapters"],
|
||||
iou_device["ethernet_adapters"] * 4)])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Serial adapters:", "{} ({} interfaces)".format(iou_device["serial_adapters"],
|
||||
iou_device["serial_adapters"] * 4)])
|
||||
|
||||
self.uiIOUDeviceInfoTreeWidget.expandAll()
|
||||
self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _iouDeviceChangedSlot(self):
|
||||
"""
|
||||
Loads a selected an IOU device from the tree widget.
|
||||
|
||||
:param current: current QTreeWidgetItem instance
|
||||
:param previous: ignored
|
||||
"""
|
||||
|
||||
if not current:
|
||||
self.uiIOUDeviceInfoTreeWidget.clear()
|
||||
return
|
||||
selection = self.uiIOUDevicesTreeWidget.selectedItems()
|
||||
self.uiDeleteIOUDevicePushButton.setEnabled(len(selection) != 0)
|
||||
single_selected = len(selection) == 1
|
||||
self.uiEditIOUDevicePushButton.setEnabled(single_selected)
|
||||
|
||||
self.uiEditIOUDevicePushButton.setEnabled(True)
|
||||
self.uiDeleteIOUDevicePushButton.setEnabled(True)
|
||||
key = current.data(0, QtCore.Qt.UserRole)
|
||||
iou_device = self._iou_devices[key]
|
||||
self._refreshInfo(iou_device)
|
||||
if single_selected:
|
||||
key = selection[0].data(0, QtCore.Qt.UserRole)
|
||||
iou_device = self._iou_devices[key]
|
||||
self._refreshInfo(iou_device)
|
||||
else:
|
||||
self.uiIOUDeviceInfoTreeWidget.clear()
|
||||
|
||||
def _iouDeviceNewSlot(self):
|
||||
"""
|
||||
@@ -119,11 +157,6 @@ class IOUDevicePreferencesPage(QtWidgets.QWidget, Ui_IOUDevicePreferencesPageWid
|
||||
log.error(e)
|
||||
QtWidgets.QMessageBox.critical(self, "IOU image upload", "Error uploading IOU image: {}".format(e))
|
||||
|
||||
def _imageUploadComplete(self):
|
||||
if self._upload_image_progress_dialog.wasCanceled():
|
||||
return
|
||||
self._upload_image_progress_dialog.accept()
|
||||
|
||||
def _iouDeviceEditSlot(self):
|
||||
"""
|
||||
Edits an IOU device.
|
||||
@@ -154,50 +187,93 @@ class IOUDevicePreferencesPage(QtWidgets.QWidget, Ui_IOUDevicePreferencesPageWid
|
||||
Deletes an IOU device.
|
||||
"""
|
||||
|
||||
for item in self.uiIOUDevicesTreeWidget.selectedItems():
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._iou_devices[key]
|
||||
self.uiIOUDevicesTreeWidget.takeTopLevelItem(self.uiIOUDevicesTreeWidget.indexOfTopLevelItem(item))
|
||||
|
||||
def _iouDevicePressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
|
||||
:param item: ignored
|
||||
:param column: ignored
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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.uiIOUDevicesTreeWidget.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._iouDeviceDeleteSlot)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for an IOU device.
|
||||
"""
|
||||
|
||||
item = self.uiIOUDevicesTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._iou_devices[key]
|
||||
self.uiIOUDevicesTreeWidget.takeTopLevelItem(self.uiIOUDevicesTreeWidget.indexOfTopLevelItem(item))
|
||||
iou_device = self._iou_devices[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=iou_device["default_symbol"], category=iou_device["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
iou_device["default_symbol"] = normal_symbol
|
||||
iou_device["hover_symbol"] = selected_symbol
|
||||
iou_device["category"] = category
|
||||
|
||||
def _createSectionItem(self, name):
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the IOU devices preferences.
|
||||
"""
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiIOUDeviceInfoTreeWidget)
|
||||
section_item.setText(0, name)
|
||||
font = section_item.font(0)
|
||||
font.setBold(True)
|
||||
section_item.setFont(0, font)
|
||||
return section_item
|
||||
iou_module = IOU.instance()
|
||||
self._iou_devices = copy.deepcopy(iou_module.iouDevices())
|
||||
self._items.clear()
|
||||
|
||||
def _refreshInfo(self, iou_device):
|
||||
for key, iou_device in self._iou_devices.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
|
||||
item.setText(0, iou_device["name"])
|
||||
item.setIcon(0, QtGui.QIcon(iou_device["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
self.uiIOUDeviceInfoTreeWidget.clear()
|
||||
if self._items:
|
||||
self.uiIOUDevicesTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiIOUDevicesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
# fill out the General section
|
||||
section_item = self._createSectionItem("General")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Name:", iou_device["name"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Server:", iou_device["server"]])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Image:", iou_device["image"]])
|
||||
if iou_device["initial_config"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Initial config:", iou_device["initial_config"]])
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the IOU devices preferences.
|
||||
"""
|
||||
|
||||
if iou_device["use_default_iou_values"]:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "default"])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "default"])
|
||||
else:
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["RAM:", "{} MiB".format(iou_device["ram"])])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["NVRAM:", "{} KiB".format(iou_device["nvram"])])
|
||||
# self._iouImageSaveSlot()
|
||||
IOU.instance().setIOUDevices(self._iou_devices)
|
||||
|
||||
# fill out the Network section
|
||||
section_item = self._createSectionItem("Network")
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Ethernet adapters:", "{} ({} interfaces)".format(iou_device["ethernet_adapters"],
|
||||
iou_device["ethernet_adapters"] * 4)])
|
||||
QtWidgets.QTreeWidgetItem(section_item, ["Serial adapters:", "{} ({} interfaces)".format(iou_device["serial_adapters"],
|
||||
iou_device["serial_adapters"] * 4)])
|
||||
|
||||
self.uiIOUDeviceInfoTreeWidget.expandAll()
|
||||
self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiIOUDeviceInfoTreeWidget.resizeColumnToContents(1)
|
||||
def _imageUploadComplete(self):
|
||||
if self._upload_image_progress_dialog.wasCanceled():
|
||||
return
|
||||
self._upload_image_progress_dialog.accept()
|
||||
|
||||
@staticmethod
|
||||
def getIOUImage(parent):
|
||||
@@ -272,73 +348,3 @@ class IOUDevicePreferencesPage(QtWidgets.QWidget, Ui_IOUDevicePreferencesPageWid
|
||||
QtWidgets.QMessageBox.warning(parent, "IOU image", "{} is not executable".format(path))
|
||||
|
||||
return path
|
||||
|
||||
def _iouDevicePressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
|
||||
:param item: ignored
|
||||
:param column: ignored
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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"))
|
||||
self.connect(change_symbol_action, QtCore.SIGNAL('triggered()'), self._changeSymbolSlot)
|
||||
menu.addAction(change_symbol_action)
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for an IOU device.
|
||||
"""
|
||||
|
||||
item = self.uiIOUDevicesTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
iou_device = self._iou_devices[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=iou_device["default_symbol"], category=iou_device["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
iou_device["default_symbol"] = normal_symbol
|
||||
iou_device["hover_symbol"] = selected_symbol
|
||||
iou_device["category"] = category
|
||||
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the IOU devices preferences.
|
||||
"""
|
||||
|
||||
iou_module = IOU.instance()
|
||||
self._iou_devices = copy.deepcopy(iou_module.iouDevices())
|
||||
self._items.clear()
|
||||
|
||||
for key, iou_device in self._iou_devices.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiIOUDevicesTreeWidget)
|
||||
item.setText(0, iou_device["name"])
|
||||
item.setIcon(0, QtGui.QIcon(iou_device["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
if self._items:
|
||||
self.uiIOUDevicesTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiIOUDevicesTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the IOU devices preferences.
|
||||
"""
|
||||
|
||||
# self._iouImageSaveSlot()
|
||||
IOU.instance().setIOUDevices(self._iou_devices)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/iou/ui/iou_device_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'iou_device_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,56 +6,50 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>506</width>
|
||||
<height>508</height>
|
||||
<width>505</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>IOU devices</string>
|
||||
<string>IOU Devices</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>IOU device templates</string>
|
||||
<string>IOU Device templates</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QTreeWidget" name="uiIOUDevicesTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiNewIOUDevicePushButton">
|
||||
<property name="text">
|
||||
<string>&New</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiEditIOUDevicePushButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Edit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiDeleteIOUDevicePushButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Delete</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QTreeWidget" name="uiIOUDeviceInfoTreeWidget">
|
||||
@@ -86,39 +80,55 @@
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiNewIOUDevicePushButton">
|
||||
<property name="text">
|
||||
<string>&New</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiEditIOUDevicePushButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Edit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="uiDeleteIOUDevicePushButton">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Delete</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QTreeWidget" name="uiIOUDevicesTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>uiNewIOUDevicePushButton</tabstop>
|
||||
<tabstop>uiDeleteIOUDevicePushButton</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
<designerdata>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/iou/ui/iou_device_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'iou_device_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,9 +15,35 @@ class Ui_IOUDevicePreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, IOUDevicePreferencesPageWidget):
|
||||
IOUDevicePreferencesPageWidget.setObjectName("IOUDevicePreferencesPageWidget")
|
||||
IOUDevicePreferencesPageWidget.resize(506, 508)
|
||||
IOUDevicePreferencesPageWidget.resize(505, 350)
|
||||
IOUDevicePreferencesPageWidget.setAccessibleDescription("")
|
||||
self.gridLayout = QtWidgets.QGridLayout(IOUDevicePreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
|
||||
self.uiNewIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiNewIOUDevicePushButton.setObjectName("uiNewIOUDevicePushButton")
|
||||
self.horizontalLayout_5.addWidget(self.uiNewIOUDevicePushButton)
|
||||
self.uiEditIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiEditIOUDevicePushButton.setEnabled(False)
|
||||
self.uiEditIOUDevicePushButton.setObjectName("uiEditIOUDevicePushButton")
|
||||
self.horizontalLayout_5.addWidget(self.uiEditIOUDevicePushButton)
|
||||
self.uiDeleteIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiDeleteIOUDevicePushButton.setEnabled(False)
|
||||
self.uiDeleteIOUDevicePushButton.setObjectName("uiDeleteIOUDevicePushButton")
|
||||
self.horizontalLayout_5.addWidget(self.uiDeleteIOUDevicePushButton)
|
||||
self.gridLayout.addLayout(self.horizontalLayout_5, 1, 1, 1, 1)
|
||||
self.uiIOUDeviceInfoTreeWidget = QtWidgets.QTreeWidget(IOUDevicePreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiIOUDeviceInfoTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiIOUDeviceInfoTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiIOUDeviceInfoTreeWidget.setIndentation(10)
|
||||
self.uiIOUDeviceInfoTreeWidget.setAllColumnsShowFocus(True)
|
||||
self.uiIOUDeviceInfoTreeWidget.setObjectName("uiIOUDeviceInfoTreeWidget")
|
||||
self.uiIOUDeviceInfoTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiIOUDeviceInfoTreeWidget, 0, 1, 1, 1)
|
||||
self.uiIOUDevicesTreeWidget = QtWidgets.QTreeWidget(IOUDevicePreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
@@ -30,47 +56,24 @@ class Ui_IOUDevicePreferencesPageWidget(object):
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiIOUDevicesTreeWidget.setFont(font)
|
||||
self.uiIOUDevicesTreeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.uiIOUDevicesTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiIOUDevicesTreeWidget.setRootIsDecorated(False)
|
||||
self.uiIOUDevicesTreeWidget.setObjectName("uiIOUDevicesTreeWidget")
|
||||
self.uiIOUDevicesTreeWidget.headerItem().setText(0, "1")
|
||||
self.uiIOUDevicesTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiIOUDevicesTreeWidget, 0, 0, 2, 1)
|
||||
self.uiIOUDeviceInfoTreeWidget = QtWidgets.QTreeWidget(IOUDevicePreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiIOUDeviceInfoTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiIOUDeviceInfoTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiIOUDeviceInfoTreeWidget.setIndentation(10)
|
||||
self.uiIOUDeviceInfoTreeWidget.setAllColumnsShowFocus(True)
|
||||
self.uiIOUDeviceInfoTreeWidget.setObjectName("uiIOUDeviceInfoTreeWidget")
|
||||
self.uiIOUDeviceInfoTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiIOUDeviceInfoTreeWidget, 0, 1, 1, 1)
|
||||
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
|
||||
self.uiNewIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiNewIOUDevicePushButton.setObjectName("uiNewIOUDevicePushButton")
|
||||
self.horizontalLayout_6.addWidget(self.uiNewIOUDevicePushButton)
|
||||
self.uiEditIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiEditIOUDevicePushButton.setEnabled(False)
|
||||
self.uiEditIOUDevicePushButton.setObjectName("uiEditIOUDevicePushButton")
|
||||
self.horizontalLayout_6.addWidget(self.uiEditIOUDevicePushButton)
|
||||
self.uiDeleteIOUDevicePushButton = QtWidgets.QPushButton(IOUDevicePreferencesPageWidget)
|
||||
self.uiDeleteIOUDevicePushButton.setEnabled(False)
|
||||
self.uiDeleteIOUDevicePushButton.setObjectName("uiDeleteIOUDevicePushButton")
|
||||
self.horizontalLayout_6.addWidget(self.uiDeleteIOUDevicePushButton)
|
||||
self.gridLayout.addLayout(self.horizontalLayout_6, 1, 1, 1, 1)
|
||||
|
||||
self.retranslateUi(IOUDevicePreferencesPageWidget)
|
||||
QtCore.QMetaObject.connectSlotsByName(IOUDevicePreferencesPageWidget)
|
||||
IOUDevicePreferencesPageWidget.setTabOrder(self.uiNewIOUDevicePushButton, self.uiDeleteIOUDevicePushButton)
|
||||
|
||||
def retranslateUi(self, IOUDevicePreferencesPageWidget):
|
||||
_translate = gns3.qt.translate
|
||||
IOUDevicePreferencesPageWidget.setWindowTitle(_translate("IOUDevicePreferencesPageWidget", "IOU devices"))
|
||||
IOUDevicePreferencesPageWidget.setAccessibleName(_translate("IOUDevicePreferencesPageWidget", "IOU device templates"))
|
||||
self.uiIOUDeviceInfoTreeWidget.headerItem().setText(0, _translate("IOUDevicePreferencesPageWidget", "1"))
|
||||
self.uiIOUDeviceInfoTreeWidget.headerItem().setText(1, _translate("IOUDevicePreferencesPageWidget", "2"))
|
||||
IOUDevicePreferencesPageWidget.setWindowTitle(_translate("IOUDevicePreferencesPageWidget", "IOU Devices"))
|
||||
IOUDevicePreferencesPageWidget.setAccessibleName(_translate("IOUDevicePreferencesPageWidget", "IOU Device templates"))
|
||||
self.uiNewIOUDevicePushButton.setText(_translate("IOUDevicePreferencesPageWidget", "&New"))
|
||||
self.uiEditIOUDevicePushButton.setText(_translate("IOUDevicePreferencesPageWidget", "&Edit"))
|
||||
self.uiDeleteIOUDevicePushButton.setText(_translate("IOUDevicePreferencesPageWidget", "&Delete"))
|
||||
self.uiIOUDeviceInfoTreeWidget.headerItem().setText(0, _translate("IOUDevicePreferencesPageWidget", "1"))
|
||||
self.uiIOUDeviceInfoTreeWidget.headerItem().setText(1, _translate("IOUDevicePreferencesPageWidget", "2"))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/iou/ui/iou_device_wizard.ui'
|
||||
# Form implementation generated from reading ui file 'iou_device_wizard.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:56 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>425</width>
|
||||
<height>467</height>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/iou/ui/iou_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'iou_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_IOUPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, IOUPreferencesPageWidget):
|
||||
IOUPreferencesPageWidget.setObjectName("IOUPreferencesPageWidget")
|
||||
IOUPreferencesPageWidget.resize(425, 467)
|
||||
IOUPreferencesPageWidget.resize(400, 300)
|
||||
self.vboxlayout = QtWidgets.QVBoxLayout(IOUPreferencesPageWidget)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(IOUPreferencesPageWidget)
|
||||
|
||||
@@ -54,7 +54,7 @@ class QemuVMPreferencesPage(QtWidgets.QWidget, Ui_QemuVMPreferencesPageWidget):
|
||||
self.uiNewQemuVMPushButton.clicked.connect(self._qemuVMNewSlot)
|
||||
self.uiEditQemuVMPushButton.clicked.connect(self._qemuVMEditSlot)
|
||||
self.uiDeleteQemuVMPushButton.clicked.connect(self._qemuVMDeleteSlot)
|
||||
self.uiQemuVMsTreeWidget.currentItemChanged.connect(self._qemuVMChangedSlot)
|
||||
self.uiQemuVMsTreeWidget.itemSelectionChanged.connect(self._qemuVMChangedSlot)
|
||||
self.uiQemuVMsTreeWidget.itemPressed.connect(self._qemuVMPressedSlot)
|
||||
|
||||
def _createSectionItem(self, name):
|
||||
@@ -122,23 +122,22 @@ class QemuVMPreferencesPage(QtWidgets.QWidget, Ui_QemuVMPreferencesPageWidget):
|
||||
self.uiQemuVMInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiQemuVMInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _qemuVMChangedSlot(self, current, previous):
|
||||
def _qemuVMChangedSlot(self):
|
||||
"""
|
||||
Loads a selected QEMU VM from the tree widget.
|
||||
|
||||
:param current: current QTreeWidgetItem instance
|
||||
:param previous: ignored
|
||||
"""
|
||||
|
||||
if not current:
|
||||
self.uiQemuVMInfoTreeWidget.clear()
|
||||
return
|
||||
selection = self.uiQemuVMsTreeWidget.selectedItems()
|
||||
self.uiDeleteQemuVMPushButton.setEnabled(len(selection) != 0)
|
||||
single_selected = len(selection) == 1
|
||||
self.uiEditQemuVMPushButton.setEnabled(single_selected)
|
||||
|
||||
self.uiEditQemuVMPushButton.setEnabled(True)
|
||||
self.uiDeleteQemuVMPushButton.setEnabled(True)
|
||||
key = current.data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
self._refreshInfo(qemu_vm)
|
||||
if single_selected:
|
||||
key = selection[0].data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
self._refreshInfo(qemu_vm)
|
||||
else:
|
||||
self.uiQemuVMInfoTreeWidget.clear()
|
||||
|
||||
def _qemuVMNewSlot(self):
|
||||
"""
|
||||
@@ -168,6 +167,122 @@ class QemuVMPreferencesPage(QtWidgets.QWidget, Ui_QemuVMPreferencesPageWidget):
|
||||
self._qemu_vms[key]["options"] = "-nographic"
|
||||
self._uploadImages(new_vm_settings)
|
||||
|
||||
def _qemuVMEditSlot(self):
|
||||
"""
|
||||
Edits a QEMU VM.
|
||||
"""
|
||||
|
||||
item = self.uiQemuVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
dialog = ConfigurationDialog(qemu_vm["name"], qemu_vm, QemuVMConfigurationPage(), parent=self)
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
if qemu_vm["name"] != item.text(0):
|
||||
new_key = "{server}:{name}".format(server=qemu_vm["server"], name=qemu_vm["name"])
|
||||
if new_key in self._qemu_vms:
|
||||
QtWidgets.QMessageBox.critical(self, "QEMU VM", "QEMU VM name {} already exists for server {}".format(qemu_vm["name"],
|
||||
qemu_vm["server"]))
|
||||
qemu_vm["name"] = item.text(0)
|
||||
return
|
||||
self._qemu_vms[new_key] = self._qemu_vms[key]
|
||||
del self._qemu_vms[key]
|
||||
item.setText(0, qemu_vm["name"])
|
||||
item.setData(0, QtCore.Qt.UserRole, new_key)
|
||||
|
||||
if qemu_vm["server"] == 'cloud':
|
||||
self._uploadImages(qemu_vm)
|
||||
|
||||
self._refreshInfo(qemu_vm)
|
||||
|
||||
def _qemuVMDeleteSlot(self):
|
||||
"""
|
||||
Deletes a QEMU VM.
|
||||
"""
|
||||
|
||||
for item in self.uiQemuVMsTreeWidget.selectedItems():
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._qemu_vms[key]
|
||||
self.uiQemuVMsTreeWidget.takeTopLevelItem(self.uiQemuVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
|
||||
def _qemuVMPressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
|
||||
:param item: ignored
|
||||
:param column: ignored
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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.uiQemuVMsTreeWidget.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._qemuVMDeleteSlot)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for a QEMU VM.
|
||||
"""
|
||||
|
||||
item = self.uiQemuVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=qemu_vm["default_symbol"], category=qemu_vm["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
qemu_vm["default_symbol"] = normal_symbol
|
||||
qemu_vm["hover_symbol"] = selected_symbol
|
||||
qemu_vm["category"] = category
|
||||
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the QEMU VM preferences.
|
||||
"""
|
||||
|
||||
qemu_module = Qemu.instance()
|
||||
self._qemu_vms = copy.deepcopy(qemu_module.qemuVMs())
|
||||
self._items.clear()
|
||||
|
||||
for key, qemu_vm in self._qemu_vms.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
|
||||
item.setText(0, qemu_vm["name"])
|
||||
item.setIcon(0, QtGui.QIcon(qemu_vm["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
if self._items:
|
||||
self.uiQemuVMsTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiQemuVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the QEMU VM preferences.
|
||||
"""
|
||||
|
||||
Qemu.instance().setQemuVMs(self._qemu_vms)
|
||||
|
||||
def _imageUploadComplete(self):
|
||||
if self._upload_image_progress_dialog.wasCanceled():
|
||||
return
|
||||
@@ -232,109 +347,3 @@ class QemuVMPreferencesPage(QtWidgets.QWidget, Ui_QemuVMPreferencesPageWidget):
|
||||
log = logging.getLogger(__name__)
|
||||
log.error(e)
|
||||
QtWidgets.QMessageBox.critical(self, "Qemu image upload", "Error uploading Qemu image: {}".format(e))
|
||||
|
||||
def _qemuVMEditSlot(self):
|
||||
"""
|
||||
Edits a QEMU VM.
|
||||
"""
|
||||
|
||||
item = self.uiQemuVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
dialog = ConfigurationDialog(qemu_vm["name"], qemu_vm, QemuVMConfigurationPage(), parent=self)
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
if qemu_vm["name"] != item.text(0):
|
||||
new_key = "{server}:{name}".format(server=qemu_vm["server"], name=qemu_vm["name"])
|
||||
if new_key in self._qemu_vms:
|
||||
QtWidgets.QMessageBox.critical(self, "QEMU VM", "QEMU VM name {} already exists for server {}".format(qemu_vm["name"],
|
||||
qemu_vm["server"]))
|
||||
qemu_vm["name"] = item.text(0)
|
||||
return
|
||||
self._qemu_vms[new_key] = self._qemu_vms[key]
|
||||
del self._qemu_vms[key]
|
||||
item.setText(0, qemu_vm["name"])
|
||||
item.setData(0, QtCore.Qt.UserRole, new_key)
|
||||
|
||||
if qemu_vm["server"] == 'cloud':
|
||||
self._uploadImages(qemu_vm)
|
||||
|
||||
self._refreshInfo(qemu_vm)
|
||||
|
||||
def _qemuVMDeleteSlot(self):
|
||||
"""
|
||||
Deletes a QEMU VM.
|
||||
"""
|
||||
|
||||
item = self.uiQemuVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._qemu_vms[key]
|
||||
self.uiQemuVMsTreeWidget.takeTopLevelItem(self.uiQemuVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
|
||||
def _qemuVMPressedSlot(self, item, column):
|
||||
"""
|
||||
Slot for item pressed.
|
||||
"""
|
||||
|
||||
if QtWidgets.QApplication.mouseButtons() & QtCore.Qt.RightButton:
|
||||
self._showContextualMenu()
|
||||
|
||||
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"))
|
||||
self.connect(change_symbol_action, QtCore.SIGNAL('triggered()'), self._changeSymbolSlot)
|
||||
menu.addAction(change_symbol_action)
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
"""
|
||||
Change a symbol for a QEMU VM.
|
||||
"""
|
||||
|
||||
item = self.uiQemuVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
qemu_vm = self._qemu_vms[key]
|
||||
dialog = SymbolSelectionDialog(self, symbol=qemu_vm["default_symbol"], category=qemu_vm["category"])
|
||||
dialog.show()
|
||||
if dialog.exec_():
|
||||
normal_symbol, selected_symbol = dialog.getSymbols()
|
||||
category = dialog.getCategory()
|
||||
item.setIcon(0, QtGui.QIcon(normal_symbol))
|
||||
qemu_vm["default_symbol"] = normal_symbol
|
||||
qemu_vm["hover_symbol"] = selected_symbol
|
||||
qemu_vm["category"] = category
|
||||
|
||||
def loadPreferences(self):
|
||||
"""
|
||||
Loads the QEMU VM preferences.
|
||||
"""
|
||||
|
||||
qemu_module = Qemu.instance()
|
||||
self._qemu_vms = copy.deepcopy(qemu_module.qemuVMs())
|
||||
self._items.clear()
|
||||
|
||||
for key, qemu_vm in self._qemu_vms.items():
|
||||
item = QtWidgets.QTreeWidgetItem(self.uiQemuVMsTreeWidget)
|
||||
item.setText(0, qemu_vm["name"])
|
||||
item.setIcon(0, QtGui.QIcon(qemu_vm["default_symbol"]))
|
||||
item.setData(0, QtCore.Qt.UserRole, key)
|
||||
self._items.append(item)
|
||||
|
||||
if self._items:
|
||||
self.uiQemuVMsTreeWidget.setCurrentItem(self._items[0])
|
||||
self.uiQemuVMsTreeWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
|
||||
|
||||
def savePreferences(self):
|
||||
"""
|
||||
Saves the QEMU VM preferences.
|
||||
"""
|
||||
|
||||
Qemu.instance().setQemuVMs(self._qemu_vms)
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>374</width>
|
||||
<height>495</height>
|
||||
<width>200</width>
|
||||
<height>200</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/qemu/ui/qemu_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'qemu_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_QemuPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, QemuPreferencesPageWidget):
|
||||
QemuPreferencesPageWidget.setObjectName("QemuPreferencesPageWidget")
|
||||
QemuPreferencesPageWidget.resize(374, 495)
|
||||
QemuPreferencesPageWidget.resize(200, 200)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(QemuPreferencesPageWidget)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(QemuPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/qemu/ui/qemu_vm_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'qemu_vm_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,86 +6,20 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>511</width>
|
||||
<height>543</height>
|
||||
<width>505</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>QEMU VMs</string>
|
||||
<string>Qemu VMs</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>QEMU VM templates</string>
|
||||
<string>Qemu VM templates</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QTreeWidget" name="uiQemuVMsTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QTreeWidget" name="uiQemuVMInfoTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="indentation">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>1</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>2</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
@@ -117,6 +51,78 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QTreeWidget" name="uiQemuVMInfoTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="indentation">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="allColumnsShowFocus">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>1</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>2</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" rowspan="2">
|
||||
<widget class="QTreeWidget" name="uiQemuVMsTreeWidget">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>160</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>11</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/qemu/ui/qemu_vm_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'qemu_vm_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:32 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,38 +15,10 @@ class Ui_QemuVMPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, QemuVMPreferencesPageWidget):
|
||||
QemuVMPreferencesPageWidget.setObjectName("QemuVMPreferencesPageWidget")
|
||||
QemuVMPreferencesPageWidget.resize(511, 543)
|
||||
QemuVMPreferencesPageWidget.resize(505, 350)
|
||||
QemuVMPreferencesPageWidget.setAccessibleDescription("")
|
||||
self.gridLayout = QtWidgets.QGridLayout(QemuVMPreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.uiQemuVMsTreeWidget = QtWidgets.QTreeWidget(QemuVMPreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiQemuVMsTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiQemuVMsTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiQemuVMsTreeWidget.setMaximumSize(QtCore.QSize(160, 16777215))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(11)
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiQemuVMsTreeWidget.setFont(font)
|
||||
self.uiQemuVMsTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiQemuVMsTreeWidget.setRootIsDecorated(False)
|
||||
self.uiQemuVMsTreeWidget.setObjectName("uiQemuVMsTreeWidget")
|
||||
self.uiQemuVMsTreeWidget.headerItem().setText(0, "1")
|
||||
self.uiQemuVMsTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiQemuVMsTreeWidget, 0, 0, 2, 1)
|
||||
self.uiQemuVMInfoTreeWidget = QtWidgets.QTreeWidget(QemuVMPreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiQemuVMInfoTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiQemuVMInfoTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiQemuVMInfoTreeWidget.setIndentation(10)
|
||||
self.uiQemuVMInfoTreeWidget.setAllColumnsShowFocus(True)
|
||||
self.uiQemuVMInfoTreeWidget.setObjectName("uiQemuVMInfoTreeWidget")
|
||||
self.uiQemuVMInfoTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiQemuVMInfoTreeWidget, 0, 1, 1, 1)
|
||||
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
|
||||
self.uiNewQemuVMPushButton = QtWidgets.QPushButton(QemuVMPreferencesPageWidget)
|
||||
@@ -61,6 +33,36 @@ class Ui_QemuVMPreferencesPageWidget(object):
|
||||
self.uiDeleteQemuVMPushButton.setObjectName("uiDeleteQemuVMPushButton")
|
||||
self.horizontalLayout_5.addWidget(self.uiDeleteQemuVMPushButton)
|
||||
self.gridLayout.addLayout(self.horizontalLayout_5, 1, 1, 1, 1)
|
||||
self.uiQemuVMInfoTreeWidget = QtWidgets.QTreeWidget(QemuVMPreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiQemuVMInfoTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiQemuVMInfoTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiQemuVMInfoTreeWidget.setIndentation(10)
|
||||
self.uiQemuVMInfoTreeWidget.setAllColumnsShowFocus(True)
|
||||
self.uiQemuVMInfoTreeWidget.setObjectName("uiQemuVMInfoTreeWidget")
|
||||
self.uiQemuVMInfoTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiQemuVMInfoTreeWidget, 0, 1, 1, 1)
|
||||
self.uiQemuVMsTreeWidget = QtWidgets.QTreeWidget(QemuVMPreferencesPageWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.uiQemuVMsTreeWidget.sizePolicy().hasHeightForWidth())
|
||||
self.uiQemuVMsTreeWidget.setSizePolicy(sizePolicy)
|
||||
self.uiQemuVMsTreeWidget.setMaximumSize(QtCore.QSize(160, 16777215))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(11)
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiQemuVMsTreeWidget.setFont(font)
|
||||
self.uiQemuVMsTreeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.uiQemuVMsTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiQemuVMsTreeWidget.setRootIsDecorated(False)
|
||||
self.uiQemuVMsTreeWidget.setObjectName("uiQemuVMsTreeWidget")
|
||||
self.uiQemuVMsTreeWidget.headerItem().setText(0, "1")
|
||||
self.uiQemuVMsTreeWidget.header().setVisible(False)
|
||||
self.gridLayout.addWidget(self.uiQemuVMsTreeWidget, 0, 0, 2, 1)
|
||||
|
||||
self.retranslateUi(QemuVMPreferencesPageWidget)
|
||||
QtCore.QMetaObject.connectSlotsByName(QemuVMPreferencesPageWidget)
|
||||
@@ -68,10 +70,10 @@ class Ui_QemuVMPreferencesPageWidget(object):
|
||||
|
||||
def retranslateUi(self, QemuVMPreferencesPageWidget):
|
||||
_translate = gns3.qt.translate
|
||||
QemuVMPreferencesPageWidget.setWindowTitle(_translate("QemuVMPreferencesPageWidget", "QEMU VMs"))
|
||||
QemuVMPreferencesPageWidget.setAccessibleName(_translate("QemuVMPreferencesPageWidget", "QEMU VM templates"))
|
||||
self.uiQemuVMInfoTreeWidget.headerItem().setText(0, _translate("QemuVMPreferencesPageWidget", "1"))
|
||||
self.uiQemuVMInfoTreeWidget.headerItem().setText(1, _translate("QemuVMPreferencesPageWidget", "2"))
|
||||
QemuVMPreferencesPageWidget.setWindowTitle(_translate("QemuVMPreferencesPageWidget", "Qemu VMs"))
|
||||
QemuVMPreferencesPageWidget.setAccessibleName(_translate("QemuVMPreferencesPageWidget", "Qemu VM templates"))
|
||||
self.uiNewQemuVMPushButton.setText(_translate("QemuVMPreferencesPageWidget", "&New"))
|
||||
self.uiEditQemuVMPushButton.setText(_translate("QemuVMPreferencesPageWidget", "&Edit"))
|
||||
self.uiDeleteQemuVMPushButton.setText(_translate("QemuVMPreferencesPageWidget", "&Delete"))
|
||||
self.uiQemuVMInfoTreeWidget.headerItem().setText(0, _translate("QemuVMPreferencesPageWidget", "1"))
|
||||
self.uiQemuVMInfoTreeWidget.headerItem().setText(1, _translate("QemuVMPreferencesPageWidget", "2"))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/qemu/ui/qemu_vm_wizard.ui'
|
||||
# Form implementation generated from reading ui file 'qemu_vm_wizard.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -50,27 +50,9 @@ class VirtualBoxVMPreferencesPage(QtWidgets.QWidget, Ui_VirtualBoxVMPreferencesP
|
||||
self.uiNewVirtualBoxVMPushButton.clicked.connect(self._vboxVMNewSlot)
|
||||
self.uiEditVirtualBoxVMPushButton.clicked.connect(self._vboxVMEditSlot)
|
||||
self.uiDeleteVirtualBoxVMPushButton.clicked.connect(self._vboxVMDeleteSlot)
|
||||
self.uiVirtualBoxVMsTreeWidget.currentItemChanged.connect(self._vboxVMChangedSlot)
|
||||
self.uiVirtualBoxVMsTreeWidget.itemSelectionChanged.connect(self._vboxVMChangedSlot)
|
||||
self.uiVirtualBoxVMsTreeWidget.itemPressed.connect(self._vboxVMPressedSlot)
|
||||
|
||||
def _vboxVMChangedSlot(self, current, previous):
|
||||
"""
|
||||
Loads a selected VirtualBox VM from the tree widget.
|
||||
|
||||
:param current: current QTreeWidgetItem instance
|
||||
:param previous: ignored
|
||||
"""
|
||||
|
||||
if not current:
|
||||
self.uiVirtualBoxVMInfoTreeWidget.clear()
|
||||
return
|
||||
|
||||
self.uiEditVirtualBoxVMPushButton.setEnabled(True)
|
||||
self.uiDeleteVirtualBoxVMPushButton.setEnabled(True)
|
||||
key = current.data(0, QtCore.Qt.UserRole)
|
||||
vbox_vm = self._virtualbox_vms[key]
|
||||
self._refreshInfo(vbox_vm)
|
||||
|
||||
def _createSectionItem(self, name):
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiVirtualBoxVMInfoTreeWidget)
|
||||
@@ -103,6 +85,23 @@ class VirtualBoxVMPreferencesPage(QtWidgets.QWidget, Ui_VirtualBoxVMPreferencesP
|
||||
self.uiVirtualBoxVMInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiVirtualBoxVMInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _vboxVMChangedSlot(self):
|
||||
"""
|
||||
Loads a selected VirtualBox VM from the tree widget.
|
||||
"""
|
||||
|
||||
selection = self.uiVirtualBoxVMsTreeWidget.selectedItems()
|
||||
self.uiDeleteVirtualBoxVMPushButton.setEnabled(len(selection) != 0)
|
||||
single_selected = len(selection) == 1
|
||||
self.uiEditVirtualBoxVMPushButton.setEnabled(single_selected)
|
||||
|
||||
if single_selected:
|
||||
key = selection[0].data(0, QtCore.Qt.UserRole)
|
||||
vbox_vm = self._virtualbox_vms[key]
|
||||
self._refreshInfo(vbox_vm)
|
||||
else:
|
||||
self.uiVirtualBoxVMInfoTreeWidget.clear()
|
||||
|
||||
def _vboxVMNewSlot(self):
|
||||
"""
|
||||
Creates a new VirtualBox VM.
|
||||
@@ -154,11 +153,11 @@ class VirtualBoxVMPreferencesPage(QtWidgets.QWidget, Ui_VirtualBoxVMPreferencesP
|
||||
Deletes a VirtualBox VM.
|
||||
"""
|
||||
|
||||
item = self.uiVirtualBoxVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._virtualbox_vms[key]
|
||||
self.uiVirtualBoxVMsTreeWidget.takeTopLevelItem(self.uiVirtualBoxVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
for item in self.uiVirtualBoxVMsTreeWidget.selectedItems():
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._virtualbox_vms[key]
|
||||
self.uiVirtualBoxVMsTreeWidget.takeTopLevelItem(self.uiVirtualBoxVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
|
||||
def _vboxVMPressedSlot(self, item, column):
|
||||
"""
|
||||
@@ -177,10 +176,17 @@ class VirtualBoxVMPreferencesPage(QtWidgets.QWidget, Ui_VirtualBoxVMPreferencesP
|
||||
"""
|
||||
|
||||
menu = QtWidgets.QMenu()
|
||||
|
||||
change_symbol_action = QtWidgets.QAction("Change symbol", menu)
|
||||
change_symbol_action.setIcon(QtGui.QIcon(":/icons/node_conception.svg"))
|
||||
self.connect(change_symbol_action, QtCore.SIGNAL('triggered()'), self._changeSymbolSlot)
|
||||
change_symbol_action.setEnabled(len(self.uiVirtualBoxVMsTreeWidget.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._vboxVMDeleteSlot)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>490</height>
|
||||
<width>450</width>
|
||||
<height>250</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/virtualbox/ui/virtualbox_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'virtualbox_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:57 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_VirtualBoxPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, VirtualBoxPreferencesPageWidget):
|
||||
VirtualBoxPreferencesPageWidget.setObjectName("VirtualBoxPreferencesPageWidget")
|
||||
VirtualBoxPreferencesPageWidget.resize(430, 490)
|
||||
VirtualBoxPreferencesPageWidget.resize(450, 250)
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(VirtualBoxPreferencesPageWidget)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(VirtualBoxPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/virtualbox/ui/virtualbox_vm_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'virtualbox_vm_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>499</width>
|
||||
<height>546</height>
|
||||
<width>505</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -101,6 +101,9 @@
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
@@ -122,6 +125,10 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>uiNewVirtualBoxVMPushButton</tabstop>
|
||||
<tabstop>uiDeleteVirtualBoxVMPushButton</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
<designerdata>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/virtualbox/ui/virtualbox_vm_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'virtualbox_vm_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_VirtualBoxVMPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, VirtualBoxVMPreferencesPageWidget):
|
||||
VirtualBoxVMPreferencesPageWidget.setObjectName("VirtualBoxVMPreferencesPageWidget")
|
||||
VirtualBoxVMPreferencesPageWidget.resize(499, 546)
|
||||
VirtualBoxVMPreferencesPageWidget.resize(505, 350)
|
||||
VirtualBoxVMPreferencesPageWidget.setAccessibleDescription("")
|
||||
self.gridLayout = QtWidgets.QGridLayout(VirtualBoxVMPreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
@@ -56,6 +56,7 @@ class Ui_VirtualBoxVMPreferencesPageWidget(object):
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiVirtualBoxVMsTreeWidget.setFont(font)
|
||||
self.uiVirtualBoxVMsTreeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.uiVirtualBoxVMsTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiVirtualBoxVMsTreeWidget.setRootIsDecorated(False)
|
||||
self.uiVirtualBoxVMsTreeWidget.setObjectName("uiVirtualBoxVMsTreeWidget")
|
||||
@@ -65,6 +66,7 @@ class Ui_VirtualBoxVMPreferencesPageWidget(object):
|
||||
|
||||
self.retranslateUi(VirtualBoxVMPreferencesPageWidget)
|
||||
QtCore.QMetaObject.connectSlotsByName(VirtualBoxVMPreferencesPageWidget)
|
||||
VirtualBoxVMPreferencesPageWidget.setTabOrder(self.uiNewVirtualBoxVMPushButton, self.uiDeleteVirtualBoxVMPushButton)
|
||||
|
||||
def retranslateUi(self, VirtualBoxVMPreferencesPageWidget):
|
||||
_translate = gns3.qt.translate
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/virtualbox/ui/virtualbox_vm_wizard.ui'
|
||||
# Form implementation generated from reading ui file 'virtualbox_vm_wizard.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -50,27 +50,9 @@ class VMwareVMPreferencesPage(QtWidgets.QWidget, Ui_VMwareVMPreferencesPageWidge
|
||||
self.uiNewVMwareVMPushButton.clicked.connect(self._vmwareVMNewSlot)
|
||||
self.uiEditVMwareVMPushButton.clicked.connect(self._vmwareVMEditSlot)
|
||||
self.uiDeleteVMwareVMPushButton.clicked.connect(self._vmwareVMDeleteSlot)
|
||||
self.uiVMwareVMsTreeWidget.currentItemChanged.connect(self._vmwareVMChangedSlot)
|
||||
self.uiVMwareVMsTreeWidget.itemSelectionChanged.connect(self._vmwareVMChangedSlot)
|
||||
self.uiVMwareVMsTreeWidget.itemPressed.connect(self._vmwareVMPressedSlot)
|
||||
|
||||
def _vmwareVMChangedSlot(self, current, previous):
|
||||
"""
|
||||
Loads a selected VMware VM from the tree widget.
|
||||
|
||||
:param current: current QTreeWidgetItem instance
|
||||
:param previous: ignored
|
||||
"""
|
||||
|
||||
if not current:
|
||||
self.uiVMwareVMInfoTreeWidget.clear()
|
||||
return
|
||||
|
||||
self.uiEditVMwareVMPushButton.setEnabled(True)
|
||||
self.uiDeleteVMwareVMPushButton.setEnabled(True)
|
||||
key = current.data(0, QtCore.Qt.UserRole)
|
||||
vmware_vm = self._vmware_vms[key]
|
||||
self._refreshInfo(vmware_vm)
|
||||
|
||||
def _createSectionItem(self, name):
|
||||
|
||||
section_item = QtWidgets.QTreeWidgetItem(self.uiVMwareVMInfoTreeWidget)
|
||||
@@ -96,6 +78,23 @@ class VMwareVMPreferencesPage(QtWidgets.QWidget, Ui_VMwareVMPreferencesPageWidge
|
||||
self.uiVMwareVMInfoTreeWidget.resizeColumnToContents(0)
|
||||
self.uiVMwareVMInfoTreeWidget.resizeColumnToContents(1)
|
||||
|
||||
def _vmwareVMChangedSlot(self):
|
||||
"""
|
||||
Loads a selected VMware VM from the tree widget.
|
||||
"""
|
||||
|
||||
selection = self.uiVMwareVMsTreeWidget.selectedItems()
|
||||
self.uiDeleteVMwareVMPushButton.setEnabled(len(selection) != 0)
|
||||
single_selected = len(selection) == 1
|
||||
self.uiEditVMwareVMPushButton.setEnabled(single_selected)
|
||||
|
||||
if single_selected:
|
||||
key = selection[0].data(0, QtCore.Qt.UserRole)
|
||||
vmware_vm = self._vmware_vms[key]
|
||||
self._refreshInfo(vmware_vm)
|
||||
else:
|
||||
self.uiVMwareVMInfoTreeWidget.clear()
|
||||
|
||||
def _vmwareVMNewSlot(self):
|
||||
"""
|
||||
Creates a new VMware VM.
|
||||
@@ -147,11 +146,11 @@ class VMwareVMPreferencesPage(QtWidgets.QWidget, Ui_VMwareVMPreferencesPageWidge
|
||||
Deletes a VMware VM.
|
||||
"""
|
||||
|
||||
item = self.uiVMwareVMsTreeWidget.currentItem()
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._vmware_vms[key]
|
||||
self.uiVMwareVMsTreeWidget.takeTopLevelItem(self.uiVMwareVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
for item in self.uiVMwareVMsTreeWidget.selectedItems():
|
||||
if item:
|
||||
key = item.data(0, QtCore.Qt.UserRole)
|
||||
del self._vmware_vms[key]
|
||||
self.uiVMwareVMsTreeWidget.takeTopLevelItem(self.uiVMwareVMsTreeWidget.indexOfTopLevelItem(item))
|
||||
|
||||
def _vmwareVMPressedSlot(self, item, column):
|
||||
"""
|
||||
@@ -170,10 +169,17 @@ class VMwareVMPreferencesPage(QtWidgets.QWidget, Ui_VMwareVMPreferencesPageWidge
|
||||
"""
|
||||
|
||||
menu = QtWidgets.QMenu()
|
||||
|
||||
change_symbol_action = QtWidgets.QAction("Change symbol", menu)
|
||||
change_symbol_action.setIcon(QtGui.QIcon(":/icons/node_conception.svg"))
|
||||
self.connect(change_symbol_action, QtCore.SIGNAL('triggered()'), self._changeSymbolSlot)
|
||||
change_symbol_action.setEnabled(len(self.uiVMwareVMsTreeWidget.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._vmwareVMDeleteSlot)
|
||||
menu.addAction(delete_action)
|
||||
|
||||
menu.exec_(QtGui.QCursor.pos())
|
||||
|
||||
def _changeSymbolSlot(self):
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>490</height>
|
||||
<width>450</width>
|
||||
<height>250</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vmware/ui/vmware_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'vmware_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_VMwarePreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, VMwarePreferencesPageWidget):
|
||||
VMwarePreferencesPageWidget.setObjectName("VMwarePreferencesPageWidget")
|
||||
VMwarePreferencesPageWidget.resize(430, 490)
|
||||
VMwarePreferencesPageWidget.resize(450, 250)
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(VMwarePreferencesPageWidget)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(VMwarePreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vmware/ui/vmware_vm_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'vmware_vm_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,15 +6,15 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>499</width>
|
||||
<height>546</height>
|
||||
<width>505</width>
|
||||
<height>350</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>VMware VMs</string>
|
||||
</property>
|
||||
<property name="accessibleName">
|
||||
<string>VirtualBox VM templates</string>
|
||||
<string>VMware VM templates</string>
|
||||
</property>
|
||||
<property name="accessibleDescription">
|
||||
<string/>
|
||||
@@ -101,6 +101,9 @@
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::ExtendedSelection</enum>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
@@ -122,6 +125,10 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>uiNewVMwareVMPushButton</tabstop>
|
||||
<tabstop>uiDeleteVMwareVMPushButton</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
<designerdata>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vmware/ui/vmware_vm_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'vmware_vm_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:33 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_VMwareVMPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, VMwareVMPreferencesPageWidget):
|
||||
VMwareVMPreferencesPageWidget.setObjectName("VMwareVMPreferencesPageWidget")
|
||||
VMwareVMPreferencesPageWidget.resize(499, 546)
|
||||
VMwareVMPreferencesPageWidget.resize(505, 350)
|
||||
VMwareVMPreferencesPageWidget.setAccessibleDescription("")
|
||||
self.gridLayout = QtWidgets.QGridLayout(VMwareVMPreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
@@ -56,6 +56,7 @@ class Ui_VMwareVMPreferencesPageWidget(object):
|
||||
font.setBold(True)
|
||||
font.setWeight(75)
|
||||
self.uiVMwareVMsTreeWidget.setFont(font)
|
||||
self.uiVMwareVMsTreeWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
|
||||
self.uiVMwareVMsTreeWidget.setIconSize(QtCore.QSize(32, 32))
|
||||
self.uiVMwareVMsTreeWidget.setRootIsDecorated(False)
|
||||
self.uiVMwareVMsTreeWidget.setObjectName("uiVMwareVMsTreeWidget")
|
||||
@@ -65,11 +66,12 @@ class Ui_VMwareVMPreferencesPageWidget(object):
|
||||
|
||||
self.retranslateUi(VMwareVMPreferencesPageWidget)
|
||||
QtCore.QMetaObject.connectSlotsByName(VMwareVMPreferencesPageWidget)
|
||||
VMwareVMPreferencesPageWidget.setTabOrder(self.uiNewVMwareVMPushButton, self.uiDeleteVMwareVMPushButton)
|
||||
|
||||
def retranslateUi(self, VMwareVMPreferencesPageWidget):
|
||||
_translate = gns3.qt.translate
|
||||
VMwareVMPreferencesPageWidget.setWindowTitle(_translate("VMwareVMPreferencesPageWidget", "VMware VMs"))
|
||||
VMwareVMPreferencesPageWidget.setAccessibleName(_translate("VMwareVMPreferencesPageWidget", "VirtualBox VM templates"))
|
||||
VMwareVMPreferencesPageWidget.setAccessibleName(_translate("VMwareVMPreferencesPageWidget", "VMware VM templates"))
|
||||
self.uiNewVMwareVMPushButton.setText(_translate("VMwareVMPreferencesPageWidget", "&New"))
|
||||
self.uiEditVMwareVMPushButton.setText(_translate("VMwareVMPreferencesPageWidget", "&Edit"))
|
||||
self.uiDeleteVMwareVMPushButton.setText(_translate("VMwareVMPreferencesPageWidget", "&Delete"))
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vmware/ui/vmware_vm_wizard.ui'
|
||||
# Form implementation generated from reading ui file 'vmware_vm_wizard.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:34 2015
|
||||
# Created: Wed May 6 14:31:58 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vpcs/ui/vpcs_device_configuration_page.ui'
|
||||
# Form implementation generated from reading ui file 'vpcs_device_configuration_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:34 2015
|
||||
# Created: Wed May 6 14:31:59 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>469</height>
|
||||
<width>450</width>
|
||||
<height>200</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/modules/vpcs/ui/vpcs_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'vpcs_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:34 2015
|
||||
# Created: Wed May 6 14:31:59 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_VPCSPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, VPCSPreferencesPageWidget):
|
||||
VPCSPreferencesPageWidget.setObjectName("VPCSPreferencesPageWidget")
|
||||
VPCSPreferencesPageWidget.resize(430, 469)
|
||||
VPCSPreferencesPageWidget.resize(450, 200)
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(VPCSPreferencesPageWidget)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(VPCSPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/about_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'about_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:52 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/cloud_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'cloud_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:52 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/configuration_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'configuration_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:52 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/exec_command_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'exec_command_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:52 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>467</width>
|
||||
<height>536</height>
|
||||
<width>450</width>
|
||||
<height>480</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/general_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'general_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:52 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_GeneralPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, GeneralPreferencesPageWidget):
|
||||
GeneralPreferencesPageWidget.setObjectName("GeneralPreferencesPageWidget")
|
||||
GeneralPreferencesPageWidget.resize(467, 536)
|
||||
GeneralPreferencesPageWidget.resize(450, 480)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(GeneralPreferencesPageWidget)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.uiMiscTabWidget = QtWidgets.QTabWidget(GeneralPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/getting_started_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'getting_started_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/idlepc_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'idlepc_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:28 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/import_cloud_project_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'import_cloud_project_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/main_window.ui'
|
||||
# Form implementation generated from reading ui file 'main_window.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -368,9 +368,9 @@ class Ui_MainWindow(object):
|
||||
self.uiAddLinkAction = QtWidgets.QAction(MainWindow)
|
||||
self.uiAddLinkAction.setCheckable(True)
|
||||
icon29 = QtGui.QIcon()
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/cancel-connection.svg"), QtGui.QIcon.Active, QtGui.QIcon.On)
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/cancel-connection.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/connection-new-hover.svg"), QtGui.QIcon.Active, QtGui.QIcon.Off)
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/cancel-connection.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/cancel-connection.svg"), QtGui.QIcon.Active, QtGui.QIcon.On)
|
||||
icon29.addPixmap(QtGui.QPixmap(":/icons/connection-new.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
self.uiAddLinkAction.setIcon(icon29)
|
||||
self.uiAddLinkAction.setObjectName("uiAddLinkAction")
|
||||
@@ -649,8 +649,8 @@ class Ui_MainWindow(object):
|
||||
self.uiActionFullscreen.setShortcut(_translate("MainWindow", "Ctrl+F"))
|
||||
self.uiVPCSAction.setText(_translate("MainWindow", "&VPCS multi-host"))
|
||||
|
||||
from ..nodes_view import NodesView
|
||||
from ..topology_summary_view import TopologySummaryView
|
||||
from ..graphics_view import GraphicsView
|
||||
from ..console_view import ConsoleView
|
||||
from ..nodes_view import NodesView
|
||||
from ..graphics_view import GraphicsView
|
||||
from . import resources_rc
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/new_project_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'new_project_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/news_dock_widget.ui'
|
||||
# Form implementation generated from reading ui file 'news_dock_widget.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/node_configurator_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'node_configurator_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:53 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>409</width>
|
||||
<height>290</height>
|
||||
<width>400</width>
|
||||
<height>250</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/packet_capture_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'packet_capture_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_PacketCapturePreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, PacketCapturePreferencesPageWidget):
|
||||
PacketCapturePreferencesPageWidget.setObjectName("PacketCapturePreferencesPageWidget")
|
||||
PacketCapturePreferencesPageWidget.resize(409, 290)
|
||||
PacketCapturePreferencesPageWidget.resize(400, 250)
|
||||
self.gridLayout = QtWidgets.QGridLayout(PacketCapturePreferencesPageWidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.uiSettingsGroupBox = QtWidgets.QGroupBox(PacketCapturePreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/preferences_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'preferences_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:29 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
385076
gns3/ui/resources_rc.py
385076
gns3/ui/resources_rc.py
File diff suppressed because it is too large
Load Diff
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>503</height>
|
||||
<width>435</width>
|
||||
<height>445</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -228,10 +228,6 @@
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder>uiConsolePortRangeGroupBox</zorder>
|
||||
<zorder>uiUDPPortRangeGroupBox</zorder>
|
||||
<zorder>uiGeneralSettingsGroupBox</zorder>
|
||||
<zorder>uiLocalServerAutoStartCheckBox</zorder>
|
||||
</widget>
|
||||
<widget class="QWidget" name="uiRemoteTabWidget">
|
||||
<attribute name="title">
|
||||
@@ -334,13 +330,6 @@
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder>spacer_2</zorder>
|
||||
<zorder>uiRemoteServerPortLabel</zorder>
|
||||
<zorder>uiRemoteServerPortSpinBox</zorder>
|
||||
<zorder>uiRemoteServerHostLabel</zorder>
|
||||
<zorder>uiRemoteServerPortLineEdit</zorder>
|
||||
<zorder>uiRemoteServersTreeWidget</zorder>
|
||||
<zorder>horizontalSpacer_2</zorder>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/server_preferences_page.ui'
|
||||
# Form implementation generated from reading ui file 'server_preferences_page.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
@@ -15,7 +15,7 @@ class Ui_ServerPreferencesPageWidget(object):
|
||||
|
||||
def setupUi(self, ServerPreferencesPageWidget):
|
||||
ServerPreferencesPageWidget.setObjectName("ServerPreferencesPageWidget")
|
||||
ServerPreferencesPageWidget.resize(430, 503)
|
||||
ServerPreferencesPageWidget.resize(435, 445)
|
||||
self.vboxlayout = QtWidgets.QVBoxLayout(ServerPreferencesPageWidget)
|
||||
self.vboxlayout.setObjectName("vboxlayout")
|
||||
self.uiTabWidget = QtWidgets.QTabWidget(ServerPreferencesPageWidget)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/snapshots_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'snapshots_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/style_editor_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'style_editor_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/symbol_selection_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'symbol_selection_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file '/Users/noplay/code/gns3/gns3-gui/gns3/ui/text_editor_dialog.ui'
|
||||
# Form implementation generated from reading ui file 'text_editor_dialog.ui'
|
||||
#
|
||||
# Created: Mon May 4 12:01:30 2015
|
||||
# Created: Wed May 6 14:31:54 2015
|
||||
# by: PyQt5 UI code generator 5.4
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
|
||||
@@ -99,8 +99,6 @@
|
||||
<file>icons/stop-hover.svg</file>
|
||||
<file>icons/reload.svg</file>
|
||||
<file>icons/add-note.svg</file>
|
||||
<file>icons/import_config.svg</file>
|
||||
<file>icons/export_config.svg</file>
|
||||
<file>icons/inspect.svg</file>
|
||||
<file>icons/capture-start.svg</file>
|
||||
<file>icons/capture-stop.svg</file>
|
||||
|
||||
@@ -19,7 +19,7 @@ args = parser.parse_args()
|
||||
|
||||
if args.qt4:
|
||||
if sys.platform.startswith('win'):
|
||||
PATH = os.path.join(os.path.dirname(sys.executable), "Lib/site-packages/PyQt4")
|
||||
PATH = os.path.join(os.path.dirname(sys.executable), "Lib\\site-packages\\PyQt4")
|
||||
if os.access(os.path.join(PATH, "bin"), os.R_OK):
|
||||
PATH = os.path.join(PATH, "bin")
|
||||
PYUIC = os.path.join(PATH, "pyuic4")
|
||||
@@ -30,7 +30,7 @@ if args.qt4:
|
||||
PYRCC_PYTHON3_FLAG = "-py3"
|
||||
else:
|
||||
if sys.platform.startswith('win'):
|
||||
PATH = os.path.join(os.path.dirname(sys.executable), "Lib/site-packages/PyQt5")
|
||||
PATH = os.path.join(os.path.dirname(sys.executable), "Lib\\site-packages\\PyQt5")
|
||||
if os.access(os.path.join(PATH, "bin"), os.R_OK):
|
||||
PATH = os.path.join(PATH, "bin")
|
||||
PYUIC = os.path.join(PATH, "pyuic5")
|
||||
@@ -51,7 +51,14 @@ def build_ui(path):
|
||||
print("Building UI {}".format(source))
|
||||
if args.force and os.access(target, os.F_OK):
|
||||
os.remove(target)
|
||||
subprocess.call(command)
|
||||
|
||||
if sys.platform.startswith('win'):
|
||||
for i, arg in enumerate(command):
|
||||
command[i] = '"' + arg.replace('"', '"""') + '"'
|
||||
command = ' '.join(command)
|
||||
subprocess.call(command, shell=True)
|
||||
else:
|
||||
subprocess.call(command)
|
||||
patch_file_qt4_5(target)
|
||||
|
||||
|
||||
@@ -68,6 +75,10 @@ def build_resources(path, target):
|
||||
print("Building resources {}".format(source))
|
||||
if args.force and os.access(target, os.F_OK):
|
||||
os.remove(target)
|
||||
if sys.platform.startswith('win'):
|
||||
for i, arg in enumerate(command):
|
||||
command[i] = '"' + arg.replace('"', '"""') + '"'
|
||||
command = ' '.join(command)
|
||||
subprocess.call(command)
|
||||
patch_file_qt4_5(target)
|
||||
|
||||
@@ -79,12 +90,17 @@ def patch_file_qt4_5(target):
|
||||
# We patch the file in order to support both version of Qt
|
||||
out = ""
|
||||
print("Patch {} for Qt4 and Qt5 support".format(target))
|
||||
with open(target) as f:
|
||||
original_from = re.compile(r"^from PyQt[45] ", re.U)
|
||||
original_translate = re.compile(r"_translate = QtCore\.QCoreApplication\.translate", re.U)
|
||||
gen_line = r"# Form implementation generated from reading ui file '";
|
||||
with open(target, 'r', encoding="utf-8") as f:
|
||||
for line in f.readlines():
|
||||
line = re.sub(r"^from PyQt[45] ", "import gns3.qt\nfrom gns3.qt ", line)
|
||||
line = re.sub(r"_translate = QtCore\.QCoreApplication\.translate", "_translate = gns3.qt.translate", line)
|
||||
if line.startswith(gen_line):
|
||||
line = line[0:len(gen_line)] + line[line.rfind(os.sep)+len(os.sep):]
|
||||
line = original_from.sub("import gns3.qt\nfrom gns3.qt ", line)
|
||||
line = original_translate.sub("_translate = gns3.qt.translate", line)
|
||||
out += line
|
||||
with open(target, 'w') as f:
|
||||
with open(target, 'w', encoding="utf-8") as f:
|
||||
f.write(out)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user