This fixes some deprecation warnings related to Gtk.Color and restructures code and formatting according to pylint suggestions
152 lines
5.5 KiB
Python
152 lines
5.5 KiB
Python
import re
|
|
import pygments
|
|
|
|
from gi.repository import Gtk
|
|
from gi.repository import Gdk
|
|
from gi.repository.Pango import FontDescription
|
|
|
|
from gajim.plugins.gui import GajimPluginConfigDialog
|
|
from gajim.plugins.helpers import get_builder
|
|
|
|
from syntax_highlight.gtkformatter import GTKFormatter
|
|
from syntax_highlight.types import LineBreakOptions
|
|
from syntax_highlight.types import CodeMarkerOptions
|
|
|
|
|
|
class SyntaxHighlighterPluginConfiguration(GajimPluginConfigDialog):
|
|
def init(self):
|
|
path = self.plugin.local_file_path('config_dialog.ui')
|
|
self._ui = get_builder(path)
|
|
box = self.get_content_area()
|
|
box.pack_start(self._ui.main_box, True, True, 0)
|
|
|
|
self._ui.set_translation_domain('gajim_plugins')
|
|
|
|
self.liststore = Gtk.ListStore(str)
|
|
self._ui.default_lexer_combobox.set_model(self.liststore)
|
|
|
|
self.style_liststore = Gtk.ListStore(str)
|
|
self._ui.style_combobox.set_model(self.style_liststore)
|
|
|
|
self._ui.preview_textview.get_buffer().connect(
|
|
'insert-text', self._on_preview_text_inserted)
|
|
|
|
self._ui.connect_signals(self)
|
|
|
|
self.default_lexer_id = 0
|
|
self.style_id = 0
|
|
|
|
def set_config(self, config):
|
|
self.config = config
|
|
self.lexers = self.config.get_lexer_list()
|
|
self.styles = self.config.get_styles_list()
|
|
default_lexer = self.config.get_default_lexer_name()
|
|
default_style = self.config.get_style_name()
|
|
|
|
for i, lexer in enumerate(self.lexers):
|
|
self.liststore.append([lexer[0]])
|
|
if lexer[1] == default_lexer:
|
|
self.default_lexer_id = i
|
|
|
|
for i, style in enumerate(self.styles):
|
|
self.style_liststore.append([style])
|
|
if style == default_style:
|
|
self.style_id = i
|
|
self._update_preview()
|
|
|
|
def _lexer_changed(self, _widget):
|
|
new = self._ui.default_lexer_combobox.get_active()
|
|
if new != self.default_lexer_id:
|
|
self.default_lexer_id = new
|
|
self.config.set_default_lexer(self.lexers[self.default_lexer_id][1])
|
|
self._update_preview()
|
|
|
|
def _line_break_changed(self, _widget):
|
|
new = LineBreakOptions(self._ui.line_break_combobox.get_active())
|
|
if new != self.config.get_line_break_action():
|
|
self.config.set_line_break_action(new)
|
|
self._update_preview()
|
|
|
|
def _code_marker_changed(self, _widget):
|
|
new = CodeMarkerOptions(self._ui.code_marker_combobox.get_active())
|
|
if new != self.config.get_code_marker_setting():
|
|
self.config.set_code_marker_setting(new)
|
|
|
|
def _bg_color_enabled(self, _widget):
|
|
new = self._ui.bg_color_checkbutton.get_active()
|
|
if new != self.config.is_bgcolor_override_enabled():
|
|
bg_override_enabled = new
|
|
self.config.set_bgcolor_override_enabled(bg_override_enabled)
|
|
self._ui.bg_color_colorbutton.set_sensitive(bg_override_enabled)
|
|
self._update_preview()
|
|
|
|
def _bg_color_changed(self, _widget):
|
|
new = self._ui.bg_color_colorbutton.get_rgba()
|
|
if new != self.config.get_bgcolor():
|
|
self.config.set_bgcolor(new)
|
|
self._update_preview()
|
|
|
|
def _style_changed(self, _widget):
|
|
new = self._ui.style_combobox.get_active()
|
|
if new != self.style_id:
|
|
self.style_id = new
|
|
self.config.set_style(self.styles[self.style_id])
|
|
self._update_preview()
|
|
|
|
def _font_changed(self, _widget):
|
|
new = self._ui.font_button.get_font()
|
|
if new != self.config.get_font():
|
|
self.config.set_font(new)
|
|
self._update_preview()
|
|
|
|
def _update_preview(self):
|
|
self._format_preview_text()
|
|
|
|
def _on_preview_text_inserted(self, _buf, _iterator, text, length, *_args):
|
|
if (length == 1 and re.match(r'\s', text)) or length > 1:
|
|
self._format_preview_text()
|
|
|
|
def _format_preview_text(self):
|
|
buf = self._ui.preview_textview.get_buffer()
|
|
start_iter = buf.get_start_iter()
|
|
start_mark = buf.create_mark(None, start_iter, True)
|
|
buf.remove_all_tags(start_iter, buf.get_end_iter())
|
|
|
|
formatter = GTKFormatter(
|
|
style=self.config.get_style_name(), start_mark=start_mark)
|
|
|
|
code = start_iter.get_text(buf.get_end_iter())
|
|
lexer = self.config.get_default_lexer()
|
|
if not self.config.is_internal_none_lexer(lexer):
|
|
tokens = pygments.lex(code, lexer)
|
|
pygments.format(tokens, formatter, buf)
|
|
|
|
buf.delete_mark(start_mark)
|
|
|
|
self._ui.preview_textview.override_font(
|
|
FontDescription.from_string(self.config.get_font()))
|
|
|
|
color = Gdk.RGBA()
|
|
if color.parse(self.config.get_bgcolor()):
|
|
self._ui.preview_textview.override_background_color(
|
|
Gtk.StateFlags.NORMAL, color)
|
|
|
|
def on_run(self):
|
|
self._ui.default_lexer_combobox.set_active(self.default_lexer_id)
|
|
self._ui.line_break_combobox.set_active(
|
|
self.config.get_line_break_action())
|
|
self._ui.code_marker_combobox.set_active(
|
|
self.config.get_code_marker_setting())
|
|
self._ui.style_combobox.set_active(self.style_id)
|
|
|
|
self._ui.font_button.set_font(self.config.get_font())
|
|
|
|
bg_override_enabled = self.config.is_bgcolor_override_enabled()
|
|
self._ui.bg_color_checkbutton.set_active(bg_override_enabled)
|
|
|
|
self._ui.bg_color_colorbutton.set_sensitive(bg_override_enabled)
|
|
|
|
color = Gdk.RGBA()
|
|
if color.parse(self.config.get_bgcolor()):
|
|
self._ui.bg_color_colorbutton.set_rgba(color)
|