i have a probleme im working on NativeUI Plugin but whene i adjust the start row :
Code :
local screenX, screenY = guiGetScreenSize()
local x, y = 1366, 768
local relX, relY = screenX/x, screenY/y
local panelX, panelY, panelWidth, rowHeight = 32*relX, 32*relY, 325*relX, 30*relY
local chaletlondon = dxCreateFont("fonts/chaletlondon.ttf", 24*relY, false, "antialiased")
local signpainter = dxCreateFont("fonts/signpainter.ttf", 24*relY, false, "antialiased")
local currentY = panelY+80*relY+rowHeight
addEvent("NativeUI.onTabEnter", true)
addEvent("NativeUI.onCheckChange", true)
addEvent("NativeUI.onTabChange", true)
addEvent("NativeUI.onWindowClose", true)
addEvent("NativeUI.onSelectChange", true)
addEvent("NativeUI.onButtonEnter", true)
addEvent("NativeUI.onCheckEnter", true)
addEvent("NativeUI.onSelectEnter", true)
local iVisibleRow = 6
local currentUse = 1
local windows = {
--[[ {
title = "Title";
title_image = "NORMALE.png";
title_2 = "Title 2";
isVisible = true;
useBackSpace = true;
Tabs = {
-- evnt or false or true ( check bool)
-- {"type","text","event",currentUse,{useses Tab}}
{"select","Tab 1","",1,{"Ali", "Othamne"}}
};
};--]]
};
function render ()
for _, window in pairs(windows) do
if window then
if window.isVisible then
if window.title_image ~= 0 and window.title_image ~= "none" then
dxDrawImage(panelX, panelY, panelWidth, 80*relY,"images/"..window.title_image or "images/NORMALE.png")
dxDrawText(window.title,panelX+10*relX, panelY, panelWidth+panelX-10*relX, 80*relY+panelY, tocolor(255, 255, 255, 255), 1.5, signpainter, "center", "center")
end
dxDrawRectangle(panelX, panelY+80*relY, panelWidth, rowHeight, tocolor(10, 10, 10, 255))
-- dxDrawRectangle(panelX, panelY, panelWidth, notificationData["height"], tocolor(0, 0, 0, 210))
dxDrawText(utf8.upper(window.title_2), panelX+10*relX, panelY+80*relY, panelWidth+panelX+10*relX, rowHeight+panelY+80*relY, tocolor(53, 76, 115, 255), 0.5, chaletlondon, "left", "center")
dxDrawText(""..currentUse.."/"..#window.Tabs.."", panelX+10*relX, panelY+80*relY, panelWidth+panelX-10*relX, rowHeight+panelY+80*relY, tocolor(53, 76, 115, 255), 0.5, chaletlondon, "right", "center")
--dxDrawRectangle(panelX, currentY+33*relY, panelWidth, rowHeight, tocolor(0, 0, 0, 210))
--dxDrawImage(panelX, currentY+33*relY, panelWidth, rowHeight, "images/menunav.png")
for k = window.startRow, window.startRow + iVisibleRow - 1, 1 do
local v = window.Tabs[k]
if not v[6] then
bgColor = tocolor(0, 0, 0, 210)
textColor = tocolor(255, 255, 255, 220)
if (k ~= currentUse) then
bgColor = tocolor(0, 0, 0, 210)
textColor = tocolor(255, 255, 255, 220)
else
bgColor = tocolor(255, 255, 255, 255)
textColor = tocolor(0, 0, 0, 255)
end
dxDrawRectangle(panelX, currentY+(rowHeight*(k-1)), panelWidth, rowHeight, bgColor)
dxDrawText(v[2], panelX+10*relX, currentY+(rowHeight*(k-1)), panelWidth+panelX+10*relX, rowHeight+currentY+(rowHeight*(k-1)), textColor, 0.45, chaletlondon, "left", "center")
local state = "β‘"
if (v[1] == "check") then
textColor = tocolor(255, 255, 255, 255)
if (k ~= currentUse) then
textColor = tocolor(255, 255, 255, 255)
else
textColor = tocolor(0, 0, 0, 255)
end
if (v[3]) then
state = "β£"
else
state = "β‘"
end
dxDrawText(state, panelX+10*relX, currentY+(rowHeight*(k-1)), panelWidth-20*relX+panelX+10*relX, rowHeight+currentY+(rowHeight*(k-1)), textColor, 1.0, chaletlondon, "right", "center")
-- dxDrawText("β‘", panelX+13*relX, currentY+(rowHeight*(k-1)), panelWidth-20*relX+panelX+10*relX, rowHeight+currentY+(rowHeight*(k-1)), textColor, 1.0, chaletlondon, "right", "center")
elseif (v[1] == "select") then
local currentUseText = v[5][v[4]] or ""
if currentUseText then
dxDrawText("< "..currentUseText.." >", panelX+10*relX, currentY+(rowHeight*(k-1)), panelWidth-20*relX+panelX+10*relX, rowHeight+currentY+(rowHeight*(k-1)), textColor, 0.55, chaletlondon, "right", "center")
end
end
end
end
end
end
end
--end
end
addEventHandler("onClientRender", root, render)
function key (key, state)
for _, window in pairs(windows) do
if (window.isVisible) then
if (state) then
local v = window.Tabs[currentUse]
if (v) then
if (v[1] == "button") then
if (key == "enter") then
playSound("sounds/menunavigate.mp3")
enterFunction()
triggerEvent("NativeUI.onTabEnter",localPlayer,currentUse, window.Tabs[currentUse][3])
end
elseif (v[1] == "check") then
if (key == "enter") then
playSound("sounds/buttonpressed.mp3")
enterFunction()
triggerEvent("NativeUI.onCheckChange",localPlayer,currentUse, window.Tabs[currentUse][3])
end
end
end
if (key == "arrow_d") then
if (currentUse < #window.Tabs) then
currentUse = currentUse + 1
local tab = window.Tabs[currentUse]
triggerEvent("NativeUI.onTabChange",localPlayer,currentUse, window.Tabs[currentUse][3])
adjustStartRow(window)
else
currentUse = 1
adjustStartRow(window)
triggerEvent("NativeUI.onTabChange",localPlayer,currentUse, window.Tabs[currentUse][3])
end
playSound("sounds/menunavigate.mp3")
elseif (key == "arrow_u") then
if (currentUse > 1) then
currentUse = currentUse - 1
triggerEvent("NativeUI.onTabChange",localPlayer,currentUse, window.Tabs[currentUse][3])
adjustStartRow(window)
else
currentUse = #window.Tabs
triggerEvent("NativeUI.onTabChange",localPlayer,currentUse, window.Tabs[currentUse][3])
adjustStartRow(window)
end
playSound("sounds/menunavigate.mp3")
elseif (key == "backspace") then
--v = window.Tabs[currentUse]
--if (v[1] ~= "input") then
playSound("sounds/menuenter.mp3")
if window.useBackSpace then
triggerEvent("NativeUI.onWindowClose",localPlayer,window)
DeletePool(_)
end
-- end
elseif(key == "arrow_l") then
if v[1] == "select" then
if (v[4] > 1) then
v[4] = v[4] - 1
playSound("sounds/menunavigate.mp3")
triggerEvent("NativeUI.onSelectChange",localPlayer,currentUse, window.Tabs[currentUse][5][window.Tabs[currentUse][4]])
else
v[4] = #v[5]
playSound("sounds/menunavigate.mp3")
triggerEvent("NativeUI.onSelectChange",localPlayer,currentUse, window.Tabs[currentUse][5][window.Tabs[currentUse][4]])
end
end
elseif (key == "arrow_r") then
if v[1] == "select" then
if (v[4] < #v[5]) then
v[4] = v[4] + 1
playSound("sounds/menunavigate.mp3")
triggerEvent("NativeUI.onSelectChange",localPlayer,currentUse, window.Tabs[currentUse][5][window.Tabs[currentUse][4]])
else
v[4] = 1
playSound("sounds/menunavigate.mp3")
triggerEvent("NativeUI.onSelectChange",localPlayer,currentUse, window.Tabs[currentUse][5][window.Tabs[currentUse][4]])
end
end
--playSound("sounds/menunavigate.mp3")
end
end
end
end
end
addEventHandler("onClientKey", root, key)
addEventHandler("onClientKey", getRootElement(), function(btn, state)
for _, window in pairs(windows) do
if window.isVisible then
if btn == "arrow_d" and state == true then
cancelEvent()
end
if btn == "arrow_u" and state == true then
cancelEvent()
end
if btn == "arrow_r" and state == true then
cancelEvent()
end
if btn == "arrow_l" and state == true then
cancelEvent()
end
if btn == "enter" and state == true then
cancelEvent()
end
end
end
end)
function CreatePool(_title,_stitle,_image,useBackSpace)
currentUse = 1
if not _title then return outputDebugString("unable to get menu title") end
local id = 1
_image = _image or "NORMALE.png"
_stitle = _stitle or ""
_useBackSpace = _useBackSpace or true
table.insert(windows,{
title = _title;
title_image = _image;
title_2 = _stitle;
isVisible = true;
useBackSpace = _useBackSpace;
Tabs = {};
startRow = 1;
}
)
for _, window in ipairs(windows) do
if window.title == _title and window.title_image == _image and window.title_2 == _stitle and window.isVisible == true and window.useBackSpace == window._useBackSpace and window.Tabs == {} then
id = _
end
end
return id
end
function setVisible(windowID,bool)
windows[tonumber(windowID)].isVisible = bool
end
function addTab(windowID,tabType, tabText,tabEvent,selectTable)
local id
local w = windows[tonumber(windowID)].Tabs
if w then
table.insert( w,{tabType, tabText, tabEvent,1,selectTable} )
end
for _, window in ipairs(windows) do
for id, tab in ipairs(window.Tabs) do
if tab[1] == tabType and tab[2] == tabText then
_id = id
end
end
end
return _id
end
function DeletePool (id)
windows[id] = nil
end
function DeleteTab (wind,id)
return table.remove(windows[tonumber(wind)].Tabs[tonumber(id)])
end
function GetShowingPools()
local tableOBJ = {}
for _, wind in ipairs(windows) do
if wind.isVisible then
table.insert(tableOBJ, wind)
end
end
return tableOBJ
end
function GetMenuID(_wind)
local id
for _, wind in ipairs(windows) do
if wind == _wind or wind.title == _wind then
id = _
end
end
return id
end
function GetCurrentTab()
return currentUse
end
function GetCurrentSelect(window,tab)
return windows[tonumber(window)].Tabs[tonumber(tab)][4]
end
function enterFunction ()
--if not cursorUsed then cursorUsed = false end
for _ , window in ipairs(windows) do
v = window.Tabs[currentUse]
if (v[1] == "button") then
triggerEvent("NativeUI.onButtonEnter", localPlayer,window,v)
elseif (v[1] == "check") then
v[3] = not v[3]
triggerEvent("NativeUI.onCheckEnter", localPlayer,window,v)
elseif (v[1] == "select") then
triggerEvent("NativeUI.onSelectEnter", localPlayer,window,v)
end
end
end
local wind = CreatePool("Test", "tt",false,true)
for i=1,10 do
addTab(wind , "button", "test "..i,"btn."..i)
end
function adjustStartRow(window)
if (currentUse > (window.startRow + iVisibleRow- 1)) then
window.startRow = currentUse - iVisibleRow + 1
elseif (currentUse < window.startRow) then
window.startRow = currentUse
end
end