Preferences: Add some default options

- Option to set default sync threshold
- Option to set default show join/leave
- Option to set default show status message change
This commit is contained in:
Philipp Hörist 2019-01-04 09:00:12 +01:00
parent 5fd1e7b4bf
commit 67318a49e5
4 changed files with 147 additions and 4 deletions

View File

@ -235,6 +235,8 @@ class Config:
'show_location_in_roster': [opt_bool, True, '', True],
'avatar_position_in_roster': [opt_str, 'right', _('Define the position of the avatar in roster. Can be left or right'), True],
'print_status_in_chats': [opt_bool, False, _('If False, Gajim will no longer print status line in chats when a contact changes their status and/or their status message.')],
'print_join_leave_in_mucs': [opt_bool, False, _('Default Setting: Show a status message for every join or leave in a group chat')],
'print_status_in_mucs': [opt_bool, False, _('Default Setting: Show a status message for all status (away, dnd, etc.) changes of users in a group chat')],
'log_contact_status_changes': [opt_bool, False],
'log_xhtml_messages': [opt_bool, False, _('Log XHTML messages instead of plain text messages.')],
'restored_messages_small': [opt_bool, True, _('If true, restored messages will use a smaller font than the default one.')],
@ -719,6 +721,11 @@ class Config:
room = self.get_per('rooms', room, 'notify_on_all_messages')
return all_ or room
def get_options(self, optname, return_type=str):
options = self.get(optname).split(',')
options = [return_type(option.strip()) for option in options]
return options
def _init_options(self):
for opt in self.__options[0]:
self.__options[1][opt] = self.__options[0][opt][Option.VAL]

View File

@ -179,6 +179,14 @@
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="sync_threshold_liststore">
<columns>
<!-- column-name days -->
<column type="gchararray"/>
<!-- column-name text -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="systray_combobox_liststore">
<columns>
<!-- column-name item -->
@ -702,10 +710,104 @@
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<placeholder/>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Group Chat Settings</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
<style>
<class name="bold"/>
<class name="margin-top6"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkCheckButton" id="join_leave_checkbutton">
<property name="label" translatable="yes">Show join/leave (Default)</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">If join/leave status messages are shown in the group chat. This setting can be overridden in the groupchat menu.</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="_on_join_leave_toggled" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">The default sync threshold for new public group chats. This setting can be overridden in the groupchat menu.</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Default Sync Threshold</property>
<property name="use_underline">True</property>
<property name="justify">right</property>
<property name="mnemonic_widget">outgoing_chat_states_combobox</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="sync_threshold_combobox">
<property name="width_request">200</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="model">sync_threshold_liststore</property>
<signal name="changed" handler="_on_sync_threshold_changed" swapped="no"/>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="status_change_checkbutton">
<property name="label" translatable="yes">Show status changes (Default)</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">If status change messages are shown in the group chat. This setting can be overridden in the groupchat menu.</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="_on_status_change_toggled" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
</object>
<packing>

View File

@ -397,7 +397,9 @@ class GroupchatControl(ChatControlBase):
act.connect('change-state', self._on_notify_on_all_messages)
self.parent_win.window.add_action(act)
value = app.config.get_per('rooms', self.contact.jid, 'print_status')
status_default = app.config.get('print_status_in_mucs')
value = app.config.get_per('rooms', self.contact.jid,
'print_status', status_default)
act = Gio.SimpleAction.new_stateful(
'print-status-' + self.control_id,
@ -405,7 +407,9 @@ class GroupchatControl(ChatControlBase):
act.connect('change-state', self._on_print_status)
self.parent_win.window.add_action(act)
value = app.config.get_per('rooms', self.contact.jid, 'print_join_left')
join_default = app.config.get('print_join_leave_in_mucs')
value = app.config.get_per('rooms', self.contact.jid,
'print_join_left', join_default)
act = Gio.SimpleAction.new_stateful(
'print-join-left-' + self.control_id,

View File

@ -24,6 +24,7 @@ from gajim.common import helpers
from gajim.common import config as c_config
from gajim.common import idle
from gajim.common.i18n import _
from gajim.common.i18n import ngettext
from gajim import message_control
@ -147,6 +148,25 @@ class Preferences(Gtk.ApplicationWindow):
st = app.config.get('show_subject_on_join')
self._ui.subject_on_join_checkbutton.set_active(st)
# Group chat settings
threshold_model = self._ui.sync_threshold_combobox.get_model()
for day in app.config.get_options('threshold_options'):
if day == '0':
label = _('No threshold')
else:
label = ngettext('%s day' % day, '%s days' % day, int(day))
threshold_model.append([day, label])
public_threshold = app.config.get('public_room_sync_threshold')
self._ui.sync_threshold_combobox.set_id_column(0)
self._ui.sync_threshold_combobox.set_active_id(str(public_threshold))
st = app.config.get('print_join_leave_in_mucs')
self._ui.join_leave_checkbutton.set_active(st)
st = app.config.get('print_status_in_mucs')
self._ui.status_change_checkbutton.set_active(st)
# Displayed chat state notifications
st = app.config.get('show_chatstate_in_tabs')
self._ui.show_chatstate_in_tabs.set_active(st)
@ -595,6 +615,16 @@ class Preferences(Gtk.ApplicationWindow):
def on_subject_on_join_checkbutton_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'show_subject_on_join')
def _on_sync_threshold_changed(self, widget):
active = widget.get_active_id()
app.config.set('public_room_sync_threshold', int(active))
def _on_join_leave_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'print_join_leave_in_mucs')
def _on_status_change_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'print_status_in_mucs')
def on_show_chatstate_in_tabs_toggled(self, widget):
self.on_checkbutton_toggled(widget, 'show_chatstate_in_tabs')