Newton_Editor/src/core/widgets/controls/theme_button.py

84 lines
2.1 KiB
Python

# Python imports
# Lib imports
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('GtkSource', '4')
from gi.repository import Gtk
from gi.repository import GtkSource
# Application imports
class ThemePopover(Gtk.Popover):
"""docstring for ThemePopover."""
def __init__(self):
super(ThemePopover, self).__init__()
self._style_choser = None
self._setup_styling()
self._setup_signals()
self._load_widgets()
def _setup_styling(self):
self.set_modal(True)
self.set_position(Gtk.PositionType.BOTTOM)
self.set_size_request(320, 280)
def _setup_signals(self):
event_system.subscribe("show_theme_popup", self._show_theme_popup)
def _load_widgets(self):
self._style_choser = GtkSource.StyleSchemeChooserWidget()
self._style_choser.show_all()
self._style_choser.connect("button-release-event", self._set_theme)
self.add(self._style_choser)
def _show_theme_popup(self, widget = None, eve = None):
self.popup()
def _set_theme(self, widget = None, eve = None):
style_scheme = widget.get_style_scheme()
id = style_scheme.get_id()
event_system.emit('set_buffer_style', ("set_buffer_style", id.lower(),))
class ThemeButton(Gtk.Button):
def __init__(self):
super(ThemeButton, self).__init__()
self._setup_styling()
self._setup_signals()
self._subscribe_to_events()
self._load_widgets()
def _setup_styling(self):
self.set_label("Themes")
self.set_image( Gtk.Image.new_from_icon_name("gtk-page-setup", 4) )
self.set_always_show_image(True)
self.set_image_position(1) # Left - 0, Right = 1
self.set_margin_left(5)
# self.set_margin_right(5)
def _setup_signals(self):
self.connect("clicked", self._show_popover)
def _subscribe_to_events(self):
...
def _load_widgets(self):
popover = ThemePopover()
popover.set_relative_to(self)
def _show_popover(self, widget, eve = None):
event_system.emit("show_theme_popup")