Continued with the IRC management.

Sat, 01 Dec 2012 11:48:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 01 Dec 2012 11:48:52 +0100
changeset 2238
9977d3081ab6
parent 2237
baddb671c326
child 2239
a47b50e80a20

Continued with the IRC management.

Network/IRC/IrcNetworkEditDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkEditDialog.ui file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkListDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkManager.py file | annotate | diff | comparison | revisions
Network/IRC/IrcServerEditDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcServerEditDialog.ui file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
--- 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>

eric ide

mercurial