From 2a0947a0597a59f41d0d3bcf1dc860b872064b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Fri, 27 Dec 2019 23:34:50 +0100 Subject: [PATCH] [message_box_size] Rewrite plugin - Much simpler code - New config dialog --- message_box_size/config_dialog.py | 40 ++++++++++++ message_box_size/config_dialog.ui | 77 ----------------------- message_box_size/msg_box_size.py | 100 +++++------------------------- 3 files changed, 54 insertions(+), 163 deletions(-) create mode 100644 message_box_size/config_dialog.py delete mode 100644 message_box_size/config_dialog.ui diff --git a/message_box_size/config_dialog.py b/message_box_size/config_dialog.py new file mode 100644 index 0000000..65aa6bd --- /dev/null +++ b/message_box_size/config_dialog.py @@ -0,0 +1,40 @@ +from gi.repository import GObject +from gi.repository import Gtk + +from gajim.gtk.settings import SettingsDialog +from gajim.gtk.settings import SpinSetting +from gajim.gtk.const import Setting +from gajim.gtk.const import SettingType + +from gajim.plugins.plugins_i18n import _ + + +class MessageBoxSizeConfigDialog(SettingsDialog): + def __init__(self, plugin, parent): + + self.plugin = plugin + settings = [ + Setting('PreviewSizeSpinSetting', _('Height in pixels'), + SettingType.VALUE, self.plugin.config['HEIGHT'], + callback=self.on_setting, data='HEIGHT', + desc=_('Size of message input in pixels'), + props={'range_': (20, 200)}), + ] + + SettingsDialog.__init__(self, parent, _('Message Box Size Configuration'), + Gtk.DialogFlags.MODAL, settings, None, + extend=[('PreviewSizeSpinSetting', + SizeSpinSetting)]) + + def on_setting(self, value, data): + self.plugin.config[data] = value + + +class SizeSpinSetting(SpinSetting): + + __gproperties__ = { + "setting-value": (int, 'Size', '', 20, 200, 20, + GObject.ParamFlags.READWRITE), } + + def __init__(self, *args, **kwargs): + SpinSetting.__init__(self, *args, **kwargs) diff --git a/message_box_size/config_dialog.ui b/message_box_size/config_dialog.ui deleted file mode 100644 index 60cdb6d..0000000 --- a/message_box_size/config_dialog.ui +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - True - vertical - - - True - vertical - - - True - - - True - 0.029999999329447746 - Minimum lines - start - False - - - 0 - - - - - True - True - - 6 - True - True - - - - False - False - 1 - - - - - False - False - 0 - - - - - False - False - 0 - - - - - Do not resize input message field - True - False - False - True - - - - False - False - 1 - - - - - - diff --git a/message_box_size/msg_box_size.py b/message_box_size/msg_box_size.py index 7a66148..c590cd9 100644 --- a/message_box_size/msg_box_size.py +++ b/message_box_size/msg_box_size.py @@ -1,97 +1,25 @@ -from gi.repository import Gtk +from functools import partial from gajim.plugins import GajimPlugin -from gajim.plugins.helpers import log_calls -from gajim.plugins.gui import GajimPluginConfigDialog from gajim.plugins.plugins_i18n import _ +from message_box_size.config_dialog import MessageBoxSizeConfigDialog class MsgBoxSizePlugin(GajimPlugin): - @log_calls('MsgBoxSizePlugin') def init(self): + # pylint: disable=attribute-defined-outside-init self.description = _('Allows you to adjust the height' - ' of the new message input field.') - self.config_dialog = MsgBoxSizePluginConfigDialog(self) + ' of the message input.') + self.config_dialog = partial(MessageBoxSizeConfigDialog, self) self.gui_extension_points = { - 'chat_control_base': (self.connect_with_chat_control, - self.disconnect_from_chat_control)} - self.config_default_values = {'Do_not_resize': (False, ''), - 'Minimum_lines': (2, ''),} - self.chat_control = None - self.controls = [] + 'chat_control_base': (self._on_connect_chat_control, + self._on_disconnect_chat_control) + } + self.config_default_values = {'HEIGHT': (20, ''),} - @log_calls('MsgBoxSizePlugin') - def connect_with_chat_control(self, chat_control): - self.chat_control = chat_control - control = Base(self, self.chat_control) - self.controls.append(control) + def _on_connect_chat_control(self, control): + control.msg_textview.set_size_request(-1, self.config['HEIGHT']) - @log_calls('MsgBoxSizePlugin') - def disconnect_from_chat_control(self, chat_control): - for control in self.controls: - control.disconnect_from_chat_control() - self.controls = [] - - -class Base(object): - def __init__(self, plugin, chat_control): - tbuffer = chat_control.msg_textview.get_buffer() - min_size = chat_control.msg_textview.get_line_yrange( - tbuffer.get_start_iter())[1] * plugin.config['Minimum_lines'] + 2 - - chat_control.msg_textview.set_property('height-request', min_size) - # plugin.config['Minimum_lines']) - - self.id_ = chat_control.msg_textview.connect('size-allocate', - self.size_request) - chat_control.handlers[self.id_] = chat_control.msg_textview - self.chat_control = chat_control - self.plugin = plugin - - def size_request(self, msg_textview, requisition): - tbuffer = msg_textview.get_buffer() - min_size = msg_textview.get_line_yrange(tbuffer.get_start_iter())[1] * \ - self.plugin.config['Minimum_lines'] + 2 - - if self.plugin.config['Do_not_resize']: - self.chat_control.msg_scrolledwindow.set_property( - 'vscrollbar-policy', Gtk.PolicyType.AUTOMATIC) - elif requisition.height > min_size: - msg_textview.set_property('height-request', requisition.height) - else: - msg_textview.set_property('height-request', min_size) - - def disconnect_from_chat_control(self): - if self.id_ not in self.chat_control.handlers: - return - if self.chat_control.handlers[self.id_].handler_is_connected(self.id_): - self.chat_control.handlers[self.id_].disconnect(self.id_) - del self.chat_control.handlers[self.id_] - self.chat_control.msg_textview.set_property('height-request', -1) - self.chat_control.msg_textview.queue_draw() - - -class MsgBoxSizePluginConfigDialog(GajimPluginConfigDialog): - def init(self): - self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path( - 'config_dialog.ui') - self.xml = Gtk.Builder() - self.xml.set_translation_domain('gajim_plugins') - self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH, ['vbox1']) - self.checkbutton = self.xml.get_object('checkbutton') - self.spinbutton = self.xml.get_object('minimum_lines') - self.spinbutton.get_adjustment().configure(20, 1, 10, 1, 10, 0) - vbox = self.xml.get_object('vbox1') - self.get_child().pack_start(vbox, False, False, 0) - - self.xml.connect_signals(self) - - def on_run(self): - self.checkbutton.set_active(self.plugin.config['Do_not_resize']) - self.spinbutton.set_value(self.plugin.config['Minimum_lines']) - - def on_checkbutton_toggled(self, checkbutton): - self.plugin.config['Do_not_resize'] = checkbutton.get_active() - - def on_minimum_lines_value_changed(self, spinbutton): - self.plugin.config['Minimum_lines'] = spinbutton.get_value() + @staticmethod + def _on_disconnect_chat_control(control): + control.msg_textview.set_size_request(-1, -1)