summaryrefslogtreecommitdiff
path: root/core/lua/astal/binding.lua
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-10-15 01:26:32 +0200
committerAylur <[email protected]>2024-10-15 01:26:32 +0200
commit2f71cd4c08bb4514efe43533e6a5d03535204c29 (patch)
treefc991a12e159ad645187862c90f40731794d6e47 /core/lua/astal/binding.lua
parent9fab13452a26ed55c01047d4225f699f43bba20d (diff)
refactor lua and gjs lib
Diffstat (limited to 'core/lua/astal/binding.lua')
-rw-r--r--core/lua/astal/binding.lua71
1 files changed, 0 insertions, 71 deletions
diff --git a/core/lua/astal/binding.lua b/core/lua/astal/binding.lua
deleted file mode 100644
index ba1e6e4..0000000
--- a/core/lua/astal/binding.lua
+++ /dev/null
@@ -1,71 +0,0 @@
-local lgi = require("lgi")
-local GObject = lgi.require("GObject", "2.0")
-
----@class Binding
----@field emitter table|Variable
----@field property? string
----@field transformFn function
-local Binding = {}
-
----@param emitter table
----@param property? string
----@return Binding
-function Binding.new(emitter, property)
- return setmetatable({
- emitter = emitter,
- property = property,
- transformFn = function(v)
- return v
- end,
- }, Binding)
-end
-
-function Binding:__tostring()
- local str = "Binding<" .. tostring(self.emitter)
- if self.property ~= nil then
- str = str .. ", " .. self.property
- end
- return str .. ">"
-end
-
-function Binding:get()
- if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then
- return self.transformFn(self.emitter[self.property])
- end
- if type(self.emitter.get) == "function" then
- return self.transformFn(self.emitter:get())
- end
- error("can not get: Not a GObject or a Variable " + self)
-end
-
----@param transform fun(value: any): any
----@return Binding
-function Binding:as(transform)
- local b = Binding.new(self.emitter, self.property)
- b.transformFn = function(v)
- return transform(self.transformFn(v))
- end
- return b
-end
-
----@param callback fun(value: any)
----@return function
-function Binding:subscribe(callback)
- if self.property ~= nil and GObject.Object:is_type_of(self.emitter) then
- local id = self.emitter.on_notify:connect(function()
- callback(self:get())
- end, self.property, false)
- return function()
- GObject.signal_handler_disconnect(self.emitter, id)
- end
- end
- if type(self.emitter.subscribe) == "function" then
- return self.emitter:subscribe(function()
- callback(self:get())
- end)
- end
- error("can not subscribe: Not a GObject or a Variable " + self)
-end
-
-Binding.__index = Binding
-return Binding