eric6/Network/IRC/IrcNetworkListDialog.py

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

eric ide

mercurial