Sat, 01 Dec 2012 11:48:52 +0100
Continued with the IRC management.
--- a/Network/IRC/IrcNetworkEditDialog.py Fri Nov 30 20:14:50 2012 +0100 +++ b/Network/IRC/IrcNetworkEditDialog.py Sat Dec 01 11:48:52 2012 +0100 @@ -18,6 +18,7 @@ from .IrcNetworkManager import IrcIdentity, IrcChannel from .IrcChannelEditDialog import IrcChannelEditDialog +from .IrcServerEditDialog import IrcServerEditDialog import UI.PixmapCache @@ -40,7 +41,7 @@ self.__manager = manager self.editIdentitiesButton.setIcon(UI.PixmapCache.getIcon("ircConfigure.png")) - self.editServersButton.setIcon(UI.PixmapCache.getIcon("ircConfigure.png")) + self.editServerButton.setIcon(UI.PixmapCache.getIcon("ircConfigure.png")) self.editChannelButton.setIcon(UI.PixmapCache.getIcon("ircConfigure.png")) self.addChannelButton.setIcon(UI.PixmapCache.getIcon("plus.png")) self.deleteChannelButton.setIcon(UI.PixmapCache.getIcon("minus.png")) @@ -66,7 +67,7 @@ index = 0 self.identityCombo.setCurrentIndex(index) - # servers + # server self.serverEdit.setText(self.__network.getServerName()) # channels @@ -100,6 +101,15 @@ """ self.__updateOkButton() + @pyqtSlot(str) + def on_identityCombo_activated(self, identity): + """ + Private slot to handle the selection of an identity. + + @param identity selected entity (string) + """ + self.__network.setIdentityName(identity) + @pyqtSlot() def on_editIdentitiesButton_clicked(self): """ @@ -109,12 +119,14 @@ raise NotImplementedError @pyqtSlot() - def on_editServersButton_clicked(self): + def on_editServerButton_clicked(self): + """ + Private slot to edit the server configuration. """ - Slot documentation goes here. - """ - # TODO: not implemented yet - raise NotImplementedError + dlg = IrcServerEditDialog(self.__network.getServer()) + if dlg.exec_() == QDialog.Accepted: + self.__network.setServer(dlg.getServer()) + self.serverEdit.setText(self.__network.getServerName()) @pyqtSlot() def on_addChannelButton_clicked(self): @@ -216,4 +228,5 @@ @return edited network object (IrcNetwork) """ + self.__network.setName(self.networkEdit.text()) return self.__network
--- a/Network/IRC/IrcNetworkEditDialog.ui Fri Nov 30 20:14:50 2012 +0100 +++ b/Network/IRC/IrcNetworkEditDialog.ui Sat Dec 01 11:48:52 2012 +0100 @@ -63,9 +63,9 @@ </widget> </item> <item row="2" column="2"> - <widget class="QToolButton" name="editServersButton"> + <widget class="QToolButton" name="editServerButton"> <property name="toolTip"> - <string>Press to edit the servers</string> + <string>Press to edit the server configuration</string> </property> <property name="text"> <string/> @@ -182,7 +182,7 @@ <tabstop>identityCombo</tabstop> <tabstop>editIdentitiesButton</tabstop> <tabstop>serverEdit</tabstop> - <tabstop>editServersButton</tabstop> + <tabstop>editServerButton</tabstop> <tabstop>channelList</tabstop> <tabstop>addChannelButton</tabstop> <tabstop>editChannelButton</tabstop>
--- a/Network/IRC/IrcNetworkListDialog.py Fri Nov 30 20:14:50 2012 +0100 +++ b/Network/IRC/IrcNetworkListDialog.py Sat Dec 01 11:48:52 2012 +0100 @@ -37,23 +37,7 @@ networkNames = self.__manager.getNetworkNames() for networkName in networkNames: topitm = QTreeWidgetItem(self.networksList, [networkName]) - network = self.__manager.getNetwork(networkName) - server = network.getServer() - identityName = network.getIdentityName() - if identityName == IrcIdentity.DefaultIdentityName: - identityName = IrcIdentity.DefaultIdentityDisplay - autoConnect = self.trUtf8("Yes") if network.autoConnect() \ - else self.trUtf8("No") - - QTreeWidgetItem(topitm, - [self.trUtf8("Identity"), identityName]) - QTreeWidgetItem(topitm, - [self.trUtf8("Server"), "{0}:{1}".format( - server.getName(), server.getPort())]) - QTreeWidgetItem(topitm, - [self.trUtf8("Channels"), ", ".join(network.getChannelNames())]) - QTreeWidgetItem(topitm, - [self.trUtf8("Auto-Connect"), autoConnect]) + self.__refreshNetworkEntry(topitm) topitm.setExpanded(True) self.__resizeColumns() @@ -87,6 +71,39 @@ check = self.__manager.getNetwork(itm.text(0)).autoConnect() self.autoConnectButton.setChecked(check) + def __refreshNetworkEntry(self, itm): + """ + Private method to (re-)set the data of a network entry. + + @oaram itm reference to the network entry (QTreeWidgetItem) + """ + # step 1: delete all child entries + children = itm.takeChildren() + for child in children: + del child + + # step 2: (re-)add the child entries + networkName = itm.text(0) + network = self.__manager.getNetwork(networkName) + server = network.getServer() + identityName = network.getIdentityName() + if identityName == IrcIdentity.DefaultIdentityName: + identityName = IrcIdentity.DefaultIdentityDisplay + autoConnect = self.trUtf8("Yes") if network.autoConnect() \ + else self.trUtf8("No") + + QTreeWidgetItem(itm, + [self.trUtf8("Identity"), identityName]) + QTreeWidgetItem(itm, + [self.trUtf8("Server"), "{0}:{1}".format( + server.getName(), server.getPort())]) + QTreeWidgetItem(itm, + [self.trUtf8("Channels"), ", ".join(network.getChannelNames())]) + QTreeWidgetItem(itm, + [self.trUtf8("Auto-Connect"), autoConnect]) + + self.__resizeColumns() + @pyqtSlot() def on_networksList_itemSelectionChanged(self): """ @@ -112,7 +129,11 @@ networkName = itm.text(0) dlg = IrcNetworkEditDialog(self.__manager, networkName, self) if dlg.exec_() == QDialog.Accepted: - self.__manager.setNetwork(dlg.getNetwork()) + network = dlg.getNetwork() + self.__manager.setNetwork(network, networkName) + if network.getName() != networkName: + itm.setText(0, network.getName()) + self.__refreshNetworkEntry(itm) @pyqtSlot() def on_deleteButton_clicked(self):
--- a/Network/IRC/IrcNetworkManager.py Fri Nov 30 20:14:50 2012 +0100 +++ b/Network/IRC/IrcNetworkManager.py Sat Dec 01 11:48:52 2012 +0100 @@ -404,6 +404,14 @@ settings.endGroup() settings.endGroup() + def setName(self, name): + """ + Public method to set the network name. + + @param network name (string) + """ + self.__name = name + def getName(self): """ Public method to get the network name. @@ -791,14 +799,30 @@ else: return None - def setNetwork(self, network): + def setNetwork(self, network, networkName=""): """ Public method to set a network. @param network network object to set (IrcNetwork) + @param networkName name the network was known for (string) """ name = network.getName() - if name in self.__networks: + if networkName and name != networkName: + # the network name has changed + self.deleteNetwork(networkName) + self.addNetwork(network) + elif name in self.__networks: + self.__networks[name] = network + self.networkChanged() + + def addNetwork(self, network): + """ + Public method to add a network. + + @param network network object to add (IrcNetwork) + """ + name = network.getName() + if name not in self.__networks: self.__networks[name] = network self.networkChanged()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Network/IRC/IrcServerEditDialog.py Sat Dec 01 11:48:52 2012 +0100 @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog for editing the IRC server configuration. +""" + +from PyQt4.QtCore import pyqtSlot +from PyQt4.QtGui import QDialog, QDialogButtonBox + +from .Ui_IrcServerEditDialog import Ui_IrcServerEditDialog + +from .IrcNetworkManager import IrcServer + + +class IrcServerEditDialog(QDialog, Ui_IrcServerEditDialog): + """ + Class implementing a dialog for editing the IRC server configuration. + """ + def __init__(self, server, parent=None): + """ + Constructor + + @param server reference to the IRC server object (IrcServer) + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok) + + self.serverEdit.setText(server.getName()) + self.portSpinBox.setValue(server.getPort()) + self.passwordEdit.setText(server.getPassword()) + self.sslCheckBox.setChecked(server.useSSL()) + + self.__updateOkButton() + + def __updateOkButton(self): + """ + Private method to update the OK button state. + """ + self.__okButton.setEnabled(self.serverEdit.text() != "") + + @pyqtSlot(str) + def on_serverEdit_textChanged(self, name): + """ + Private slot handling changes of the server name. + + @param name current name of the server (string) + """ + self.__updateOkButton() + + def getServer(self): + """ + Public method to create a server object from the data entered into + the dialog. + + @return server object (IrcServer) + """ + server = IrcServer(self.serverEdit.text()) + server.setPort(self.portSpinBox.value()) + server.setPassword(self.passwordEdit.text()) + server.setUseSSL(self.sslCheckBox.isChecked()) + + return server
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Network/IRC/IrcServerEditDialog.ui Sat Dec 01 11:48:52 2012 +0100 @@ -0,0 +1,154 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>IrcServerEditDialog</class> + <widget class="QDialog" name="IrcServerEditDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>158</height> + </rect> + </property> + <property name="windowTitle"> + <string>IRC Server</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Server:</string> + </property> + </widget> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QLineEdit" name="serverEdit"> + <property name="toolTip"> + <string>Enter the host name of the IRC server</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Port:</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QSpinBox" name="portSpinBox"> + <property name="toolTip"> + <string>Enter the port number</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>65535</number> + </property> + <property name="value"> + <number>6667</number> + </property> + </widget> + </item> + <item row="1" column="2"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>238</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_3"> + <property name="text"> + <string>Password:</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="2"> + <widget class="QLineEdit" name="passwordEdit"> + <property name="toolTip"> + <string>Enter the server password</string> + </property> + <property name="echoMode"> + <enum>QLineEdit::Password</enum> + </property> + </widget> + </item> + <item row="3" column="0" colspan="3"> + <widget class="QCheckBox" name="sslCheckBox"> + <property name="toolTip"> + <string>Select to use an SSL encrypted connection</string> + </property> + <property name="text"> + <string>Use Encrypted Connection (SSL)</string> + </property> + </widget> + </item> + <item row="4" column="0" colspan="3"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>serverEdit</tabstop> + <tabstop>portSpinBox</tabstop> + <tabstop>passwordEdit</tabstop> + <tabstop>sslCheckBox</tabstop> + <tabstop>buttonBox</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>IrcServerEditDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>IrcServerEditDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- a/eric5.e4p Fri Nov 30 20:14:50 2012 +0100 +++ b/eric5.e4p Sat Dec 01 11:48:52 2012 +0100 @@ -1065,6 +1065,7 @@ <Source>Network/IRC/IrcNetworkListDialog.py</Source> <Source>Network/IRC/IrcNetworkEditDialog.py</Source> <Source>Network/IRC/IrcChannelEditDialog.py</Source> + <Source>Network/IRC/IrcServerEditDialog.py</Source> </Sources> <Forms> <Form>PyUnit/UnittestDialog.ui</Form> @@ -1376,6 +1377,7 @@ <Form>Network/IRC/IrcNetworkListDialog.ui</Form> <Form>Network/IRC/IrcNetworkEditDialog.ui</Form> <Form>Network/IRC/IrcChannelEditDialog.ui</Form> + <Form>Network/IRC/IrcServerEditDialog.ui</Form> </Forms> <Translations> <Translation>i18n/eric5_cs.qm</Translation>