Network/IRC/IrcChannelWidget.py

changeset 2244
654aaddbc2b9
parent 2243
c0323a43d966
child 2245
cbddacb4bc2e
diff -r c0323a43d966 -r 654aaddbc2b9 Network/IRC/IrcChannelWidget.py
--- a/Network/IRC/IrcChannelWidget.py	Sun Dec 02 18:52:03 2012 +0100
+++ b/Network/IRC/IrcChannelWidget.py	Mon Dec 03 10:39:56 2012 +0100
@@ -9,8 +9,8 @@
 
 import re
 
-from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime
-from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter
+from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime, QPoint
+from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu
 
 from E5Gui import E5MessageBox
 from E5Gui.E5Application import e5App
@@ -182,11 +182,15 @@
         
         self.__ui = e5App().getObject("UserInterface")
         
+        self.__initMessagesMenu()
+        
         self.__name = ""
         self.__userName = ""
         self.__partMessage = ""
         self.__prefixToPrivilege = {}
         
+        self.__markerLine = ""
+        
         self.__patterns = [
             # :foo_!n=foo@foohost.bar.net PRIVMSG #eric-ide :some long message
             (re.compile(r":([^!]+).*\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__message),
@@ -228,14 +232,15 @@
         Private slot to send a message to the channel.
         """
         msg = self.messageEdit.text()
-        self.messages.append(
-            '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
-            '<b>&gt;</b> {4}</font>'.format(
-            Preferences.getIrc("ChannelMessageColour"),
-            Preferences.getIrc("OwnNickColour"),
-            ircTimestamp(), self.__userName, Utilities.html_encode(msg)))
-        self.sendData.emit("PRIVMSG " + self.__name + " :" + msg)
-        self.messageEdit.clear()
+        if msg:
+            self.messages.append(
+                '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
+                '<b>&gt;</b> {4}</font>'.format(
+                Preferences.getIrc("ChannelMessageColour"),
+                Preferences.getIrc("OwnNickColour"),
+                ircTimestamp(), self.__userName, Utilities.html_encode(msg)))
+            self.sendData.emit("PRIVMSG " + self.__name + " :" + msg)
+            self.messageEdit.clear()
     
     def requestLeave(self):
         """
@@ -658,3 +663,85 @@
         self.messages.append(
             '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format(
             color, ircTimestamp(), indicator, message))
+    
+    def setMarkerLine(self):
+        """
+        Public method to draw a line to mark the current position.
+        """
+        self.unsetMarkerLine()
+        # TODO: make colors configurable
+        self.__markerLine = \
+            '<span style=" color:#000000; background-color:#ffff00;">{0}</span>'.format(
+            self.trUtf8('--- New From Here ---'))
+        self.messages.append(self.__markerLine)
+    
+    def unsetMarkerLine(self):
+        """
+        Public method to remove the marker line.
+        """
+        if self.__markerLine:
+            txt = self.messages.toHtml()
+            if txt.endswith(self.__markerLine + "</p></body></html>"):
+                # remove empty last paragraph
+                pos = txt.rfind("<p")
+                txt = txt[:pos] + "</body></html>"
+            else:
+                txt = txt.replace(self.__markerLine, "")
+            self.messages.setHtml(txt)
+            self.__markerLine = ""
+    
+    def __initMessagesMenu(self):
+        """
+        Private slot to initialize the context menu of the messages pane.
+        """
+        self.__messagesMenu = QMenu(self)
+##        self.__cutMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("editCut.png"),
+##                self.trUtf8("Cut"), self.__cutMessages)
+##        self.__copyMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("editCopy.png"),
+##                self.trUtf8("Copy"), self.__copyMessages)
+##        self.__messagesMenu.addSeparator()
+##        self.__cutAllMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("editCut.png"),
+##                self.trUtf8("Cut all"), self.__cutAllMessages)
+##        self.__copyAllMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("editCopy.png"),
+##                self.trUtf8("Copy all"), self.__copyAllMessages)
+##        self.__messagesMenu.addSeparator()
+##        self.__clearMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("editDelete.png"),
+##                self.trUtf8("Clear"), self.__clearMessages)
+##        self.__messagesMenu.addSeparator()
+##        self.__saveMessagesAct = \
+##            self.__messagesMenu.addAction(
+##                UI.PixmapCache.getIcon("fileSave.png"),
+##                self.trUtf8("Save"), self.__saveMessages)
+        self.__setMarkerMessagesAct = \
+            self.__messagesMenu.addAction(self.trUtf8("Mark Current Position"),
+                self.setMarkerLine)
+        self.__unsetMarkerMessagesAct = \
+            self.__messagesMenu.addAction(self.trUtf8("Remove Position Marker"),
+                self.unsetMarkerLine)
+    
+    @pyqtSlot(QPoint)
+    def on_messages_customContextMenuRequested(self, pos):
+        """
+        Private slot to show the context menu of the messages pane.
+        """
+        self.__setMarkerMessagesAct.setEnabled(self.__markerLine == "")
+        self.__unsetMarkerMessagesAct.setEnabled(self.__markerLine != "")
+        self.__messagesMenu.popup(self.messages.mapToGlobal(pos))
+    
+    @pyqtSlot(QPoint)
+    def on_usersList_customContextMenuRequested(self, pos):
+        """
+        Private slot to show the context menu of the users list.
+        """
+        # TODO: not implemented yet
+        return

eric ide

mercurial