primitivus (chat): added :topic (and :subject and :title aliases) to change subject with a dialog (/!\ urwid SàText need to be updated)

This commit is contained in:
Goffi 2016-07-24 19:00:50 +02:00
commit c0e4960c55
3 changed files with 30 additions and 1 deletions

View file

@ -603,5 +603,18 @@ class Chat(PrimitivusWidget, quick_chat.QuickChat):
self.title_dynamic = C.CHAT_STATE_ICON[state]
self.host.redraw() # FIXME: should not be necessary
def _onSubjectDialogCb(self, button, dialog):
self.changeSubject(dialog.text)
self.host.removePopUp(dialog)
def onSubjectDialog(self, new_subject=None):
dialog = sat_widgets.InputDialog(
_(u'Change title'),
_(u'Enter the new title'),
default_txt=new_subject if new_subject is not None else self.subject)
dialog.setCallback('ok', self._onSubjectDialogCb, dialog)
dialog.setCallback('cancel', lambda dummy: self.host.removePopUp(dialog))
self.host.showPopUp(dialog)
quick_widgets.register(quick_chat.QuickChat, Chat)
quick_widgets.register(quick_games.Tarot, game_tarot.TarotGame)

View file

@ -138,6 +138,14 @@ class EditBar(sat_widgets.ModalEdit):
# FIXME: Q&D way, need to be more generic
if isinstance(widget, quick_chat.QuickChat):
widget.setFilter(args)
elif command in ('topic', 'suject', 'title'):
try:
new_title = args[0].strip()
except IndexError:
new_title = None
widget = self.host.selected_widget
if isinstance(widget, quick_chat.QuickChat) and widget.type == C.CHAT_GROUP:
widget.onSubjectDialog(new_title)
else:
return
self.set_edit_text('')

View file

@ -423,9 +423,17 @@ class QuickChat(quick_widgets.QuickWidget):
def setSubject(self, subject):
"""Set title for a group chat"""
self.subject = subject
if self.type != C.CHAT_GROUP:
raise exceptions.InternalError("trying to set subject for a non group chat window")
self.subject = subject
def changeSubject(self, new_subject):
"""Change the subject of the room
This change the subject on the room itself (i.e. via XMPP),
while setSubject change the subject of this widget
"""
self.host.bridge.mucSubject(unicode(self.target), new_subject, self.profile)
def addGamePanel(self, widget):
"""Insert a game panel to this Chat dialog.