mirror of
https://github.com/GNS3/gns3-gui.git
synced 2026-06-01 00:10:30 +03:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7a51ed588 | ||
|
|
dbca1b7106 | ||
|
|
15e5cac33b | ||
|
|
342ca95bd2 | ||
|
|
8191a51b2b | ||
|
|
7d112551a8 | ||
|
|
b5e867f2cd | ||
|
|
e5632e565d | ||
|
|
bd785bf6cd | ||
|
|
2ae788a8f5 | ||
|
|
d7c1754323 | ||
|
|
187ef561fd | ||
|
|
ad2ce4cfef | ||
|
|
97070718fa |
16
CHANGELOG
16
CHANGELOG
@@ -1,5 +1,21 @@
|
||||
# Change Log
|
||||
|
||||
## 3.0.3 22/01/2025
|
||||
|
||||
* Set minimum duration for progress dialog when uploading. Ref https://github.com/GNS3/gns3-gui/issues/3682
|
||||
* Add logs when uploading images to the controller
|
||||
* Option to disable SSL certificate verification for future connections. Fixes https://github.com/GNS3/gns3-gui/issues/3694
|
||||
* Fix packet capture when connected to a controller with SSL. Fixes https://github.com/GNS3/gns3-gui/issues/3696
|
||||
* Update status after importing an image when installing a new appliance. Fixes #3691
|
||||
* Update file browser filters to find IOU images without extension. Fixes #3692
|
||||
* Upgrade dependencies
|
||||
|
||||
## 2.2.53 21/01/2025
|
||||
|
||||
* Update file browser filters for all files and IOU images
|
||||
* Upgrade dependencies
|
||||
* Fix Linux Mint default terminal configuration
|
||||
|
||||
## 3.0.2 03/01/2025
|
||||
|
||||
* Add button to create templates based on images that are not used by any yet.
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
pytest==8.3.2
|
||||
pytest==8.3.4
|
||||
pytest-timeout==2.3.1
|
||||
|
||||
@@ -50,7 +50,7 @@ class CrashReport:
|
||||
Report crash to a third party service
|
||||
"""
|
||||
|
||||
DSN = "https://142c803f12d32e781a654ef31138c684@o19455.ingest.us.sentry.io/38506"
|
||||
DSN = "https://14cfb02748bc82b33a35f43747dbd0e6@o19455.ingest.us.sentry.io/38506"
|
||||
_instance = None
|
||||
|
||||
def __init__(self):
|
||||
|
||||
@@ -522,6 +522,12 @@ Usage: {}
|
||||
image_upload_manger = ImageUploadManager(image, Controller.instance(), self.parent())
|
||||
image_upload_manger.upload()
|
||||
|
||||
# refresh the images list
|
||||
if Controller.instance().isRemote() or self._compute_id != "local":
|
||||
self._registry.getRemoteImageList()
|
||||
else:
|
||||
self.images_changed_signal.emit()
|
||||
|
||||
def _install(self, version):
|
||||
"""
|
||||
Install the appliance in GNS3
|
||||
|
||||
@@ -55,13 +55,13 @@ class ImageDialog(QtWidgets.QDialog, Ui_ImageDialog):
|
||||
self,
|
||||
"Select one or more images to upload",
|
||||
QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.DownloadLocation),
|
||||
"Images (*.bin *.image *.iol *.qcow2 *.vmdk *.iso);;All files (*.*)"
|
||||
"Images (*.bin *.image *.iol *.qcow2 *.vmdk *.iso x86_64* i86bi*);;All files (*)"
|
||||
)
|
||||
error_msgs = ""
|
||||
for path in files:
|
||||
log.debug("Uploading image '{}' to controller".format(path))
|
||||
image_filename = os.path.basename(path)
|
||||
install_appliances = self.uiInstallApplianceCheckBox.isChecked()
|
||||
log.info("Uploading image '{}' to controller".format(image_filename))
|
||||
try:
|
||||
Controller.instance().post(
|
||||
f"/images/upload/{image_filename}",
|
||||
|
||||
@@ -83,7 +83,7 @@ class SetupWizard(QtWidgets.QWizard, Ui_SetupWizard):
|
||||
|
||||
filter = ""
|
||||
if sys.platform.startswith("win"):
|
||||
filter = "Executable (*.exe);;All files (*.*)"
|
||||
filter = "Executable (*.exe);;All files (*)"
|
||||
server_path = shutil.which("gns3server")
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select the local server", server_path, filter)
|
||||
if not path:
|
||||
@@ -204,7 +204,8 @@ class SetupWizard(QtWidgets.QWizard, Ui_SetupWizard):
|
||||
remote_controller_settings["remote"] = True
|
||||
remote_controller_settings["host"] = self.uiRemoteMainServerHostLineEdit.text()
|
||||
remote_controller_settings["port"] = self.uiRemoteMainServerPortSpinBox.value()
|
||||
remote_controller_settings["protocol"] = "http"
|
||||
remote_controller_settings["protocol"] = self.uiRemoteMainServerProtocolComboBox.currentText().lower()
|
||||
remote_controller_settings["accept_insecure_ssl_certificate"] = False
|
||||
remote_controller_settings["username"] = self.uiRemoteMainServerUserLineEdit.text()
|
||||
remote_controller_settings["password"] = self.uiRemoteMainServerPasswordLineEdit.text()
|
||||
Controller.instance().setSettings(remote_controller_settings)
|
||||
|
||||
@@ -184,7 +184,7 @@ class SymbolSelectionDialog(QtWidgets.QDialog, Ui_SymbolSelectionDialog):
|
||||
def _symbolBrowserSlot(self):
|
||||
|
||||
# supported image file formats
|
||||
file_formats = "Image files (*.svg *.bmp *.jpeg *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm *.gif);;All files (*.*)"
|
||||
file_formats = "Image files (*.svg *.bmp *.jpeg *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm *.gif);;All files (*)"
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Image", SymbolSelectionDialog._symbols_dir, file_formats)
|
||||
if not path:
|
||||
return
|
||||
|
||||
@@ -1281,7 +1281,7 @@ class GraphicsView(QtWidgets.QGraphicsView):
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self,
|
||||
"Import {}".format(os.path.basename(config_file)),
|
||||
self._import_config_directory,
|
||||
"All files (*.*);;Config files (*.cfg)",
|
||||
"All files (*);;Config files (*.cfg)",
|
||||
"Config files (*.cfg)")
|
||||
if not path:
|
||||
continue
|
||||
@@ -1328,7 +1328,7 @@ class GraphicsView(QtWidgets.QGraphicsView):
|
||||
|
||||
for item in items:
|
||||
for config_file in item.node().configFiles():
|
||||
path, ok = QtWidgets.QFileDialog.getSaveFileName(self, "Export file", os.path.join(self._export_config_directory, item.node().name() + "_" + os.path.basename(config_file)), "All files (*.*);;Config files (*.cfg)")
|
||||
path, ok = QtWidgets.QFileDialog.getSaveFileName(self, "Export file", os.path.join(self._export_config_directory, item.node().name() + "_" + os.path.basename(config_file)), "All files (*);;Config files (*.cfg)")
|
||||
if not path:
|
||||
continue
|
||||
self._export_config_directory = os.path.dirname(path)
|
||||
|
||||
@@ -67,6 +67,7 @@ class QNetworkReplyWatcher(QtCore.QObject):
|
||||
self._progress = QtWidgets.QProgressDialog(progress_text, "Cancel", 0, 0, parent)
|
||||
self._progress.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
|
||||
self._progress.setWindowModality(QtCore.Qt.ApplicationModal)
|
||||
self._progress.setMinimumDuration(0)
|
||||
else:
|
||||
self._progress = None
|
||||
|
||||
@@ -102,11 +103,11 @@ class QNetworkReplyWatcher(QtCore.QObject):
|
||||
reply.finished.connect(loop.quit)
|
||||
|
||||
if self._progress:
|
||||
reply.finished.connect(self._progress.close)
|
||||
if uploading:
|
||||
reply.uploadProgress.connect(self._updateProgress)
|
||||
else:
|
||||
reply.downloadProgress.connect(self._updateProgress)
|
||||
reply.finished.connect(self._progress.close)
|
||||
self._progress.canceled.connect(reply.abort)
|
||||
self._progress.show()
|
||||
|
||||
@@ -158,7 +159,7 @@ class HTTPClient(QtCore.QObject):
|
||||
self._retry_connection = False
|
||||
self._connected = False
|
||||
self._shutdown = False # shutdown in progress
|
||||
self._accept_insecure_certificate = settings.get("accept_insecure_certificate", False)
|
||||
self._accept_insecure_ssl_certificate = settings.get("accept_insecure_ssl_certificate", False)
|
||||
|
||||
# Add custom CA
|
||||
# ssl_config = QtNetwork.QSslConfiguration.defaultConfiguration()
|
||||
@@ -224,12 +225,12 @@ class HTTPClient(QtCore.QObject):
|
||||
|
||||
return self._protocol
|
||||
|
||||
def setAcceptInsecureCertificate(self, certificate: bool) -> None:
|
||||
def setAcceptInsecureCertificate(self, accept_insecure_ssl_certificate: bool) -> None:
|
||||
"""
|
||||
Does the server accept this insecure SSL certificate digest
|
||||
"""
|
||||
|
||||
self._accept_insecure_certificate = certificate
|
||||
self._accept_insecure_ssl_certificate = accept_insecure_ssl_certificate
|
||||
|
||||
def url(self) -> str:
|
||||
"""
|
||||
@@ -545,7 +546,12 @@ class HTTPClient(QtCore.QObject):
|
||||
self._auth_attempted = True
|
||||
content = self._executeHTTPQuery("POST", "/access/users/authenticate", body=body, wait=True)
|
||||
if content:
|
||||
log.info(f"Authenticated with controller {self._host} on port {self._port}")
|
||||
additional_ssl_info = ""
|
||||
if self._protocol == "https":
|
||||
additional_ssl_info = "using SSL"
|
||||
if self._accept_insecure_ssl_certificate:
|
||||
additional_ssl_info += " with insecure certificate"
|
||||
log.info(f"Authenticated with controller {self._host} on port {self._port} {additional_ssl_info}")
|
||||
token = content.get("access_token")
|
||||
if token:
|
||||
self._auth_attempted = False
|
||||
@@ -839,7 +845,7 @@ class HTTPClient(QtCore.QObject):
|
||||
Handle SSL errors
|
||||
"""
|
||||
|
||||
if self._accept_insecure_certificate:
|
||||
if self._accept_insecure_ssl_certificate:
|
||||
reply.ignoreSslErrors()
|
||||
return
|
||||
|
||||
@@ -852,7 +858,6 @@ class HTTPClient(QtCore.QObject):
|
||||
digest = peer_cert.digest()
|
||||
|
||||
if host_port_key in self._ssl_exceptions:
|
||||
|
||||
if self._ssl_exceptions[host_port_key] == digest:
|
||||
reply.ignoreSslErrors()
|
||||
return
|
||||
@@ -865,6 +870,8 @@ class HTTPClient(QtCore.QObject):
|
||||
msgbox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
|
||||
connect_button = QtWidgets.QPushButton(f"&Connect to {url.host()}:{url.port()}", msgbox)
|
||||
msgbox.addButton(connect_button, QtWidgets.QMessageBox.YesRole)
|
||||
checkbox = QtWidgets.QCheckBox("Accept insecure certificate for future connections", parent=msgbox)
|
||||
msgbox.setCheckBox(checkbox)
|
||||
abort_button = QtWidgets.QPushButton("&Abort", msgbox)
|
||||
msgbox.addButton(abort_button, QtWidgets.QMessageBox.RejectRole)
|
||||
msgbox.setDefaultButton(abort_button)
|
||||
@@ -873,6 +880,12 @@ class HTTPClient(QtCore.QObject):
|
||||
|
||||
if msgbox.clickedButton() == connect_button:
|
||||
self._ssl_exceptions[host_port_key] = digest
|
||||
if checkbox.isChecked():
|
||||
log.warning(f"Accepting insecure SSL certificate for future connections to {host_port_key}")
|
||||
from gns3.controller import Controller
|
||||
self._accept_insecure_ssl_certificate = True
|
||||
controller_settings = {"accept_insecure_ssl_certificate": True}
|
||||
Controller.instance().setSettings(controller_settings)
|
||||
reply.ignoreSslErrors()
|
||||
else:
|
||||
for error in ssl_errors:
|
||||
|
||||
@@ -47,7 +47,7 @@ class ImageUploadManager(object):
|
||||
|
||||
def _fileUploadToController(self) -> bool:
|
||||
|
||||
log.debug("Uploading image '{}' to controller".format(self._image.path))
|
||||
log.info("Uploading image '{}' to controller".format(self._image.filename))
|
||||
try:
|
||||
self._controller.post(
|
||||
f"/images/upload/{self._image.filename}",
|
||||
|
||||
@@ -121,6 +121,8 @@ class Link(QtCore.QObject):
|
||||
|
||||
if self._network_manager is None:
|
||||
self._network_manager = QtNetwork.QNetworkAccessManager(self)
|
||||
self._network_manager.sslErrors.connect(Controller.instance().httpClient().handleSslError)
|
||||
|
||||
self._response_stream = Controller.instance().get(
|
||||
"/projects/{project_id}/links/{link_id}/capture/stream".format(project_id=self.project().id(), link_id=self._link_id),
|
||||
callback=None,
|
||||
|
||||
@@ -456,7 +456,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
if not os.path.exists(self._appliance_dir):
|
||||
directory = Topology.instance().projectsDirPath()
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Import appliance", directory,
|
||||
"All files (*.*);;GNS3 Appliance (*.gns3appliance *.gns3a)",
|
||||
"All files (*);;GNS3 Appliance (*.gns3appliance *.gns3a)",
|
||||
"GNS3 Appliance (*.gns3appliance *.gns3a)")
|
||||
if path:
|
||||
self.loadPath(path)
|
||||
@@ -475,7 +475,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
if self._project_dir is None or not os.path.exists(self._project_dir):
|
||||
directory = Topology.instance().projectsDirPath()
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open project", directory,
|
||||
"All files (*.*);;GNS3 Project (*.gns3);;GNS3 Portable Project (*.gns3project *.gns3p);;NET files (*.net)",
|
||||
"All files (*);;GNS3 Project (*.gns3);;GNS3 Portable Project (*.gns3project *.gns3p);;NET files (*.net)",
|
||||
"GNS3 Project (*.gns3)")
|
||||
if path:
|
||||
self.loadPath(path)
|
||||
@@ -951,7 +951,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
Slot called when inserting an image on the scene.
|
||||
"""
|
||||
# supported image file formats
|
||||
file_formats = "Image files (*.svg *.bmp *.jpeg *.jpg *.gif *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*.*)"
|
||||
file_formats = "Image files (*.svg *.bmp *.jpeg *.jpg *.gif *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*)"
|
||||
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Image", self._pictures_dir, file_formats)
|
||||
if not path:
|
||||
@@ -1489,7 +1489,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
|
||||
if not os.path.exists(directory):
|
||||
directory = Topology.instance().projectsDirPath()
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open project", directory,
|
||||
"All files (*.*);;GNS3 Portable Project (*.gns3project *.gns3p)",
|
||||
"All files (*);;GNS3 Portable Project (*.gns3project *.gns3p)",
|
||||
"GNS3 Portable Project (*.gns3project *.gns3p)")
|
||||
if path:
|
||||
Topology.instance().importProject(path)
|
||||
|
||||
@@ -51,7 +51,7 @@ class DynamipsPreferencesPage(QtWidgets.QWidget, Ui_DynamipsPreferencesPageWidge
|
||||
|
||||
file_filter = ""
|
||||
if sys.platform.startswith("win"):
|
||||
file_filter = "Executable (*.exe);;All files (*.*)"
|
||||
file_filter = "Executable (*.exe);;All files (*)"
|
||||
|
||||
dynamips_path = shutil.which("dynamips")
|
||||
if sys.platform.startswith("darwin") and dynamips_path is None:
|
||||
|
||||
@@ -229,7 +229,7 @@ class IOSRouterPreferencesPage(QtWidgets.QWidget, Ui_IOSRouterPreferencesPageWid
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(parent,
|
||||
"Select an IOS image",
|
||||
cls._default_images_dir,
|
||||
"All files (*.*);;IOS image (*.bin *.image)",
|
||||
"All files (*);;IOS image (*.bin *.image)",
|
||||
"IOS image (*.bin *.image)")
|
||||
|
||||
if not path:
|
||||
|
||||
@@ -299,8 +299,8 @@ class IOUDevicePreferencesPage(QtWidgets.QWidget, Ui_IOUDevicePreferencesPageWid
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(parent,
|
||||
"Select an IOU image",
|
||||
cls._default_images_dir,
|
||||
"All file (*);;IOU image (*.bin *.image *.iol)",
|
||||
"IOU image (*.bin *.image *.iol)")
|
||||
"All file (*);;IOU image (x86_64* i86bi* *.bin *.image *.iol)",
|
||||
"IOU image (x86_64* i86bi* *.bin *.image *.iol)")
|
||||
|
||||
if not path:
|
||||
return
|
||||
|
||||
@@ -51,7 +51,7 @@ class VPCSPreferencesPage(QtWidgets.QWidget, Ui_VPCSPreferencesPageWidget):
|
||||
|
||||
filter = ""
|
||||
if sys.platform.startswith("win"):
|
||||
filter = "Executable (*.exe);;All files (*.*)"
|
||||
filter = "Executable (*.exe);;All files (*)"
|
||||
vpcs_path = shutil.which("vpcs")
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select VPCS", vpcs_path, filter)
|
||||
if not path:
|
||||
|
||||
@@ -109,7 +109,7 @@ class ControllerPreferencesPage(QtWidgets.QWidget, Ui_ControllerPreferencesPageW
|
||||
|
||||
filter = ""
|
||||
if sys.platform.startswith("win"):
|
||||
filter = "Executable (*.exe);;All files (*.*)"
|
||||
filter = "Executable (*.exe);;All files (*)"
|
||||
server_path = shutil.which("gns3server")
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select the local server", server_path, filter)
|
||||
if not path:
|
||||
@@ -124,7 +124,7 @@ class ControllerPreferencesPage(QtWidgets.QWidget, Ui_ControllerPreferencesPageW
|
||||
|
||||
filter = ""
|
||||
if sys.platform.startswith("win"):
|
||||
filter = "Executable (*.exe);;All files (*.*)"
|
||||
filter = "Executable (*.exe);;All files (*)"
|
||||
|
||||
ubridge_path = shutil.which("ubridge")
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select ubridge executable", ubridge_path, filter)
|
||||
@@ -286,6 +286,12 @@ class ControllerPreferencesPage(QtWidgets.QWidget, Ui_ControllerPreferencesPageW
|
||||
"udp_start_port_range": self.uiUDPStartPortSpinBox.value(),
|
||||
"udp_end_port_range": self.uiUDPEndPortSpinBox.value()})
|
||||
|
||||
# reset the accept_insecure_ssl_certificate setting if the host or port has changed
|
||||
current_host_port_key = f"{local_server_settings['host']}:{local_server_settings['port']}"
|
||||
new_host_port_key = f"{new_local_server_settings['host']}:{new_local_server_settings['port']}"
|
||||
if current_host_port_key != new_host_port_key:
|
||||
new_local_server_settings["accept_insecure_ssl_certificate"] = False
|
||||
|
||||
if new_local_server_settings["console_end_port_range"] <= new_local_server_settings["console_start_port_range"]:
|
||||
QtWidgets.QMessageBox.critical(self, "Port range", "Invalid console port range from {} to {}".format(new_local_server_settings["console_start_port_range"],
|
||||
new_local_server_settings["console_end_port_range"]))
|
||||
|
||||
@@ -195,7 +195,7 @@ class GeneralPreferencesPage(QtWidgets.QWidget, Ui_GeneralPreferencesPageWidget)
|
||||
configuration_file_path = LocalConfig.instance().configFilePath()
|
||||
directory = os.path.dirname(configuration_file_path)
|
||||
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Import configuration file", directory, "Configuration file (*.ini *.conf);;All files (*.*)")
|
||||
path, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Import configuration file", directory, "Configuration file (*.ini *.conf);;All files (*)")
|
||||
if not path:
|
||||
return
|
||||
|
||||
@@ -240,7 +240,7 @@ class GeneralPreferencesPage(QtWidgets.QWidget, Ui_GeneralPreferencesPageWidget)
|
||||
configuration_file_path = LocalConfig.instance().configFilePath()
|
||||
directory = os.path.dirname(configuration_file_path)
|
||||
|
||||
path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Export configuration file", directory, "Configuration file (*.ini *.conf);;All files (*.*)")
|
||||
path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Export configuration file", directory, "Configuration file (*.ini *.conf);;All files (*)")
|
||||
if not path:
|
||||
return
|
||||
|
||||
|
||||
@@ -340,6 +340,7 @@ CONTROLLER_SETTINGS = {
|
||||
"ubridge_path": "ubridge",
|
||||
"host": DEFAULT_CONTROLLER_HOST,
|
||||
"port": DEFAULT_CONTROLLER_PORT,
|
||||
"accept_insecure_ssl_certificate": False,
|
||||
"images_path": DEFAULT_IMAGES_PATH,
|
||||
"projects_path": DEFAULT_PROJECTS_PATH,
|
||||
"appliances_path": DEFAULT_APPLIANCES_PATH,
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>603</width>
|
||||
<height>287</height>
|
||||
<width>644</width>
|
||||
<height>290</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -159,27 +159,37 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="uiRemoteMainServerProtocolLabel">
|
||||
<property name="text">
|
||||
<string>Protocol:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="uiRemoteMainServerProtocolComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>HTTP</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>HTTPS</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Host:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerPasswordLineEdit">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerHostLineEdit"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Password:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Port:</string>
|
||||
@@ -187,9 +197,6 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerUserLineEdit"/>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="uiRemoteMainServerPortSpinBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
@@ -208,16 +215,30 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerHostLineEdit"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Username:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerUserLineEdit"/>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Password:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="uiRemoteMainServerPasswordLineEdit">
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWizardPage" name="uiSummaryWizardPage">
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/setup_wizard.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.14.1
|
||||
# Created by: PyQt5 UI code generator 5.15.6
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
@@ -13,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
class Ui_SetupWizard(object):
|
||||
def setupUi(self, SetupWizard):
|
||||
SetupWizard.setObjectName("SetupWizard")
|
||||
SetupWizard.resize(603, 287)
|
||||
SetupWizard.resize(644, 290)
|
||||
SetupWizard.setModal(True)
|
||||
SetupWizard.setWizardStyle(QtWidgets.QWizard.ModernStyle)
|
||||
SetupWizard.setOptions(QtWidgets.QWizard.NoBackButtonOnStartPage)
|
||||
@@ -81,22 +82,23 @@ class Ui_SetupWizard(object):
|
||||
self.uiRemoteControllerWizardPage.setObjectName("uiRemoteControllerWizardPage")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.uiRemoteControllerWizardPage)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.uiRemoteMainServerProtocolLabel = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerProtocolLabel.setObjectName("uiRemoteMainServerProtocolLabel")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerProtocolLabel, 0, 0, 1, 1)
|
||||
self.uiRemoteMainServerProtocolComboBox = QtWidgets.QComboBox(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerProtocolComboBox.setObjectName("uiRemoteMainServerProtocolComboBox")
|
||||
self.uiRemoteMainServerProtocolComboBox.addItem("")
|
||||
self.uiRemoteMainServerProtocolComboBox.addItem("")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerProtocolComboBox, 0, 1, 1, 1)
|
||||
self.label_3 = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.label_3.setObjectName("label_3")
|
||||
self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
|
||||
self.uiRemoteMainServerPasswordLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerPasswordLineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
|
||||
self.uiRemoteMainServerPasswordLineEdit.setObjectName("uiRemoteMainServerPasswordLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerPasswordLineEdit, 3, 1, 1, 1)
|
||||
self.label_6 = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.label_6.setObjectName("label_6")
|
||||
self.gridLayout.addWidget(self.label_6, 3, 0, 1, 1)
|
||||
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
|
||||
self.uiRemoteMainServerHostLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerHostLineEdit.setObjectName("uiRemoteMainServerHostLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerHostLineEdit, 1, 1, 1, 1)
|
||||
self.label_4 = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.label_4.setObjectName("label_4")
|
||||
self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1)
|
||||
self.uiRemoteMainServerUserLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerUserLineEdit.setObjectName("uiRemoteMainServerUserLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerUserLineEdit, 2, 1, 1, 1)
|
||||
self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1)
|
||||
self.uiRemoteMainServerPortSpinBox = QtWidgets.QSpinBox(self.uiRemoteControllerWizardPage)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
@@ -106,13 +108,20 @@ class Ui_SetupWizard(object):
|
||||
self.uiRemoteMainServerPortSpinBox.setMaximum(65535)
|
||||
self.uiRemoteMainServerPortSpinBox.setProperty("value", 3080)
|
||||
self.uiRemoteMainServerPortSpinBox.setObjectName("uiRemoteMainServerPortSpinBox")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerPortSpinBox, 1, 1, 1, 1)
|
||||
self.uiRemoteMainServerHostLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerHostLineEdit.setObjectName("uiRemoteMainServerHostLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerHostLineEdit, 0, 1, 1, 1)
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerPortSpinBox, 2, 1, 1, 1)
|
||||
self.label_5 = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.label_5.setObjectName("label_5")
|
||||
self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1)
|
||||
self.gridLayout.addWidget(self.label_5, 3, 0, 1, 1)
|
||||
self.uiRemoteMainServerUserLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerUserLineEdit.setObjectName("uiRemoteMainServerUserLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerUserLineEdit, 3, 1, 1, 1)
|
||||
self.label_6 = QtWidgets.QLabel(self.uiRemoteControllerWizardPage)
|
||||
self.label_6.setObjectName("label_6")
|
||||
self.gridLayout.addWidget(self.label_6, 4, 0, 1, 1)
|
||||
self.uiRemoteMainServerPasswordLineEdit = QtWidgets.QLineEdit(self.uiRemoteControllerWizardPage)
|
||||
self.uiRemoteMainServerPasswordLineEdit.setEchoMode(QtWidgets.QLineEdit.Password)
|
||||
self.uiRemoteMainServerPasswordLineEdit.setObjectName("uiRemoteMainServerPasswordLineEdit")
|
||||
self.gridLayout.addWidget(self.uiRemoteMainServerPasswordLineEdit, 4, 1, 1, 1)
|
||||
SetupWizard.addPage(self.uiRemoteControllerWizardPage)
|
||||
self.uiSummaryWizardPage = QtWidgets.QWizardPage()
|
||||
self.uiSummaryWizardPage.setObjectName("uiSummaryWizardPage")
|
||||
@@ -149,11 +158,14 @@ class Ui_SetupWizard(object):
|
||||
self.uiLocalServerPortLabel.setText(_translate("SetupWizard", "Port:"))
|
||||
self.uiRemoteControllerWizardPage.setTitle(_translate("SetupWizard", "Remote controller"))
|
||||
self.uiRemoteControllerWizardPage.setSubTitle(_translate("SetupWizard", "Please configure the settings to connect to a remote GNS3 controller"))
|
||||
self.uiRemoteMainServerProtocolLabel.setText(_translate("SetupWizard", "Protocol:"))
|
||||
self.uiRemoteMainServerProtocolComboBox.setItemText(0, _translate("SetupWizard", "HTTP"))
|
||||
self.uiRemoteMainServerProtocolComboBox.setItemText(1, _translate("SetupWizard", "HTTPS"))
|
||||
self.label_3.setText(_translate("SetupWizard", "Host:"))
|
||||
self.label_6.setText(_translate("SetupWizard", "Password:"))
|
||||
self.label_4.setText(_translate("SetupWizard", "Port:"))
|
||||
self.uiRemoteMainServerPortSpinBox.setSuffix(_translate("SetupWizard", " TCP"))
|
||||
self.label_5.setText(_translate("SetupWizard", "Username:"))
|
||||
self.label_6.setText(_translate("SetupWizard", "Password:"))
|
||||
self.uiSummaryWizardPage.setTitle(_translate("SetupWizard", "Summary"))
|
||||
self.uiSummaryWizardPage.setSubTitle(_translate("SetupWizard", "The controller has been configured, please see the summary of the settings below"))
|
||||
self.uiSummaryTreeWidget.headerItem().setText(0, _translate("SetupWizard", "1"))
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
# or negative for a release candidate or beta (after the base version
|
||||
# number has been incremented)
|
||||
|
||||
__version__ = "3.0.2"
|
||||
__version_info__ = (3, 0, 2, 0)
|
||||
__version__ = "3.0.3"
|
||||
__version_info__ = (3, 0, 3, 0)
|
||||
|
||||
if "dev" in __version__:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user