mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
KeyValuePage: update to TitleBar widget
This commit is contained in:
@@ -23,7 +23,6 @@ local BD = require("ui/bidi")
|
||||
local Blitbuffer = require("ffi/blitbuffer")
|
||||
local BottomContainer = require("ui/widget/container/bottomcontainer")
|
||||
local Button = require("ui/widget/button")
|
||||
local CloseButton = require("ui/widget/closebutton")
|
||||
local Device = require("device")
|
||||
local Font = require("ui/font")
|
||||
local FrameContainer = require("ui/widget/container/framecontainer")
|
||||
@@ -38,6 +37,7 @@ local OverlapGroup = require("ui/widget/overlapgroup")
|
||||
local Size = require("ui/size")
|
||||
local TextViewer = require("ui/widget/textviewer")
|
||||
local TextWidget = require("ui/widget/textwidget")
|
||||
local TitleBar = require("ui/widget/titlebar")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local VerticalGroup = require("ui/widget/verticalgroup")
|
||||
local VerticalSpan = require("ui/widget/verticalspan")
|
||||
@@ -47,73 +47,6 @@ local Screen = Device.screen
|
||||
local T = require("ffi/util").template
|
||||
local _ = require("gettext")
|
||||
|
||||
local KeyValueTitle = VerticalGroup:new{
|
||||
kv_page = nil,
|
||||
title = "",
|
||||
tface = Font:getFace("tfont"),
|
||||
align = "left",
|
||||
use_top_page_count = false,
|
||||
}
|
||||
|
||||
function KeyValueTitle:init()
|
||||
self.close_button = CloseButton:new{ window = self }
|
||||
local btn_width = self.close_button:getSize().w
|
||||
-- title and close button
|
||||
table.insert(self, OverlapGroup:new{
|
||||
dimen = { w = self.width },
|
||||
TextWidget:new{
|
||||
text = self.title,
|
||||
max_width = self.width - btn_width,
|
||||
face = self.tface,
|
||||
},
|
||||
self.close_button,
|
||||
})
|
||||
-- page count and separation line
|
||||
self.title_bottom = OverlapGroup:new{
|
||||
dimen = { w = self.width, h = Size.line.thick },
|
||||
LineWidget:new{
|
||||
dimen = Geom:new{ w = self.width, h = Size.line.thick },
|
||||
background = Blitbuffer.COLOR_DARK_GRAY,
|
||||
style = "solid",
|
||||
},
|
||||
}
|
||||
if self.use_top_page_count then
|
||||
self.page_cnt = FrameContainer:new{
|
||||
padding = Size.padding.default,
|
||||
margin = 0,
|
||||
bordersize = 0,
|
||||
background = Blitbuffer.COLOR_WHITE,
|
||||
-- overlap offset x will be updated in setPageCount method
|
||||
overlap_offset = {0, -15},
|
||||
TextWidget:new{
|
||||
text = "", -- page count
|
||||
fgcolor = Blitbuffer.COLOR_DARK_GRAY,
|
||||
face = Font:getFace("smallffont"),
|
||||
},
|
||||
}
|
||||
table.insert(self.title_bottom, self.page_cnt)
|
||||
end
|
||||
table.insert(self, self.title_bottom)
|
||||
table.insert(self, VerticalSpan:new{ width = Size.span.vertical_large })
|
||||
end
|
||||
|
||||
function KeyValueTitle:setPageCount(curr, total)
|
||||
if total == 1 then
|
||||
-- remove page count if there is only one page
|
||||
table.remove(self.title_bottom, 2)
|
||||
return
|
||||
end
|
||||
self.page_cnt[1]:setText(curr .. "/" .. total)
|
||||
self.page_cnt.overlap_offset[1] = (self.width - self.page_cnt:getSize().w - 10)
|
||||
self.title_bottom[2] = self.page_cnt
|
||||
end
|
||||
|
||||
function KeyValueTitle:onClose()
|
||||
self.kv_page:onClose()
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
local KeyValueItem = InputContainer:new{
|
||||
key = nil,
|
||||
value = nil,
|
||||
@@ -234,8 +167,9 @@ function KeyValueItem:init()
|
||||
if fit_right_align and value_align_right and value_widget:getWidth() < value_w then
|
||||
-- Because of truncation at glyph boundaries, value_widget
|
||||
-- may be a tad smaller than the specified value_w:
|
||||
-- add some padding to key_w so value is pushed to the screen right border
|
||||
key_w = key_w + ( value_w - value_widget:getWidth() )
|
||||
-- adjust key_w so value is pushed to the screen right border
|
||||
value_w = value_widget:getWidth()
|
||||
key_w = available_width - value_w
|
||||
end
|
||||
key_widget:setMaxWidth(key_w)
|
||||
|
||||
@@ -333,7 +267,6 @@ local KeyValuePage = InputContainer:new{
|
||||
values_lang = nil,
|
||||
-- index for the first item to show
|
||||
show_page = 1,
|
||||
use_top_page_count = false,
|
||||
-- aligment of value when key or value overflows its reserved width (for
|
||||
-- now: 50%): "left" (stick to key), "right" (stick to scren right border)
|
||||
value_overflow_align = "left",
|
||||
@@ -462,14 +395,10 @@ function KeyValuePage:init()
|
||||
}
|
||||
|
||||
local padding = Size.padding.large
|
||||
self.inner_dimen = Geom:new{
|
||||
w = self.dimen.w - 2 * padding,
|
||||
h = self.dimen.h - padding, -- no bottom padding
|
||||
}
|
||||
self.item_width = self.inner_dimen.w
|
||||
self.item_width = self.dimen.w - 2 * padding
|
||||
|
||||
local footer = BottomContainer:new{
|
||||
dimen = self.inner_dimen:copy(),
|
||||
dimen = self.dimen:copy(),
|
||||
self.page_info,
|
||||
}
|
||||
if self.single_page then
|
||||
@@ -477,28 +406,29 @@ function KeyValuePage:init()
|
||||
end
|
||||
|
||||
local page_return = BottomContainer:new{
|
||||
dimen = self.inner_dimen:copy(),
|
||||
dimen = self.dimen:copy(),
|
||||
WidgetContainer:new{
|
||||
dimen = Geom:new{
|
||||
w = self.inner_dimen.w,
|
||||
w = self.dimen.w,
|
||||
h = self.return_button:getSize().h,
|
||||
},
|
||||
self.return_button,
|
||||
}
|
||||
}
|
||||
|
||||
-- setup title bar
|
||||
self.title_bar = KeyValueTitle:new{
|
||||
self.title_bar = TitleBar:new{
|
||||
title = self.title,
|
||||
width = self.item_width,
|
||||
height = Size.item.height_default,
|
||||
use_top_page_count = self.use_top_page_count,
|
||||
kv_page = self,
|
||||
width = self.width,
|
||||
align = "left",
|
||||
with_bottom_line = true,
|
||||
bottom_line_color = Blitbuffer.COLOR_DARK_GRAY,
|
||||
bottom_line_h_padding = padding,
|
||||
close_callback = function() self:onClose() end,
|
||||
}
|
||||
|
||||
-- setup main content
|
||||
local available_height = self.inner_dimen.h
|
||||
- self.title_bar:getSize().h
|
||||
local available_height = self.dimen.h
|
||||
- self.title_bar:getHeight()
|
||||
- Size.span.vertical_large -- for above page_info (as title_bar adds one itself)
|
||||
- (self.single_page and 0 or self.page_info:getSize().h)
|
||||
- 2*Size.line.thick
|
||||
@@ -514,7 +444,8 @@ function KeyValuePage:init()
|
||||
G_reader_settings:readSetting("keyvalues_per_page") or self:getDefaultKeyValuesPerPage()
|
||||
self.item_height = math.floor(available_height / self.items_per_page)
|
||||
-- Put half of the pixels lost by floor'ing between title and content
|
||||
local span_height = math.floor((available_height - (self.items_per_page * (self.item_height))) / 2)
|
||||
local content_height = self.items_per_page * self.item_height
|
||||
local span_height = math.floor((available_height - content_height) / 2)
|
||||
|
||||
-- Font size is not configurable: we can get a good one from the following
|
||||
local TextBoxWidget = require("ui/widget/textboxwidget")
|
||||
@@ -525,29 +456,32 @@ function KeyValuePage:init()
|
||||
self.pages = math.ceil(#self.kv_pairs / self.items_per_page)
|
||||
self.main_content = VerticalGroup:new{}
|
||||
|
||||
-- set textviewer height to let our title fully visible
|
||||
-- set textviewer height to let our title fully visible (but hide the bottom line)
|
||||
self.textviewer_width = self.item_width
|
||||
self.textviewer_height = self.dimen.h - 2*self.title_bar:getSize().h
|
||||
self.textviewer_height = self.dimen.h - 2 * (self.title_bar:getHeight() - Size.padding.default - Size.line.thick)
|
||||
|
||||
self:_populateItems()
|
||||
|
||||
local content = OverlapGroup:new{
|
||||
allow_mirroring = false,
|
||||
dimen = self.inner_dimen:copy(),
|
||||
dimen = self.dimen:copy(),
|
||||
VerticalGroup:new{
|
||||
align = "left",
|
||||
self.title_bar,
|
||||
VerticalSpan:new{ width = span_height },
|
||||
self.main_content,
|
||||
HorizontalGroup:new{
|
||||
HorizontalSpan:new{ width = padding },
|
||||
self.main_content,
|
||||
}
|
||||
},
|
||||
page_return,
|
||||
footer,
|
||||
}
|
||||
-- assemble page
|
||||
self[1] = FrameContainer:new{
|
||||
width = self.dimen.w,
|
||||
height = self.dimen.h,
|
||||
padding = padding,
|
||||
padding_bottom = 0,
|
||||
padding = 0,
|
||||
margin = 0,
|
||||
bordersize = 0,
|
||||
background = Blitbuffer.COLOR_WHITE,
|
||||
|
||||
Reference in New Issue
Block a user