generated from itdominator/Python-With-Gtk-Template
Added proper folder generation and manifest setup
This commit is contained in:
@@ -11,12 +11,17 @@ from .pages_tab_widget import PagesTabWidget
|
||||
|
||||
|
||||
class Page(Gtk.ScrolledWindow):
|
||||
def __init__(self, close_tab):
|
||||
def __init__(self, close_tab, section_pth, manifest_pth):
|
||||
super(Page, self).__init__()
|
||||
|
||||
self._close_tab = close_tab
|
||||
self._tab_widget = PagesTabWidget(self, self._close_tab)
|
||||
|
||||
|
||||
self._manifest_pth = settings.generate_page_manifest(section_pth) if not manifest_pth else manifest_pth
|
||||
self._name = None
|
||||
self._date = None
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._subscribe_to_events()
|
||||
@@ -45,3 +50,16 @@ class Page(Gtk.ScrolledWindow):
|
||||
|
||||
def get_tab_widget(self):
|
||||
return self._tab_widget
|
||||
|
||||
def _load_page_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()
|
||||
|
@@ -1,4 +1,5 @@
|
||||
# Python imports
|
||||
import os
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
@@ -11,16 +12,21 @@ from ..page_widget import Page
|
||||
|
||||
|
||||
|
||||
class PagesException(Exception):
|
||||
...
|
||||
|
||||
|
||||
class Pages(Gtk.Notebook):
|
||||
def __init__(self, close_tab):
|
||||
def __init__(self, close_tab, label = None, section_manifest_pth = None):
|
||||
super(Pages, self).__init__()
|
||||
|
||||
self._close_tab = close_tab
|
||||
self._tab_widget = SectionsTabWidget(self, self._close_tab)
|
||||
self._tab_widget = SectionsTabWidget(self, close_tab, label)
|
||||
self._section_pth = os.path.dirname(section_manifest_pth)
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._load_widgets()
|
||||
self._load_pages_data()
|
||||
|
||||
self.show_all()
|
||||
|
||||
@@ -56,22 +62,41 @@ class Pages(Gtk.Notebook):
|
||||
self.set_action_widget(end_box, 1)
|
||||
|
||||
def _close_tab(self, button, page, eve = None):
|
||||
if self.get_n_pages() == 1:
|
||||
return
|
||||
|
||||
page_num = self.page_num(page)
|
||||
self.remove_page(page_num)
|
||||
|
||||
def create_page_view(self, widget = None, eve = None):
|
||||
page = Page(self._close_tab)
|
||||
def create_page_view(self, widget = None, eve = None, manifest_pth = None):
|
||||
page = Page(self._close_tab, self._section_pth, manifest_pth)
|
||||
page_num = self.append_page(page, page.get_tab_widget())
|
||||
|
||||
self.set_tab_detachable(page, False)
|
||||
self.set_tab_reorderable(page, True)
|
||||
|
||||
self.show_all()
|
||||
page.show_all()
|
||||
self.set_current_page(page_num)
|
||||
|
||||
|
||||
def get_tab_widget(self):
|
||||
return self._tab_widget
|
||||
|
||||
def _text_search(self, widget = None, eve = None):
|
||||
...
|
||||
|
||||
def _load_pages_data(self):
|
||||
if not self._section_pth:
|
||||
raise PagesException("No section path provided...")
|
||||
|
||||
path = self._section_pth
|
||||
pages = settings.clean_pages_list( os.listdir(path) )
|
||||
|
||||
logger.info(f"Loading Page parts from: {path}")
|
||||
if len(pages) == 0:
|
||||
settings.generate_page_manifest(path)
|
||||
|
||||
pages = settings.clean_pages_list( os.listdir(path) )
|
||||
for page in pages:
|
||||
_page = os.path.join(path, page)
|
||||
manifest = os.path.join(_page, "MANIFEST")
|
||||
self.create_page_view(None, None, manifest)
|
||||
|
@@ -13,12 +13,5 @@ from .template.tab_header_template import TabHeaderTemplate
|
||||
class PagesTabWidget(TabHeaderTemplate):
|
||||
""" docstring for PagesTabWidget """
|
||||
|
||||
ccount = 0
|
||||
def __new__(cls, *args, **kwargs):
|
||||
obj = super(PagesTabWidget, cls).__new__(cls)
|
||||
cls.ccount += 1
|
||||
return obj
|
||||
|
||||
|
||||
def __init__(self, container, close_tab):
|
||||
super(PagesTabWidget, self).__init__(container, close_tab)
|
||||
def __init__(self, container, close_tab, label = None):
|
||||
super(PagesTabWidget, self).__init__(container, close_tab, label)
|
||||
|
@@ -15,6 +15,10 @@ 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()
|
||||
@@ -27,10 +31,10 @@ class Sections(Gtk.Notebook):
|
||||
self.set_scrollable(True)
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
event_system.subscribe("create_section_view", self.create_section_view)
|
||||
|
||||
def _subscribe_to_events(self):
|
||||
event_system.subscribe("load_notebook_data", self._load_notebook_data)
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
start_box = Gtk.Box()
|
||||
@@ -39,7 +43,7 @@ class Sections(Gtk.Notebook):
|
||||
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_pages_view)
|
||||
add_btn.connect("released", self.create_section_view)
|
||||
|
||||
end_box.add(add_btn)
|
||||
|
||||
@@ -51,23 +55,37 @@ class Sections(Gtk.Notebook):
|
||||
self.set_action_widget(end_box, 1)
|
||||
|
||||
def _close_tab(self, button, pages, eve = None):
|
||||
if self.get_n_pages() == 1:
|
||||
return
|
||||
|
||||
page_num = self.page_num(pages)
|
||||
self.remove_page(page_num)
|
||||
|
||||
def create_pages_view(self, widget = None, eve = None):
|
||||
pages = Pages(self._close_tab)
|
||||
page_num = self.append_page(pages, pages.get_tab_widget())
|
||||
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.set_tab_detachable(pages, True)
|
||||
self.set_tab_reorderable(pages, True)
|
||||
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.show_all()
|
||||
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 _load_notebook_data(self):
|
||||
path = settings.get_active_notebook()
|
||||
sections = os.listdir(path)
|
||||
logger.info(f"Loading Notebook sections from: {path}")
|
||||
if len(sections) == 0:
|
||||
section = os.path.join(path, "New Section")
|
||||
os.mkdir(section)
|
||||
|
||||
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()
|
||||
|
@@ -13,5 +13,5 @@ from .template.tab_header_template import TabHeaderTemplate
|
||||
class SectionsTabWidget(TabHeaderTemplate):
|
||||
""" docstring for SectionsTabWidget """
|
||||
|
||||
def __init__(self, container, close_tab):
|
||||
super(SectionsTabWidget, self).__init__(container, close_tab)
|
||||
def __init__(self, container, close_tab, label = None):
|
||||
super(SectionsTabWidget, self).__init__(container, close_tab, label)
|
||||
|
@@ -19,11 +19,13 @@ class TabHeaderTemplate(Gtk.Box):
|
||||
return obj
|
||||
|
||||
|
||||
def __init__(self, container, close_tab):
|
||||
def __init__(self, container, close_tab, label = None):
|
||||
super(TabHeaderTemplate, self).__init__()
|
||||
|
||||
self.INDEX = self.ccount
|
||||
logger.info(label)
|
||||
self.NAME = f"tab_{self.INDEX}"
|
||||
self.LABEL = self.NAME if not label else label
|
||||
self._container = container
|
||||
self._close_tab = close_tab # NOTE: Close method in tab_mixin
|
||||
|
||||
@@ -32,7 +34,6 @@ class TabHeaderTemplate(Gtk.Box):
|
||||
self._subscribe_to_events()
|
||||
self._load_widgets()
|
||||
|
||||
self.set_tab_label()
|
||||
self.show_all()
|
||||
|
||||
|
||||
@@ -53,9 +54,10 @@ class TabHeaderTemplate(Gtk.Box):
|
||||
|
||||
# NOTE: Setup with settings and from file
|
||||
label.set_xalign(0.0)
|
||||
label.set_margin_left(25)
|
||||
label.set_margin_right(25)
|
||||
label.set_margin_left(10)
|
||||
label.set_margin_right(10)
|
||||
label.set_hexpand(True)
|
||||
label.set_label(self.LABEL)
|
||||
|
||||
close.set_always_show_image(True)
|
||||
close.set_hexpand(False)
|
||||
|
Reference in New Issue
Block a user