now we can save preset messages from change status message dialog. we also use ComboBox and not ComboBoxEntry because the first shows clearer that it is not editable. fixes #1407

This commit is contained in:
Nikos Kouremenos 2006-03-07 14:02:45 +00:00
parent 37c84ef192
commit 80c58110e2
3 changed files with 47 additions and 23 deletions

View file

@ -1,7 +1,7 @@
## common/config.py ## common/config.py
## ##
## Copyright (C) 2003-2006 Yann Le Boulanger <asterix@lagaule.org> ## Copyright (C) 2003-2006 Yann Le Boulanger <asterix@lagaule.org>
## Copyright (C) 2003-2006 Nikos Kouremenos <nkour@jabber.org> ## Copyright (C) 2004-2006 Nikos Kouremenos <kourem@gmail.com>
## Copyright (C) 2004-2005 Vincent Hanquez <tab@snarc.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab@snarc.org>
## Copyright (C) 2005 Dimitur Kirov <dkirov@gmail.com> ## Copyright (C) 2005 Dimitur Kirov <dkirov@gmail.com>
## Copyright (C) 2005 Travis Shirk <travis@pobox.com> ## Copyright (C) 2005 Travis Shirk <travis@pobox.com>

View file

@ -212,7 +212,8 @@ class ChooseGPGKeyDialog:
class ChangeStatusMessageDialog: class ChangeStatusMessageDialog:
def __init__(self, show = None): def __init__(self, show = None):
self.show = show self.show = show
self.xml = gtk.glade.XML(GTKGUI_GLADE, 'change_status_message_dialog', APP) self.xml = gtk.glade.XML(GTKGUI_GLADE, 'change_status_message_dialog',
APP)
self.window = self.xml.get_widget('change_status_message_dialog') self.window = self.xml.get_widget('change_status_message_dialog')
if show: if show:
uf_show = helpers.get_uf_show(show) uf_show = helpers.get_uf_show(show)
@ -232,19 +233,23 @@ class ChangeStatusMessageDialog:
msg = '' msg = ''
msg = helpers.from_one_line(msg) msg = helpers.from_one_line(msg)
self.message_buffer.set_text(msg) self.message_buffer.set_text(msg)
self.values = {'':''} # have an empty string selectable, so user can clear msg
for msg in gajim.config.get_per('statusmsg'): # have an empty string selectable, so user can clear msg
val = gajim.config.get_per('statusmsg', msg, 'message') self.preset_messages_dict = {'': ''}
val = helpers.from_one_line(val) for msg_name in gajim.config.get_per('statusmsg'):
self.values[msg] = val msg_text = gajim.config.get_per('statusmsg', msg_name, 'message')
sorted_keys_list = helpers.get_sorted_keys(self.values) msg_text = helpers.from_one_line(msg_text)
liststore = gtk.ListStore(str, str) self.preset_messages_dict[msg_name] = msg_text
message_comboboxentry = self.xml.get_widget('message_comboboxentry') sorted_keys_list = helpers.get_sorted_keys(self.preset_messages_dict)
message_comboboxentry.set_model(liststore)
message_comboboxentry.set_text_column(0) self.message_liststore = gtk.ListStore(str) # msg_name
message_comboboxentry.child.set_property('editable', False) self.message_combobox = self.xml.get_widget('message_combobox')
for val in sorted_keys_list: self.message_combobox.set_model(self.message_liststore)
message_comboboxentry.append_text(val) cellrenderertext = gtk.CellRendererText()
self.message_combobox.pack_start(cellrenderertext, True)
self.message_combobox.add_attribute(cellrenderertext, 'text', 0)
for msg_name in sorted_keys_list:
self.message_liststore.append((msg_name,))
self.xml.signal_autoconnect(self) self.xml.signal_autoconnect(self)
self.window.show_all() self.window.show_all()
@ -254,7 +259,8 @@ class ChangeStatusMessageDialog:
rep = self.window.run() rep = self.window.run()
if rep == gtk.RESPONSE_OK: if rep == gtk.RESPONSE_OK:
beg, end = self.message_buffer.get_bounds() beg, end = self.message_buffer.get_bounds()
message = self.message_buffer.get_text(beg, end).decode('utf-8').strip() message = self.message_buffer.get_text(beg, end).decode('utf-8')\
.strip()
msg = helpers.to_one_line(message) msg = helpers.to_one_line(message)
if self.show: if self.show:
gajim.config.set('last_status_msg_' + self.show, msg) gajim.config.set('last_status_msg_' + self.show, msg)
@ -263,13 +269,13 @@ class ChangeStatusMessageDialog:
self.window.destroy() self.window.destroy()
return message return message
def on_message_comboboxentry_changed(self, widget, data = None): def on_message_combobox_changed(self, widget):
model = widget.get_model() model = widget.get_model()
active = widget.get_active() active = widget.get_active()
if active < 0: if active < 0:
return None return None
name = model[active][0].decode('utf-8') name = model[active][0].decode('utf-8')
self.message_buffer.set_text(self.values[name]) self.message_buffer.set_text(self.preset_messages_dict[name])
def on_change_status_message_dialog_key_press_event(self, widget, event): def on_change_status_message_dialog_key_press_event(self, widget, event):
if event.keyval == gtk.keysyms.Return or \ if event.keyval == gtk.keysyms.Return or \
@ -283,7 +289,25 @@ class ChangeStatusMessageDialog:
btn.set_sensitive(False) btn.set_sensitive(False)
else: else:
btn.set_sensitive(True) btn.set_sensitive(True)
def on_save_as_preset_button_clicked(self, widget):
start_iter, finish_iter = self.message_buffer.get_bounds()
status_message_to_save_as_preset = self.message_buffer.get_text(
start_iter, finish_iter)
dlg = InputDialog(_('Save as Preset Status Message'),
_('Please type a name for this status message'), is_modal = True)
response = dlg.get_response()
if response == gtk.RESPONSE_OK:
msg_name = dlg.input_entry.get_text()
# user_input holds the name that the user wants for the preset message
iter_ = self.message_liststore.append((msg_name,))
msg_text = helpers.to_one_line(status_message_to_save_as_preset)
gajim.config.add_per('statusmsg', msg_name)
gajim.config.set_per('statusmsg', msg_name, 'message', msg_text)
self.preset_messages_dict[msg_name] = msg_text
# select in combobox the one we just saved
self.message_combobox.set_active_iter(iter_)
class AddNewContactWindow: class AddNewContactWindow:
'''Class for AddNewContactWindow''' '''Class for AddNewContactWindow'''
@ -611,6 +635,8 @@ class InputDialog:
'''Class for Input dialog''' '''Class for Input dialog'''
def __init__(self, title, label_str, input_str = None, is_modal = True, def __init__(self, title, label_str, input_str = None, is_modal = True,
ok_handler = None): ok_handler = None):
# if modal is True you also need to call get_response()
# and ok_handler won't be used
xml = gtk.glade.XML(GTKGUI_GLADE, 'input_dialog', APP) xml = gtk.glade.XML(GTKGUI_GLADE, 'input_dialog', APP)
self.dialog = xml.get_widget('input_dialog') self.dialog = xml.get_widget('input_dialog')
label = xml.get_widget('label') label = xml.get_widget('label')
@ -643,7 +669,6 @@ ok_handler = None):
response = self.dialog.run() response = self.dialog.run()
self.dialog.destroy() self.dialog.destroy()
return response return response
class SubscriptionRequestWindow: class SubscriptionRequestWindow:
def __init__(self, jid, text, account): def __init__(self, jid, text, account):

View file

@ -10372,12 +10372,11 @@ Custom</property>
</child> </child>
<child> <child>
<widget class="GtkComboBoxEntry" id="message_comboboxentry"> <widget class="GtkComboBox" id="message_combobox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="add_tearoffs">False</property> <property name="add_tearoffs">False</property>
<property name="has_frame">True</property>
<property name="focus_on_click">True</property> <property name="focus_on_click">True</property>
<signal name="changed" handler="on_message_comboboxentry_changed" last_modification_time="Wed, 02 Mar 2005 12:34:51 GMT"/> <signal name="changed" handler="on_message_combobox_changed" last_modification_time="Tue, 07 Mar 2006 13:25:23 GMT"/>
</widget> </widget>
<packing> <packing>
<property name="padding">0</property> <property name="padding">0</property>