summaryrefslogtreecommitdiff
path: root/python/astal
diff options
context:
space:
mode:
Diffstat (limited to 'python/astal')
-rw-r--r--python/astal/__init__.py17
-rw-r--r--python/astal/application.py62
-rw-r--r--python/astal/binding.py33
-rw-r--r--python/astal/variable.py100
-rw-r--r--python/astal/widget.py78
5 files changed, 0 insertions, 290 deletions
diff --git a/python/astal/__init__.py b/python/astal/__init__.py
deleted file mode 100644
index 58d0a0d..0000000
--- a/python/astal/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import gi
-
-gi.require_version("Astal", "0.1")
-gi.require_version("Gtk", "3.0")
-gi.require_version("Gdk", "3.0")
-gi.require_version("GLib", "2.0")
-gi.require_version("Gio", "2.0")
-gi.require_version("GObject", "2.0")
-from gi.repository import Astal, Gtk, GLib, Gio, GObject, Gdk
-from .application import App
-from .variable import Variable
-from .binding import Binding
-from . import widget as Widget
-
-bind = Binding
-
-__all__ = ["App", "Variable", "Widget" "bind", "Astal", "Gtk", "Gdk", "GLib", "Gio", "GObject"]
diff --git a/python/astal/application.py b/python/astal/application.py
deleted file mode 100644
index b5d5c41..0000000
--- a/python/astal/application.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from collections.abc import Callable
-from gi.repository import Astal, Gio
-
-RequestHandler = Callable[[str, Callable[[str], None]], None]
-
-
-class _Application(Astal.Application):
- def __init__(self) -> None:
- super().__init__()
- self.request_handler: RequestHandler | None = None
-
- def do_request(self, msg: str, conn: Gio.SocketConnection) -> None:
- if self.request_handler:
- self.request_handler(
- msg,
- lambda response: Astal.write_sock(
- conn,
- str(response),
- lambda _, res: Astal.write_sock_finish(res),
- ),
- )
- else:
- super().do_request(msg, conn)
-
- def start(
- self,
- instance_name: str | None = None,
- gtk_theme: str | None = None,
- icon_theme: str | None = None,
- cursor_theme: str | None = None,
- css: str | None = None,
- hold: bool | None = True,
- request_handler: RequestHandler | None = None,
- callback: Callable | None = None,
- ) -> None:
- if request_handler:
- self.request_handler = request_handler
- if hold:
- self.hold()
- if instance_name:
- self.instance_name = instance_name
- if gtk_theme:
- self.gtk_theme = gtk_theme
- if icon_theme:
- self.icon_theme = icon_theme
- if cursor_theme:
- self.cursor_theme = icon_theme
- if css:
- self.apply_css(css, False)
- if not self.acquire_socket():
- print(f"Astal instance {self.instance_name} already running")
- return
-
- def on_activate(app):
- if callback:
- callback()
-
- self.connect("activate", on_activate)
- self.run()
-
-
-App = _Application()
diff --git a/python/astal/binding.py b/python/astal/binding.py
deleted file mode 100644
index 0fe1b6c..0000000
--- a/python/astal/binding.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import re
-
-
-def kebabify(string):
- return re.sub(r"([a-z])([A-Z])", r"\1-\2", string).replace("_", "-").lower()
-
-
-class Binding:
- def __init__(self, emitter, prop=None):
- self.emitter = emitter
- self.prop = kebabify(prop) if prop else None
- self.transform_fn = lambda v: v
-
- def __str__(self):
- return f"Binding<{self.emitter}{', ' + self.prop if self.prop else ''}>"
-
- def as_(self, fn):
- bind = Binding(self.emitter, self.prop)
- bind.transform_fn = lambda v: fn(self.transform_fn(v))
- return bind
-
- def get(self):
- if hasattr(self.emitter, "get") and callable(self.emitter.get):
- return self.transform_fn(self.emitter.get())
-
- return self.transform_fn(self.emitter[f"get_{self.prop}"]())
-
- def subscribe(self, callback):
- if hasattr(self.emitter, "subscribe") and callable(self.emitter.subscribe):
- return self.emitter.subscribe(lambda _: callback(self.get()))
-
- i = self.emitter.connect(f"notify::{self.prop}", lambda: callback(self.get()))
- return lambda: self.emitter.disconnect(i)
diff --git a/python/astal/variable.py b/python/astal/variable.py
deleted file mode 100644
index 9b165cd..0000000
--- a/python/astal/variable.py
+++ /dev/null
@@ -1,100 +0,0 @@
-from gi.repository import Astal
-
-from .binding import Binding
-
-
-class Variable:
- def __init__(self, init):
- v = Astal.Variable.new(init)
- self._variable = v
- self._err_handler = print
- v.connect("error", lambda _, err: self._err_handler(err) if self._err_handler else None)
-
- def __call__(self, transform=None):
- if transform:
- return Binding(self).as_(transform)
-
- return Binding(self)
-
- def __str__(self):
- return f"Variable<{self.get()}>"
-
- def get(self):
- return self._variable.get_value()
-
- def set(self, value):
- return self._variable.set_value(value)
-
- def watch(self, cmd):
- if isinstance(cmd, str):
- self._variable.watch(cmd)
- elif isinstance(cmd, list):
- self._variable.watchv(cmd)
- return self
-
- def poll(self, interval, cmd):
- if isinstance(cmd, str):
- self._variable.poll(interval, cmd)
- elif isinstance(cmd, list):
- self._variable.pollv(interval, cmd)
- else:
- self._variable.pollfn(interval, cmd)
- return self
-
- def start_watch(self):
- self._variable.start_watch()
-
- def start_poll(self):
- self._variable.start_poll()
-
- def stop_watch(self):
- self._variable.stop_watch()
-
- def stop_poll(self):
- self._variable.stop_poll()
-
- def drop(self):
- self._variable.emit_dropped()
- self._variable.run_dispose()
-
- def on_dropped(self, callback):
- self._variable.connect("dropped", lambda _: callback())
- return self
-
- def on_error(self, callback):
- self._err_handler = None
- self._variable.connect("error", lambda _, e: callback(e))
- return self
-
- def subscribe(self, callback):
- s = self._variable.connect("changed", lambda _: callback(self.get()))
- return lambda: self._variable.disconnect(s)
-
- def observe(self, objs, sigOrFn, callback=None):
- if callable(sigOrFn):
- f = sigOrFn
- elif callable(callback):
- f = callback
- else:
- f = lambda *_: self.get()
-
- def setter(*args):
- self.set(f(*args))
-
- if isinstance(objs, list):
- for obj in objs:
- obj[0].connect(obj[1], setter)
- elif isinstance(sigOrFn, str):
- objs.connect(sigOrFn, setter)
-
- return self
-
- @staticmethod
- def derive(deps, fn):
- def update():
- return fn(*[d.get() for d in deps])
-
- derived = Variable(update())
- unsubs = [dep.subscribe(lambda _: derived.set(update())) for dep in deps]
- derived.on_dropped(lambda: ([unsub() for unsub in unsubs]))
- return derived
diff --git a/python/astal/widget.py b/python/astal/widget.py
deleted file mode 100644
index 8f2285f..0000000
--- a/python/astal/widget.py
+++ /dev/null
@@ -1,78 +0,0 @@
-from gi.repository import Astal, Gtk
-from .binding import Binding, kebabify
-
-
-def set_child(self, child):
- if isinstance(self, Gtk.Bin):
- self.remove(self.get_child())
- if isinstance(self, Gtk.Container):
- self.add(child)
-
-
-def astalify(ctor):
- ctor.set_css = Astal.widget_set_css
- ctor.get_css = Astal.widget_get_css
-
- ctor.set_class_name = lambda self, names: Astal.widget_set_class_names(self, names.split())
- ctor.get_class_name = lambda self: " ".join(Astal.widget_set_class_names(self))
-
- ctor.set_cursor = Astal.widget_set_cursor
- ctor.get_cursor = Astal.widget_get_cursor
-
- def widget(**kwargs):
- args = {}
- bindings = {}
- handlers = {}
- setup = None
- if not hasattr(kwargs, "visible"):
- kwargs["visible"] = True
-
- for key, value in kwargs.items():
- if key == "setup":
- setup = value
- if isinstance(value, Binding):
- bindings[key] = value
- if key.startswith("on_"):
- handlers[key] = value
- else:
- args[key] = value
-
- self = ctor(**args)
-
- for key, value in bindings.items():
- setter = getattr(self, f"set_{key}")
- setter(value.get())
- unsub = value.subscribe(setter)
- self.connect("destroy", lambda _: unsub())
-
- for key, value in handlers.items():
- self.connect(kebabify(key.replace("on_", "")), value)
-
- if setup:
- setup(self)
-
- return self
-
- return widget
-
-
-Box = astalify(Astal.Box),
-Button = astalify(Astal.Button),
-CenterBox = astalify(Astal.CenterBox),
-# TODO: CircularProgress
-DrawingArea = astalify(Gtk.DrawingArea),
-Entry = astalify(Gtk.Entry),
-EventBox = astalify(Astal.EventBox),
-# TODO: Fixed
-# TODO: FlowBox
-Icon = astalify(Astal.Icon),
-Label = astalify(Gtk.Label),
-LevelBar = astalify(Astal.LevelBar),
-# TODO: ListBox
-Overlay = astalify(Astal.Overlay),
-Revealer = astalify(Gtk.Revealer),
-Scrollable = astalify(Astal.Scrollable),
-Slider = astalify(Astal.Slider),
-# TODO: Stack
-Switch = astalify(Gtk.Switch),
-Window = astalify(Astal.Window),