v 0.02

Ivan [04-10-14 - 06:50]
v 0.02
Появление графического текстового интерфейса
Работающий слайдер
Filename
DataBase.lua
DataBase.txt
diff --git a/DataBase.lua b/DataBase.lua
index 7e16b76..16d4a63 100644
--- a/DataBase.lua
+++ b/DataBase.lua
@@ -7,7 +7,7 @@
 ----------------------------
 DB = { }

-DB.version=0.01
+DB.version=0.02

 DB.dataDefault = {
     data = {}
@@ -30,76 +30,120 @@ function DB.OnLoad(eventCode, addOnName)
 	EVENT_MANAGER:RegisterForEvent("DataBase", EVENT_OPEN_GUILD_BANK, DB.GB_Opened)
 	EVENT_MANAGER:RegisterForEvent("DataBase", EVENT_GUILD_BANK_ITEMS_READY, DB.GB_Ready)

-	--Загрузка сохраненных переменных (?)
+	--Загрузка сохраненных переменных
 	DB.items= ZO_SavedVars:New( "DB_SavedVars" , 2, "items" , DB.dataDefault , nil )

-	-- Инициализация графического интерфейся
+	--Всё подгружается из базы, скроллится и перемещается.
+	--Минусы: некликабельные строки, нет картинок, неудобное восприятие информации
+
+	-- Полезные функции:
+	--		Можно получить иконку и стоимость
+	-- 		GetItemLinkInfo(string itemLink)
+	--
+	--		Отображение тултипа из базы (/script d(db_UI.Tooltip:SetLink(DB.items.data[2].name)))
+	--		SetLink(string aLink)
+
+	--Инициализация графического интерфейся
 	db_UI = WINDOW_MANAGER:CreateTopLevelWindow("DBUI")
 	db_UI.BG = WINDOW_MANAGER:CreateControl("DBUI_BG",DBUI,CT_BACKDROP)
 	db_UI.Title = WINDOW_MANAGER:CreateControl("DBUI_Title",DBUI,CT_LABEL)
 	db_UI.Items = WINDOW_MANAGER:CreateControl("DBUI_Items",DBUI,CT_LABEL)
+	db_UI.TB = WINDOW_MANAGER:CreateControl("DBUI_TB",DBUI,CT_TEXTBUFFER)
+	db_UI.Slider = WINDOW_MANAGER:CreateControl("DBUI_Slider",DBUI_TB,CT_SLIDER)
+	db_UI.Tooltip = WINDOW_MANAGER:CreateControl("DBUI_Tooltip",DBUI,CT_TOOLTIP)
+
+	--Обработчики событий
+	--Прокрутка слайдера и буфера колёсиком
+	db_UI:SetHandler("OnMouseWheel",
+	function(self,delta)
+		db_UI.TB:SetScrollPosition(DBUI_TB:GetScrollPosition() + delta)
+		db_UI.Slider:SetValue(db_UI.Slider:GetValue()- delta)
+	end)
+
+	--Прокрутка буфера ползунком слайдера
+	db_UI.Slider:SetHandler("OnValueChanged",
+	function(self, val, eventReason)
+       db_UI.TB:SetScrollPosition(#DB.items.data-val)
+    end)

 	--Общие настройки интерфейса
-	db_UI:SetDimensions(425,645)
-
-	--Создаем скролл // слайдер
-
-	-- Похоже слайдер придётся рисовать самому.. а при скроллинге только изменять значения 10-15 полей заранее созданых.
-	--а может и нет.. надо бы глянуть текстуры.
-
-	-- db_UI.Scroll = WINDOW_MANAGER:CreateControl("DBUI_Scroll",DBUI,CT_SCROLL)
-	db_UI.Slider = WINDOW_MANAGER:CreateControl("DBUI_Slider",DBUI,CT_SLIDER)
-	-- db_UI.Slider:DoesAllowDraggingFromThumb()
-	-- /script d(db_UI.Slider:DoesAllowDraggingFromThumb())
+	db_UI:SetAnchor(TOPLEFT,GuiRoot,TOPLEFT,10,10)
+	db_UI:SetDimensions(300,245)
+	db_UI:SetMouseEnabled(true)
+	db_UI:SetMovable(true)

-	--	Фон
-	db_UI.BG:SetDimensions( 425 , 645 )
+	--Фон
+	db_UI.BG:SetDimensions(300,245)
 	db_UI.BG:SetCenterColor(0,0,0,1)
 	db_UI.BG:SetEdgeColor(0,0,0,1)
 	db_UI.BG:SetEdgeTexture("", 8, 1, 1)
 	db_UI.BG:SetAlpha(0.5)
 	db_UI.BG:SetAnchor(BOTTOM,DBUI,BOTTOM,0,0)

-	--	Заголовок
+	--Заголовок
 	db_UI.Title:SetFont("ZoFontGame" )
 	db_UI.Title:SetColor(255,255,255,1.5)
-	db_UI.Title:SetText( "GuildBank Storage" )
+	db_UI.Title:SetText( "GuildBank Storage: " )
 	db_UI.Title:SetAnchor(TOPLEFT,DBUI,TOPLEFT,10,0)

-	--Применяем общие настройки
-	db_UI:SetMouseEnabled(false)
-	db_UI:SetMovable(true)
-
 	--Выводим число вещей в инвентаре:
 	db_UI.Items:SetFont("ZoFontGame" )
 	db_UI.Items:SetColor(255,255,255,1.5)
 	db_UI.Items:SetText("ItemsTotal: "..#DB.items.data)
 	db_UI.Items:SetAnchor(TOPLEFT,DBUI,TOPLEFT,10,20)

-	--Выводим название и число вещей на экран
+	--Текстовый буфер
+	db_UI.TB:SetDimensions(275,200)
+	db_UI.TB:SetFont( "ZoFontGame" )
+	db_UI.TB:SetAnchor(BOTTOM,DBUI,BOTTOM,0,-5)
+	db_UI.TB:SetLinkEnabled(true)
+	db_UI.TB:SetMaxHistoryLines(#DB.items.data)
+
+	--Подсказка
+	-- db_UI.Tooltip:SetDimensions(425,345)
+	-- db_UI.Tooltip:SetFont( "ZoFontGame" )
+	-- db_UI.Tooltip:SetAnchor(BOTTOM,DBUI,BOTTOM,50,50)
+
+	--Слайдер
+	-- /script db_UI.Slider:SetBackgroundBottomTexture("", 8, 1, 1)
+	local tex = "/esoui/art/miscellaneous/scrollbox_elevator.dds"
+
+	db_UI.Slider:SetMinMax(1,#DB.items.data)
+    db_UI.Slider:SetWidth(22)
+	db_UI.Slider:SetOrientation(ORIENTATION_VERTICAL)
+	db_UI.Slider:SetThumbTexture(tex, tex, tex, 22, 100, 0, 0, 1, 1)
+	db_UI.Slider:SetAnchor(BOTTOM,db_UI,BOTTOMRIGHT,-10,0)
+	db_UI.Slider:SetMouseEnabled(true)
+	db_UI.Slider:SetHeight(245)
+    db_UI.Slider:SetValue(#DB.items.data)
+	db_UI.Slider:SetValueStep(1)
+
+
+	--Отображение
 	db_UI.Items.Item={}
 	db_UI.Items.Item.name ={}
 	db_UI.Items.Item.count ={}

-	-- Если добавлять фильтры, выносить эту залупу ниже в функцию и скармливать ей заранее подготовленый массив
-	-- for i=1, #DB.items.data, 1 do
-	for i=1, 10, 1 do
-		--Название
-		db_UI.Items.Item.name[i] = WINDOW_MANAGER:CreateControl("DBUI_Item_name_"..i,DBUI,CT_LABEL)
-		db_UI.Items.Item.name[i]:SetFont("ZoFontGame" )
-		db_UI.Items.Item.name[i]:SetColor(255,255,255,1.5)
-		db_UI.Items.Item.name[i]:SetText(DB.items.data[i].name)
-		db_UI.Items.Item.name[i]:SetAnchor(TOPLEFT,db_UI,TOPLEFT,20,20+i*20)
-
-		--Количество
-		db_UI.Items.Item.name[i] = WINDOW_MANAGER:CreateControl("DBUI_Item_count_"..i,DBUI,CT_LABEL)
-		db_UI.Items.Item.name[i]:SetFont("ZoFontGame" )
-		db_UI.Items.Item.name[i]:SetColor(255,255,255,1.5)
-		db_UI.Items.Item.name[i]:SetText(DB.items.data[i].count)
-		db_UI.Items.Item.name[i]:SetAnchor(TOPLEFT,db_UI,TOPLEFT,300,20+i*20)
-	end
+	if (#DB.items.data==0) then return end
+	for i=1, #DB.items.data, 1 do
+
+		db_UI.TB:AddMessage(i.."|| "..DB.items.data[i].count.." || "..DB.items.data[i].name)

+		-- --Название
+		-- db_UI.Items.Item.name[i] = WINDOW_MANAGER:CreateControl("DBUI_Item_name_"..i,DBUI,CT_LABEL)
+		-- db_UI.Items.Item.name[i]:SetFont("ZoFontGame" )
+		-- db_UI.Items.Item.name[i]:SetColor(255,255,255,1.5)
+		-- db_UI.Items.Item.name[i]:SetText(DB.items.data[i].name)
+		-- db_UI.Items.Item.name[i]:SetAnchor(TOPLEFT,DBUI,TOPLEFT,20,20+i*20)

+		-- --Количество
+		-- db_UI.Items.Item.name[i] = WINDOW_MANAGER:CreateControl("DBUI_Item_count_"..i,DBUI,CT_LABEL)
+		-- db_UI.Items.Item.name[i]:SetFont("ZoFontGame" )
+		-- db_UI.Items.Item.name[i]:SetColor(255,255,255,1.5)
+		-- db_UI.Items.Item.name[i]:SetText(DB.items.data[i].count)
+		-- db_UI.Items.Item.name[i]:SetAnchor(TOPLEFT,DBUI,TOPLEFT,300,20+i*20)
+
+	end
 end


@@ -212,20 +256,16 @@ function DB.gcount()
 		if GetItemName(BAG_GUILDBANK,DB.ItemCounter)~="" then
 			d(DB.ItemCounter.." : "..GetItemLink(BAG_GUILDBANK,DB.ItemCounter).." : "..GetSlotStackSize(BAG_GUILDBANK,DB.ItemCounter))
 			founditems=true
-
-			if #sv == 0 then
-				sv[1] =
-						{
-						 ["name"] = tostring(GetItemLink(BAG_GUILDBANK,DB.ItemCounter)),
-						 ["count"] = tostring(GetSlotStackSize(BAG_GUILDBANK,DB.ItemCounter))
-						}
-			else
-				sv[#sv+1] =
-						{
-						 ["name"] = tostring(GetItemLink(BAG_GUILDBANK,DB.ItemCounter)),
-						 ["count"] = tostring(GetSlotStackSize(BAG_GUILDBANK,DB.ItemCounter))
-						}
-			end
+
+			--Избавляемся от мусора при сохранении
+			local namefine=string.gsub(GetItemLink(BAG_GUILDBANK,DB.ItemCounter), "(^p)", "")
+			namefine=string.gsub(namefine, "(^n)", "")
+
+			sv[#sv+1] =
+					{
+					 ["name"] = tostring(namefine),
+					 ["count"] = tostring(GetSlotStackSize(BAG_GUILDBANK,DB.ItemCounter))
+					}
 		end
 		DB.ItemCounter=DB.ItemCounter+1
 	end
diff --git a/DataBase.txt b/DataBase.txt
index c5cf92e..3163bf8 100644
--- a/DataBase.txt
+++ b/DataBase.txt
@@ -1,5 +1,5 @@
 ## Title: DataBase
-## APIVersion: 100000
+## APIVersion: 100003
 ## SavedVariables: DB_SavedVars

 DataBase.lua