mirror of
https://github.com/koreader/koreader.git
synced 2025-12-18 12:02:09 +01:00
Small fixes to widths computation for a more balanced layout. Decreased min width of names (on the left) from 33% to 25%, to allow more room for toggles on the right. (May make things a little bit too stretched out with english, but should help with other languages that use longer words to name things than english.) Also ignore disabled option names in the names width calculation (noticable on the PDF right most config menu, where toggles were uneededly too small)
116 lines
3.4 KiB
Lua
116 lines
3.4 KiB
Lua
local Blitbuffer = require("ffi/blitbuffer")
|
|
local Button = require("ui/widget/button")
|
|
local Device = require("device")
|
|
local Geom = require("ui/geometry")
|
|
local HorizontalGroup = require("ui/widget/horizontalgroup")
|
|
local InputContainer = require("ui/widget/container/inputcontainer")
|
|
local FrameContainer = require("ui/widget/container/framecontainer")
|
|
local Size = require("ui/size")
|
|
local UIManager = require("ui/uimanager")
|
|
local _ = require("gettext")
|
|
local Screen = Device.screen
|
|
|
|
local ButtonProgressWidget = InputContainer:new{
|
|
width = Screen:scaleBySize(216),
|
|
height = Size.item.height_default,
|
|
padding = Size.padding.small,
|
|
font_face = "cfont",
|
|
font_size = 16,
|
|
enabled = true,
|
|
num_buttons = 2,
|
|
position = 1,
|
|
}
|
|
|
|
function ButtonProgressWidget:init()
|
|
self.buttonprogress_frame = FrameContainer:new{
|
|
background = Blitbuffer.COLOR_WHITE,
|
|
color = Blitbuffer.COLOR_GREY,
|
|
radius = Size.radius.window,
|
|
bordersize = 0,
|
|
padding = self.padding,
|
|
dim = not self.enabled,
|
|
}
|
|
|
|
self.buttonprogress_content = HorizontalGroup:new{}
|
|
self:update()
|
|
self.buttonprogress_frame[1] = self.buttonprogress_content
|
|
self[1] = self.buttonprogress_frame
|
|
self.dimen = Geom:new(self.buttonprogress_frame:getSize())
|
|
end
|
|
|
|
function ButtonProgressWidget:update()
|
|
self.buttonprogress_content:clear()
|
|
local button_margin = Size.margin.tiny
|
|
local button_padding = Size.padding.button
|
|
local button_bordersize = Size.border.button
|
|
local preselect
|
|
local button_width = math.floor(self.width / self.num_buttons) - 2*button_padding - 2*button_margin - 2*button_bordersize
|
|
for i = 1, self.num_buttons do
|
|
if self.position >= i then
|
|
preselect = true
|
|
else
|
|
preselect = false
|
|
end
|
|
local button = Button:new{
|
|
text = "",
|
|
radius = 0,
|
|
margin = button_margin,
|
|
padding = button_padding,
|
|
bordersize = button_bordersize,
|
|
enabled = true,
|
|
width = button_width,
|
|
preselect = preselect,
|
|
text_font_face = self.font_face,
|
|
text_font_size = self.font_size,
|
|
callback = function()
|
|
self.callback(i)
|
|
self.position = i
|
|
self:update()
|
|
end,
|
|
no_focus = true,
|
|
hold_callback = function()
|
|
self.hold_callback(i)
|
|
end,
|
|
}
|
|
table.insert(self.buttonprogress_content, button)
|
|
end
|
|
|
|
UIManager:setDirty(self.show_parrent, function()
|
|
return "ui", self.dimen
|
|
end)
|
|
end
|
|
|
|
function ButtonProgressWidget:setPosition(position)
|
|
self.position = position
|
|
self:update()
|
|
end
|
|
|
|
function ButtonProgressWidget:onFocus()
|
|
self.buttonprogress_frame.background = Blitbuffer.COLOR_BLACK
|
|
return true
|
|
end
|
|
|
|
function ButtonProgressWidget:onUnfocus()
|
|
self.buttonprogress_frame.background = Blitbuffer.COLOR_WHITE
|
|
return true
|
|
end
|
|
|
|
function ButtonProgressWidget:onTapSelect(arg, gev)
|
|
if gev == nil then
|
|
self:circlePosition()
|
|
end
|
|
end
|
|
|
|
function ButtonProgressWidget:circlePosition()
|
|
if self.position then
|
|
self.position = self.position+1
|
|
if self.position > self.num_buttons then
|
|
self.position = 1
|
|
end
|
|
self.callback(self.position)
|
|
self:update()
|
|
end
|
|
end
|
|
|
|
return ButtonProgressWidget
|