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)) |