src/eric7/Network/IRC/IrcNetworkListDialog.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 - 2022 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 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 def __init__(self, manager, parent=None):
23 """
24 Constructor
25
26 @param manager reference to the IRC network manager (IrcNetworkManager)
27 @param parent reference to the parent widget (QWidget)
28 """
29 super().__init__(parent)
30 self.setupUi(self)
31
32 self.__manager = manager
33
34 self.__refreshNetworksList()
35
36 def __resizeColumns(self):
37 """
38 Private slot to resize all columns to their contents.
39 """
40 for col in range(self.networksList.columnCount()):
41 self.networksList.resizeColumnToContents(col)
42
43 def __checkButtons(self):
44 """
45 Private slot to set the enabled state of the buttons.
46 """
47 enable = True
48 selectedItems = self.networksList.selectedItems()
49 if len(selectedItems) == 0:
50 enable = False
51 else:
52 for itm in selectedItems:
53 enable &= itm.parent() is None
54
55 self.editButton.setEnabled(enable)
56 self.deleteButton.setEnabled(enable)
57 self.autoConnectButton.setEnabled(enable)
58
59 if enable:
60 itm = self.networksList.selectedItems()[0]
61 check = self.__manager.getNetwork(itm.text(0)).autoConnect()
62 self.autoConnectButton.setChecked(check)
63
64 def __refreshNetworkEntry(self, itm):
65 """
66 Private method to (re-)set the data of a network entry.
67
68 @param itm reference to the network entry (QTreeWidgetItem)
69 """
70 # step 1: delete all child entries
71 children = itm.takeChildren()
72 for child in children:
73 del child
74
75 # step 2: (re-)add the child entries
76 from .IrcNetworkManager import IrcIdentity
77 networkName = itm.text(0)
78 network = self.__manager.getNetwork(networkName)
79 server = network.getServer()
80 identityName = network.getIdentityName()
81 if identityName == IrcIdentity.DefaultIdentityName:
82 identityName = IrcIdentity.DefaultIdentityDisplay
83 autoConnect = (
84 self.tr("Yes") if network.autoConnect() else self.tr("No")
85 )
86
87 QTreeWidgetItem(
88 itm,
89 [self.tr("Identity"), identityName])
90 QTreeWidgetItem(
91 itm,
92 [self.tr("Server"), "{0}:{1}".format(
93 server.getName(), server.getPort())])
94 QTreeWidgetItem(
95 itm,
96 [self.tr("Channels"), ", ".join(network.getChannelNames())])
97 QTreeWidgetItem(
98 itm,
99 [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 dlg = IrcNetworkEditDialog(self.__manager, "", self)
132 if dlg.exec() == QDialog.DialogCode.Accepted:
133 network = dlg.getNetwork()
134 self.__manager.addNetwork(network)
135 self.__refreshNetworksList()
136
137 @pyqtSlot()
138 def on_editButton_clicked(self):
139 """
140 Private slot to edit the selected network.
141 """
142 itm = self.networksList.selectedItems()[0]
143 if itm:
144 from .IrcNetworkEditDialog import IrcNetworkEditDialog
145 networkName = itm.text(0)
146 dlg = IrcNetworkEditDialog(self.__manager, networkName, self)
147 if dlg.exec() == QDialog.DialogCode.Accepted:
148 network = dlg.getNetwork()
149 self.__manager.setNetwork(network, networkName)
150 if network.getName() != networkName:
151 itm.setText(0, network.getName())
152 self.__refreshNetworkEntry(itm)
153
154 @pyqtSlot()
155 def on_deleteButton_clicked(self):
156 """
157 Private slot to delete the selected entry.
158 """
159 itm = self.networksList.selectedItems()[0]
160 if itm.parent() is None:
161 networkName = itm.text(0)
162 res = EricMessageBox.yesNo(
163 self,
164 self.tr("Delete Irc Network"),
165 self.tr(
166 """Do you really want to delete IRC network <b>{0}</b>?""")
167 .format(networkName))
168 if res:
169 index = self.networksList.indexOfTopLevelItem(itm)
170 self.networksList.takeTopLevelItem(index)
171 del itm
172
173 self.__manager.deleteNetwork(networkName)
174
175 @pyqtSlot(QTreeWidgetItem)
176 def on_networksList_itemExpanded(self, item):
177 """
178 Private slot handling the expansion of a top level item.
179
180 @param item reference to the expanded item (QTreeWidgetItem)
181 """
182 self.__resizeColumns()
183
184 @pyqtSlot(QTreeWidgetItem)
185 def on_networksList_itemCollapsed(self, item):
186 """
187 Private slot handling the collapse of a top level item.
188
189 @param item reference to the collapsed item (QTreeWidgetItem)
190 """
191 self.__resizeColumns()
192
193 @pyqtSlot(bool)
194 def on_autoConnectButton_clicked(self, checked):
195 """
196 Private slot handling the auto-connect selection.
197
198 @param checked flag indicating the state of the button (boolean)
199 """
200 itm = self.networksList.selectedItems()[0]
201 if itm.parent() is None:
202 networkName = itm.text(0)
203 if checked:
204 # enable the selected network, disable all others
205 # step 1: update network objects
206 for name in self.__manager.getNetworkNames():
207 network = self.__manager.getNetwork(networkName)
208 if name == networkName:
209 network.setAutoConnect(True)
210 else:
211 network.setAutoConnect(False)
212 self.__manager.networkChanged()
213
214 # step 2: update list entries
215 for index in range(self.networksList.topLevelItemCount()):
216 titm = self.networksList.topLevelItem(index)
217 if titm.text(0) == networkName:
218 self.__setAutoConnectEntry(titm, True)
219 else:
220 self.__setAutoConnectEntry(titm, False)
221 else:
222 # step 1: update network object
223 network = self.__manager.getNetwork(networkName)
224 network.setAutoConnect(False)
225 self.__manager.networkChanged()
226
227 # step 2: update list entry
228 self.__setAutoConnectEntry(itm, False)
229
230 def __setAutoConnectEntry(self, itm, on):
231 """
232 Private method to set the auto-connect entry of a network item.
233
234 @param itm reference to the network item (QTreeWidgetItem)
235 @param on flag indicating the auto-connect state (boolean)
236 """
237 autoConnect = self.tr("Yes") if on else self.tr("No")
238 for index in range(itm.childCount()):
239 citm = itm.child(index)
240 if citm.text(0) == self.tr("Auto-Connect"):
241 citm.setText(1, autoConnect)
242
243 @pyqtSlot()
244 def on_editIdentitiesButton_clicked(self):
245 """
246 Private slot to edit the identities.
247 """
248 from .IrcIdentitiesEditDialog import IrcIdentitiesEditDialog
249 dlg = IrcIdentitiesEditDialog(self.__manager, "", self)
250 dlg.exec()
251
252 selectedNetwork = self.networksList.selectedItems()
253 selectedNetworkName = (
254 selectedNetwork[0].text(0) if selectedNetwork else "")
255 self.__refreshNetworksList()
256 if selectedNetworkName:
257 for index in range(self.networksList.topLevelItemCount()):
258 itm = self.networksList.topLevelItem(index)
259 if itm.text(0) == selectedNetworkName:
260 itm.setSelected(True)
261 break

eric ide

mercurial