src/eric7/RemoteServerInterface/EricServerConnectionDialog.py

branch
server
changeset 10531
3308e8349e4c
child 10561
be23a662d709
diff -r 684f491a3bfc -r 3308e8349e4c src/eric7/RemoteServerInterface/EricServerConnectionDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/RemoteServerInterface/EricServerConnectionDialog.py	Mon Jan 29 19:50:44 2024 +0100
@@ -0,0 +1,164 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+
+"""
+Module implementing a dialog to enter the parameters for a connection to an eric-ide
+server.
+"""
+
+import ipaddress
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from eric7 import Preferences
+
+from .Ui_EricServerConnectionDialog import Ui_EricServerConnectionDialog
+
+
+class EricServerConnectionDialog(QDialog, Ui_EricServerConnectionDialog):
+    """
+    Class implementing a dialog to enter the parameters for a connection to an eric-ide
+    server.
+    """
+
+    def __init__(self, profileNames=None, parent=None):
+        """
+        Constructor
+
+        @param profileNames list of defined connection profile names (defaults to None)
+        @type list of str (optional)
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.timeoutSpinBox.setToolTip(
+            self.tr("Enter the timeout for the connection attempt (default: {0} s.")
+            .format(Preferences.getEricServer("ConnectionTimeout"))
+        )
+
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False)
+
+        if profileNames is None:
+            self.nameLabel.setVisible(False)
+            self.nameEdit.setVisible(False)
+            self.nameEdit.setEnabled(False)
+
+        self.__profileNames = profileNames[:] if bool(profileNames) else []
+        self.__originalName = ""
+
+        self.nameEdit.textChanged.connect(self.__updateOK)
+        self.hostnameEdit.textChanged.connect(self.__updateOK)
+
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+
+    @pyqtSlot(str)
+    def on_hostnameEdit_textChanged(self, hostname):
+        """
+        Private slot handling a change of the hostname.
+
+        @param hostname text of the host name field
+        @type str
+        """
+    @pyqtSlot()
+    def __updateOK(self):
+        """
+        Private slot to update the enabled state of the OK button.
+        """
+        hostname = self.hostnameEdit.text()
+
+        if hostname and hostname[0] in "0123456789" and ":" not in hostname:
+            # possibly an IPv4 address
+            try:
+                ipaddress.IPv4Address(hostname)
+                valid = True
+            except ipaddress.AddressValueError:
+                # leading zeros are not allowed
+                valid = False
+        elif ":" in hostname:
+            # possibly an IPv6 address
+            try:
+                ipaddress.IPv6Address(hostname)
+                valid = True
+            except ipaddress.AddressValueError:
+                # leading zeros are not allowed
+                valid = False
+        elif ":" not in hostname:
+            valid = bool(hostname)
+        else:
+            valid = False
+
+        if self.nameEdit.isEnabled():
+            # connection profile mode
+            name = self.nameEdit.text()
+            valid &=  name == self.__originalName or name not in self.__profileNames
+
+        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(valid)
+
+    def getData(self):
+        """
+        Public method to get the entered data.
+
+        @return tuple containing the entered host name or IP address, the port number
+            and the timeout (in seconds)
+        @rtype tuple of (str, int, int)
+        """
+        port = self.portSpinBox.value()
+        if port == self.portSpinBox.minimum():
+            port = None
+
+        timeout = self.timeoutSpinBox.value()
+        if timeout == self.timeoutSpinBox.minimum():
+            timeout = None
+
+        return self.hostnameEdit.text(), port, timeout
+
+    def getProfileData(self):
+        """
+        Public method to get the entered data for connection profile mode.
+
+        @return tuple containing the profile name, host name or IP address,
+            the port number and the timeout (in seconds)
+        @rtype tuple of (str, str, int, int)
+        """
+        port = self.portSpinBox.value()
+        if port == self.portSpinBox.minimum():
+            port = 0
+
+        timeout = self.timeoutSpinBox.value()
+        if timeout == self.timeoutSpinBox.minimum():
+            timeout = 0
+
+        return self.nameEdit.text(), self.hostnameEdit.text(), port, timeout
+
+    def setProfileData(self, name, hostname, port, timeout):
+        """
+        Public method to set the connection profile data to be edited.
+
+        @param name profile name
+        @type str
+        @param hostname host name or IP address
+        @type str
+        @param port port number
+        @type int
+        @param timeout timeout value in seconds
+        @type int
+        """
+        # adjust some values
+        if not bool(port):
+            port = self.portSpinBox.minimum()
+        if not bool(timeout):
+            timeout = self.timeoutSpinBox.minimum()
+
+        self.__originalName = name
+
+        self.nameEdit.setText(name)
+        self.hostnameEdit.setText(hostname)
+        self.portSpinBox.setValue(port)
+        self.timeoutSpinBox.setValue(timeout)

eric ide

mercurial