Cooperation/ChatWidget.py

branch
Py2 comp.
changeset 3484
645c12de6b0c
parent 3178
f25fc1364c88
parent 3190
a9a94491c4fd
child 3656
441956d8fce5
equal deleted inserted replaced
3456:96232974dcdb 3484:645c12de6b0c
81 self.__client.participantLeft.connect(self.__participantLeft) 81 self.__client.participantLeft.connect(self.__participantLeft)
82 self.__client.connectionError.connect(self.__showErrorMessage) 82 self.__client.connectionError.connect(self.__showErrorMessage)
83 self.__client.cannotConnect.connect(self.__initialConnectionRefused) 83 self.__client.cannotConnect.connect(self.__initialConnectionRefused)
84 self.__client.editorCommand.connect(self.__editorCommandMessage) 84 self.__client.editorCommand.connect(self.__editorCommandMessage)
85 85
86 self.serverButton.setText(self.trUtf8("Start Server")) 86 self.serverButton.setText(self.tr("Start Server"))
87 self.serverLed.setColor(QColor(Qt.red)) 87 self.serverLed.setColor(QColor(Qt.red))
88 if port == -1: 88 if port == -1:
89 port = Preferences.getCooperation("ServerPort") 89 port = Preferences.getCooperation("ServerPort")
90 90
91 self.serverPortSpin.setValue(port) 91 self.serverPortSpin.setValue(port)
148 if text == "": 148 if text == "":
149 return 149 return
150 150
151 if text.startswith("/"): 151 if text.startswith("/"):
152 self.__showErrorMessage( 152 self.__showErrorMessage(
153 self.trUtf8("! Unknown command: {0}\n") 153 self.tr("! Unknown command: {0}\n")
154 .format(text.split()[0])) 154 .format(text.split()[0]))
155 else: 155 else:
156 self.__client.sendMessage(text) 156 self.__client.sendMessage(text)
157 self.appendMessage(self.__myNickName, text) 157 self.appendMessage(self.__myNickName, text)
158 158
170 color = self.chatEdit.textColor() 170 color = self.chatEdit.textColor()
171 self.chatEdit.setTextColor(Qt.gray) 171 self.chatEdit.setTextColor(Qt.gray)
172 self.chatEdit.append( 172 self.chatEdit.append(
173 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + 173 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) +
174 ":") 174 ":")
175 self.chatEdit.append(self.trUtf8("* {0} has joined.\n").format(nick)) 175 self.chatEdit.append(self.tr("* {0} has joined.\n").format(nick))
176 self.chatEdit.setTextColor(color) 176 self.chatEdit.setTextColor(color)
177 177
178 QListWidgetItem( 178 QListWidgetItem(
179 UI.PixmapCache.getIcon( 179 UI.PixmapCache.getIcon(
180 "chatUser{0}.png".format(1 + self.usersList.count() % 6)), 180 "chatUser{0}.png".format(1 + self.usersList.count() % 6)),
184 self.__setConnected(True) 184 self.__setConnected(True)
185 185
186 if not self.isVisible(): 186 if not self.isVisible():
187 self.__ui.showNotification( 187 self.__ui.showNotification(
188 UI.PixmapCache.getPixmap("cooperation48.png"), 188 UI.PixmapCache.getPixmap("cooperation48.png"),
189 self.trUtf8("New User"), self.trUtf8("{0} has joined.") 189 self.tr("New User"), self.tr("{0} has joined.")
190 .format(nick)) 190 .format(nick))
191 191
192 def __participantLeft(self, nick): 192 def __participantLeft(self, nick):
193 """ 193 """
194 Private slot handling a participant leaving the session. 194 Private slot handling a participant leaving the session.
206 color = self.chatEdit.textColor() 206 color = self.chatEdit.textColor()
207 self.chatEdit.setTextColor(Qt.gray) 207 self.chatEdit.setTextColor(Qt.gray)
208 self.chatEdit.append( 208 self.chatEdit.append(
209 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + 209 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) +
210 ":") 210 ":")
211 self.chatEdit.append(self.trUtf8("* {0} has left.\n").format(nick)) 211 self.chatEdit.append(self.tr("* {0} has left.\n").format(nick))
212 self.chatEdit.setTextColor(color) 212 self.chatEdit.setTextColor(color)
213 213
214 if not self.__client.hasConnections(): 214 if not self.__client.hasConnections():
215 self.__setConnected(False) 215 self.__setConnected(False)
216 216
217 if not self.isVisible(): 217 if not self.isVisible():
218 self.__ui.showNotification( 218 self.__ui.showNotification(
219 UI.PixmapCache.getPixmap("cooperation48.png"), 219 UI.PixmapCache.getPixmap("cooperation48.png"),
220 self.trUtf8("User Left"), self.trUtf8("{0} has left.") 220 self.tr("User Left"), self.tr("{0} has left.")
221 .format(nick)) 221 .format(nick))
222 222
223 def appendMessage(self, from_, message): 223 def appendMessage(self, from_, message):
224 """ 224 """
225 Public slot to append a message to the display. 225 Public slot to append a message to the display.
238 bar.setValue(bar.maximum()) 238 bar.setValue(bar.maximum())
239 239
240 if not self.isVisible(): 240 if not self.isVisible():
241 self.__ui.showNotification( 241 self.__ui.showNotification(
242 UI.PixmapCache.getPixmap("cooperation48.png"), 242 UI.PixmapCache.getPixmap("cooperation48.png"),
243 self.trUtf8("Message from <{0}>").format(from_), message) 243 self.tr("Message from <{0}>").format(from_), message)
244 244
245 @pyqtSlot(str) 245 @pyqtSlot(str)
246 def on_hostEdit_editTextChanged(self, host): 246 def on_hostEdit_editTextChanged(self, host):
247 """ 247 """
248 Private slot handling the entry of a host to connect to. 248 Private slot handling the entry of a host to connect to.
301 """ 301 """
302 Private slot to start the server. 302 Private slot to start the server.
303 """ 303 """
304 if self.__client.isListening(): 304 if self.__client.isListening():
305 self.__client.close() 305 self.__client.close()
306 self.serverButton.setText(self.trUtf8("Start Server")) 306 self.serverButton.setText(self.tr("Start Server"))
307 self.serverPortSpin.setEnabled(True) 307 self.serverPortSpin.setEnabled(True)
308 if (self.serverPortSpin.value() != 308 if (self.serverPortSpin.value() !=
309 Preferences.getCooperation("ServerPort")): 309 Preferences.getCooperation("ServerPort")):
310 self.serverPortSpin.setValue( 310 self.serverPortSpin.setValue(
311 Preferences.getCooperation("ServerPort")) 311 Preferences.getCooperation("ServerPort"))
312 self.serverLed.setColor(QColor(Qt.red)) 312 self.serverLed.setColor(QColor(Qt.red))
313 else: 313 else:
314 res, port = self.__client.startListening( 314 res, port = self.__client.startListening(
315 self.serverPortSpin.value()) 315 self.serverPortSpin.value())
316 if res: 316 if res:
317 self.serverButton.setText(self.trUtf8("Stop Server")) 317 self.serverButton.setText(self.tr("Stop Server"))
318 self.serverPortSpin.setValue(port) 318 self.serverPortSpin.setValue(port)
319 self.serverPortSpin.setEnabled(False) 319 self.serverPortSpin.setEnabled(False)
320 self.serverLed.setColor(QColor(Qt.green)) 320 self.serverLed.setColor(QColor(Qt.green))
321 else: 321 else:
322 self.__showErrorMessage( 322 self.__showErrorMessage(
323 self.trUtf8("! Server Error: {0}\n").format( 323 self.tr("! Server Error: {0}\n").format(
324 self.__client.errorString()) 324 self.__client.errorString())
325 ) 325 )
326 326
327 def __setConnected(self, connected): 327 def __setConnected(self, connected):
328 """ 328 """
329 Private slot to set the connected state. 329 Private slot to set the connected state.
330 330
331 @param connected new connected state (boolean) 331 @param connected new connected state (boolean)
332 """ 332 """
333 if connected: 333 if connected:
334 self.connectButton.setText(self.trUtf8("Disconnect")) 334 self.connectButton.setText(self.tr("Disconnect"))
335 self.connectButton.setEnabled(True) 335 self.connectButton.setEnabled(True)
336 self.connectionLed.setColor(QColor(Qt.green)) 336 self.connectionLed.setColor(QColor(Qt.green))
337 else: 337 else:
338 self.connectButton.setText(self.trUtf8("Connect")) 338 self.connectButton.setText(self.tr("Connect"))
339 self.connectButton.setEnabled(self.hostEdit.currentText() != "") 339 self.connectButton.setEnabled(self.hostEdit.currentText() != "")
340 self.connectionLed.setColor(QColor(Qt.red)) 340 self.connectionLed.setColor(QColor(Qt.red))
341 self.on_cancelEditButton_clicked() 341 self.on_cancelEditButton_clicked()
342 self.shareButton.setChecked(False) 342 self.shareButton.setChecked(False)
343 self.on_shareButton_clicked(False) 343 self.on_shareButton_clicked(False)
495 """ 495 """
496 self.__chatMenu = QMenu(self) 496 self.__chatMenu = QMenu(self)
497 self.__copyChatAct = \ 497 self.__copyChatAct = \
498 self.__chatMenu.addAction( 498 self.__chatMenu.addAction(
499 UI.PixmapCache.getIcon("editCopy.png"), 499 UI.PixmapCache.getIcon("editCopy.png"),
500 self.trUtf8("Copy"), self.__copyChat) 500 self.tr("Copy"), self.__copyChat)
501 self.__chatMenu.addSeparator() 501 self.__chatMenu.addSeparator()
502 self.__cutAllChatAct = \ 502 self.__cutAllChatAct = \
503 self.__chatMenu.addAction( 503 self.__chatMenu.addAction(
504 UI.PixmapCache.getIcon("editCut.png"), 504 UI.PixmapCache.getIcon("editCut.png"),
505 self.trUtf8("Cut all"), self.__cutAllChat) 505 self.tr("Cut all"), self.__cutAllChat)
506 self.__copyAllChatAct = \ 506 self.__copyAllChatAct = \
507 self.__chatMenu.addAction( 507 self.__chatMenu.addAction(
508 UI.PixmapCache.getIcon("editCopy.png"), 508 UI.PixmapCache.getIcon("editCopy.png"),
509 self.trUtf8("Copy all"), self.__copyAllChat) 509 self.tr("Copy all"), self.__copyAllChat)
510 self.__chatMenu.addSeparator() 510 self.__chatMenu.addSeparator()
511 self.__clearChatAct = \ 511 self.__clearChatAct = \
512 self.__chatMenu.addAction( 512 self.__chatMenu.addAction(
513 UI.PixmapCache.getIcon("editDelete.png"), 513 UI.PixmapCache.getIcon("editDelete.png"),
514 self.trUtf8("Clear"), self.__clearChat) 514 self.tr("Clear"), self.__clearChat)
515 self.__chatMenu.addSeparator() 515 self.__chatMenu.addSeparator()
516 self.__saveChatAct = \ 516 self.__saveChatAct = \
517 self.__chatMenu.addAction( 517 self.__chatMenu.addAction(
518 UI.PixmapCache.getIcon("fileSave.png"), 518 UI.PixmapCache.getIcon("fileSave.png"),
519 self.trUtf8("Save"), self.__saveChat) 519 self.tr("Save"), self.__saveChat)
520 520
521 self.on_chatEdit_copyAvailable(False) 521 self.on_chatEdit_copyAvailable(False)
522 522
523 @pyqtSlot(bool) 523 @pyqtSlot(bool)
524 def on_chatEdit_copyAvailable(self, yes): 524 def on_chatEdit_copyAvailable(self, yes):
554 """ 554 """
555 txt = self.chatEdit.toPlainText() 555 txt = self.chatEdit.toPlainText()
556 if txt: 556 if txt:
557 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 557 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
558 self, 558 self,
559 self.trUtf8("Save Chat"), 559 self.tr("Save Chat"),
560 "", 560 "",
561 self.trUtf8("Text Files (*.txt);;All Files (*)"), 561 self.tr("Text Files (*.txt);;All Files (*)"),
562 None, 562 None,
563 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) 563 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
564 if fname: 564 if fname:
565 ext = QFileInfo(fname).suffix() 565 ext = QFileInfo(fname).suffix()
566 if not ext: 566 if not ext:
568 if ex: 568 if ex:
569 fname += ex 569 fname += ex
570 if QFileInfo(fname).exists(): 570 if QFileInfo(fname).exists():
571 res = E5MessageBox.yesNo( 571 res = E5MessageBox.yesNo(
572 self, 572 self,
573 self.trUtf8("Save Chat"), 573 self.tr("Save Chat"),
574 self.trUtf8("<p>The file <b>{0}</b> already exists." 574 self.tr("<p>The file <b>{0}</b> already exists."
575 " Overwrite it?</p>").format(fname), 575 " Overwrite it?</p>").format(fname),
576 icon=E5MessageBox.Warning) 576 icon=E5MessageBox.Warning)
577 if not res: 577 if not res:
578 return 578 return
579 fname = Utilities.toNativeSeparators(fname) 579 fname = Utilities.toNativeSeparators(fname)
580 580
583 f.write(txt) 583 f.write(txt)
584 f.close() 584 f.close()
585 except IOError as err: 585 except IOError as err:
586 E5MessageBox.critical( 586 E5MessageBox.critical(
587 self, 587 self,
588 self.trUtf8("Error saving Chat"), 588 self.tr("Error saving Chat"),
589 self.trUtf8("""<p>The chat contents could not be""" 589 self.tr("""<p>The chat contents could not be"""
590 """ written to <b>{0}</b></p>""" 590 """ written to <b>{0}</b></p>"""
591 """<p>Reason: {1}</p>""") .format( 591 """<p>Reason: {1}</p>""") .format(
592 fname, str(err))) 592 fname, str(err)))
593 593
594 def __copyChat(self): 594 def __copyChat(self):
595 """ 595 """
596 Private slot to copy the contents of the chat display to the clipboard. 596 Private slot to copy the contents of the chat display to the clipboard.
622 """ 622 """
623 self.__usersMenu = QMenu(self) 623 self.__usersMenu = QMenu(self)
624 self.__kickUserAct = \ 624 self.__kickUserAct = \
625 self.__usersMenu.addAction( 625 self.__usersMenu.addAction(
626 UI.PixmapCache.getIcon("chatKickUser.png"), 626 UI.PixmapCache.getIcon("chatKickUser.png"),
627 self.trUtf8("Kick User"), self.__kickUser) 627 self.tr("Kick User"), self.__kickUser)
628 self.__banUserAct = \ 628 self.__banUserAct = \
629 self.__usersMenu.addAction( 629 self.__usersMenu.addAction(
630 UI.PixmapCache.getIcon("chatBanUser.png"), 630 UI.PixmapCache.getIcon("chatBanUser.png"),
631 self.trUtf8("Ban User"), self.__banUser) 631 self.tr("Ban User"), self.__banUser)
632 self.__banKickUserAct = \ 632 self.__banKickUserAct = \
633 self.__usersMenu.addAction( 633 self.__usersMenu.addAction(
634 UI.PixmapCache.getIcon("chatBanKickUser.png"), 634 UI.PixmapCache.getIcon("chatBanKickUser.png"),
635 self.trUtf8("Ban and Kick User"), self.__banKickUser) 635 self.tr("Ban and Kick User"), self.__banKickUser)
636 636
637 @pyqtSlot(QPoint) 637 @pyqtSlot(QPoint)
638 def on_usersList_customContextMenuRequested(self, pos): 638 def on_usersList_customContextMenuRequested(self, pos):
639 """ 639 """
640 Private slot to show the context menu for the users list. 640 Private slot to show the context menu for the users list.
657 color = self.chatEdit.textColor() 657 color = self.chatEdit.textColor()
658 self.chatEdit.setTextColor(Qt.darkYellow) 658 self.chatEdit.setTextColor(Qt.darkYellow)
659 self.chatEdit.append( 659 self.chatEdit.append(
660 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + 660 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) +
661 ":") 661 ":")
662 self.chatEdit.append(self.trUtf8("* {0} has been kicked.\n").format( 662 self.chatEdit.append(self.tr("* {0} has been kicked.\n").format(
663 itm.text().split("@")[0])) 663 itm.text().split("@")[0]))
664 self.chatEdit.setTextColor(color) 664 self.chatEdit.setTextColor(color)
665 665
666 def __banUser(self): 666 def __banUser(self):
667 """ 667 """
673 color = self.chatEdit.textColor() 673 color = self.chatEdit.textColor()
674 self.chatEdit.setTextColor(Qt.darkYellow) 674 self.chatEdit.setTextColor(Qt.darkYellow)
675 self.chatEdit.append( 675 self.chatEdit.append(
676 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + 676 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) +
677 ":") 677 ":")
678 self.chatEdit.append(self.trUtf8("* {0} has been banned.\n").format( 678 self.chatEdit.append(self.tr("* {0} has been banned.\n").format(
679 itm.text().split("@")[0])) 679 itm.text().split("@")[0]))
680 self.chatEdit.setTextColor(color) 680 self.chatEdit.setTextColor(color)
681 681
682 def __banKickUser(self): 682 def __banKickUser(self):
683 """ 683 """
690 self.chatEdit.setTextColor(Qt.darkYellow) 690 self.chatEdit.setTextColor(Qt.darkYellow)
691 self.chatEdit.append( 691 self.chatEdit.append(
692 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) + 692 QDateTime.currentDateTime().toString(Qt.SystemLocaleLongDate) +
693 ":") 693 ":")
694 self.chatEdit.append( 694 self.chatEdit.append(
695 self.trUtf8("* {0} has been banned and kicked.\n") 695 self.tr("* {0} has been banned and kicked.\n")
696 .format(itm.text().split("@")[0])) 696 .format(itm.text().split("@")[0]))
697 self.chatEdit.setTextColor(color) 697 self.chatEdit.setTextColor(color)
698 698
699 def shutdown(self): 699 def shutdown(self):
700 """ 700 """

eric ide

mercurial