2012-06-26 00:13:30 +02:00
|
|
|
-- @docclass
|
2012-01-10 23:13:40 +01:00
|
|
|
UITabBar = extends(UIWidget)
|
2012-01-13 00:47:31 +01:00
|
|
|
|
|
|
|
-- private functions
|
2012-01-14 02:37:15 +01:00
|
|
|
local function onTabClick(tab)
|
|
|
|
tab.tabBar:selectTab(tab)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
local function tabBlink(tab)
|
|
|
|
if not tab.blinking then return end
|
|
|
|
tab:setOn(not tab:isOn())
|
2012-04-27 06:54:14 +02:00
|
|
|
tab.blinkEvent = scheduleEvent(function() tabBlink(tab) end, 500)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
-- public functions
|
|
|
|
function UITabBar.create()
|
|
|
|
local tabbar = UITabBar.internalCreate()
|
2012-01-13 21:37:44 +01:00
|
|
|
tabbar:setFocusable(false)
|
2012-01-13 00:47:31 +01:00
|
|
|
tabbar.tabs = {}
|
|
|
|
return tabbar
|
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:setContentWidget(widget)
|
|
|
|
self.contentWidget = widget
|
|
|
|
if #self.tabs > 0 then
|
|
|
|
self.contentWidget:addChild(self.tabs[1].tabPanel)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:addTab(text, panel)
|
|
|
|
if panel == nil then
|
2012-06-26 00:13:30 +02:00
|
|
|
panel = g_ui.createWidget(self:getStyleName() .. 'Panel')
|
2012-04-27 06:54:14 +02:00
|
|
|
panel:setId('tabPanel')
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-06-26 00:13:30 +02:00
|
|
|
local tab = g_ui.createWidget(self:getStyleName() .. 'Button', self)
|
2012-03-25 19:10:19 +02:00
|
|
|
panel.isTab = true
|
2012-01-14 02:37:15 +01:00
|
|
|
tab.tabPanel = panel
|
|
|
|
tab.tabBar = self
|
2012-04-27 06:54:14 +02:00
|
|
|
tab:setId('tab')
|
2012-01-14 02:37:15 +01:00
|
|
|
tab:setText(text)
|
|
|
|
tab:setWidth(tab:getTextSize().width + tab:getPaddingLeft() + tab:getPaddingRight())
|
2012-03-18 14:34:39 +01:00
|
|
|
tab.onClick = onTabClick
|
|
|
|
tab.onDestroy = function() tab.tabPanel:destroy() end
|
2012-01-13 00:47:31 +01:00
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
table.insert(self.tabs, tab)
|
2012-01-13 00:47:31 +01:00
|
|
|
if #self.tabs == 1 then
|
2012-01-14 02:37:15 +01:00
|
|
|
self:selectTab(tab)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
return tab
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-02-03 05:32:39 +01:00
|
|
|
function UITabBar:removeTab(tab)
|
|
|
|
local index = table.find(self.tabs, tab)
|
|
|
|
if index == nil then return end
|
|
|
|
if self.currentTab == tab then
|
|
|
|
self:selectPrevTab()
|
|
|
|
end
|
|
|
|
table.remove(self.tabs, index)
|
2012-04-27 06:54:14 +02:00
|
|
|
if tab.blinkEvent then
|
|
|
|
removeEvent(tab.blinkEvent)
|
|
|
|
end
|
2012-02-03 05:32:39 +01:00
|
|
|
tab:destroy()
|
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
function UITabBar:getTab(text)
|
|
|
|
for k,tab in pairs(self.tabs) do
|
2012-02-03 10:59:04 +01:00
|
|
|
if tab:getText():lower() == text:lower() then
|
2012-01-14 02:37:15 +01:00
|
|
|
return tab
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:selectTab(tab)
|
|
|
|
if self.currentTab == tab then return end
|
2012-01-13 00:47:31 +01:00
|
|
|
if self.contentWidget then
|
2012-03-25 19:10:19 +02:00
|
|
|
local selectedWidget = self.contentWidget:getLastChild()
|
|
|
|
if selectedWidget and selectedWidget.isTab then
|
2012-01-13 00:47:31 +01:00
|
|
|
self.contentWidget:removeChild(selectedWidget)
|
|
|
|
end
|
2012-01-14 02:37:15 +01:00
|
|
|
self.contentWidget:addChild(tab.tabPanel)
|
|
|
|
tab.tabPanel:fill('parent')
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
if self.currentTab then
|
|
|
|
self.currentTab:setChecked(false)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
2012-02-03 05:32:39 +01:00
|
|
|
signalcall(self.onTabChange, self, tab)
|
2012-01-14 02:37:15 +01:00
|
|
|
self.currentTab = tab
|
|
|
|
tab:setChecked(true)
|
|
|
|
tab:setOn(false)
|
|
|
|
tab.blinking = false
|
2012-01-13 21:37:44 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:selectNextTab()
|
2012-01-14 02:37:15 +01:00
|
|
|
if self.currentTab == nil then return end
|
|
|
|
local index = table.find(self.tabs, self.currentTab)
|
2012-01-13 21:37:44 +01:00
|
|
|
if index == nil then return end
|
|
|
|
local nextTab = self.tabs[index + 1] or self.tabs[1]
|
|
|
|
if not nextTab then return end
|
|
|
|
self:selectTab(nextTab)
|
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:selectPrevTab()
|
2012-01-14 02:37:15 +01:00
|
|
|
if self.currentTab == nil then return end
|
|
|
|
local index = table.find(self.tabs, self.currentTab)
|
2012-01-13 21:37:44 +01:00
|
|
|
if index == nil then return end
|
|
|
|
local prevTab = self.tabs[index - 1] or self.tabs[#self.tabs]
|
|
|
|
if not prevTab then return end
|
|
|
|
self:selectTab(prevTab)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
function UITabBar:blinkTab(tab)
|
|
|
|
if tab:isChecked() or tab.blinking then return end
|
|
|
|
tab.blinking = true
|
|
|
|
tabBlink(tab)
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
2012-01-14 02:37:15 +01:00
|
|
|
function UITabBar:getTabPanel(tab)
|
|
|
|
return tab.tabPanel
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
function UITabBar:getCurrentTabPanel()
|
2012-01-14 02:37:15 +01:00
|
|
|
if self.currentTab then
|
|
|
|
return self.currentTab.tabPanel
|
2012-01-13 00:47:31 +01:00
|
|
|
end
|
|
|
|
end
|
2012-01-14 02:37:15 +01:00
|
|
|
|
|
|
|
function UITabBar:getCurrentTab()
|
|
|
|
return self.currentTab
|
|
|
|
end
|