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