Tue, 27 Nov 2012 18:50:02 +0100
Started implementing the IRC network management dialog.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Network/IRC/IrcNetworkListDialog.py Tue Nov 27 18:50:02 2012 +0100 @@ -0,0 +1,138 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to list the configured IRC networks. +""" + +from PyQt4.QtCore import pyqtSlot +from PyQt4.QtGui import QDialog, QTreeWidgetItem + +from E5Gui import E5MessageBox + +from .Ui_IrcNetworkListDialog import Ui_IrcNetworkListDialog + +from .IrcNetworkManager import IrcIdentity + + +class IrcNetworkListDialog(QDialog, Ui_IrcNetworkListDialog): + """ + Class implementing a dialog to list the configured IRC networks. + """ + def __init__(self, manager, parent=None): + """ + Constructor + + @param manager reference to the IRC network manager (IrcNetworkManager) + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.__manager = manager + + networkNames = self.__manager.getNetworkNames() + for networkName in networkNames: + topitm = QTreeWidgetItem(self.networksList, [networkName]) + network = self.__manager.getNetwork(networkName) + server = self.__manager.getServer(network.getServerName()) + identityName = network.getIdentityName() + if identityName == IrcIdentity.DefaultIdentityName: + identityName = IrcIdentity.DefaultIdentityDisplay + QTreeWidgetItem(topitm, + [self.trUtf8("Identity"), identityName]) + QTreeWidgetItem(topitm, + [self.trUtf8("Server"), "{0}:{1}".format( + server.getServer(), server.getPort())]) + QTreeWidgetItem(topitm, + [self.trUtf8("Channels"), ", ".join(network.getChannels())]) + if network.autoJoinChannels(): + autoJoin = self.trUtf8("Yes") + else: + autoJoin = self.trUtf8("No") + QTreeWidgetItem(topitm, + [self.trUtf8("Auto-join Channels"), autoJoin]) + topitm.setExpanded(True) + self.__resizeColumns() + + self.__checkButtons() + + def __resizeColumns(self): + """ + Private slot to resize all columns to their contents. + """ + for col in range(self.networksList.columnCount()): + self.networksList.resizeColumnToContents(col) + + def __checkButtons(self): + """ + Public slot to set the enabled state of the buttons. + """ + enable = True + selectedItems = self.networksList.selectedItems() + if len(selectedItems) == 0: + enable = False + else: + for itm in selectedItems: + enable &= itm.parent() is None + + self.editButton.setEnabled(enable) + self.deleteButton.setEnabled(enable) + + @pyqtSlot() + def on_networksList_itemSelectionChanged(self): + """ + Slot documentation goes here. + """ + self.__checkButtons() + + @pyqtSlot() + def on_newButton_clicked(self): + """ + Slot documentation goes here. + """ + # TODO: not implemented yet + raise NotImplementedError + + @pyqtSlot() + def on_editButton_clicked(self): + """ + Slot documentation goes here. + """ + # TODO: not implemented yet + raise NotImplementedError + + @pyqtSlot() + def on_deleteButton_clicked(self): + """ + Private slot to delete the selected entry. + """ + itm = self.networksList.selectedItems()[0] + if itm.parent() is None: + networkName = itm.text(0) + res = E5MessageBox.yesNo(self, + self.trUtf8("Delete Irc Network"), + self.trUtf8("""Do you really want to delete IRC network <b>{0}</b>?""")\ + .format(networkName)) + if res: + index = self.networksList.indexOfTopLevelItem(itm) + self.networksList.takeTopLevelItem(index) + del itm + + self.__manager.deleteNetwork(networkName) + + @pyqtSlot(QTreeWidgetItem) + def on_networksList_itemExpanded(self, item): + """ + Private slot handling the expansion of a top level item. + """ + self.__resizeColumns() + + @pyqtSlot(QTreeWidgetItem) + def on_networksList_itemCollapsed(self, item): + """ + Private slot handling the collapse of a top level item. + """ + self.__resizeColumns()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Network/IRC/IrcNetworkListDialog.ui Tue Nov 27 18:50:02 2012 +0100 @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>IrcNetworkListDialog</class> + <widget class="QDialog" name="IrcNetworkListDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>500</width> + <height>350</height> + </rect> + </property> + <property name="windowTitle"> + <string>IRC Networks</string> + </property> + <property name="sizeGripEnabled"> + <bool>true</bool> + </property> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QTreeWidget" name="networksList"> + <property name="editTriggers"> + <set>QAbstractItemView::NoEditTriggers</set> + </property> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="columnCount"> + <number>2</number> + </property> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + <column> + <property name="text"> + <string notr="true">2</string> + </property> + </column> + </widget> + </item> + <item row="0" column="1"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPushButton" name="newButton"> + <property name="toolTip"> + <string>Press to define a new network</string> + </property> + <property name="text"> + <string>&New...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="editButton"> + <property name="toolTip"> + <string>Press to edit the selected network</string> + </property> + <property name="text"> + <string>&Edit...</string> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="deleteButton"> + <property name="toolTip"> + <string>Press to delete the selected network</string> + </property> + <property name="text"> + <string>&Delete</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <tabstops> + <tabstop>networksList</tabstop> + <tabstop>newButton</tabstop> + <tabstop>editButton</tabstop> + <tabstop>deleteButton</tabstop> + <tabstop>buttonBox</tabstop> + </tabstops> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>IrcNetworkListDialog</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>IrcNetworkListDialog</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/Network/IRC/IrcNetworkManager.py Mon Nov 26 19:50:06 2012 +0100 +++ b/Network/IRC/IrcNetworkManager.py Tue Nov 27 18:50:02 2012 +0100 @@ -7,7 +7,7 @@ Module implementing the IRC data structures and their manager. """ -from PyQt4.QtCore import pyqtSignal, QObject +from PyQt4.QtCore import pyqtSignal, QObject, QCoreApplication import Utilities from Utilities.AutoSaver import AutoSaver @@ -20,6 +20,7 @@ Class implementing the IRC identity object. """ DefaultIdentityName = "0default" + DefaultIdentityDisplay = QCoreApplication.translate("IrcIdentity", "Default Identity") def __init__(self, name, parent=None): """ @@ -351,8 +352,12 @@ class IrcNetworkManager(QObject): """ Class implementing the IRC identity object. + + @signal dataChanged() emitted after some data has changed + @signal networksChanged() emitted after a network object has changed """ dataChanged = pyqtSignal() + networksChanged = pyqtSignal() def __init__(self, parent=None): """ @@ -543,7 +548,7 @@ """ name = identity.getName() self.__identities[name] = identity - self.dataChanged.emit() + self.identityChanged() def deleteIdentity(self, name): """ @@ -553,7 +558,7 @@ """ if name in self.__identities and name != IrcIdentity.DefaultIdentityName: del self.__identities[name] - self.dataChanged.emit() + self.identityChanged() def renameIdentity(self, oldName, newName): """ @@ -570,7 +575,7 @@ if network.getIdentityName() == oldName: network.setIdentityName(newName) - self.dataChanged.emit() + self.identityChanged() def identityChanged(self): """ @@ -658,11 +663,22 @@ return network + def deleteNetwork(self, name): + """ + Public method to delete the given network. + + @param name name of the network to delete (string) + """ + if name in self.__networks: + del self.__networks[name] + self.networkChanged() + def networkChanged(self): """ Public method to indicate a change of a network object. """ self.dataChanged.emit() + self.networksChanged.emit() def getNetworkNames(self): """
--- a/Network/IRC/IrcNetworkWidget.py Mon Nov 26 19:50:06 2012 +0100 +++ b/Network/IRC/IrcNetworkWidget.py Tue Nov 27 18:50:02 2012 +0100 @@ -58,6 +58,25 @@ self.__manager = manager self.networkCombo.addItems(self.__manager.getNetworkNames()) + + self.__manager.networksChanged.connect(self.__refreshNetworks) + + @pyqtSlot() + def __refreshNetworks(self): + """ + Private slot to refresh all network related widgets. + """ + currentNetwork = self.networkCombo.currentText() +## currentNick = self.nickCombo.currentText() +## currentChannel = self.channelCombo.currentText() + self.networkCombo.clear() + self.networkCombo.addItems(self.__manager.getNetworkNames()) + row = self.networkCombo.findText(currentNetwork) + if row == -1: + row = 0 + self.networkCombo.setCurrentIndex(row) +## self.nickCombo.setEditText(currentNick) +## self.channelCombo.setEditText(currentChannel) @pyqtSlot() def on_connectButton_clicked(self): @@ -102,6 +121,8 @@ """ network = self.__manager.getNetwork(networkName) self.channelCombo.clear() + self.nickCombo.clear() + self.channelCombo.clear() if network: channels = network.getChannels() self.channelCombo.addItems(channels) @@ -110,8 +131,10 @@ network.getIdentityName()) if identity: self.nickCombo.addItems(identity.getNickNames()) + self.nickCombo.setEnabled(True) else: self.channelCombo.setEnabled(False) + self.nickCombo.setEnabled(False) @pyqtSlot(str) def on_nickCombo_activated(self, nick):
--- a/Network/IRC/IrcWidget.py Mon Nov 26 19:50:06 2012 +0100 +++ b/Network/IRC/IrcWidget.py Tue Nov 27 18:50:02 2012 +0100 @@ -20,6 +20,7 @@ from .IrcNetworkManager import IrcNetworkManager from .IrcChannelWidget import IrcChannelWidget +from .IrcNetworkListDialog import IrcNetworkListDialog import Preferences import UI.PixmapCache @@ -125,14 +126,16 @@ """ if connect: network = self.__ircNetworkManager.getNetwork(name) - self.__server = self.__ircNetworkManager.getServer(network.getServerName()) - self.__userName = network.getIdentityName() - if self.__server: - self.networkWidget.addServerMessage(self.trUtf8("Info"), - self.trUtf8("Looking for server {0} (port {1})...").format( - self.__server.getServer(), self.__server.getPort())) - self.__socket.connectToHost(self.__server.getServer(), - self.__server.getPort()) + if network: + self.__server = self.__ircNetworkManager.getServer( + network.getServerName()) + self.__userName = network.getIdentityName() + if self.__server: + self.networkWidget.addServerMessage(self.trUtf8("Info"), + self.trUtf8("Looking for server {0} (port {1})...").format( + self.__server.getServer(), self.__server.getPort())) + self.__socket.connectToHost(self.__server.getServer(), + self.__server.getPort()) else: ok = E5MessageBox.yesNo(self, self.trUtf8("Disconnect from Server"), @@ -158,6 +161,8 @@ @param name name of the network to edit (string) """ # TODO: implement this + dlg = IrcNetworkListDialog(self.__ircNetworkManager, self) + dlg.exec_() def __joinChannel(self, name): """
--- a/eric5.e4p Mon Nov 26 19:50:06 2012 +0100 +++ b/eric5.e4p Tue Nov 27 18:50:02 2012 +0100 @@ -1062,6 +1062,7 @@ <Source>Network/IRC/IrcWidget.py</Source> <Source>Network/IRC/IrcUtilities.py</Source> <Source>Preferences/ConfigurationPages/IrcPage.py</Source> + <Source>Network/IRC/IrcNetworkListDialog.py</Source> </Sources> <Forms> <Form>PyUnit/UnittestDialog.ui</Form> @@ -1370,6 +1371,7 @@ <Form>Network/IRC/IrcWidget.ui</Form> <Form>Network/IRC/IrcNetworkWidget.ui</Form> <Form>Preferences/ConfigurationPages/IrcPage.ui</Form> + <Form>Network/IRC/IrcNetworkListDialog.ui</Form> </Forms> <Translations> <Translation>i18n/eric5_cs.qm</Translation>