# Python imports import os # Lib imports import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk # Application imports from ..pages.pages_widget import Pages from ..widget_selector.widget_selector_grid import WidgetSelector class Sections(Gtk.Notebook): def __init__(self): super(Sections, self).__init__() self._manifest_pth = None self._name = None self._date = None self._setup_styling() self._setup_signals() self._subscribe_to_events() self._load_widgets() self.show_all() def _setup_styling(self): self.set_scrollable(True) def _setup_signals(self): self.connect("switch-page", self._switch_page_update) def _subscribe_to_events(self): event_system.subscribe("create_section_view", self.create_section_view) def _load_widgets(self): start_box = Gtk.Box() end_box = Gtk.Box() search = Gtk.SearchEntry() search.set_placeholder_text("Search...") search.connect("changed", self._text_search) add_btn = Gtk.Button() add_btn.set_image( Gtk.Image.new_from_icon_name("add", 4) ) add_btn.set_always_show_image(True) add_btn.connect("released", self.create_section_view) widgets_btn = Gtk.Button() widgets_btn.set_image( Gtk.Image.new_from_icon_name("gtk-cdrom", 4) ) widgets_btn.set_always_show_image(True) widgets_btn.connect("released", self.show_widgets_selection) widget_selector = WidgetSelector() widget_selector.set_relative_to(widgets_btn) widget_selector.set_position(3) start_box.add(widgets_btn) end_box.add(add_btn) end_box.add(search) start_box.show_all() end_box.show_all() # PACKTYPE: 0 Start, 1 = End self.set_action_widget(start_box, 0) self.set_action_widget(end_box, 1) def _text_search(self, widget = None, eve = None): query = widget.get_text() event_system.emit("handle_search_query", (widget, query)) def _close_tab(self, button, pages, eve = None): if self.get_n_pages() == 1: return page_num = self.page_num(pages) msg = f"Do you really want to delete the Notebook Section?" response = event_system.emit_and_await("delete_files", (None, None, [pages.get_section_pth(),], msg)) if response == -8: self.remove_page(page_num) def _load_section_manifest(self, manifest_pth = None): if manifest_pth: self._manifest_pth = manifest_pth with open(self._manifest_pth, "r") as f: lines = f.readlines() for line in lines: parts = line.split("=") if parts[0] == "name": self._name = parts[1].strip() if parts[0] == "date": self._date = parts[1].strip() def create_section_view(self, widget = None, eve = None, manifest_pth = None): self._manifest_pth = manifest_pth if not manifest_pth: self._manifest_pth = settings.generate_section_manifest() self._load_section_manifest() pages_view = Pages(self._close_tab, self._name, self._manifest_pth) page_num = self.append_page(pages_view, pages_view.get_tab_widget()) self.set_tab_detachable(pages_view, True) self.set_tab_reorderable(pages_view, True) pages_view.show_all() self.set_current_page(page_num) def _switch_page_update(self, notebook, page, page_num): path = page.get_section_pth() settings.set_active_section(path) def show_widgets_selection(self, widget = None, eve = None): event_system.emit("show_widget_types")