108 lines
4.5 KiB
Python
108 lines
4.5 KiB
Python
# Python imports
|
|
|
|
# Lib imports
|
|
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
from gi.repository import Gdk
|
|
|
|
# Application imports
|
|
from utils.languages import samples
|
|
|
|
|
|
|
|
|
|
class ListSignalsMixin:
|
|
def on_language_selected(self, combo):
|
|
tree_iter = combo.get_active_iter()
|
|
|
|
if tree_iter:
|
|
model = combo.get_model()
|
|
self.current_lang_name = model[tree_iter][0]
|
|
self.current_lang_id = self.lang_map_name_to_id[self.current_lang_name]
|
|
|
|
self.styles_list.clear()
|
|
|
|
remove_len = len(self.current_lang_id) + 1
|
|
lang = self.language_manager.get_language(self.current_lang_id)
|
|
|
|
if lang:
|
|
style_ids = lang.get_style_ids()
|
|
style_ids.sort()
|
|
|
|
if self.current_lang_id == 'def':
|
|
for style_id in self.gui_style_ids:
|
|
self.styles_list.append([style_id])
|
|
|
|
for style_id in style_ids:
|
|
self.styles_list.append([style_id[remove_len:]])
|
|
|
|
tree_iter = self.styles_treeview.get_model().get_iter_first()
|
|
self.styles_treeview_selection.select_iter(tree_iter)
|
|
model = self.styles_treeview.get_model()
|
|
self.selected_style_id = model[tree_iter][0]
|
|
|
|
if self.current_lang_id in samples:
|
|
self.src_buffer.set_language(lang);
|
|
self.src_buffer.set_text(samples[self.current_lang_id])
|
|
self.sample_lbl.set_text(f"{self.current_lang_name} sample")
|
|
else:
|
|
self.src_buffer.set_language(self.language);
|
|
self.src_buffer.set_text(samples[self.language_id])
|
|
self.sample_lbl.set_text(f"{self.language_name} sample")
|
|
|
|
def on_style_selected(self, selection):
|
|
model, tree_iter = selection.get_selected()
|
|
if not tree_iter: return
|
|
|
|
self.selected_style_id = f"{self.current_lang_id}:{model[tree_iter][0]}"
|
|
|
|
# handle the special case for GUI styles
|
|
if self.selected_style_id not in self.all_styles_dict and self.current_lang_id == 'def':
|
|
self.selected_style_id = model[tree_iter][0]
|
|
|
|
# block all the toggle handlers so they dont get triggered
|
|
self.bold_tggle_btn.handler_block(self.bold_tggl_handler)
|
|
self.italic_tggle_btn.handler_block(self.italic_tggl_handler)
|
|
self.underline_tggle_btn.handler_block(self.underline_tggl_handler)
|
|
self.strikethrough_tggle_btn.handler_block(self.strikethrough_tggl_handler)
|
|
self.fr_check_btn.handler_block(self.foreground_tggl_handler)
|
|
self.br_check_btn.handler_block(self.background_tggl_handler)
|
|
|
|
if self.selected_style_id in self.all_styles_dict:
|
|
this_style = self.all_styles_dict[self.selected_style_id]
|
|
|
|
# handle foreground and background colors
|
|
if this_style.foreground:
|
|
self.fr_color_btn.set_color(Gdk.color_parse(this_style.foreground))
|
|
self.fr_color_btn.set_sensitive(True)
|
|
self.fr_check_btn.set_active(True)
|
|
else:
|
|
self.fr_color_btn.set_color(self.black_color)
|
|
self.fr_color_btn.set_sensitive(False)
|
|
self.fr_check_btn.set_active(False)
|
|
|
|
if this_style.background:
|
|
self.br_color_btn.set_color(Gdk.color_parse(this_style.background))
|
|
self.br_color_btn.set_sensitive(True)
|
|
self.br_check_btn.set_active(True)
|
|
else:
|
|
self.br_color_btn.set_color(self.black_color)
|
|
self.br_color_btn.set_sensitive(False)
|
|
self.br_check_btn.set_active(False)
|
|
|
|
# handle text styling
|
|
self.italic_tggle_btn.set_active(this_style.italic)
|
|
self.bold_tggle_btn.set_active(this_style.bold)
|
|
self.strikethrough_tggle_btn.set_active(this_style.strikethrough)
|
|
self.underline_tggle_btn.set_active(this_style.underline)
|
|
self.reset_btn.set_sensitive(True)
|
|
else:
|
|
self.clear_and_disable_style_buttons()
|
|
|
|
self.bold_tggle_btn.handler_unblock(self.bold_tggl_handler)
|
|
self.italic_tggle_btn.handler_unblock(self.italic_tggl_handler)
|
|
self.underline_tggle_btn.handler_unblock(self.underline_tggl_handler)
|
|
self.strikethrough_tggle_btn.handler_unblock(self.strikethrough_tggl_handler)
|
|
self.fr_check_btn.handler_unblock(self.foreground_tggl_handler)
|
|
self.br_check_btn.handler_unblock(self.background_tggl_handler)
|