GtkCodeThemer/src/core/mixins/signals/widget_signals/list_signals_mixin.py

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)