Network/IRC/IrcChannelWidget.py

changeset 2271
7dd914b6eb7d
parent 2270
582bd5d24741
child 2280
8e85ca3fabe7
diff -r 582bd5d24741 -r 7dd914b6eb7d Network/IRC/IrcChannelWidget.py
--- a/Network/IRC/IrcChannelWidget.py	Sun Dec 16 14:34:18 2012 +0100
+++ b/Network/IRC/IrcChannelWidget.py	Sun Dec 16 16:12:42 2012 +0100
@@ -10,7 +10,8 @@
 import re
 
 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime, QPoint, QFileInfo, QTimer
-from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu, QApplication
+from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu, QApplication, \
+    QInputDialog, QLineEdit
 
 from E5Gui import E5MessageBox, E5FileDialog
 from E5Gui.E5Application import e5App
@@ -195,6 +196,11 @@
         self.__ui = e5App().getObject("UserInterface")
         self.__ircWidget = parent
         
+        self.editTopicButton.setIcon(UI.PixmapCache.getIcon("ircEditTopic.png"))
+        
+        height = self.usersList.height() + self.messages.height()
+        self.splitter.setSizes([height * 0.3, height * 0.7])
+        
         self.__initMessagesMenu()
         self.__initUsersMenu()
         
@@ -287,14 +293,9 @@
             # :sturgeon.freenode.net 313 foo_ bar :is an IRC Operator
             (re.compile(r":.*\s313\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsOperator),
             # :sturgeon.freenode.net 378 foo_ bar :is connecting from *@mnch-4d044d5a.pool.mediaWays.net 77.4.77.90
-            (re.compile(r":.*\s311\s[^ ]+\s([^ ]+)\s:.*\s([^ ]+)\s([^ ]+)"),
+            (re.compile(r":.*\s378\s[^ ]+\s([^ ]+)\s:.*\s([^ ]+)\s([^ ]+)"),
                 self.__whoIsConnection),
         ]
-        # group(1)   nick
-        # group(2)   host name
-        # group(3)   IP
-        # group(4)   real name
-        # group(5)   
         
         self.__autoWhoTemplate = "WHO {0} %tnf,42"
         self.__autoWhoTimer = QTimer()
@@ -414,6 +415,7 @@
         """
         self.__private = private
         self.__privatePartner = partner
+        self.editTopicButton.setEnabled(private)
     
     def setPrivateInfo(self, infoText):
         """
@@ -1231,11 +1233,17 @@
         Private slot to initialize the users list context menu.
         """
         self.__usersMenu = QMenu(self)
-        self.__usersMenu.addAction(self.trUtf8("Who Is"), self.__whoIs)
+        self.__whoIsAct = \
+            self.__usersMenu.addAction(self.trUtf8("Who Is"),
+            self.__whoIs)
         self.__usersMenu.addSeparator()
         self.__privateChatAct = \
             self.__usersMenu.addAction(self.trUtf8("Private Chat"),
             self.__openPrivateChat)
+        self.__usersMenu.addSeparator()
+        self.__usersListRefreshAct = \
+            self.__usersMenu.addAction(self.trUtf8("Refresh"),
+            self.__sendAutoWhoCommand)
     
     @pyqtSlot(QPoint)
     def on_usersList_customContextMenuRequested(self, pos):
@@ -1244,9 +1252,17 @@
         
         @param pos the position of the mouse pointer (QPoint)
         """
-        self.__privateChatAct.setEnabled(not self.__private)
-        if len(self.usersList.selectedItems()) > 0:
-            self.__usersMenu.popup(self.usersList.mapToGlobal(pos))
+        enable = len(self.usersList.selectedItems()) > 0
+        enablePrivate = enable and not self.__private
+        itm = self.usersList.itemAt(pos)
+        if itm and enablePrivate:
+            enablePrivate = itm.text().lower() not in [
+                "chanserv", self.__userName.lower()]
+        self.__whoIsAct.setEnabled(enable)
+        self.__privateChatAct.setEnabled(enablePrivate)
+        self.__usersListRefreshAct.setEnabled(
+            self.usersList.count() <= Preferences.getIrc("AutoUserInfoMax"))
+        self.__usersMenu.popup(self.usersList.mapToGlobal(pos))
     
     def hideEvent(self, evt):
         """
@@ -1332,7 +1348,7 @@
         # group(4)  nick
         # group(5)  user flags
         # group(6)  real name
-        if match.group(2).lower() == self.__name:
+        if match.group(1).lower() == self.__name:
             away = self.trUtf8(" (Away)") if match.group(5).startswith("G") else ""
             self.__addManagementMessage(self.trUtf8("Who"),
                 self.trUtf8("{0} is {1}@{2} ({3}){4}").format(
@@ -1641,3 +1657,18 @@
             return True
         
         return False
+    
+    @pyqtSlot()
+    def on_editTopicButton_clicked(self):
+        """
+        Private slot to change the topic of the channel.
+        """
+        topic, ok = QInputDialog.getText(
+            self,
+            self.trUtf8("Edit Channel Topic"),
+            self.trUtf8("Enter the topic for this channel:"),
+            QLineEdit.Normal,
+            self.topicLabel.text())
+        if ok and topic != "":
+            self.sendData.emit("TOPIC {0} :{1}".format(
+                self.__name, topic))

eric ide

mercurial