class ChatWindow(QWidget): """a widget for showing chat messages""" def __init__(self, scene=None, table=None): super(ChatWindow, self).__init__(None) self.scene = scene self.table = table or scene.game.client.table self.table.chatWindow = self self.setObjectName('chatWindow') title = i18n('Chat on table %1 at %2', self.table.tableid, self.table.client.connection.url) decorateWindow(self, title) self.messageView = ChatView() self.messageView.setModel(ChatModel()) self.messageView.setFocusPolicy(Qt.NoFocus) self.messageView.setShowGrid(False) self.messageView.setWordWrap(False) self.messageView.setSelectionMode(QAbstractItemView.NoSelection) if Debug.modelTest: self.debugModelTest = ModelTest(self.messageView.model(), self.messageView) self.edit = QLineEdit() layout = QVBoxLayout() layout.addWidget(self.messageView) layout.addWidget(self.edit) self.setLayout(layout) self.edit.returnPressed.connect(self.sendLine) self.edit.setFocus() self.show() StateSaver(self) def show(self): """not only show but also restore and raise""" self.activateWindow() self.setWindowState(self.windowState() & ~Qt.WindowMinimized) self.raise_() QWidget.show(self) def isVisible(self): """not only visible but also not minimized""" return QWidget.isVisible( self) and not self.windowState() & Qt.WindowMinimized def kill(self): """hide and null on table""" if Debug.chat: logDebug('chat.kill for %s on table %s' % (self, self.table)) self.hide() self.table.chatWindow = None def sendLine(self, line=None, isStatusMessage=False): """send line to others. Either the edited line or parameter line.""" if line is None: line = self.edit.text() self.edit.clear() if line: if Debug.chat: logDebug('sending line %s to others' % line) msg = ChatMessage(self.table.tableid, self.table.client.name, line, isStatusMessage) self.table.client.sendChat(msg).addErrback(self.chatError) def chatError(self, result): """tableList may already have gone away""" if self.table.client.tableList: self.table.client.tableList.tableError(result) def leave(self): """leaving the chat""" self.hide() def receiveLine(self, chatLine): """show a new line in protocol""" self.show() self.messageView.model().appendLines(chatLine) for row in range(self.messageView.model().rowCount()): self.messageView.setRowHeight( row, self.messageView.fontMetrics().height()) self.messageView.resizeColumnsToContents() self.messageView.scrollToBottom()
class ChatWindow(QWidget): """a widget for showing chat messages""" def __init__(self, scene=None, table=None): super(ChatWindow, self).__init__(None) self.scene = scene self.table = table or scene.game.client.table self.table.chatWindow = self self.setObjectName('chatWindow') title = m18n( 'Chat on table %1 at %2', self.table.tableid, self.table.client.connection.url) decorateWindow(self, title) self.messageView = ChatView() self.messageView.setModel(ChatModel()) self.messageView.setFocusPolicy(Qt.NoFocus) self.messageView.setShowGrid(False) self.messageView.setWordWrap(False) self.messageView.setSelectionMode(QAbstractItemView.NoSelection) if Debug.modelTest: self.debugModelTest = ModelTest( self.messageView.model(), self.messageView) self.edit = QLineEdit() layout = QVBoxLayout() layout.addWidget(self.messageView) layout.addWidget(self.edit) self.setLayout(layout) self.edit.returnPressed.connect(self.sendLine) self.edit.setFocus() self.show() StateSaver(self) def show(self): """not only show but also restore and raise""" self.activateWindow() self.setWindowState(self.windowState() & ~Qt.WindowMinimized) self.raise_() QWidget.show(self) def isVisible(self): """not only visible but also not minimized""" return QWidget.isVisible(self) and not self.windowState() & Qt.WindowMinimized def kill(self): """hide and null on table""" if Debug.chat: logDebug(u'chat.kill for %s on table %s' % (self, self.table)) self.hide() self.table.chatWindow = None def sendLine(self, line=None, isStatusMessage=False): """send line to others. Either the edited line or parameter line.""" if line is None: line = unicode(self.edit.text()) self.edit.clear() if line: if Debug.chat: logDebug(u'sending line %s to others' % line) msg = ChatMessage( self.table.tableid, self.table.client.name, line, isStatusMessage) self.table.client.sendChat(msg).addErrback(self.chatError) def chatError(self, result): """tableList may already have gone away""" if self.table.client.tableList: self.table.client.tableList.tableError(result) def leave(self): """leaving the chat""" self.hide() def receiveLine(self, chatLine): """show a new line in protocol""" self.show() self.messageView.model().appendLines(chatLine) for row in range(self.messageView.model().rowCount()): self.messageView.setRowHeight( row, self.messageView.fontMetrics().height()) self.messageView.resizeColumnsToContents() self.messageView.scrollToBottom()
class AddUserDialog(KDialog): """add a user account on a server: This dialog asks for the needed attributes""" # pylint: disable=too-many-instance-attributes def __init__(self, url, username, password): KDialog.__init__(self) decorateWindow(self, i18n('Create User Account')) self.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel)) vbox = QVBoxLayout() grid = QFormLayout() self.lbServer = QLabel() self.lbServer.setText(url) grid.addRow(i18n('Game server:'), self.lbServer) self.lbUser = QLabel() grid.addRow(i18n('Username:'******'Password:'******'Repeat password:'), self.edPassword2) vbox.addLayout(grid) widget = QWidget(self) widget.setLayout(vbox) self.setMainWidget(widget) pol = QSizePolicy() pol.setHorizontalPolicy(QSizePolicy.Expanding) self.lbUser.setSizePolicy(pol) self.edPassword.textChanged.connect(self.passwordChanged) self.edPassword2.textChanged.connect(self.passwordChanged) StateSaver(self) self.username = username self.password = password self.passwordChanged() self.edPassword2.setFocus() def passwordChanged(self, dummyText=None): """password changed""" self.validate() def validate(self): """does the dialog hold valid data?""" equal = self.edPassword.size() and self.edPassword.text( ) == self.edPassword2.text() self.button(KDialog.Ok).setEnabled(equal) @property def username(self): """abstracts the username of the dialog""" return self.lbUser.text() @username.setter def username(self, username): """abstracts the username of the dialog""" self.lbUser.setText(username) @property def password(self): """abstracts the password of the dialog""" return self.edPassword.text() @password.setter def password(self, password): """abstracts the password of the dialog""" self.edPassword.setText(password)