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