Cooperation/ChatWidget.py

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

eric ide

mercurial