Network/IRC/IrcChannelWidget.py

changeset 2271
7dd914b6eb7d
parent 2270
582bd5d24741
child 2280
8e85ca3fabe7
equal deleted inserted replaced
2270:582bd5d24741 2271:7dd914b6eb7d
8 """ 8 """
9 9
10 import re 10 import re
11 11
12 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime, QPoint, QFileInfo, QTimer 12 from PyQt4.QtCore import pyqtSlot, pyqtSignal, QDateTime, QPoint, QFileInfo, QTimer
13 from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu, QApplication 13 from PyQt4.QtGui import QWidget, QListWidgetItem, QIcon, QPainter, QMenu, QApplication, \
14 QInputDialog, QLineEdit
14 15
15 from E5Gui import E5MessageBox, E5FileDialog 16 from E5Gui import E5MessageBox, E5FileDialog
16 from E5Gui.E5Application import e5App 17 from E5Gui.E5Application import e5App
17 18
18 from .Ui_IrcChannelWidget import Ui_IrcChannelWidget 19 from .Ui_IrcChannelWidget import Ui_IrcChannelWidget
192 super().__init__(parent) 193 super().__init__(parent)
193 self.setupUi(self) 194 self.setupUi(self)
194 195
195 self.__ui = e5App().getObject("UserInterface") 196 self.__ui = e5App().getObject("UserInterface")
196 self.__ircWidget = parent 197 self.__ircWidget = parent
198
199 self.editTopicButton.setIcon(UI.PixmapCache.getIcon("ircEditTopic.png"))
200
201 height = self.usersList.height() + self.messages.height()
202 self.splitter.setSizes([height * 0.3, height * 0.7])
197 203
198 self.__initMessagesMenu() 204 self.__initMessagesMenu()
199 self.__initUsersMenu() 205 self.__initUsersMenu()
200 206
201 self.__name = "" 207 self.__name = ""
285 (re.compile(r":.*\s338\s[^ ]+\s([^ ]+)\s([^ ]+)\s([^ ]+)\s:.*"), 291 (re.compile(r":.*\s338\s[^ ]+\s([^ ]+)\s([^ ]+)\s([^ ]+)\s:.*"),
286 self.__whoIsActually), 292 self.__whoIsActually),
287 # :sturgeon.freenode.net 313 foo_ bar :is an IRC Operator 293 # :sturgeon.freenode.net 313 foo_ bar :is an IRC Operator
288 (re.compile(r":.*\s313\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsOperator), 294 (re.compile(r":.*\s313\s[^ ]+\s([^ ]+)\s:(.*)"), self.__whoIsOperator),
289 # :sturgeon.freenode.net 378 foo_ bar :is connecting from *@mnch-4d044d5a.pool.mediaWays.net 77.4.77.90 295 # :sturgeon.freenode.net 378 foo_ bar :is connecting from *@mnch-4d044d5a.pool.mediaWays.net 77.4.77.90
290 (re.compile(r":.*\s311\s[^ ]+\s([^ ]+)\s:.*\s([^ ]+)\s([^ ]+)"), 296 (re.compile(r":.*\s378\s[^ ]+\s([^ ]+)\s:.*\s([^ ]+)\s([^ ]+)"),
291 self.__whoIsConnection), 297 self.__whoIsConnection),
292 ] 298 ]
293 # group(1) nick
294 # group(2) host name
295 # group(3) IP
296 # group(4) real name
297 # group(5)
298 299
299 self.__autoWhoTemplate = "WHO {0} %tnf,42" 300 self.__autoWhoTemplate = "WHO {0} %tnf,42"
300 self.__autoWhoTimer = QTimer() 301 self.__autoWhoTimer = QTimer()
301 self.__autoWhoTimer.setSingleShot(True) 302 self.__autoWhoTimer.setSingleShot(True)
302 self.__autoWhoTimer.timeout.connect(self.__sendAutoWhoCommand) 303 self.__autoWhoTimer.timeout.connect(self.__sendAutoWhoCommand)
412 @param private flag indicating private chat mode (boolean) 413 @param private flag indicating private chat mode (boolean)
413 @param partner name of the partner user (string) 414 @param partner name of the partner user (string)
414 """ 415 """
415 self.__private = private 416 self.__private = private
416 self.__privatePartner = partner 417 self.__privatePartner = partner
418 self.editTopicButton.setEnabled(private)
417 419
418 def setPrivateInfo(self, infoText): 420 def setPrivateInfo(self, infoText):
419 """ 421 """
420 Public method to set some info text for private chat mode. 422 Public method to set some info text for private chat mode.
421 423
1229 def __initUsersMenu(self): 1231 def __initUsersMenu(self):
1230 """ 1232 """
1231 Private slot to initialize the users list context menu. 1233 Private slot to initialize the users list context menu.
1232 """ 1234 """
1233 self.__usersMenu = QMenu(self) 1235 self.__usersMenu = QMenu(self)
1234 self.__usersMenu.addAction(self.trUtf8("Who Is"), self.__whoIs) 1236 self.__whoIsAct = \
1237 self.__usersMenu.addAction(self.trUtf8("Who Is"),
1238 self.__whoIs)
1235 self.__usersMenu.addSeparator() 1239 self.__usersMenu.addSeparator()
1236 self.__privateChatAct = \ 1240 self.__privateChatAct = \
1237 self.__usersMenu.addAction(self.trUtf8("Private Chat"), 1241 self.__usersMenu.addAction(self.trUtf8("Private Chat"),
1238 self.__openPrivateChat) 1242 self.__openPrivateChat)
1243 self.__usersMenu.addSeparator()
1244 self.__usersListRefreshAct = \
1245 self.__usersMenu.addAction(self.trUtf8("Refresh"),
1246 self.__sendAutoWhoCommand)
1239 1247
1240 @pyqtSlot(QPoint) 1248 @pyqtSlot(QPoint)
1241 def on_usersList_customContextMenuRequested(self, pos): 1249 def on_usersList_customContextMenuRequested(self, pos):
1242 """ 1250 """
1243 Private slot to show the context menu of the users list. 1251 Private slot to show the context menu of the users list.
1244 1252
1245 @param pos the position of the mouse pointer (QPoint) 1253 @param pos the position of the mouse pointer (QPoint)
1246 """ 1254 """
1247 self.__privateChatAct.setEnabled(not self.__private) 1255 enable = len(self.usersList.selectedItems()) > 0
1248 if len(self.usersList.selectedItems()) > 0: 1256 enablePrivate = enable and not self.__private
1249 self.__usersMenu.popup(self.usersList.mapToGlobal(pos)) 1257 itm = self.usersList.itemAt(pos)
1258 if itm and enablePrivate:
1259 enablePrivate = itm.text().lower() not in [
1260 "chanserv", self.__userName.lower()]
1261 self.__whoIsAct.setEnabled(enable)
1262 self.__privateChatAct.setEnabled(enablePrivate)
1263 self.__usersListRefreshAct.setEnabled(
1264 self.usersList.count() <= Preferences.getIrc("AutoUserInfoMax"))
1265 self.__usersMenu.popup(self.usersList.mapToGlobal(pos))
1250 1266
1251 def hideEvent(self, evt): 1267 def hideEvent(self, evt):
1252 """ 1268 """
1253 Protected method handling hide events. 1269 Protected method handling hide events.
1254 1270
1330 # group(2) user 1346 # group(2) user
1331 # group(3) host 1347 # group(3) host
1332 # group(4) nick 1348 # group(4) nick
1333 # group(5) user flags 1349 # group(5) user flags
1334 # group(6) real name 1350 # group(6) real name
1335 if match.group(2).lower() == self.__name: 1351 if match.group(1).lower() == self.__name:
1336 away = self.trUtf8(" (Away)") if match.group(5).startswith("G") else "" 1352 away = self.trUtf8(" (Away)") if match.group(5).startswith("G") else ""
1337 self.__addManagementMessage(self.trUtf8("Who"), 1353 self.__addManagementMessage(self.trUtf8("Who"),
1338 self.trUtf8("{0} is {1}@{2} ({3}){4}").format( 1354 self.trUtf8("{0} is {1}@{2} ({3}){4}").format(
1339 match.group(4), match.group(2), match.group(3), match.group(6), away)) 1355 match.group(4), match.group(2), match.group(3), match.group(6), away))
1340 return True 1356 return True
1639 self.trUtf8("{0} is connecting from {1} (IP: {2}).").format( 1655 self.trUtf8("{0} is connecting from {1} (IP: {2}).").format(
1640 match.group(1), match.group(2), match.group(3))) 1656 match.group(1), match.group(2), match.group(3)))
1641 return True 1657 return True
1642 1658
1643 return False 1659 return False
1660
1661 @pyqtSlot()
1662 def on_editTopicButton_clicked(self):
1663 """
1664 Private slot to change the topic of the channel.
1665 """
1666 topic, ok = QInputDialog.getText(
1667 self,
1668 self.trUtf8("Edit Channel Topic"),
1669 self.trUtf8("Enter the topic for this channel:"),
1670 QLineEdit.Normal,
1671 self.topicLabel.text())
1672 if ok and topic != "":
1673 self.sendData.emit("TOPIC {0} :{1}".format(
1674 self.__name, topic))

eric ide

mercurial