Network/IRC/IrcChannelWidget.py

changeset 2244
654aaddbc2b9
parent 2243
c0323a43d966
child 2245
cbddacb4bc2e
equal deleted inserted replaced
2243:c0323a43d966 2244:654aaddbc2b9
7 Module implementing the IRC channel widget. 7 Module implementing the IRC channel widget.
8 """ 8 """
9 9
10 import re 10 import re
11 11
12 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime 12 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime, QPoint
13 from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter 13 from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu
14 14
15 from E5Gui import E5MessageBox 15 from E5Gui import E5MessageBox
16 from E5Gui.E5Application import e5App 16 from E5Gui.E5Application import e5App
17 17
18 from .Ui_IrcChannelWidget import Ui_IrcChannelWidget 18 from .Ui_IrcChannelWidget import Ui_IrcChannelWidget
180 super().__init__(parent) 180 super().__init__(parent)
181 self.setupUi(self) 181 self.setupUi(self)
182 182
183 self.__ui = e5App().getObject("UserInterface") 183 self.__ui = e5App().getObject("UserInterface")
184 184
185 self.__initMessagesMenu()
186
185 self.__name = "" 187 self.__name = ""
186 self.__userName = "" 188 self.__userName = ""
187 self.__partMessage = "" 189 self.__partMessage = ""
188 self.__prefixToPrivilege = {} 190 self.__prefixToPrivilege = {}
191
192 self.__markerLine = ""
189 193
190 self.__patterns = [ 194 self.__patterns = [
191 # :foo_!n=foo@foohost.bar.net PRIVMSG #eric-ide :some long message 195 # :foo_!n=foo@foohost.bar.net PRIVMSG #eric-ide :some long message
192 (re.compile(r":([^!]+).*\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__message), 196 (re.compile(r":([^!]+).*\sPRIVMSG\s([^ ]+)\s:(.*)"), self.__message),
193 # :foo_!n=foo@foohost.bar.net JOIN :#eric-ide 197 # :foo_!n=foo@foohost.bar.net JOIN :#eric-ide
226 def on_messageEdit_returnPressed(self): 230 def on_messageEdit_returnPressed(self):
227 """ 231 """
228 Private slot to send a message to the channel. 232 Private slot to send a message to the channel.
229 """ 233 """
230 msg = self.messageEdit.text() 234 msg = self.messageEdit.text()
231 self.messages.append( 235 if msg:
232 '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>' 236 self.messages.append(
233 '<b>&gt;</b> {4}</font>'.format( 237 '<font color="{0}">{2} <b>&lt;</b><font color="{1}">{3}</font>'
234 Preferences.getIrc("ChannelMessageColour"), 238 '<b>&gt;</b> {4}</font>'.format(
235 Preferences.getIrc("OwnNickColour"), 239 Preferences.getIrc("ChannelMessageColour"),
236 ircTimestamp(), self.__userName, Utilities.html_encode(msg))) 240 Preferences.getIrc("OwnNickColour"),
237 self.sendData.emit("PRIVMSG " + self.__name + " :" + msg) 241 ircTimestamp(), self.__userName, Utilities.html_encode(msg)))
238 self.messageEdit.clear() 242 self.sendData.emit("PRIVMSG " + self.__name + " :" + msg)
243 self.messageEdit.clear()
239 244
240 def requestLeave(self): 245 def requestLeave(self):
241 """ 246 """
242 Public method to leave the channel. 247 Public method to leave the channel.
243 """ 248 """
656 else: 661 else:
657 color = Preferences.getIrc("ChannelInfoColour") 662 color = Preferences.getIrc("ChannelInfoColour")
658 self.messages.append( 663 self.messages.append(
659 '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format( 664 '<font color="{0}">{1} <b>[</b>{2}<b>]</b> {3}</font>'.format(
660 color, ircTimestamp(), indicator, message)) 665 color, ircTimestamp(), indicator, message))
666
667 def setMarkerLine(self):
668 """
669 Public method to draw a line to mark the current position.
670 """
671 self.unsetMarkerLine()
672 # TODO: make colors configurable
673 self.__markerLine = \
674 '<span style=" color:#000000; background-color:#ffff00;">{0}</span>'.format(
675 self.trUtf8('--- New From Here ---'))
676 self.messages.append(self.__markerLine)
677
678 def unsetMarkerLine(self):
679 """
680 Public method to remove the marker line.
681 """
682 if self.__markerLine:
683 txt = self.messages.toHtml()
684 if txt.endswith(self.__markerLine + "</p></body></html>"):
685 # remove empty last paragraph
686 pos = txt.rfind("<p")
687 txt = txt[:pos] + "</body></html>"
688 else:
689 txt = txt.replace(self.__markerLine, "")
690 self.messages.setHtml(txt)
691 self.__markerLine = ""
692
693 def __initMessagesMenu(self):
694 """
695 Private slot to initialize the context menu of the messages pane.
696 """
697 self.__messagesMenu = QMenu(self)
698 ## self.__cutMessagesAct = \
699 ## self.__messagesMenu.addAction(
700 ## UI.PixmapCache.getIcon("editCut.png"),
701 ## self.trUtf8("Cut"), self.__cutMessages)
702 ## self.__copyMessagesAct = \
703 ## self.__messagesMenu.addAction(
704 ## UI.PixmapCache.getIcon("editCopy.png"),
705 ## self.trUtf8("Copy"), self.__copyMessages)
706 ## self.__messagesMenu.addSeparator()
707 ## self.__cutAllMessagesAct = \
708 ## self.__messagesMenu.addAction(
709 ## UI.PixmapCache.getIcon("editCut.png"),
710 ## self.trUtf8("Cut all"), self.__cutAllMessages)
711 ## self.__copyAllMessagesAct = \
712 ## self.__messagesMenu.addAction(
713 ## UI.PixmapCache.getIcon("editCopy.png"),
714 ## self.trUtf8("Copy all"), self.__copyAllMessages)
715 ## self.__messagesMenu.addSeparator()
716 ## self.__clearMessagesAct = \
717 ## self.__messagesMenu.addAction(
718 ## UI.PixmapCache.getIcon("editDelete.png"),
719 ## self.trUtf8("Clear"), self.__clearMessages)
720 ## self.__messagesMenu.addSeparator()
721 ## self.__saveMessagesAct = \
722 ## self.__messagesMenu.addAction(
723 ## UI.PixmapCache.getIcon("fileSave.png"),
724 ## self.trUtf8("Save"), self.__saveMessages)
725 self.__setMarkerMessagesAct = \
726 self.__messagesMenu.addAction(self.trUtf8("Mark Current Position"),
727 self.setMarkerLine)
728 self.__unsetMarkerMessagesAct = \
729 self.__messagesMenu.addAction(self.trUtf8("Remove Position Marker"),
730 self.unsetMarkerLine)
731
732 @pyqtSlot(QPoint)
733 def on_messages_customContextMenuRequested(self, pos):
734 """
735 Private slot to show the context menu of the messages pane.
736 """
737 self.__setMarkerMessagesAct.setEnabled(self.__markerLine == "")
738 self.__unsetMarkerMessagesAct.setEnabled(self.__markerLine != "")
739 self.__messagesMenu.popup(self.messages.mapToGlobal(pos))
740
741 @pyqtSlot(QPoint)
742 def on_usersList_customContextMenuRequested(self, pos):
743 """
744 Private slot to show the context menu of the users list.
745 """
746 # TODO: not implemented yet
747 return

eric ide

mercurial