Guest User

Untitled

a guest
Sep 26th, 2012
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 38.65 KB | None | 0 0
  1. local dxRootElement = createElement("dxRootElement")
  2. local sx,sy = guiGetScreenSize()
  3. setElementData(dxRootElement,"x",0)
  4. setElementData(dxRootElement,"y",0)
  5. setElementData(dxRootElement,"width",sx)
  6. setElementData(dxRootElement,"height",sy)
  7. local movedElementOffset = {0,0}
  8.  
  9. function dxGridListSetSelectedItem(item)
  10. for id, element in ipairs (getElementChildren(getElementParent(item))) do
  11.     setElementData(element,"clicked",nil)
  12. end
  13. return setElementData(item,"clicked",true)
  14. end
  15.  
  16.  
  17. function dxGridListGetSelectedItem(grid)
  18. for id, element in ipairs (getElementChildren(grid)) do
  19.     if getElementData(element,"clicked") then
  20.         return element
  21.     end
  22. end
  23. return false
  24. end
  25.  
  26. function dxGridListGetItemCount(grid)
  27. if not grid then return false end
  28. local count = 0
  29. for id, element in ipairs (getElementChildren(grid)) do
  30.     if getElementType(element) ~= "dxScrollBar" then
  31.         count = count + 1
  32.     end
  33. end
  34. return count
  35. end
  36.  
  37. function dxGridListSetItemColorCoded(item,bool)
  38. if not item then return false end
  39. return setElementData(item,"colored",bool)
  40. end
  41.  
  42.  
  43. function dxGridListRemoveRow(item)
  44. return destroyElement(item)
  45. end
  46.  
  47. function dxGridListGetItemText(item)
  48. return getElementData(item,"text")
  49. end
  50.  
  51. function dxGridListSetItemText(item,text)
  52. return setElementData(item,"text",text)
  53. end
  54.  
  55. function dxGridListClear(grid)
  56. for id, element in ipairs (getElementChlidren(grid)) do
  57.     destroyElement(element)
  58. end
  59. return true
  60. end
  61.  
  62. function dxGridListGetItemText(item)
  63. if not item then return false end
  64. return getElementData(item,"text")
  65. end
  66.  
  67. function dxGridListSetItemText(item,text)
  68. if not item then return false end
  69. return setElementData(item,"text",text)
  70. end
  71.  
  72.  
  73. function dxStaticImageLoadImage(image,path)
  74. if not image then return false end
  75. return setElementData(image,"filepath",path)
  76. end
  77.  
  78. function dxScrollBarSetScrollPosition(scroll,position)
  79. return setElementData(scroll,"scroll",position/100)
  80. end
  81.  
  82. function dxCheckBoxGetSelected(cb)
  83. if not cb then return false end
  84. return (getElementData(cb,"check"))
  85. end
  86.  
  87. function dxCheckBoxSetSelected(cb,state)
  88. if not cb then return false end
  89. return (setElementData(cb,"check",state))
  90. end
  91.  
  92.  
  93. function dxEditSetMasked(edit,bool)
  94. if not edit then return false end
  95. return setElementData(edit,"masked",bool)
  96. end
  97.  
  98. function dxEditSetReadOnly(edit,bool)
  99. if not edit then return false end
  100. return setElementData(edit,"readonly",bool)
  101. end
  102.  
  103.  
  104. function dxScrollBarGetScrollPosition(scroll)
  105. return (tonumber(getElementData(scroll,"scroll")*100))
  106. end
  107.  
  108. function dxCreateWindow (x,y,width,height,titleBarText,relative)
  109. if x and y and width and height and titleBarText then
  110.     if relative then
  111.         x = x * sx
  112.         y = y * sy
  113.         width = width * sx
  114.         height = height * sy
  115.     end
  116.     local element = createElement("dxWindow")
  117.     setElementParent(element,dxRootElement)
  118.     setElementData(element,"x",x)
  119.     setElementData(element,"y",y)
  120.     setElementData(element,"width",width)
  121.     setElementData(element,"height",height)
  122.     setElementData(element,"movable",false)
  123.     setElementData(element,"text",titleBarText)
  124.     setElementData(element,"font","default")
  125.     setElementData(element,"title",tocolor(0,0,0,255))
  126.     setElementData(element,"backgroundColor",tocolor(255,255,255,255))
  127.     return element
  128. else
  129.     outputDebugString("ERROR: expected arguments are missing(dxCreateWindow)")
  130. end
  131. end
  132.  
  133.  
  134. function dxWindowSetTitleBackgroundColor(element,red,green,blue)
  135. setElementData(element,"titleBackgroundColor",tocolor(red,green,blue,255))
  136. end
  137.  
  138. function dxWindowSetBackgroundColor(element,red,green,blue)
  139. setElementData(element,"backgroundColor",tocolor(red,green,blue,255))
  140. end
  141.  
  142. function dxCreateGridList (x,y,width,height,relative,parent)
  143. if x and y and height and width then
  144.     if relative then
  145.         if parent then
  146.             x = x*getElementData(parent,"x")
  147.             y = y*getElementData(parent,"y")
  148.         else
  149.             x = x * sx
  150.             y = y* sy
  151.         end
  152.     end
  153.     local element = createElement("dxGridList")
  154.     setElementParent(element,parent or dxRootElement)
  155.     setElementData(element,"x",x)
  156.     setElementData(element,"y",y)
  157.     setElementData(element,"width",width)
  158.     setElementData(element,"height",height)
  159.     setElementData(element,"filepath",filepath)
  160.     setElementData(element,"parent",parent)
  161.     setElementData(element,"state","normal")   
  162.     return element
  163. else
  164.     outputDebugString("ERROR: expected arguments are missing (dxCreateGridList)")  
  165. end
  166. end
  167.  
  168. function dxButtonSetBackgroundImage(button,state,path)
  169. if not button or not state or not path then return false end
  170. if path == "default" then
  171.     path = "images/button"
  172.     if state == "normal" then
  173.         path = path..".png"
  174.     elseif state == "clicked" then
  175.         path = path..state.."clicked.png"
  176.     elseif state == "hovered" then
  177.         path = path..state.."hover.png"
  178.     end
  179. end
  180. return setElementData(button,path.."path",path)
  181. end
  182.  
  183.  
  184. function dxCreateProgressBar (x,y,width,height,relative,parent)
  185. if x and y and height and width then
  186.     if relative then
  187.         if parent then
  188.             x = x*getElementData(parent,"x")
  189.             y = y*getElementData(parent,"y")
  190.         else
  191.             x = x * sx
  192.             y = y* sy
  193.         end
  194.     end
  195.     local element = createElement("dxProgressBar")
  196.     setElementParent(element,parent or dxRootElement)
  197.     setElementData(element,"x",x)
  198.     setElementData(element,"y",y)
  199.     setElementData(element,"width",width)
  200.     setElementData(element,"height",height)
  201.     setElementData(element,"progress",50)
  202.     setElementData(element,"parent",parent)
  203.     setElementData(element,"state","normal")   
  204.     return element
  205. else
  206.     outputDebugString("ERROR: expected arguments are missing (dxCreateGridList)")  
  207. end
  208. end
  209.  
  210.  
  211.  
  212.  
  213. function dxCreateScrollBar (x,y,width,height,horizontal, relative,parent)
  214. if x and y and height and width then
  215.     if relative then
  216.         if parent then
  217.             x = x*getElementData(parent,"x")
  218.             y = y*getElementData(parent,"y")
  219.         else
  220.             x = x * sx
  221.             y = y* sy
  222.         end
  223.     end
  224.     local element = createElement("dxScrollBar")
  225.     setElementParent(element,parent or dxRootElement)
  226.     setElementData(element,"x",x)
  227.     setElementData(element,"y",y)
  228.     setElementData(element,"scroll",0)
  229.     setElementData(element,"horizontal",horizontal)
  230.     setElementData(element,"width",width)
  231.     setElementData(element,"height",height)
  232.     setElementData(element,"filepath",filepath)
  233.     setElementData(element,"parent",parent)
  234.     setElementData(element,"state","normal")   
  235.     addEventHandler("onClientDXClick",element,
  236.     function()
  237.         local cx,cy = getCursorPosition()
  238.         cx = cx * sx
  239.         cy = cy * sy
  240.         local x = 0
  241.         local y = 0
  242.         if getElementData(source,"parent") then
  243.             x = getElementData(getElementParent(source),"x")
  244.             y = getElementData(getElementParent(source),"y")
  245.         end
  246.         if getElementData(source,"horizontal") then
  247.             cx = cx - getElementData(source,"x") - x
  248.             cx = cx - (getElementData(source,"scroll")*getElementData(source,"width")/2)
  249.             if cx >= 0 and cx <= ((getElementData(source,"width")/2)) then
  250.                 setElementData(source,"attachOffset",cx)
  251.             end
  252.         else
  253.             cy = cy - getElementData(source,"y") - y
  254.             cy = cy - (getElementData(source,"scroll")*getElementData(source,"height")/2)
  255.             if cy >= 0 and cy <= ((getElementData(source,"height")/2)) then
  256.                 setElementData(source,"attachOffset",cy)
  257.             end
  258.         end
  259.     end
  260.     )
  261.     return element
  262. else
  263.     outputDebugString("ERROR: expected arguments are missing (dxCreateButton)")
  264. end
  265. end
  266.  
  267.  
  268.  
  269. function dxCreateStaticImage (x,y,width,height,filepath,relative,parent)
  270. if x and y and height and width and filepath then
  271.     if relative then
  272.         if parent then
  273.             x = x*getElementData(parent,"x")
  274.             y = y*getElementData(parent,"y")
  275.         else
  276.             x = x * sx
  277.             y = y* sy
  278.         end
  279.     end
  280.     local element = createElement("dxStaticImage")
  281.     setElementParent(element,parent or dxRootElement)
  282.     setElementData(element,"x",x)
  283.     setElementData(element,"y",y)
  284.     setElementData(element,"width",width)
  285.     setElementData(element,"height",height)
  286.     setElementData(element,"filepath",filepath)
  287.     setElementData(element,"parent",parent)
  288.     setElementData(element,"state","normal")   
  289.     return element
  290. else
  291.     outputDebugString("ERROR: expected arguments are missing (dxCreateButton)")
  292. end
  293. end
  294.  
  295.  
  296. function dxCreateLabel (x,y,width,height,text,relative,parent,colorcoded)
  297. if x and y and height and width and text then
  298.     if relative then
  299.         if parent then
  300.             x = x*getElementData(parent,"x")
  301.             y = y*getElementData(parent,"y")
  302.         else
  303.             x = x * sx
  304.             y = y* sy
  305.         end
  306.     end
  307.     local element = createElement("dxLabel")
  308.     setElementParent(element,parent or dxRootElement)
  309.     setElementData(element,"font","default")
  310.     setElementData(element,"x",x)
  311.     setElementData(element,"y",y)
  312.     setElementData(element,"width",width)
  313.     setElementData(element,"height",height)
  314.     setElementData(element,"text",text)
  315.     setElementData(element,"parent",parent)
  316.     setElementData(element,"state","normal")   
  317.     setElementData(element,"colorcoded",colorcoded)
  318.     return element
  319. else
  320.     outputDebugString("ERROR: expected arguments are missing (dxCreateLabel)") 
  321. end
  322. end
  323.  
  324.  
  325.  
  326.  
  327. function dxCreateButton(x,y,width,height,text,relative,parent)
  328. if x and y and height and width and text then
  329.     if relative then
  330.         if parent then
  331.             x = x*getElementData(parent,"x")
  332.             y = y*getElementData(parent,"y")
  333.         else
  334.             x = x * sx
  335.             y = y* sy
  336.         end
  337.     end
  338.     local element = createElement("dxButton")
  339.     setElementParent(element,parent or dxRootElement)
  340.     setElementData(element,"x",x)
  341.     setElementData(element,"y",y)
  342.     setElementData(element,"width",width)
  343.     setElementData(element,"height",height)
  344.     setElementData(element,"text",text)
  345.     setElementData(element,"parent",parent)
  346.     setElementData(element,"state","normal")   
  347.     setElementData(element,"normalpath","images/button.png")
  348.     setElementData(element,"hoveredpath","images/buttonhover.png")
  349.     setElementData(element,"clickedpath","images/buttonclicked.png")
  350.     return element
  351. else
  352.     outputDebugString("ERROR: expected arguments are missing (dxCreateButton)")
  353. end
  354. end
  355.  
  356. function dxCreateEdit(x,y,width,height,text,relative,parent)
  357. if x and y and height and width and text then
  358.     if relative then
  359.         if parent then
  360.             x = x*getElementData(parent,"x")
  361.             y = y*getElementData(parent,"y")
  362.         else
  363.             x = x * sx
  364.             y = y* sy
  365.         end
  366.     end
  367.     local element = createElement("dxEdit")
  368.     setElementParent(element,parent or dxRootElement)
  369.     setElementData(element,"x",x)
  370.     setElementData(element,"y",y)
  371.     setElementData(element,"width",width)
  372.     setElementData(element,"height",height)
  373.     setElementData(element,"text",text)
  374.     setElementData(element,"parent",parent)
  375.     setElementData(element,"state","normal")   
  376.     setElementData(element,"font","default")
  377.     addEventHandler("onClientDXClick",element,moveCursor)
  378.     return element
  379. else
  380.     outputDebugString("ERROR: expected arguments are missing (dxCreateEdit)")  
  381. end
  382. end
  383.  
  384.  
  385. function dxCreateMemo(x,y,width,height,text,relative,parent)
  386. if x and y and height and width and text then
  387.     if relative then
  388.         if parent then
  389.             x = x*getElementData(parent,"x")
  390.             y = y*getElementData(parent,"y")
  391.         else
  392.             x = x * sx
  393.             y = y* sy
  394.         end
  395.     end
  396.     local element = createElement("dxMemo")
  397.     setElementParent(element,parent or dxRootElement)
  398.     setElementData(element,"x",x)
  399.     setElementData(element,"y",y)
  400.     setElementData(element,"width",width)
  401.     setElementData(element,"height",height)
  402.     setElementData(element,"text",text)
  403.     setElementData(element,"parent",parent)
  404.     setElementData(element,"state","normal")   
  405.     setElementData(element,"font","default")
  406.     addEventHandler("onClientDXClick",element,moveCursor)
  407.     return element
  408. else
  409.     outputDebugString("ERROR: expected arguments are missing (dxCreateEdit)")  
  410. end
  411. end
  412.  
  413.  
  414.  
  415. function dxCreateCheckBox(x,y,text,selected,relative,parent)
  416. if x and y and text then
  417.     if relative then
  418.         if parent then
  419.             x = x*getElementData(parent,"x")
  420.             y = y*getElementData(parent,"y")
  421.         else
  422.             x = x * sx
  423.             y = y* sy
  424.         end
  425.     end
  426.     local element = createElement("dxCheckBox")
  427.     setElementParent(element,parent or dxRootElement)
  428.     setElementData(element,"x",x)
  429.     setElementData(element,"y",y)
  430.     setElementData(element,"width",20)
  431.     setElementData(element,"height",20)
  432.     setElementData(element,"text",text)
  433.     setElementData(element,"check",selected)
  434.     setElementData(element,"parent",parent)
  435.     setElementData(element,"state","normal")   
  436.     setElementData(element,"font","default")
  437.     addEventHandler("onClientDXClick",element,function () setElementData(source,"check",not getElementData(source,"check")) end)
  438.     return element
  439. else
  440.     outputDebugString("ERROR: expected arguments are missing (dxCreateButton)")
  441. end
  442. end
  443.  
  444.  
  445.  
  446.  
  447.  
  448. function setEditText ()
  449. local control = controls()
  450. for id,element in ipairs(getElementsByType("dxEdit")) do
  451.     if getElementData(element,"input") and not getElementData(element,"readonly") then
  452.         if control == "backspace" then
  453.             setElementData(element,"text",string.sub(getElementData(element,"text"),1,string.len(getElementData(element,"text"))-1))
  454.         else
  455.             if getElementData(element,"maxlength") then
  456.                
  457.                 if (string.len(getElementData(element,"text"))) < getElementData(element,"maxlength") then
  458.                     setElementData(element,"text",getElementData(element,"text")..control)
  459.                 end
  460.             else
  461.                 setElementData(element,"text",getElementData(element,"text")..control)
  462.             end
  463.         end
  464.     end
  465. end
  466. end
  467.  
  468.  
  469.  
  470. function moveCursor()
  471. for id, element in ipairs (getElementsByType("dxEdit")) do
  472.     setElementData(element,"input",nil)
  473. end
  474. setElementData(source,"input",true)
  475. removeEventHandler("onClientRender",getRootElement(),setEditText)
  476. addEventHandler("onClientRender",getRootElement(),setEditText)
  477. end
  478.  
  479.  
  480. local KeyStates = {}
  481.  
  482. function controls()
  483. keyTable = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
  484.  "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z","backspace","num_0", "num_1", "num_2", "num_3", "num_4", "num_5",
  485.  "num_6", "num_7", "num_8", "num_9", "num_mul", "num_add", "num_sub", "num_div", "num_dec","space","[", "]", ";", ",", "-", ".", "/", "#", "\\", "="}
  486. for id, key in ipairs(keyTable) do
  487.     if getKeyState(key) then
  488.         if not KeyStates[id] then
  489.             KeyStates = {}
  490.             KeyStates[id] = true
  491.             if key == "num_0" then return "0"
  492.             elseif key == "num_1" then return "1"
  493.             elseif key == "num_2" then return "2"
  494.             elseif key == "num_3" then return "3"
  495.             elseif key == "num_4" then return "4"
  496.             elseif key == "num_5" then return "5"
  497.             elseif key == "num_6" then return "6"
  498.             elseif key == "num_7" then return "7"
  499.             elseif key == "num_8" then return "8"
  500.             elseif key == "num_9" then return "9"
  501.             elseif key == "num_add" then return "+"
  502.             elseif key == "num_sub" then return "-"
  503.             elseif key == "num_div" then return "/"
  504.             elseif key == "num_mul" then return "*"
  505.             elseif key == "num_dec" then return ","
  506.             elseif key == "space" then return " "
  507.             else
  508.             if not (getKeyState("lshift") or getKeyState("rshift")) then
  509.                 return key
  510.             else
  511.                 return string.upper(key)
  512.             end
  513.             end
  514.         else
  515.             return ""
  516.         end
  517.     end
  518. end
  519. KeyStates = {}
  520. return ""
  521. end
  522.  
  523. function dxWindowSetMovable(window,bool)
  524. if not window then return false end
  525. return setElementData(window,"movable",bool)
  526. end
  527.  
  528.  
  529.  
  530.  
  531. function drawingGUI()
  532. for id, dxGUIElement in ipairs (getElementsByType("dxWindow")) do
  533. if getElementData(dxGUIElement,"movable")  then
  534.     if elementBeingMoved == dxGUIElement then
  535.         if isCursorShowing() then
  536.             local cx,cy = getCursorPosition()
  537.             cx = cx*sx
  538.             cy = cy*sy
  539.             setElementData(dxGUIElement,"x",  cx - movedElementOffset[1])
  540.             setElementData(dxGUIElement,"y",  cy - movedElementOffset[2])
  541.         end
  542.     end
  543. end
  544. dxDrawImage( getElementData(dxGUIElement,"x"), getElementData(dxGUIElement,"y"), getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/window.png",0,0,0,getElementData(dxGUIElement,"backgroundColor"))
  545. dxDrawImageSection ( getElementData(dxGUIElement,"x"), getElementData(dxGUIElement,"y"), getElementData(dxGUIElement,"width"), 30,0,0,800,(600/getElementData(dxGUIElement,"height"))*30,"images/window.png",0,0,0,getElementData(dxGUIElement,"titleBackgroundColor"))
  546. dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x"),getElementData(dxGUIElement,"y"),getElementData(dxGUIElement,"x")+getElementData(dxGUIElement,"width"),getElementData(dxGUIElement,"y")+30,tocolor(255,255,255,255),1.3 * (15/dxGetFontHeight(1,getElementData(dxGUIElement,"font"))),getElementData(dxGUIElement,"font"),"center","center")
  547. end
  548. for id, dxGUIElement in ipairs (getElementsByType("dxCheckBox")) do
  549.     local x = 0
  550.     local y = 0
  551.     if getElementData(dxGUIElement,"parent") then
  552.         x = getElementData(getElementParent(dxGUIElement),"x")
  553.         y = getElementData(getElementParent(dxGUIElement),"y")
  554.     end
  555.     if getElementData(dxGUIElement,"state") == "normal" then
  556.         if getElementData(dxGUIElement,"check") then
  557.             dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y,20,20, "images/checkboxcheck.png")
  558.         else
  559.             dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, 20,20, "images/checkbox.png")
  560.         end
  561.     else
  562.         if getElementData(dxGUIElement,"check") then
  563.             dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, 20,20, "images/checkboxcheck_hover.png")
  564.         else
  565.             dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, 20,20, "images/checkbox_hover.png")
  566.         end
  567.     end
  568.     dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x+25, getElementData(dxGUIElement,"y")+y,0,getElementData(dxGUIElement,"y")+y+20,tocolor(255,255,255,255),1.5*(15/dxGetFontHeight(1,getElementData(dxGUIElement,"font"))),getElementData(dxGUIElement,"font"),"left","center")
  569. end
  570. for id, dxGUIElement in ipairs (getElementsByType("dxButton")) do
  571.     local x = 0
  572.     local y = 0
  573.     if getElementData(dxGUIElement,"parent") then
  574.         x = getElementData(getElementParent(dxGUIElement),"x")
  575.         y = getElementData(getElementParent(dxGUIElement),"y")
  576.     end
  577.     if getElementData(dxGUIElement,"state") == "normal" then
  578.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), getElementData(dxGUIElement,"normalpath"))
  579.     elseif getElementData(dxGUIElement,"state") == "hovered" then
  580.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), getElementData(dxGUIElement,"hoveredpath"))
  581.     elseif getElementData(dxGUIElement,"state") == "clicked" then
  582.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), getElementData(dxGUIElement,"clickedpath"))
  583.     end
  584.     dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(255,255,255,255),1.5*(15/dxGetFontHeight(1,getElementData(dxGUIElement,"font"))),getElementData(dxGUIElement,"font"),"center","center")
  585. end
  586. for id, dxGUIElement in ipairs (getElementsByType("dxEdit")) do
  587.     local x = 0
  588.     local y = 0
  589.     local text = getElementData(dxGUIElement,"text")
  590.     if getElementData(dxGUIElement,"masked") then
  591.         text = string.gsub(text,".","*")
  592.     end
  593.     if getElementData(dxGUIElement,"parent") then
  594.         x = getElementData(getElementParent(dxGUIElement),"x")
  595.         y = getElementData(getElementParent(dxGUIElement),"y")
  596.     end
  597.     if getElementData(dxGUIElement,"state") == "normal" then
  598.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/edit.png")
  599.     else
  600.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/edit_hover.png")
  601.     end
  602.     if dxGetTextWidth(text,getElementData(dxGUIElement,"height")/15) <= getElementData(dxGUIElement,"width") then
  603.         dxDrawText(text,getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(0,0,0,255),getElementData(dxGUIElement,"height")/( dxGetFontHeight(1,getElementData(dxGUIElement,"font")) ),getElementData(dxGUIElement,"font"),"left","center",true)
  604.     else
  605.         dxDrawText(text,getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(0,0,0,255),getElementData(dxGUIElement,"height")/dxGetFontHeight(1,getElementData(dxGUIElement,"font")),getElementData(dxGUIElement,"font"),"right","center",true)
  606.     end
  607. end
  608. for id, dxGUIElement in ipairs (getElementsByType("dxMemo")) do
  609.     local x = 0
  610.     local y = 0
  611.     if getElementData(dxGUIElement,"parent") then
  612.         x = getElementData(getElementParent(dxGUIElement),"x")
  613.         y = getElementData(getElementParent(dxGUIElement),"y")
  614.     end
  615.     if getElementData(dxGUIElement,"state") == "normal" then
  616.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/memo.png")
  617.     else
  618.         dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/memo_hover.png")
  619.     end
  620.     --Since I haven't got bottom aligning of a huge text working, I disabled it. It would only show last line of text and that is useful anyways. Because of that, dxMemos are NOT editable.  
  621.     --if ((dxGetTextWidth(getElementData(dxGUIElement,"text"),1.5)/getElementData(dxGUIElement,"width"))*22.5) <= getElementData(dxGUIElement,"height") then      --This calculation isn't perfect too, but there isn't better way.
  622.         dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(0,0,0,255),1.5*(15/dxGetFontHeight(1,getElementData(dxGUIElement,"font"))),getElementData(dxGUIElement,"font"),"left","top",true,true)
  623.     --else
  624.         --  dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y ,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(0,0,0,255),1.5*(15/dxGetFontHeight(1,getElementData(dxGUIElement,"font"))),getElementData(dxGUIElement,"font"),"left","bottom",true,true)
  625.     --end      
  626.     end
  627. for id, dxGUIElement in ipairs (getElementsByType("dxStaticImage")) do
  628.     local x = 0
  629.     local y = 0
  630.     if getElementData(dxGUIElement,"parent") then
  631.         x = getElementData(getElementParent(dxGUIElement),"x")
  632.         y = getElementData(getElementParent(dxGUIElement),"y")
  633.     end
  634.     dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), getElementData(dxGUIElement,"filepath"))     
  635. end
  636. for id, dxGUIElement in ipairs (getElementsByType("dxLabel")) do
  637.     local x = 0
  638.     local y = 0
  639.     if getElementData(dxGUIElement,"parent") then
  640.         x = getElementData(getElementParent(dxGUIElement),"x")
  641.         y = getElementData(getElementParent(dxGUIElement),"y")
  642.     end
  643.     if not getElementData(dxGUIElement,"colorcoded") then
  644.         dxDrawText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(255,255,255,255),getElementData(dxGUIElement,"height")/dxGetFontHeight(1,getElementData(dxGUIElement,"font")),getElementData(dxGUIElement,"font"),"left","top",true,false)
  645.     else
  646.         dxDrawColoredText(getElementData(dxGUIElement,"text"),getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"x")+x+getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"y")+y+getElementData(dxGUIElement,"height"),tocolor(255,255,255,255),getElementData(dxGUIElement,"height")/dxGetFontHeight(1,getElementData(dxGUIElement,"font")),getElementData(dxGUIElement,"font"),"left","top",true,false)
  647.     end
  648. end
  649. for id, dxGUIElement in ipairs (getElementsByType("dxScrollBar")) do
  650.     local x = 0
  651.     local y = 0
  652.     if getElementData(dxGUIElement,"parent") then
  653.         x = getElementData(getElementParent(dxGUIElement),"x")
  654.         y = getElementData(getElementParent(dxGUIElement),"y")
  655.     end
  656.     if not getElementData(dxGUIElement,"horizontal") then
  657.         dxDrawRectangle(getElementData(dxGUIElement,"x")+x+5-1, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height")+2,tocolor(50,50,50,130))
  658.         dxDrawRectangle(getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y + ((getElementData(dxGUIElement,"height")/2)*getElementData(dxGUIElement,"scroll")),getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height")/2,tocolor(155,155,155,200))
  659.     else
  660.         dxDrawRectangle(getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y,getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"),tocolor(50,50,50,130))
  661.         dxDrawRectangle(getElementData(dxGUIElement,"x")+x+5+ ((getElementData(dxGUIElement,"width")/2)*getElementData(dxGUIElement,"scroll")), getElementData(dxGUIElement,"y")+y ,getElementData(dxGUIElement,"width")/2, getElementData(dxGUIElement,"height"),tocolor(155,155,155,200))
  662.     end
  663.    
  664. end
  665. for id, dxGUIElement in ipairs (getElementsByType("dxGridList")) do
  666.     local x = 0
  667.     local y = 0
  668.     if getElementData(dxGUIElement,"parent") then
  669.         x = getElementData(getElementParent(dxGUIElement),"x")
  670.         y = getElementData(getElementParent(dxGUIElement),"y")
  671.     end
  672.     dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/grid.png")
  673.     local no = #getElementChildren( dxGUIElement )
  674.     for id, item in ipairs (getElementChildren( dxGUIElement )) do
  675.     local delta = 0
  676.         if getElementData(dxGUIElement,"scrollbar") then
  677.             local delta = getElementData(getElementData(dxGUIElement,"scrollbar"),"scroll")*no*1.5*15
  678.         end
  679.         delta = delta/2
  680.         if (((id)*1.5*15)-delta) <= (getElementData(dxGUIElement,"height")+22.5) and (((id)*1.5*15)-delta) >= 0 then
  681.             setElementData(item,"shown",true)
  682.             if getElementData(item,"state") == "hovered" then dxDrawRectangle(getElementData(dxGUIElement,"x")+x,3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0),getElementData(dxGUIElement,"width")-3,getItemShowingHeight(item),tocolor(255,255,255,100)) end
  683.             if getElementData(item,"state") == "clicked" then dxDrawRectangle(getElementData(dxGUIElement,"x")+x,3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0),getElementData(dxGUIElement,"width")-3,getItemShowingHeight(item),tocolor(0,0,0,100)) for id, el in ipairs(getElementChildren(getElementParent(item))) do setElementData(el,"clicked",nil) end setElementData(item,"clicked",true) end
  684.             if getElementData(item,"clicked") then dxDrawRectangle(getElementData(dxGUIElement,"x")+x,3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0),getElementData(dxGUIElement,"width")-3,getItemShowingHeight(item),tocolor(0,0,255,100)) end
  685.             if getElementData(item,"colored") then
  686.                 dxDrawColoredText(getElementData(item,"text"),getElementData(dxGUIElement,"x")+x+3,3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0),getElementData(dxGUIElement,"width")+getElementData(dxGUIElement,"x")+x-3,getElementData(dxGUIElement,"y")+y + math.min(getElementData(dxGUIElement,"height"),((id)*1.5*15)-delta)-3,tocolor(255,255,255,255),1.3,"default","left", getItemAlign(math.max(((id-1)*1.5*15)-delta,0)) ,true)
  687.             else
  688.                 dxDrawText(getElementData(item,"text"),getElementData(dxGUIElement,"x")+x+3,3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0),getElementData(dxGUIElement,"width")+getElementData(dxGUIElement,"x")+x-3,getElementData(dxGUIElement,"y")+y + math.min(getElementData(dxGUIElement,"height"),((id)*1.5*15)-delta)-3,tocolor(255,255,255,255),1.3,"default","left", getItemAlign(math.max(((id-1)*1.5*15)-delta,0)) ,true)
  689.             end
  690.             setElementData(item,"width",getElementData(dxGUIElement,"width"))
  691.             setElementData(item,"height",15*1.5)
  692.             setElementData(item,"x",getElementData(dxGUIElement,"x")+x)
  693.             setElementData(item,"y",3+ getElementData(dxGUIElement,"y")+y + math.max(((id-1)*1.5*15)-delta,0))
  694.         else
  695.             setElementData(item,"shown",false)
  696.         end
  697.     end
  698. for id, dxGUIElement in ipairs (getElementsByType("dxProgressBar")) do
  699.     local x = 0
  700.     local y = 0
  701.     if getElementData(dxGUIElement,"parent") then
  702.         x = getElementData(getElementParent(dxGUIElement),"x")
  703.         y = getElementData(getElementParent(dxGUIElement),"y")
  704.     end
  705.     dxDrawImage( getElementData(dxGUIElement,"x")+x, getElementData(dxGUIElement,"y")+y, getElementData(dxGUIElement,"width"), getElementData(dxGUIElement,"height"), "images/progress.png")
  706.     dxDrawRectangle(getElementData(dxGUIElement,"x")+x+5, getElementData(dxGUIElement,"y")+y+5, ((getElementData(dxGUIElement,"width")-10)*((getElementData(dxGUIElement,"progress")/100))),getElementData(dxGUIElement,"height")-10,tocolor(0,255,0,155))
  707. end
  708. end
  709. end
  710.  
  711. function getItemAlign(value)
  712. if value == 0 then return "bottom" else return "top" end
  713. end
  714.  
  715. function getItemShowingHeight(item)
  716. local y = getElementData(item,"y")
  717. local gx,gy = dxGetPosition(getElementParent(item))
  718. local delta =  getElementData(getElementParent(item),"height") - (y-gy)
  719. return math.min(delta,22.5)
  720. end
  721.  
  722.  
  723. function dxGridListAddRow(gridlist,text)
  724. if gridlist and text then
  725.     local element = createElement("dxGridListItem")
  726.     setElementParent(element,gridlist)
  727.     setElementData(element,"text",text)
  728.     if (#(getElementChildren(gridlist))*15*1.5) >= getElementData(gridlist,"height") and not getElementData(gridlist,"scrollbar")then
  729.         setElementData(gridlist,"width",getElementData(gridlist,"width")-20)
  730.         local x,y = dxGetPosition(gridlist)
  731.         local x1,y1 = dxGetPosition(getElementParent(gridlist))
  732.         x = x- x1
  733.         y = y - y1
  734.         local scrollbar = dxCreateScrollBar(x+getElementData(gridlist,"width")-5,y,20,getElementData(gridlist,"height"),false,false,getElementParent(gridlist))
  735.         setElementData(gridlist,"scrollbar",scrollbar)
  736.         end
  737.     return element
  738. else
  739.     outputDebugString("ERROR: expected arguments are missing (dxGridListAddRow)")  
  740.     return false
  741. end
  742. end
  743.  
  744.  
  745.  
  746. function dxGetPosition(element,relative)
  747. if not element then return false end
  748. local x = getElementData(element,"x")
  749. local y = getElementData(element,"y")
  750. local px = getElementData(getElementParent(element),"x")
  751. local py = getElementData(getElementParent(element),"y")
  752. if not relative then
  753.     return x + px, y + py
  754. else
  755.     return x/px, y/py
  756. end
  757. end
  758.  
  759. function dxSetPosition(element,fx,fy,relative)
  760. if not element then return false end
  761. local x = getElementData(element,"x")
  762. local y = getElementData(element,"y")
  763. local px = getElementData(getElementParent(element),"x")
  764. local py = getElementData(getElementParent(element),"y")
  765. if not relative then
  766.     setElementData(element,"x",fx)
  767.     setElementData(element,"y",fy)
  768. else
  769.     setElementData(element,"x",fx*px)
  770.     setElementData(element,"y",fy*py)
  771. end
  772. end
  773.  
  774. function dxSetSize(element,fx,fy,relative)
  775. if not element then return false end
  776. local px = getElementData(getElementParent(element),"width")
  777. local py = getElementData(getElementParent(element),"height")
  778. if not relative then
  779.     setElementData(element,"width",fx)
  780.     return setElementData(element,"height",fy)
  781. else
  782.     setElementData(element,"height",fx*px)
  783.     return setElementData(element,"width",fy*py)
  784. end
  785. end
  786.  
  787. function dxGetSize(element,relative)
  788. if not element then return false end
  789. local px = getElementData(getElementParent(element),"width")
  790. local py = getElementData(getElementParent(element),"height")
  791. if not relative then
  792.     return getElementData(element,"width"),getElementData(element,"height")
  793. else
  794.     return (getElementData(element,"height"))/py, (getElementData(element,"width"))/py
  795. end
  796. end
  797.  
  798. function dxEditSetMaxLength (edit,length)
  799. if not edit then return false end
  800. return setElementData(edit,"maxlength",length)
  801. end
  802.  
  803. function dxProgressBarSetProgress(progressbar,progress)
  804. if not progressbar then return false end
  805. return setElementData(progressbar,"progress",progress)
  806. end
  807.  
  808. function dxProgressBarGetProgress(progressbar)
  809. if not progressbar then return false end
  810. return getElementData(progressbar,"progress")
  811. end
  812.  
  813. function dxSetFont(element,font)
  814. return setElementData(element,"font",font)
  815. end
  816.  
  817. function dxGetFont(element)
  818. return getElementData(element,"font")
  819. end
  820.  
  821.  
  822.  
  823. addEventHandler("onClientRender",getRootElement(),
  824. function()
  825. if not attachedScrollBar then return end
  826. local cx, cy = getCursorPosition()
  827. if not cx or not cy then return end
  828. cx = cx * sx
  829. cy = cy * sy
  830. local x = 0
  831. local y = 0
  832. if getElementData(attachedScrollBar,"parent") then
  833.     x = getElementData(getElementParent(attachedScrollBar),"x")
  834.     y = getElementData(getElementParent(attachedScrollBar),"y")
  835. end
  836. if getElementData(attachedScrollBar,"horizontal") then
  837.     x = x + getElementData(attachedScrollBar,"x")
  838.     cx = cx - x - (getElementData(attachedScrollBar,"attachOffset") or 0 )
  839.     local scroll = cx / (getElementData(attachedScrollBar,"width")/2)
  840.     scroll = math.max(0,scroll)
  841.     scroll = math.min(1,scroll)
  842.     setElementData(attachedScrollBar,"scroll",scroll)
  843. else
  844.     y = y + getElementData(attachedScrollBar,"y")
  845.     cy = cy - y - (getElementData(attachedScrollBar,"attachOffset") or 0 )
  846.     local scroll = cy / (getElementData(attachedScrollBar,"height")/2)
  847.     scroll = math.max(0,scroll)
  848.     scroll = math.min(1,scroll)
  849.     setElementData(attachedScrollBar,"scroll",scroll)
  850. end
  851. end
  852. )
  853.  
  854.  
  855. function GUIstates()
  856. if not isCursorShowing() then return end
  857. local x,y = getCursorPosition()
  858. x = x * sx
  859. y = y * sy
  860. for id,element_r in ipairs(getElementChildren(dxRootElement)) do
  861.     for id, element in ipairs(getElementChildren(element_r)) do
  862.         if getElementType(element) == "dxGridList" then
  863.             for id, element in ipairs(getElementChildren(element)) do
  864.                 if getElementType(element) == "dxGridListItem" and getElementData(element,"shown") then
  865.                     local g_height = getElementData(element,"height") or 0
  866.                     local g_width = getElementData(element,"width") or 0
  867.                     local px = getElementData(element,"x")
  868.                     local py = getElementData(element,"y")
  869.                     if x >= px and x <= (px+g_width) and y >= py and y <= (py + g_height) then
  870.                         if getKeyState("mouse1") then
  871.                             setElementData(element,"state","clicked",sync)
  872.                         else
  873.                             setElementData(element,"state","hovered",sync)
  874.                         end
  875.                     else
  876.                         setElementData(element,"state","normal",sync)
  877.                     end
  878.                 end
  879.             end
  880.         else
  881.             local g_height = getElementData(element,"height") or 0
  882.             local g_width = getElementData(element,"width") or 0
  883.             local px, py = dxGetPosition(element)
  884.             if x >= px and x <= (px+g_width) and y >= py and y <= (py + g_height) then
  885.                 if getKeyState("mouse1") then
  886.                     setElementData(element,"state","clicked",sync)
  887.                 else
  888.                     if getElementData(element,"state") == "normal" then
  889.                         triggerEvent("onClientDXMouseEnter",element)
  890.                     end
  891.                     setElementData(element,"state","hovered",sync)
  892.                 end
  893.             else
  894.                 if getElementData(element,"state") == "hovered" then
  895.                     triggerEvent("onClientDXMouseLeave",element)
  896.                 end
  897.                 setElementData(element,"state","normal",sync)
  898.             end
  899.         end
  900.     end
  901. end
  902. end
  903.  
  904.  
  905.  
  906. function movingGUI(button,state,x,y)
  907. attachedScrollBar = nil
  908. for id, element in ipairs (getElementsByType("dxEdit")) do
  909.     setElementData(element,"input",nil)
  910. end
  911. if button == "left" and state == "down" then
  912.     for id, element in ipairs(getElementChildren(dxRootElement)) do
  913.         local width = getElementData(element,"width") or 0
  914.         local height = getElementData(element,"height") or 0
  915.         if x >= getElementData(element,"x") and x <= (getElementData(element,"x")+width) and y >= getElementData(element,"y") and y <= (getElementData(element,"y") + 30) then
  916.             elementBeingMoved = element
  917.             movedElementOffset = { x - getElementData(element,"x"), y - getElementData(element,"y")}
  918.         end
  919.     end
  920.     for id, element in ipairs(getElementsByType("dxScrollBar")) do
  921.         local g_height = getElementData(element,"height") or 0
  922.             local g_width = getElementData(element,"width") or 0
  923.             local px, py = dxGetPosition(element)
  924.             if x >= px and x <= (px+g_width) and y >= py and y <= (py + g_height) then
  925.         if getElementType(element) == "dxScrollBar" then
  926.             triggerEvent("onClientDXClick",element)
  927.             attachedScrollBar = element
  928.         end
  929.     end
  930.     end
  931. else
  932.     elementBeingMoved = nil
  933.     for id,element_r in ipairs(getElementChildren(dxRootElement)) do
  934.         for id, element in ipairs(getElementChildren(element_r)) do
  935.             local g_height = getElementData(element,"height") or 0
  936.             local g_width = getElementData(element,"width") or 0
  937.             local px, py = dxGetPosition(element)
  938.             if x >= px and x <= (px+g_width) and y >= py and y <= (py + g_height) then
  939.                     if state == "up" and button =="left" then
  940.                         triggerEvent("onClientDXClick",element)
  941.                     end
  942.             end
  943.         end
  944.     end
  945. end
  946. end
  947.  
  948.  
  949. function dxDrawColoredText(str, ax, ay, bx, by, color, scale, font,left,top)
  950. left = "left"
  951. if not top then top = "top" end
  952. --This function isn't mine, I found it on community, but unfortunately I don't remember the author's name. Credits go to him, though it is easy to make it by yourself
  953.   local pat = "(.-)#(%x%x%x%x%x%x)"
  954.   local s, e, cap, col = str:find(pat, 1)
  955.   local last = 1
  956.   while s do
  957.     if cap == "" and col then color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) end
  958.     if s ~= 1 or cap ~= "" then
  959.       local w = dxGetTextWidth(cap, scale, font)
  960.       dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,left,top,true)
  961.       ax = ax + w
  962.       color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255)
  963.     end
  964.     last = e + 1
  965.     s, e, cap, col = str:find(pat, last)
  966.   end
  967.   if last <= #str then
  968.     cap = str:sub(last)
  969.     local w = dxGetTextWidth(cap, scale, font)
  970.     dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,left,top,true)
  971.   end
  972. end
  973.  
  974.  
  975. function dxGetText(element)
  976. if not element then return false end
  977. return getElementData(element,"text")
  978. end
  979.  
  980. function dxSetText(element,text)
  981. if not element then return false end
  982. return setElementData(element,"text",text)
  983. end
  984.  
  985.  
  986.  
  987.  
  988.  
  989. addEvent("onClientDXClick",true)
  990. addEvent("onClientDXMouseEnter",true)
  991. addEvent("onClientDXMouseLeave",true)
  992. addEventHandler("onClientClick",getRootElement(),movingGUI)
  993. addEventHandler("onClientRender",getRootElement(),drawingGUI)
  994. addEventHandler("onClientRender",getRootElement(),GUIstates)
Advertisement
Add Comment
Please, Sign In to add comment