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