ExtensionIrc/IrcNetworkListDialog.py

changeset 2
5b635dc8895f
equal deleted inserted replaced
1:60cb9d784005 2:5b635dc8895f
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to list the configured IRC networks.
8 """
9
10 from PyQt6.QtCore import pyqtSlot
11 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
12
13 from eric7.EricWidgets import EricMessageBox
14
15 from .Ui_IrcNetworkListDialog import Ui_IrcNetworkListDialog
16
17
18 class IrcNetworkListDialog(QDialog, Ui_IrcNetworkListDialog):
19 """
20 Class implementing a dialog to list the configured IRC networks.
21 """
22
23 def __init__(self, manager, parent=None):
24 """
25 Constructor
26
27 @param manager reference to the IRC network manager
28 @type IrcNetworkManager
29 @param parent reference to the parent widget
30 @type QWidget
31 """
32 super().__init__(parent)
33 self.setupUi(self)
34
35 self.__manager = manager
36 self.__ircWidget = parent
37
38 self.__refreshNetworksList()
39
40 def __resizeColumns(self):
41 """
42 Private slot to resize all columns to their contents.
43 """
44 for col in range(self.networksList.columnCount()):
45 self.networksList.resizeColumnToContents(col)
46
47 def __checkButtons(self):
48 """
49 Private slot to set the enabled state of the buttons.
50 """
51 enable = True
52 selectedItems = self.networksList.selectedItems()
53 if len(selectedItems) == 0:
54 enable = False
55 else:
56 for itm in selectedItems:
57 enable &= itm.parent() is None
58
59 self.editButton.setEnabled(enable)
60 self.deleteButton.setEnabled(enable)
61 self.autoConnectButton.setEnabled(enable)
62
63 if enable:
64 itm = self.networksList.selectedItems()[0]
65 check = self.__manager.getNetwork(itm.text(0)).autoConnect()
66 self.autoConnectButton.setChecked(check)
67
68 def __refreshNetworkEntry(self, itm):
69 """
70 Private method to (re-)set the data of a network entry.
71
72 @param itm reference to the network entry
73 @type QTreeWidgetItem
74 """
75 from .IrcNetworkManager import IrcIdentity
76
77 # step 1: delete all child entries
78 children = itm.takeChildren()
79 for child in children:
80 del child
81
82 # step 2: (re-)add the child entries
83 networkName = itm.text(0)
84 network = self.__manager.getNetwork(networkName)
85 server = network.getServer()
86 identityName = network.getIdentityName()
87 if identityName == IrcIdentity.DefaultIdentityName:
88 identityName = IrcIdentity.DefaultIdentityDisplay
89 autoConnect = self.tr("Yes") if network.autoConnect() else self.tr("No")
90
91 QTreeWidgetItem(itm, [self.tr("Identity"), identityName])
92 QTreeWidgetItem(
93 itm,
94 [self.tr("Server"), "{0}:{1}".format(server.getName(), server.getPort())],
95 )
96 QTreeWidgetItem(
97 itm, [self.tr("Channels"), ", ".join(network.getChannelNames())]
98 )
99 QTreeWidgetItem(itm, [self.tr("Auto-Connect"), autoConnect])
100
101 self.__resizeColumns()
102
103 def __refreshNetworksList(self):
104 """
105 Private method to refresh the complete networks list.
106 """
107 self.networksList.clear()
108
109 networkNames = self.__manager.getNetworkNames()
110 for networkName in networkNames:
111 topitm = QTreeWidgetItem(self.networksList, [networkName])
112 self.__refreshNetworkEntry(topitm)
113 topitm.setExpanded(True)
114 self.__resizeColumns()
115
116 self.__checkButtons()
117
118 @pyqtSlot()
119 def on_networksList_itemSelectionChanged(self):
120 """
121 Private slot to handle changes of the selection of networks.
122 """
123 self.__checkButtons()
124
125 @pyqtSlot()
126 def on_newButton_clicked(self):
127 """
128 Private slot to add a new network entry.
129 """
130 from .IrcNetworkEditDialog import IrcNetworkEditDialog
131
132 dlg = IrcNetworkEditDialog(manager=self.__manager, networkName="", parent=self)
133 if dlg.exec() == QDialog.DialogCode.Accepted:
134 network = dlg.getNetwork()
135 self.__manager.addNetwork(network)
136 self.__refreshNetworksList()
137
138 @pyqtSlot()
139 def on_editButton_clicked(self):
140 """
141 Private slot to edit the selected network.
142 """
143 from .IrcNetworkEditDialog import IrcNetworkEditDialog
144
145 itm = self.networksList.selectedItems()[0]
146 if itm:
147 networkName = itm.text(0)
148 dlg = IrcNetworkEditDialog(
149 manager=self.__manager, networkName=networkName, parent=self
150 )
151 if dlg.exec() == QDialog.DialogCode.Accepted:
152 network = dlg.getNetwork()
153 self.__manager.setNetwork(network, networkName)
154 if network.getName() != networkName:
155 itm.setText(0, network.getName())
156 self.__refreshNetworkEntry(itm)
157
158 @pyqtSlot()
159 def on_deleteButton_clicked(self):
160 """
161 Private slot to delete the selected entry.
162 """
163 itm = self.networksList.selectedItems()[0]
164 if itm.parent() is None:
165 networkName = itm.text(0)
166 res = EricMessageBox.yesNo(
167 self,
168 self.tr("Delete Irc Network"),
169 self.tr(
170 """Do you really want to delete IRC network <b>{0}</b>?"""
171 ).format(networkName),
172 )
173 if res:
174 index = self.networksList.indexOfTopLevelItem(itm)
175 self.networksList.takeTopLevelItem(index)
176 del itm
177
178 self.__manager.deleteNetwork(networkName)
179
180 @pyqtSlot(QTreeWidgetItem)
181 def on_networksList_itemExpanded(self, _item):
182 """
183 Private slot handling the expansion of a top level item.
184
185 @param _item reference to the expanded item (unused)
186 @type QTreeWidgetItem
187 """
188 self.__resizeColumns()
189
190 @pyqtSlot(QTreeWidgetItem)
191 def on_networksList_itemCollapsed(self, _item):
192 """
193 Private slot handling the collapse of a top level item.
194
195 @param _item reference to the collapsed item (unused)
196 @type QTreeWidgetItem
197 """
198 self.__resizeColumns()
199
200 @pyqtSlot(bool)
201 def on_autoConnectButton_clicked(self, checked):
202 """
203 Private slot handling the auto-connect selection.
204
205 @param checked flag indicating the state of the button
206 @type bool
207 """
208 itm = self.networksList.selectedItems()[0]
209 if itm.parent() is None:
210 networkName = itm.text(0)
211 if checked:
212 # enable the selected network, disable all others
213 # step 1: update network objects
214 for name in self.__manager.getNetworkNames():
215 network = self.__manager.getNetwork(networkName)
216 if name == networkName:
217 network.setAutoConnect(True)
218 else:
219 network.setAutoConnect(False)
220 self.__manager.networkChanged()
221
222 # step 2: update list entries
223 for index in range(self.networksList.topLevelItemCount()):
224 titm = self.networksList.topLevelItem(index)
225 if titm.text(0) == networkName:
226 self.__setAutoConnectEntry(titm, True)
227 else:
228 self.__setAutoConnectEntry(titm, False)
229 else:
230 # step 1: update network object
231 network = self.__manager.getNetwork(networkName)
232 network.setAutoConnect(False)
233 self.__manager.networkChanged()
234
235 # step 2: update list entry
236 self.__setAutoConnectEntry(itm, False)
237
238 def __setAutoConnectEntry(self, itm, on):
239 """
240 Private method to set the auto-connect entry of a network item.
241
242 @param itm reference to the network item
243 @type QTreeWidgetItem
244 @param on flag indicating the auto-connect state
245 @type bool
246 """
247 autoConnect = self.tr("Yes") if on else self.tr("No")
248 for index in range(itm.childCount()):
249 citm = itm.child(index)
250 if citm.text(0) == self.tr("Auto-Connect"):
251 citm.setText(1, autoConnect)
252
253 @pyqtSlot()
254 def on_editIdentitiesButton_clicked(self):
255 """
256 Private slot to edit the identities.
257 """
258 from .IrcIdentitiesEditDialog import IrcIdentitiesEditDialog
259
260 dlg = IrcIdentitiesEditDialog(self.__manager, "", parent=self)
261 dlg.exec()
262
263 selectedNetwork = self.networksList.selectedItems()
264 selectedNetworkName = selectedNetwork[0].text(0) if selectedNetwork else ""
265 self.__refreshNetworksList()
266 if selectedNetworkName:
267 for index in range(self.networksList.topLevelItemCount()):
268 itm = self.networksList.topLevelItem(index)
269 if itm.text(0) == selectedNetworkName:
270 itm.setSelected(True)
271 break

eric ide

mercurial