generated from itdominator/Python-With-Gtk-Template
Initial tableting structure
This commit is contained in:
@@ -29,7 +29,7 @@ def daemon_threaded_wrapper(fn):
|
||||
|
||||
# NOTE: Just reminding myself we can add to builtins two different ways...
|
||||
# __builtins__.update({"event_system": Builtins()})
|
||||
builtins.app_name = "<change_me>"
|
||||
builtins.app_name = "Coherence"
|
||||
builtins.keybindings = Keybindings()
|
||||
builtins.event_system = EventSystem()
|
||||
builtins.endpoint_registry = EndpointRegistry()
|
||||
|
@@ -10,14 +10,12 @@ from gi.repository import GLib
|
||||
|
||||
# Application imports
|
||||
from .mixins.signals_mixins import SignalsMixins
|
||||
from .mixins.dummy_mixin import DummyMixin
|
||||
from .controller_data import ControllerData
|
||||
from .core_widget import CoreWidget
|
||||
from .widgets.sections.sections_widget import Sections
|
||||
|
||||
|
||||
|
||||
|
||||
class Controller(DummyMixin, SignalsMixins, ControllerData):
|
||||
class Controller(SignalsMixins, ControllerData):
|
||||
def __init__(self, args, unknownargs):
|
||||
self.setup_controller_data()
|
||||
|
||||
@@ -25,8 +23,6 @@ class Controller(DummyMixin, SignalsMixins, ControllerData):
|
||||
self._setup_signals()
|
||||
self._subscribe_to_events()
|
||||
|
||||
self.print_hello_world() # A mixin method from the DummyMixin file
|
||||
|
||||
logger.info(f"Made it past {self.__class__} loading...")
|
||||
|
||||
|
||||
@@ -48,7 +44,7 @@ class Controller(DummyMixin, SignalsMixins, ControllerData):
|
||||
self.builder.expose_object("main_window", self.window)
|
||||
|
||||
settings.set_builder(self.builder)
|
||||
self.core_widget = CoreWidget()
|
||||
self.core_widget = Sections()
|
||||
|
||||
settings.register_signals_to_builder([self, self.core_widget])
|
||||
|
||||
|
@@ -1,44 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
|
||||
class CoreWidget(Gtk.Box):
|
||||
def __init__(self):
|
||||
super(CoreWidget, self).__init__()
|
||||
|
||||
self._builder = settings.get_builder()
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._load_widgets()
|
||||
|
||||
self.show_all()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_orientation(1)
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
glade_box = self._builder.get_object("glade_box")
|
||||
button = Gtk.Button(label="Click Me!")
|
||||
|
||||
button.connect("clicked", self._hello_world)
|
||||
|
||||
self.add(button)
|
||||
self.add(glade_box)
|
||||
|
||||
|
||||
|
||||
def _hello_world(self, widget=None, eve=None):
|
||||
print("Hello, World!")
|
@@ -1,14 +0,0 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
|
||||
class DummyMixin:
|
||||
""" DummyMixin is an example of how mixins are used and structured in a project. """
|
||||
|
||||
def print_hello_world(self) -> None:
|
||||
print("Hello, World!")
|
3
src/core/widgets/__init__.py
Normal file
3
src/core/widgets/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Widgets Module
|
||||
"""
|
47
src/core/widgets/page_widget.py
Normal file
47
src/core/widgets/page_widget.py
Normal file
@@ -0,0 +1,47 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from .pages_tab_widget import PagesTabWidget
|
||||
|
||||
|
||||
|
||||
class Page(Gtk.ScrolledWindow):
|
||||
def __init__(self, close_tab):
|
||||
super(Page, self).__init__()
|
||||
|
||||
self._close_tab = close_tab
|
||||
self._tab_widget = PagesTabWidget(self, self._close_tab)
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._subscribe_to_events()
|
||||
self._load_widgets()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
...
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
|
||||
def _subscribe_to_events(self):
|
||||
# event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc)
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
viewport = Gtk.Viewport()
|
||||
viewport.set_vexpand(True)
|
||||
viewport.set_hexpand(True)
|
||||
|
||||
fixed = Gtk.Fixed()
|
||||
viewport.add(fixed)
|
||||
|
||||
self.add(viewport)
|
||||
|
||||
def get_tab_widget(self):
|
||||
return self._tab_widget
|
3
src/core/widgets/pages/__init__.py
Normal file
3
src/core/widgets/pages/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Pages Module
|
||||
"""
|
51
src/core/widgets/pages/pages_widget.py
Normal file
51
src/core/widgets/pages/pages_widget.py
Normal file
@@ -0,0 +1,51 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from ..sections_tab_widget import SectionsTabWidget
|
||||
from ..page_widget import Page
|
||||
|
||||
|
||||
|
||||
class Pages(Gtk.Notebook):
|
||||
def __init__(self, close_tab):
|
||||
super(Pages, self).__init__()
|
||||
|
||||
self._close_tab = close_tab
|
||||
self._tab_widget = SectionsTabWidget(self, self._close_tab)
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._load_widgets()
|
||||
|
||||
self.show_all()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_tab_pos(1) # NOTE: LEFT = 0, RIGHT = 1, TOP = 2, BOTTOM = 3
|
||||
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
page = Page(self.close_tab)
|
||||
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()
|
||||
self.set_current_page(page_num)
|
||||
|
||||
|
||||
def get_tab_widget(self):
|
||||
return self._tab_widget
|
||||
|
||||
def close_tab(self, button, page, eve = None):
|
||||
page_num = self.page_num(page)
|
||||
self.remove_page(page_num)
|
24
src/core/widgets/pages_tab_widget.py
Normal file
24
src/core/widgets/pages_tab_widget.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
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)
|
3
src/core/widgets/sections/__init__.py
Normal file
3
src/core/widgets/sections/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Sections Module
|
||||
"""
|
46
src/core/widgets/sections/sections_widget.py
Normal file
46
src/core/widgets/sections/sections_widget.py
Normal file
@@ -0,0 +1,46 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
from ..pages.pages_widget import Pages
|
||||
|
||||
|
||||
|
||||
class Sections(Gtk.Notebook):
|
||||
def __init__(self):
|
||||
super(Sections, self).__init__()
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._load_widgets()
|
||||
|
||||
self.show_all()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
...
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
self.create_view()
|
||||
...
|
||||
|
||||
def create_view(self, widget = None, eve = None, gfile = None):
|
||||
pages = Pages(self.close_tab)
|
||||
page_num = self.append_page(pages, pages.get_tab_widget())
|
||||
|
||||
self.set_tab_detachable(pages, True)
|
||||
self.set_tab_reorderable(pages, True)
|
||||
|
||||
self.show_all()
|
||||
self.set_current_page(page_num)
|
||||
|
||||
def close_tab(self, button, pages, eve = None):
|
||||
page_num = self.page_num(pages)
|
||||
self.remove_page(page_num)
|
17
src/core/widgets/sections_tab_widget.py
Normal file
17
src/core/widgets/sections_tab_widget.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
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)
|
3
src/core/widgets/template/__init__.py
Normal file
3
src/core/widgets/template/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
"""
|
||||
Teplate Module
|
||||
"""
|
69
src/core/widgets/template/tab_header_template.py
Normal file
69
src/core/widgets/template/tab_header_template.py
Normal file
@@ -0,0 +1,69 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
from gi.repository import Gtk
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
class TabHeaderTemplate(Gtk.Box):
|
||||
""" docstring for TabHeaderTemplate """
|
||||
|
||||
ccount = 0
|
||||
def __new__(cls, *args, **kwargs):
|
||||
obj = super(TabHeaderTemplate, cls).__new__(cls)
|
||||
cls.ccount += 1
|
||||
return obj
|
||||
|
||||
|
||||
def __init__(self, container, close_tab):
|
||||
super(TabHeaderTemplate, self).__init__()
|
||||
|
||||
self.INDEX = self.ccount
|
||||
self.NAME = f"tab_{self.INDEX}"
|
||||
self._container = container
|
||||
self._close_tab = close_tab # NOTE: Close method in tab_mixin
|
||||
|
||||
self._setup_styling()
|
||||
self._setup_signals()
|
||||
self._subscribe_to_events()
|
||||
self._load_widgets()
|
||||
|
||||
self.set_tab_label()
|
||||
self.show_all()
|
||||
|
||||
|
||||
def _setup_styling(self):
|
||||
self.set_orientation(0)
|
||||
self.set_hexpand(False)
|
||||
|
||||
def _setup_signals(self):
|
||||
...
|
||||
|
||||
def _subscribe_to_events(self):
|
||||
...
|
||||
|
||||
def _load_widgets(self):
|
||||
label = Gtk.Label()
|
||||
close = Gtk.Button()
|
||||
icon = Gtk.Image(stock=Gtk.STOCK_CLOSE)
|
||||
|
||||
# NOTE: Setup with settings and from file
|
||||
label.set_xalign(0.0)
|
||||
label.set_margin_left(25)
|
||||
label.set_margin_right(25)
|
||||
label.set_hexpand(True)
|
||||
|
||||
close.set_always_show_image(True)
|
||||
close.set_hexpand(False)
|
||||
close.set_image( Gtk.Image.new_from_icon_name("gtk-close", 4) )
|
||||
close.connect("released", self._close_tab, *(self._container,))
|
||||
|
||||
self.add(label)
|
||||
self.add(close)
|
||||
|
||||
def set_tab_label(self, label = "untitled"):
|
||||
self.get_children()[0].set_label(label)
|
Reference in New Issue
Block a user