(Init): Added shit
This commit is contained in:
98
nirimod/pages/base.py
Normal file
98
nirimod/pages/base.py
Normal file
@@ -0,0 +1,98 @@
|
||||
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "4.0")
|
||||
gi.require_version("Adw", "1")
|
||||
gi.require_version("Gio", "2.0")
|
||||
|
||||
from gi.repository import Adw, Gtk, Gio
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from nirimod.window import NiriModWindow
|
||||
|
||||
|
||||
def make_toolbar_page(
|
||||
title: str,
|
||||
window=None,
|
||||
) -> tuple[Adw.ToolbarView, Adw.HeaderBar, Gtk.ScrolledWindow, Gtk.Box]:
|
||||
tb = Adw.ToolbarView()
|
||||
header = Adw.HeaderBar()
|
||||
tb.add_top_bar(header)
|
||||
|
||||
# Hamburger menu on the content header (appears next to window close button)
|
||||
if window is not None:
|
||||
menu = Gio.Menu()
|
||||
menu.append("Profiles", "win.open_profiles")
|
||||
menu.append("Preferences", "win.open_preferences")
|
||||
menu.append("Restore Backup...", "win.reset_config")
|
||||
|
||||
kofi_section = Gio.Menu()
|
||||
kofi_section.append("Support on Ko-fi ☕", "win.open_kofi")
|
||||
menu.append_section(None, kofi_section)
|
||||
|
||||
menu_btn = Gtk.MenuButton(icon_name="open-menu-symbolic")
|
||||
menu_btn.set_tooltip_text("Menu")
|
||||
menu_btn.add_css_class("flat")
|
||||
menu_btn.set_menu_model(menu)
|
||||
header.pack_end(menu_btn)
|
||||
|
||||
scroll = Gtk.ScrolledWindow()
|
||||
scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
|
||||
scroll.set_vexpand(True)
|
||||
|
||||
content = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=20)
|
||||
content.set_margin_start(32)
|
||||
content.set_margin_end(32)
|
||||
content.set_margin_top(24)
|
||||
content.set_margin_bottom(32)
|
||||
scroll.set_child(content)
|
||||
tb.set_content(scroll)
|
||||
|
||||
return tb, header, scroll, content
|
||||
|
||||
|
||||
class BasePage:
|
||||
def __init__(self, window: "NiriModWindow"):
|
||||
self._win = window
|
||||
|
||||
def _make_toolbar_page(
|
||||
self, title: str
|
||||
) -> tuple[Adw.ToolbarView, Adw.HeaderBar, Gtk.ScrolledWindow, Gtk.Box]:
|
||||
return make_toolbar_page(title, window=self._win)
|
||||
|
||||
@property
|
||||
def _nodes(self):
|
||||
return self._win.get_nodes()
|
||||
|
||||
def _commit(self, description: str = "change"):
|
||||
app_state = self._win.app_state
|
||||
after = app_state.write_current_kdl()
|
||||
|
||||
before = app_state.undo.last_snapshot
|
||||
if before is None:
|
||||
before = app_state.saved_kdl
|
||||
|
||||
if before != after:
|
||||
self._win.push_undo(description, before, after)
|
||||
|
||||
if after == app_state.saved_kdl:
|
||||
self._win.mark_clean()
|
||||
else:
|
||||
self._win.mark_dirty()
|
||||
|
||||
def build(self) -> Gtk.Widget:
|
||||
raise NotImplementedError
|
||||
|
||||
def refresh(self):
|
||||
pass
|
||||
|
||||
def on_shown(self):
|
||||
pass
|
||||
|
||||
def show_toast(self, msg: str, timeout: int = 3):
|
||||
self._win.show_toast(msg, timeout)
|
||||
Reference in New Issue
Block a user