#!./koreader-base

require "defaults"
print(package.path)
package.path = "./frontend/?.lua;./?.lua"
local UIManager = require("ui/uimanager")
local RenderText = require("ui/rendertext")
local Font = require("ui/font")
local Geom = require("ui/geometry")
local Menu = require("ui/widget/menu")
local Widget = require("ui/widget/widget")
local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer")
local CenterContainer = require("ui/widget/container/centercontainer")
local FrameContainer = require("ui/widget/container/framecontainer")
local ConfirmBox = require("ui/widget/confirmbox")
local TouchMenu = require("ui/widget/touchmenu")
local InputText = require("ui/widget/inputtext")
local DocumentRegistry = require("document/documentregistry")
local ReaderUI = require("ui/readerui")
local Dbg = require("dbg")
local Device = require("ui/device")
local Screen = require("ui/screen")


-----------------------------------------------------
-- widget that paints the grid on the background
-----------------------------------------------------
TestGrid = Widget:new{}

function TestGrid:paintTo(bb)
	v_line = math.floor(bb:getWidth() / 50)
	h_line = math.floor(bb:getHeight() / 50)
	for i=1,h_line do
		y_num = i*50
		RenderText:renderUtf8Text(bb, 0, y_num+10, Font:getFace("ffont", 12), y_num, true)
		bb:paintRect(0, y_num, bb:getWidth(), 1, 10)
	end
	for i=1,v_line do
		x_num = i*50
		RenderText:renderUtf8Text(bb, x_num, 10, Font:getFace("ffont", 12), x_num, true)
		bb:paintRect(x_num, 0, 1, bb:getHeight(), 10)
	end
end

-----------------------------------------------------
-- we create a widget that paints a background:
-----------------------------------------------------
Background = InputContainer:new{
	is_always_active = true, -- receive events when other dialogs are active
	key_events = {
		OpenDialog = { { "Press" } },
		OpenConfirmBox = { { "Del" } },
		QuitApplication = { { {"Home","Back"} } }
	},
	-- contains a gray rectangular desktop
	FrameContainer:new{
		background = 3,
		bordersize = 0,
		dimen = Screen:getSize(),
		Widget:new{
			dimen = {
				w = Screen:getWidth(),
				h = Screen:getHeight(),
			}
		},
	}
}

function Background:onOpenDialog()
	UIManager:show(InfoMessage:new{
		text = "Example message.",
		timeout = 10
	})
end

function Background:onOpenConfirmBox()
	UIManager:show(ConfirmBox:new{
		text = "Please confirm delete"
	})
end

function Background:onInputError()
	UIManager:quit()
end

function Background:onQuitApplication()
	UIManager:quit()
end



-----------------------------------------------------
-- example widget: a clock
-----------------------------------------------------
Clock = FrameContainer:new{
	background = 0,
	bordersize = 1,
	margin = 0,
	padding = 1
}

function Clock:schedFunc()
	self[1]:free()
	self[1] = self:getTextWidget()
	UIManager:setDirty(self)
	-- reschedule
	-- TODO: wait until next real second shift
	UIManager:scheduleIn(1, function() self:schedFunc() end)
end

function Clock:onShow()
	self[1] = self:getTextWidget()
	self:schedFunc()
end

function Clock:getTextWidget()
	return CenterContainer:new{
		dimen = { w = 300, h = 25 },
		TextWidget:new{
			text = os.date("%H:%M:%S"),
			face = Font:getFace("cfont", 12)
		}
	}
end

-----------------------------------------------------
-- a confirmbox box widget
-----------------------------------------------------
Quiz = ConfirmBox:new{
	text = "Tell me the truth, isn't it COOL?!",
	width = 300,
	ok_text = "Yes, of course.",
	cancel_text = "No, it's ugly.",
	cancel_callback = function()
		UIManager:show(InfoMessage:new{
			text="You liar!",
		})
	end,
}

-----------------------------------------------------
-- a menu widget
-----------------------------------------------------
menu_items = {
	{text = "item1"},
	{text = "item2"},
	{text = "This is a very very log item whose length should exceed the width of the menu."},
	{text = "item3"},
	{text = "item4"},
	{text = "item5"},
	{text = "item6"},
	{text = "item7"},
	{text = "item8"},
	{text = "item9"},
	{text = "item10"},
	{text = "item11"},
	{text = "item12"},
	{text = "item13"},
	{text = "item14"},
	{text = "item15"},
	{text = "item16"},
	{text = "item17"},
}
M = Menu:new{
	title = "Test Menu",
	item_table = menu_items,
	width = 500,
	height = 600,
}


-----------------------------------------------------
-- a reader view widget
-----------------------------------------------------
readerwindow = CenterContainer:new{
	dimen = Screen:getSize(),
	FrameContainer:new{
		background = 0
	}
}
reader = ReaderUI:new{
	dialog = readerwindow,
	dimen = Geom:new{ w = Screen:getWidth() - 100, h = Screen:getHeight() - 100 },
	document = DocumentRegistry:openDocument("test/2col.pdf")
	--document = DocumentRegistry:openDocument("test/djvu3spec.djvu")
	--document = DocumentRegistry:openDocument("./README.TXT")
}
readerwindow[1][1] = reader


touch_menu = TouchMenu:new{
	title = "Document menu",
	width = Screen:getWidth(),
	tab_item_table = {
		{
			icon = "resources/icons/appbar.pokeball.png",
			{
				text = "item1",
				callback = function()
				end,
			},
			{
				text = "item2",
				callback = function()
				end,
			},
			{
				text = "item3",
				callback = function()
				end,
			},
			{
				text = "item4",
				callback = function()
				end,
			},
			{
				text = "item5",
				callback = function()
				end,
			},
			{
				text = "item6",
				callback = function()
				end,
			},
			{
				text = "item7",
				callback = function()
				end,
			},
			{
				text = "item8",
				callback = function()
				end,
			},
			{
				text = "item9",
				callback = function()
				end,
			},
		},
		{
			icon = "resources/icons/appbar.page.corner.bookmark.png",
			{
				text = "item10",
				callback = function()
				end,
			},
			{
				text = "item11",
				callback = function()
				end,
			},
		},
		{
			icon = "resources/icons/appbar.home.png",
			callback = function()
				DEBUG("hello world!")
			end
		}
	},
}

inputtext = InputText:new{
	width = 400,
	height = 300,
}

-----------------------------------------------------------------------
-- you may want to uncomment following show calls to see the changes
-----------------------------------------------------------------------
UIManager:show(Background:new())
UIManager:show(TestGrid)
--UIManager:show(Clock:new())
--UIManager:show(M)
--UIManager:show(Quiz)
--UIManager:show(readerwindow)
--UIManager:show(touch_menu)
--UIManager:show(keyboard)
UIManager:show(inputtext)

UIManager:run()
