dotfiles/.config/lite-xl/libraries/widget/inputdialog.lua

88 lines
2.2 KiB
Lua

--
-- Input Dialog Widget.
-- @copyright Jefferson Gonzalez
-- @license MIT
--
local style = require "core.style"
local Button = require "libraries.widget.button"
local Dialog = require "libraries.widget.dialog"
local Label = require "libraries.widget.label"
local TextBox = require "libraries.widget.textbox"
---@class widget.inputdialog : widget.dialog
---@field super widget.dialog
---@field message widget.label
---@field text widget.textbox
---@field save widget.button
---@field cancel widget.button
local InputDialog = Dialog:extend()
---Constructor
---@param title string
---@param message string
---@param text string
function InputDialog:new(title, message, text)
InputDialog.super.new(self, title or "Enter Value")
self.type_name = "widget.inputdialog"
self.message = Label(self.panel, message)
self.text = TextBox(self.panel, text or "")
local this = self
self.save = Button(self.panel, "Save")
self.save:set_icon("S")
function self.save:on_click()
this:on_save(this.text:get_text())
this:on_close()
end
self.cancel = Button(self.panel, "Cancel")
self.cancel:set_icon("C")
function self.cancel:on_click()
this:on_close()
end
end
---Called when the user clicks on save
---@param value string
function InputDialog:on_save(value) end
function InputDialog:update()
if not InputDialog.super.update(self) then return false end
self.message:set_position(style.padding.x/2, 0)
self.text:set_position(style.padding.x/2, self.message:get_bottom() + style.padding.y)
self.save:set_position(
style.padding.x/2,
self.text:get_bottom() + style.padding.y
)
self.cancel:set_position(
self.save:get_right() + style.padding.x,
self.text:get_bottom() + style.padding.y
)
self.panel.size.x = self.panel:get_real_width() + style.padding.x
self.panel.size.y = self.panel:get_real_height()
self.size.x = self:get_real_width() - (style.padding.x / 2)
self.size.y = self:get_real_height() + (style.padding.y / 2)
self.text:set_size(
self.size.x - style.padding.x,
self.text:get_real_height()
)
self.close:set_position(
self.size.x - self.close.size.x - (style.padding.x / 2),
style.padding.y / 2
)
return true
end
return InputDialog