Continued with the IRC management.

Fri, 30 Nov 2012 20:14:50 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 30 Nov 2012 20:14:50 +0100
changeset 2237
baddb671c326
parent 2236
e30d5f978919
child 2238
9977d3081ab6

Continued with the IRC management.

Network/IRC/IrcNetworkEditDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkListDialog.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkListDialog.ui file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkManager.py file | annotate | diff | comparison | revisions
Network/IRC/IrcNetworkWidget.py file | annotate | diff | comparison | revisions
Network/IRC/IrcWidget.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
eric5.py file | annotate | diff | comparison | revisions
--- a/Network/IRC/IrcNetworkEditDialog.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcNetworkEditDialog.py	Fri Nov 30 20:14:50 2012 +0100
@@ -67,7 +67,7 @@
         self.identityCombo.setCurrentIndex(index)
         
         # servers
-        self.serverEdit.setText(self.__network.getServerNames()[0])
+        self.serverEdit.setText(self.__network.getServerName())
         
         # channels
         for channelName in sorted(self.__network.getChannelNames()):
--- a/Network/IRC/IrcNetworkListDialog.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcNetworkListDialog.py	Fri Nov 30 20:14:50 2012 +0100
@@ -38,10 +38,13 @@
         for networkName in networkNames:
             topitm = QTreeWidgetItem(self.networksList, [networkName])
             network = self.__manager.getNetwork(networkName)
-            server = network.getServer(network.getServerNames()[0])
+            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,
@@ -49,6 +52,8 @@
                  server.getName(), server.getPort())])
             QTreeWidgetItem(topitm,
                 [self.trUtf8("Channels"), ", ".join(network.getChannelNames())])
+            QTreeWidgetItem(topitm,
+                [self.trUtf8("Auto-Connect"), autoConnect])
             topitm.setExpanded(True)
         self.__resizeColumns()
         
@@ -75,6 +80,12 @@
         
         self.editButton.setEnabled(enable)
         self.deleteButton.setEnabled(enable)
+        self.autoConnectButton.setEnabled(enable)
+        
+        if enable:
+            itm = self.networksList.selectedItems()[0]
+            check = self.__manager.getNetwork(itm.text(0)).autoConnect()
+            self.autoConnectButton.setChecked(check)
     
     @pyqtSlot()
     def on_networksList_itemSelectionChanged(self):
@@ -135,3 +146,53 @@
         Private slot handling the collapse of a top level item.
         """
         self.__resizeColumns()
+    
+    @pyqtSlot(bool)
+    def on_autoConnectButton_clicked(self, checked):
+        """
+        Private slot handling the auto-connect selection.
+        
+        @param checked flag indicating the state of the button (boolean)
+        """
+        itm = self.networksList.selectedItems()[0]
+        if itm.parent() is None:
+            networkName = itm.text(0)
+            if checked:
+                # enable the selected network, disable all others
+                # step 1: update network objects
+                for name in self.__manager.getNetworkNames():
+                    network = self.__manager.getNetwork(networkName)
+                    if name == networkName:
+                        network.setAutoConnect(True)
+                    else:
+                        network.setAutoConnect(False)
+                    self.__manager.networkChanged()
+                
+                # step 2: update list entries
+                for index in range(self.networksList.topLevelItemCount()):
+                    titm = self.networksList.topLevelItem(index)
+                    if titm.text(0) == networkName:
+                        self.__setAutoConnectEntry(titm, True)
+                    else:
+                        self.__setAutoConnectEntry(titm, False)
+            else:
+                # step 1: update network object
+                network = self.__manager.getNetwork(networkName)
+                network.setAutoConnect(False)
+                self.__manager.networkChanged()
+                
+                # step 2: update list entry
+                self.__setAutoConnectEntry(itm, False)
+    
+    def __setAutoConnectEntry(self, itm, on):
+        """
+        Private method to set the auto-connect entry of a network item.
+        
+        @param itm reference to the network item (QTreeWidgetItem)
+        @param on flag indicating the auto-connect state (boolean)
+        """
+        autoConnect = self.trUtf8("Yes") if on else self.trUtf8("No")
+        for index in range(itm.childCount()):
+            citm = itm.child(index)
+            if citm.text(0) == self.trUtf8("Auto-Connect"):
+                citm.setText(1, autoConnect)
--- a/Network/IRC/IrcNetworkListDialog.ui	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcNetworkListDialog.ui	Fri Nov 30 20:14:50 2012 +0100
@@ -76,6 +76,19 @@
       </widget>
      </item>
      <item>
+      <widget class="QPushButton" name="autoConnectButton">
+       <property name="toolTip">
+        <string>Press to  toggle the auto-connect flag of the selected network</string>
+       </property>
+       <property name="text">
+        <string>Auto-Connect</string>
+       </property>
+       <property name="checkable">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item>
       <spacer name="verticalSpacer">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
@@ -107,6 +120,7 @@
   <tabstop>newButton</tabstop>
   <tabstop>editButton</tabstop>
   <tabstop>deleteButton</tabstop>
+  <tabstop>autoConnectButton</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
--- a/Network/IRC/IrcNetworkManager.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcNetworkManager.py	Fri Nov 30 20:14:50 2012 +0100
@@ -55,7 +55,7 @@
         @param settings reference to the settings object (QSettings)
         """
         self.__realName = settings.value("RealName", "")
-        self.__nickNames = Preferences.toList(settings.value("NickNames"), [])
+        self.__nickNames = Preferences.toList(settings.value("NickNames", []))
         self.__serviceName = settings.value("ServiceName", "")
         self.__password = settings.value("Password", "")
     
@@ -184,7 +184,7 @@
         
         @param settings reference to the settings object (QSettings)
         """
-        # no need to save the server name because that is the group key
+        settings.setValue("Name", self.__server)
         settings.setValue("Port", self.__port)
         settings.setValue("SSL", self.__ssl)
         settings.setValue("Password", self.__password)
@@ -195,6 +195,7 @@
         
         @param settings reference to the settings object (QSettings)
         """
+        self.__server = settings.value("Name", "")
         self.__port = int(settings.value("Port", IrcServer.DefaultPort))
         self.__ssl = Preferences.toBool(settings.value("SSL", False))
         self.__password = settings.value("Password", "")
@@ -207,6 +208,14 @@
         """
         return self.__server
     
+    def setName(self, name):
+        """
+        Public method to set the server name.
+        
+        @param name server name (string)
+        """
+        self.__server = name
+    
     def getPort(self):
         """
         Public method to get the server port number.
@@ -289,7 +298,7 @@
         @param settings reference to the settings object (QSettings)
         """
         self.__key = settings.value("Key", "")
-        self.__autoJoin = Preferences.toBool(settings.value("AutoJoin"), False)
+        self.__autoJoin = Preferences.toBool(settings.value("AutoJoin", False))
     
     def getName(self):
         """
@@ -348,8 +357,9 @@
         
         self.__name = name
         self.__identity = ""
-        self.__servers = {}
+        self.__server = None
         self.__channels = {}
+        self.__autoConnect = False
     
     def save(self, settings):
         """
@@ -359,12 +369,10 @@
         """
         # no need to save the network name because that is the group key
         settings.setValue("Identity", self.__identity)
+        settings.setValue("AutoConnect", self.__autoConnect)
         
-        settings.beginGroup("Servers")
-        for key in self.__servers:
-            settings.beginGroup(key)
-            self.__servers[key].save(settings)
-            settings.endGroup()
+        settings.beginGroup("Server")
+        self.__server.save(settings)
         settings.endGroup()
         
         settings.beginGroup("Channels")
@@ -381,17 +389,15 @@
         @param settings reference to the settings object (QSettings)
         """
         self.__identity = settings.value("Identity", "")
+        self.__autoConnect = Preferences.toBool(settings.value("AutoConnect", False))
         
-        settings.beginGroup("Servers")
-        for key in settings.childKeys():
-            self.__servers[key] = IrcServer(key)
-            settings.beginGroup(key)
-            self.__servers[key].load(settings)
-            settings.endGroup()
+        settings.beginGroup("Server")
+        self.__server = IrcServer("")
+        self.__server.load(settings)
         settings.endGroup()
         
         settings.beginGroup("Channels")
-        for key in self.__channels:
+        for key in settings.childGroups():
             self.__channels[key] = IrcChannel(key)
             settings.beginGroup(key)
             self.__channels[key].load(settings)
@@ -422,63 +428,32 @@
         """
         return self.__identity
     
-    def setServers(self, servers):
-        """
-        Public method to set the list of servers.
-        
-        @param servers list of servers for the network (list of IrcServer)
+    def getServerName(self):
         """
-        self.__servers = {}
-        for server in servers:
-            self.__servers[server.getName()] = server
-    
-    def getServers(self):
-        """
-        Public method to get the servers.
+        Public method to get the server name.
         
-        @return list of servers for the network (list of IrcServer)
+        @return server name (string)
         """
-        return list(self.__servers.values())
+        if self.__server:
+            return self.__server.getName()
+        else:
+            return ""
     
-    def getServerNames(self):
-        """
-        Public method to get a list of all known server names.
-        
-        @return list of server names (list of string)
+    def getServer(self):
         """
-        return list(sorted(self.__servers.keys()))
-    
-    def getServer(self, name):
-        """
-        Public method to get a server object.
+        Public method to get the server object.
         
-        @param name name of the server to get (string)
         @return reference to the server (IrcServer)
         """
-        if name in self.__servers:
-            return self.__servers[name]
-        else:
-            return None
+        return self.__server
     
     def setServer(self, server):
         """
-        Public method to set a server.
+        Public method to set the server.
         
         @param server server object to set (IrcServer)
         """
-        serverName = server.getName()
-        if serverName in self.__servers:
-            self.__servers[serverName] = server
-    
-    def addServer(self, server):
-        """
-        Public method to add a server.
-        
-        @param server server object to add (IrcServer)
-        """
-        serverName = server.getName()
-        if serverName not in self.__servers:
-            self.__servers[serverName] = server
+        self.__server = server
     
     def setChannels(self, channels):
         """
@@ -547,6 +522,22 @@
         if channelName in self.__channels:
             del self.__channels[channelName]
     
+    def setAutoConnect(self, enable):
+        """
+        Public method to set the auto connect flag.
+        
+        @param enable flag indicate to connect to the network at start-up.
+        """
+        self.__autoConnect = enable
+    
+    def autoConnect(self):
+        """
+        Public method to check, if the network should be connected to at start-up.
+        
+        @return flag indicating an auto connect (boolean)
+        """
+        return self.__autoConnect
+    
     @classmethod
     def createDefaultNetwork(cls):
         """
@@ -563,13 +554,16 @@
         serverName = "chat.freenode.net"
         server = IrcServer(serverName)
         server.setPort(8001)
-        network.addServer(server)
+        network.setServer(server)
         
         # channel
         channel = IrcChannel("#eric-ide")
         channel.setAutoJoin(False)
         network.addChannel(channel)
         
+        # auto connect
+        network.setAutoConnect(False)
+        
         return network
 
 
@@ -647,7 +641,7 @@
         
         # identities
         self.__settings.beginGroup("Identities")
-        for key in self.__settings.childKeys():
+        for key in self.__settings.childGroups():
             self.__identities[key] = IrcIdentity(key)
             self.__settings.beginGroup(key)
             self.__identities[key].load(self.__settings)
@@ -656,7 +650,7 @@
         
         # networks
         self.__settings.beginGroup("Networks")
-        for key in self.__settings.childKeys():
+        for key in self.__settings.childGroups():
             self.__networks[key] = IrcNetwork(key)
             self.__settings.beginGroup(key)
             self.__networks[key].load(self.__settings)
@@ -666,7 +660,6 @@
         self.__settings.endGroup()
         
         if not self.__identities or \
-           not self.__servers or \
            not self.__networks:
             # data structures got corrupted; load defaults
             self.__loadDefaults()
@@ -686,7 +679,6 @@
         if not identityOnly:
             self.__networks = {}
             self.__identities = {}
-            self.__servers = {}
         
         # identity
         identity = IrcIdentity.createDefaultIdentity()
--- a/Network/IRC/IrcNetworkWidget.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcNetworkWidget.py	Fri Nov 30 20:14:50 2012 +0100
@@ -62,22 +62,33 @@
         
         self.__manager.networksChanged.connect(self.__refreshNetworks)
     
+    def autoConnect(self):
+        """
+        Public method to perform the IRC auto connection.
+        """
+        for networkName in self.__manager.getNetworkNames():
+            if self.__manager.getNetwork(networkName).autoConnect():
+                row = self.networkCombo.findText(networkName)
+                self.networkCombo.setCurrentIndex(row)
+                self.on_connectButton_clicked()
+                break
+    
     @pyqtSlot()
     def __refreshNetworks(self):
         """
         Private slot to refresh all network related widgets.
         """
         currentNetwork = self.networkCombo.currentText()
-##        currentNick = self.nickCombo.currentText()
-##        currentChannel = self.channelCombo.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)
+        self.nickCombo.setEditText(currentNick)
+        self.channelCombo.setEditText(currentChannel)
     
     @pyqtSlot()
     def on_connectButton_clicked(self):
--- a/Network/IRC/IrcWidget.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/Network/IRC/IrcWidget.py	Fri Nov 30 20:14:50 2012 +0100
@@ -118,6 +118,12 @@
             self.__ircNetworkManager.close()
         return ok
     
+    def autoConnect(self):
+        """
+        Public method to initiate the IRC auto connection.
+        """
+        self.networkWidget.autoConnect()
+
     def __connectNetwork(self, name, connect):
         """
         Private slot to connect to or disconnect from the given network.
@@ -128,7 +134,7 @@
         if connect:
             network = self.__ircNetworkManager.getNetwork(name)
             if network:
-                self.__server = network.getServer(network.getServerNames()[0])
+                self.__server = network.getServer()
                 self.__identityName = network.getIdentityName()
                 identity = self.__ircNetworkManager.getIdentity(self.__identityName)
                 self.__userName = identity.getIdent()
--- a/UI/UserInterface.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/UI/UserInterface.py	Fri Nov 30 20:14:50 2012 +0100
@@ -5595,3 +5595,13 @@
         @return flag indicating, if notifications are enabled (boolean)
         """
         return Preferences.getUI("NotificationsEnabled")
+    
+    #########################
+    ## Support for IRC  below
+    #########################
+    
+    def autoConnectIrc(self):
+        """
+        Public method to initiate the IRC auto connection.
+        """
+        self.irc.autoConnect()
--- a/eric5.py	Thu Nov 29 20:02:43 2012 +0100
+++ b/eric5.py	Fri Nov 30 20:14:50 2012 +0100
@@ -143,6 +143,7 @@
     mainWindow.performVersionCheck(False)
     mainWindow.checkProjectsWorkspace()
     mainWindow.checkConfigurationStatus()
+    mainWindow.autoConnectIrc()
 
 
 def main():

eric ide

mercurial