src/eric7/RemoteServerInterface/EricServerProfilesDialog.py

branch
server
changeset 10531
3308e8349e4c
child 10561
be23a662d709
diff -r 684f491a3bfc -r 3308e8349e4c src/eric7/RemoteServerInterface/EricServerProfilesDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/RemoteServerInterface/EricServerProfilesDialog.py	Mon Jan 29 19:50:44 2024 +0100
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to manage server connection profiles.
+"""
+
+import copy
+
+from PyQt6.QtCore import Qt, pyqtSlot
+from PyQt6.QtWidgets import QDialog, QListWidgetItem
+
+from eric7.EricWidgets import EricMessageBox
+
+from .EricServerConnectionDialog import EricServerConnectionDialog
+from .Ui_EricServerProfilesDialog import Ui_EricServerProfilesDialog
+
+
+class EricServerProfilesDialog(QDialog, Ui_EricServerProfilesDialog):
+    """
+    Class implementing a dialog to manage server connection profiles.
+    """
+
+    def __init__(self, profiles, parent=None):
+        """
+        Constructor
+
+        @param profiles dictionary containing the server connection profiles
+        @type dict
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__profiles = copy.deepcopy(profiles)
+        self.__populateProfilesList()
+
+        self.on_connectionsList_itemSelectionChanged()
+
+    def __populateProfilesList(self):
+        """
+        Private method to (re-) populate the list of server connection profiles.
+        """
+        self.connectionsList.clear()
+
+        for profile in self.__profiles:
+            itm = QListWidgetItem(profile, self.connectionsList)
+            itm.setData(Qt.ItemDataRole.UserRole, self.__profiles[profile])
+
+    def __getProfilesList(self):
+        """
+        Private method to get the list of defined profile names.
+
+        @return list of defined profile names
+        @rtype list of str
+        """
+        profileNames = []
+        for row in range(self.connectionsList.count()):
+            itm = self.connectionsList.item(row)
+            profileNames.append(itm.text())
+
+        return profileNames
+
+    @pyqtSlot()
+    def on_connectionsList_itemSelectionChanged(self):
+        """
+        Private slot to handle a change of selected items.
+        """
+        selectedItems = self.connectionsList.selectedItems()
+        self.editButton.setEnabled(len(selectedItems) == 1)
+        self.removeButton.setEnabled(len(selectedItems) > 0)
+
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot add a new connection profile.
+        """
+        dlg = EricServerConnectionDialog(
+            profileNames=self.__getProfilesList(), parent=self
+        )
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            profileData = dlg.getProfileData()
+            itm = QListWidgetItem(profileData[0], self.connectionsList)
+            itm.setData(Qt.ItemDataRole.UserRole, profileData[1:])
+
+    @pyqtSlot()
+    def on_editButton_clicked(self):
+        """
+        Private slot to edit the selected entry.
+        """
+        selectedItems = self.connectionsList.selectedItems()
+        if selectedItems:
+            itm = selectedItems[0]
+            dlg = EricServerConnectionDialog(
+                profileNames=self.__getProfilesList(), parent=self
+            )
+            data = itm.data(Qt.ItemDataRole.UserRole)
+            dlg.setProfileData(itm.text(), *data)
+            if dlg.exec() == QDialog.DialogCode.Accepted:
+                profileData = dlg.getProfileData()
+                itm.setText(profileData[0])
+                itm.setData(Qt.ItemDataRole.UserRole, profileData[1:])
+
+    @pyqtSlot()
+    def on_removeButton_clicked(self):
+        """
+        Private slot to remove the selected connection profiles.
+        """
+        yes = EricMessageBox.yesNo(
+            self,
+            self.tr("Remove Selected Entries"),
+            self.tr(
+                "Do you really want to remove the selected entries from the list?"
+            ),
+        )
+        if yes:
+            for itm in self.connectionsList.selectedItems()[:]:
+                self.connectionsList.takeItem(self.connectionsList.row(itm))
+                del itm
+
+    @pyqtSlot()
+    def on_resetButton_clicked(self):
+        """
+        Private slot to reset all changes performed.
+        """
+        yes = EricMessageBox.yesNo(
+            self,
+            self.tr("Reset Changes"),
+            self.tr(
+                "Do you really want to reset all changes performed up to this point?"
+            ),
+        )
+        if yes:
+            self.__populateProfilesList()
+
+    def getConnectionProfiles(self):
+        """
+        Public method to get the configured connection profiles.
+
+        @return dictionary containing the configured connection profiles
+        @rtype dict
+        """
+        profiles = {}
+
+        for row in range(self.connectionsList.count()):
+            itm = self.connectionsList.item(row)
+            profiles[itm.text()] = itm.data(Qt.ItemDataRole.UserRole)
+
+        return profiles
+

eric ide

mercurial