src/eric7/MicroPython/EthernetDialogs/IPv4AddressDialog.py

Sun, 16 Mar 2025 12:53:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 Mar 2025 12:53:12 +0100
branch
eric7
changeset 11170
6d6199d668fb
parent 11090
f5f5f5803935
permissions
-rw-r--r--

Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).

# -*- coding: utf-8 -*-

# Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to enter an IPv4 address.
"""

from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QDialog, QDialogButtonBox

from .Ui_IPv4AddressDialog import Ui_IPv4AddressDialog


class IPv4AddressDialog(QDialog, Ui_IPv4AddressDialog):
    """
    Class implementing a dialog to enter an IPv4 address.
    """

    def __init__(self, withDhcp=False, parent=None):
        """
        Constructor

        @param withDhcp flag indicating to allow the DHCP selection
        @type bool
        @param parent reference to the parent widget (defaults to None)
        @type QWidget (optional)
        """
        super().__init__(parent)
        self.setupUi(self)

        self.__withDhcp = withDhcp
        self.dhcpCheckBox.setVisible(withDhcp)
        if withDhcp:
            self.dhcpCheckBox.clicked.connect(self.__updateOk)
            self.dhcpCheckBox.clicked.connect(self.ipAddressGroup.setDisabled)

        self.addressEdit.addressChanged.connect(self.__updateOk)
        self.netmaskEdit.addressChanged.connect(self.__updateOk)
        self.gatewayEdit.addressChanged.connect(self.__updateOk)
        self.dnsEdit.addressChanged.connect(self.__updateOk)

        self.__updateOk()

        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())

    @pyqtSlot()
    def __updateOk(self):
        """
        Private method to update the enabled state of the OK button.
        """
        enable = (self.__withDhcp and self.dhcpCheckBox.isChecked()) or (
            self.addressEdit.hasAcceptableInput()
            and self.netmaskEdit.hasAcceptableInput()
            and self.gatewayEdit.hasAcceptableInput()
            and self.dnsEdit.hasAcceptableInput()
        )

        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(enable)

    def getIPv4Address(self):
        """
        Public method to get the entered IPv4 address.

        @return tuple containing a tuple of the IPv4 address, the netmask, the gateway
            address and the resolver address or the string 'dhcp' if dynamic addressing
            was selected and the hostname for the device
        @rtype tuple of ((str, str, str, str), str) or (str, str)
        """
        if self.dhcpCheckBox.isChecked():
            return "dhcp", self.hostnameEdit.text()
        else:
            return (
                (
                    self.addressEdit.text(),
                    self.netmaskEdit.text(),
                    self.gatewayEdit.text(),
                    self.dnsEdit.text(),
                ),
                self.hostnameEdit.text(),
            )

eric ide

mercurial