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><</b><font color="{1}">{3}</font>' - '<b>></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><</b><font color="{1}">{3}</font>' + '<b>></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