Advertisement
ssccsscc

TPT - Timer

Sep 4th, 2018
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 61.44 KB | None | 0 0
  1. ------------------- Configuration -------------------
  2. local InterfaceAPIVersion = 2.3
  3. -----------------------------------------------------
  4. local DefaultTheme = {
  5.   Window = {},
  6.   Button = {},
  7.   Selection = {},
  8.   Combobox = {},
  9.   Graph = {},
  10.   Label = {},
  11.   Textbox = {},
  12.   Checkbox = {},
  13.   Rectangle = {},
  14.   Listbox = {}
  15. }
  16.  
  17. local function DefineInterfaceComponents()
  18.   function interface_s.Components.Window:new(x, y, Width, Height, Movable, theme)
  19.     local obj= {}
  20.     obj.Type = "Window"
  21.  
  22.     obj.AllowResize = true
  23.     obj.AlwaysFocused = false
  24.     obj.IsMovable = Movable
  25.     obj.MinWidth = 16
  26.     obj.MinHeight = 16
  27.     obj.Theme = theme
  28.     obj.X = x
  29.     obj.Y = y
  30.     obj.Width = Width
  31.     obj.Height = Height
  32.  
  33.     obj.OnShow = nil
  34.     obj.OnHide = nil
  35.     obj.OnDraw = nil
  36.     obj.OnEndDraw = nil
  37.     obj.OnMove = nil
  38.  
  39.     obj.Focused=false
  40.     obj.Items = {}
  41.     obj.MoveStartX = -1
  42.     obj.MoveStartY = -1
  43.     obj.IsMoving = false
  44.     obj.IsShowing = true
  45.     obj.IsResizing = false
  46.     obj.ResizeStartX = 1
  47.     obj.ResizeStartY = 1
  48.     obj.ResizeStartWidth = 1
  49.     obj.ResizeStartHeight = 1
  50.     obj.ResizeLastWidth =0
  51.     obj.ResizeLastHeight=0  
  52.     obj.SizeOfHeader = 8  
  53.     function obj:Draw(IsFocused,mx,my)
  54.       self.Focused=IsFocused or self.AlwaysFocused
  55.       if self.OnDraw ~= nil then
  56.         if self.OnDraw(IsFocused,mx,my) == true then
  57.           return
  58.         end
  59.       end
  60.       if self.Focused == true then
  61.         gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
  62.         gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
  63.         if self.IsMovable then
  64.           gfx.fillRect(self.X, self.Y, self.Width,self.SizeOfHeader, gfx.getColors(self.Theme.HeaderColor))
  65.         end
  66.         if self.AllowResize==true then
  67.           gfx.fillRect(self.X+self.Width-6, self.Y+self.Height-6, 6,6, gfx.getColors(self.Theme.BorderColor))
  68.         end
  69.       else
  70.         gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBackColor))
  71.         gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
  72.         if self.AllowResize==true then
  73.           gfx.fillRect(self.X+self.Width-6, self.Y+self.Height-6, 6,6, gfx.getColors(self.Theme.UnfocusedBorderColor))
  74.         end
  75.         if self.IsMovable then
  76.           gfx.fillRect(self.X, self.Y, self.Width,self.SizeOfHeader, gfx.getColors(self.Theme.UnfocusedHeaderColor))
  77.         end
  78.       end
  79.       for i=#self.Items,0,-1 do
  80.         if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) then
  81.           self.Items[i]:Draw(self.Focused,self.X,self.Y,mx-self.X,my-self.Y)
  82.         end
  83.       end
  84.       if self.OnEndDraw ~= nil then
  85.         if self.OnEndDraw(IsFocused,mx,my) == true then
  86.           return
  87.         end
  88.       end
  89.     end
  90.     function obj:Show()
  91.       self.IsShowing = true
  92.       if self.OnShow ~= nil then
  93.          self.OnShow(self)
  94.       end
  95.     end
  96.     function obj:Hide()
  97.       self.IsShowing = false
  98.       if self.OnHide ~= nil then
  99.          self.OnHide(self)
  100.       end
  101.     end
  102.     function obj:Resize(ws,hs)
  103.       if ws < self.MinWidth then
  104.         ws=self.MinWidth
  105.       end
  106.       if hs < self.MinHeight then
  107.         hs=self.MinHeight
  108.       end
  109.       self.ResizeLastHeight = self.Height
  110.       self.ResizeLastWidth = self.Width
  111.       self.Height = hs
  112.       self.Width = ws
  113.       hs = self.Height-self.ResizeLastHeight
  114.       ws = self.Width-self.ResizeLastWidth
  115.       for i=0,#self.Items do
  116.         if self.Items[i]~=nil then
  117.           if self.Items[i].Anchor.Top==true and self.Items[i].Anchor.Bottom==true then
  118.             self.Items[i].Height = self.Items[i].Height + hs
  119.           end
  120.           if self.Items[i].Anchor.Top==false and self.Items[i].Anchor.Bottom==true then
  121.             self.Items[i].Y = self.Items[i].Y + hs
  122.           end
  123.           if self.Items[i].Anchor.Left==true and self.Items[i].Anchor.Right==true then
  124.             self.Items[i].Width = self.Items[i].Width + ws
  125.           end
  126.           if self.Items[i].Anchor.Left==false and self.Items[i].Anchor.Right==true then
  127.             self.Items[i].X = self.Items[i].X + ws
  128.           end
  129.         end
  130.       end
  131.     end
  132.     function obj:AddComponent(component)
  133.       self.Items[#self.Items+1] = component
  134.       component.Base = self
  135.     end
  136.     function obj:GetComponentIndex(obj2)
  137.       for i=0, #self.Items do
  138.         if self.Items[i] == obj2 then
  139.           return i
  140.         end
  141.       end
  142.       return -1
  143.     end
  144.     function obj:focusComponent(obj2)
  145.       local index = self:GetComponentIndex(obj2)
  146.       for i=index, 1,-1 do
  147.         self.Items[i] = self.Items[i-1]
  148.       end
  149.       self.Items[0] = obj2
  150.     end
  151.     function obj:KeyPress(char, code, mod, evt)
  152.       for i=0,#self.Items do
  153.         if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) and (self.Items[i].KeyPress~=nil) then
  154.           if self.Items[i]:KeyPress(char, code, mod, evt) then
  155.             return true
  156.           end
  157.         end
  158.       end
  159.     end
  160.     function obj:Click(x,y,e,b,w)
  161.       if (self.IsMovable) and (e==3) and (self.IsMoving) then
  162.         self.X = self.X - self.MoveStartX + x
  163.         self.Y = self.Y - self.MoveStartY + y
  164.         if self.OnMove~=nil then
  165.           self.OnMove(self.X,self.Y)
  166.         end
  167.         self.MoveStartX = x
  168.         self.MoveStartY = y
  169.       else
  170.         if (self.IsMovable) and (e==2) and (self.IsMoving) then
  171.           self.IsMoving = false
  172.         end
  173.       end
  174.       if self.IsResizing== false then
  175.         for i=0,#self.Items do
  176.           if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) then
  177.             if self.Items[i]:Click(x-self.X,y-self.Y,e,b,w) then
  178.               return true
  179.             end
  180.           end
  181.         end
  182.       end
  183.       if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
  184.         if self.Focused then
  185.           if self.AllowResize==true and self.IsResizing==false and e==1 and x>self.X+self.Width-8 and x<self.X+self.Width and y>self.Y+self.Height-self.SizeOfHeader and y<self.Y+self.Height then
  186.             self.IsResizing=true
  187.             self.ResizeStartX = x
  188.             self.ResizeStartY = y
  189.             self.ResizeStartWidth = self.Width
  190.             self.ResizeStartHeight = self.Height
  191.             return true
  192.           end
  193.           if (self.IsMovable) and (y>self.Y) and (y<self.Y+self.SizeOfHeader) and (e==1) then
  194.             self.MoveStartX = x
  195.             self.MoveStartY = y
  196.             self.IsMoving = true
  197.           end
  198.           if self.IsResizing==false then
  199.             return true
  200.           end
  201.         else
  202.           if e==1 then
  203.             return true
  204.           end
  205.         end
  206.       else
  207.         if (self.IsMovable) and (e==3) and (self.IsMoving)then
  208.           self.X = self.X - self.MoveStartX + x
  209.           self.Y = self.Y - self.MoveStartY + y
  210.           self.MoveStartX = x
  211.           self.MoveStartY = y
  212.           return true
  213.         end
  214.         if IsResizing==false then
  215.           return false
  216.         end
  217.       end
  218.       if self.IsResizing==true and e==3 then
  219.         self:Resize(self.ResizeStartWidth-self.ResizeStartX+x,self.ResizeStartHeight-self.ResizeStartY+y)
  220.         return true
  221.       end
  222.       if self.IsResizing==true and e==2 then
  223.         self.IsResizing = false
  224.         return true
  225.       end
  226.     end
  227.     setmetatable(obj, self)
  228.     self.__index = self;
  229.     return obj
  230.   end
  231.  
  232.   function interface_s.Components.Button:new(x, y, Width, Height, text, theme)
  233.     local obj= {}
  234.     obj.Type = "Button"
  235.     obj.X = x
  236.     obj.Y = y
  237.     obj.Width = Width
  238.     obj.Height = Height
  239.     obj.Focused=false
  240.     obj.Theme = theme
  241.     obj.IsShowing = true
  242.     obj.Text = text
  243.    
  244.     obj.OnPressed = nil
  245.     obj.OnDraw = nil
  246.     obj.OnEndDraw = nil
  247.     obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
  248.     obj.HintText = ""
  249.     obj.HintHelper = nil
  250.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  251.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  252.       self.Focused=IsFocused
  253.       if self.OnDraw ~= nil then
  254.         if self.OnDraw(IsFocused,self.X+baseX,self.Y+baseY,x,y) == true then
  255.           return
  256.         end
  257.       end
  258.       local tw, th = gfx.textSize(self.Text)
  259.       if IsFocused == true then
  260.         if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
  261.           if self.ClickHelper.IsHold then
  262.             gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.PressedBackColor))
  263.             gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.PressedTextColor))
  264.           else
  265.             gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.MouseOverColor))
  266.             gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.TextColor))
  267.             if self.HintHelper~=nil then
  268.               self.HintHelper:MouseOver(x+baseX,y+baseY,self.HintText)
  269.             end
  270.           end
  271.         else
  272.           if self.HintHelper~=nil then
  273.             self.HintHelper:Reset()
  274.           end
  275.           gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
  276.           gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.TextColor))
  277.         end
  278.         gfx.drawRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
  279.       else
  280.         if self.HintHelper~=nil then
  281.           self.HintHelper:Reset()
  282.         end
  283.         if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
  284.           if self.ClickHelper.IsHold then
  285.             gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.PressedBackColor))
  286.             gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.PressedTextColor))
  287.           else
  288.             gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedMouseOverColor))
  289.             gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.UnfocusedTextColor))
  290.           end
  291.         else
  292.           gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBackColor))
  293.           gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.UnfocusedTextColor))
  294.         end
  295.         gfx.drawRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
  296.       end
  297.       if self.OnEndDraw ~= nil then
  298.         if self.OnEndDraw(IsFocused,self.X+baseX,self.Y+baseY,x,y) == true then
  299.           return
  300.         end
  301.       end
  302.     end
  303.     function obj:Show()
  304.       self.IsShowing = true
  305.     end
  306.     function obj:Hide()
  307.       self.IsShowing = false
  308.     end
  309.     function obj:Click(x,y,e,b)
  310.       self.ClickHelper.OnPress = self.OnPressed
  311.       self.ClickHelper:ProcessClick(self.Width,self.Height,self.X,self.Y,x,y,e,b)
  312.     end
  313.     function obj:AddHint(text)
  314.       self.HintText = text
  315.       self.HintHelper = interface_s.ComponentsHelpers.Hint:new()
  316.     end
  317.     setmetatable(obj, self)
  318.     self.__index = self;
  319.     return obj
  320.   end
  321.  
  322.   function interface_s.Components.Selection:new(x, y, theme)
  323.     local obj= {}
  324.     obj.X = x
  325.     obj.Y = y
  326.     obj.Focused=false
  327.     obj.Theme = theme
  328.     obj.IsShowing = true
  329.     obj.IsPointSet = false
  330.     obj.FirstPointX = -1
  331.     obj.FirstPointY = -1
  332.     obj.IsFinished = false
  333.     obj.EndPointX = -1
  334.     obj.EndPointY = -1
  335.     obj.OnSelectionStart = nil
  336.     obj.OnSelected = nil
  337.     obj.OnSelectionAborted = nil
  338.     obj.V2EndWidth = -1
  339.     obj.V2EndHeight = -1
  340.     obj.V2StartX = -1
  341.     obj.V2StartY = -1
  342.     function obj:Draw(IsFocused,x,y)
  343.       self.Focused = IsFocused
  344.       if IsFocused then
  345.         if (self.IsPointSet) and (self.IsFinished==false) then
  346.           local arg11 = -1
  347.           local arg12 = -1
  348.           local arg21 = -1
  349.           local arg22 = -1
  350.           if self.FirstPointX-x>=0 then
  351.             arg11 = x
  352.             arg12 = self.FirstPointX-x
  353.           else
  354.             arg11 = self.FirstPointX
  355.             arg12 = x-self.FirstPointX
  356.           end
  357.           if self.FirstPointY - y>=0 then
  358.             arg21 = y
  359.             arg22 = self.FirstPointY - y
  360.           else
  361.             arg21 = self.FirstPointY
  362.             arg22 = y-self.FirstPointY
  363.           end
  364.           if (self.IsFinished==false) and (self.IsPointSet==true)  then
  365.             self.V2EndWidth = arg12
  366.             self.V2EndHeight = arg22
  367.             self.V2StartX = arg11
  368.             self.V2StartY = arg21
  369.           end
  370.           gfx.fillRect(arg11, arg21, arg12,arg22, gfx.getColors(self.Theme.BackColor))
  371.           gfx.drawRect(arg11, arg21, arg12,arg22, gfx.getColors(self.Theme.BorderColor))
  372.         end
  373.       else
  374.         self.IsPointSet = false
  375.       end
  376.     end
  377.     function obj:Show()
  378.       self.IsShowing = true
  379.     end
  380.     function obj:Hide()
  381.       self.IsShowing = false
  382.     end
  383.     function obj:Click(x,y,e,b)
  384.       if (e==1) and (self.IsPointSet==false) and (b==1) then
  385.         self.IsPointSet = true
  386.         self.FirstPointX = x
  387.         self.FirstPointY = y
  388.         if self.OnSelectionStart ~= nil then
  389.           self.OnSelectionStart(self.FirstPointX,self.FirstPointY)
  390.         end
  391.         return true
  392.       else if (e==2) and (self.IsPointSet==true) and (b==1) and (self.IsFinished == false) then
  393.         self.IsFinished = true
  394.         self.EndPointX = x
  395.         self.EndPointY = y
  396.         if self.OnSelected ~= nil then
  397.           self.OnSelected(self.FirstPointX,self.FirstPointY,self.EndPointX,self.EndPointY, self.V2StartX, self.V2StartY, self.V2EndWidth,self.V2EndHeight)
  398.         end
  399.         return true
  400.         end
  401.         if (self.IsPointSet==true) and (b~=1) and (self.IsFinished==false) then
  402.           self.IsPointSet=false
  403.           if self.OnSelectionAborted ~= nil then
  404.             self.OnSelectionAborted()
  405.           end
  406.         end
  407.       end
  408.     end
  409.     setmetatable(obj, self)
  410.     self.__index = self;
  411.     return obj
  412.   end
  413.  
  414.   function interface_s.Components.SelectionMover:new(x, y,w,h, theme)
  415.     local obj= {}
  416.     obj.X = x
  417.     obj.Y = y
  418.     obj.Focused=false
  419.     obj.Theme = theme
  420.     obj.IsShowing = true
  421.     obj.Width = w
  422.     obj.Height = h
  423.     obj.OnMovement = nil
  424.     obj.OnAbort = nil
  425.     obj.OnDone = nil
  426.     obj.MoveStartX = -1
  427.     obj.MoveStartY = -1
  428.     obj.NewPosX = -1
  429.     obj.NewPosY = -1
  430.     obj.IsMoving = false
  431.     obj.SumDX = 0
  432.     obj.SumDY = 0
  433.     obj.IsMoved = false
  434.     function obj:Draw(IsFocused,x,y)
  435.       self.Focused = IsFocused
  436.       if IsFocused then
  437.         gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
  438.         gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
  439.       else
  440.         gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
  441.         gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
  442.       end
  443.     end
  444.     function obj:Show()
  445.       self.IsShowing = true
  446.     end
  447.     function obj:Hide()
  448.       self.IsShowing = false
  449.     end
  450.     function obj:Click(x,y,e,b)
  451.       if (e==1) and (b==4) then
  452.         if self.OnAbort ~= nil then
  453.           self.OnAbort(self.SumDX,self.SumDY)
  454.         end
  455.       end
  456.       if (e==3) and (self.IsMoving) then
  457.         if self.OnMovement ~= nil then
  458.           self.OnMovement(-self.MoveStartX + x,- self.MoveStartY + y)
  459.         end
  460.         if (-self.MoveStartX + x ~= 0) and (- self.MoveStartY + y ~= 0) then
  461.           self.IsMoved = true
  462.         end
  463.         self.SumDX = self.SumDX - self.MoveStartX + x
  464.         self.SumDY = self.SumDY - self.MoveStartY + y
  465.         self.X = self.X - self.MoveStartX + x
  466.         self.Y = self.Y - self.MoveStartY + y
  467.         self.MoveStartX = x
  468.         self.MoveStartY = y
  469.  
  470.       else
  471.         if (e==2) and (self.IsMoving) then
  472.           if self.IsMoved == false then
  473.             if self.OnDone ~= nil then
  474.               self.OnDone(self.SumDX,self.SumDY)
  475.             end
  476.           end
  477.           self.IsMoving = false
  478.         end
  479.       end
  480.       if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
  481.         if self.Focused then
  482.           if (y>self.Y) and (y<self.Y+self.Height) and (e==1) then
  483.             self.MoveStartX = x
  484.             self.MoveStartY = y
  485.             self.IsMoving = true
  486.           end
  487.           if (e==1) and (b==1) then
  488.             self.IsMoved = false
  489.           end
  490.           return true
  491.         end
  492.       else
  493.         return true
  494.       end
  495.     end
  496.     setmetatable(obj, self)
  497.     self.__index = self;
  498.     return obj
  499.   end
  500.  
  501.   function interface_s.Components.Combobox:new(x, y,w,h,i, theme)
  502.     local obj= {}
  503.     obj.Type = "Combobox"
  504.     obj.X = x
  505.     obj.Y = y
  506.     obj.Focused=false
  507.     obj.Theme = theme
  508.     obj.IsShowing = true
  509.     obj.Width = w
  510.     obj.Height = h
  511.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  512.     obj.Items = i
  513.     obj.IsItemsShown = false
  514.     obj.Base = nil
  515.     obj.SelectedIndex=0
  516.     obj.OnItemSelected = nil
  517.     obj.DropClickHelper = interface_s.ComponentsHelpers.Click:new()
  518.       obj.DropClickHelper.OnPress = function()
  519.           if obj.IsItemsShown==false then
  520.             obj.Base:focusComponent(obj)
  521.             obj.IsItemsShown = true
  522.           end
  523.         end
  524.     obj.ItemClickHelper = interface_s.ComponentsHelpers.Click:new()
  525.       obj.ItemClickHelper.OnHold = function() return true end
  526.       obj.ItemClickHelper.OnFirstClick = function() return true end
  527.       obj.ItemClickHelper.OnPress = function(x,y)
  528.           local i = y-obj.Y-obj.Height
  529.           obj.SelectedIndex=math.floor(i/14)
  530.           if obj.OnItemSelected~= nil then
  531.             obj.OnItemSelected(obj.SelectedIndex,obj.Items[obj.SelectedIndex+1])
  532.           end
  533.           obj.IsItemsShown = false
  534.           interface_s.RemoveOnClickAction(obj)
  535.           return true
  536.         end
  537.       obj.ItemClickHelper.OnMissClick = function(x,y)
  538.         obj.IsItemsShown = false
  539.         interface_s.RemoveOnClickAction(obj)
  540.         return true
  541.       end
  542.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  543.       self.Focused = IsFocused
  544.       if IsFocused then
  545.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
  546.         if self.SelectedIndex>=0 then
  547.           gfx.drawText(self.X+baseX+5,self.Y+baseY+3, self.Items[self.SelectedIndex+1], gfx.getColors(self.Theme.TextColor))
  548.         end
  549.         if self.IsItemsShown==true then
  550.           gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonPressedBackColor))
  551.         else
  552.           if x>self.X+self.Width-self.Height and x<self.X+self.Width and y>self.Y and y<self.Y+self.Height then
  553.             gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonMouseOverBackColor))
  554.           else
  555.             gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonBackColor))
  556.           end
  557.         end
  558.         gfx.drawRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.BorderColor))
  559.         if self.IsItemsShown==true then
  560.           gfx.fillRect(self.X+baseX,self.Y+baseY+self. Height,self.Width,#self.Items*14,gfx.getColors(self.Theme.BackColor))
  561.           for i=0,#self.Items-1 do
  562.             if x>self.X and x<self.X+self.Width and y>self.Y+i*14+self.Height and y<self.Y+i*14+self.Height+15 then
  563.               gfx.fillRect(self.X+baseX,self.Y+baseY+i*14+self.Height,self.Width,14+1,gfx.getColors(self.Theme.ButtonMouseOverBackColor))
  564.             end
  565.             gfx.drawRect(self.X+baseX,self.Y+baseY+i*14+self.Height,self.Width,14+1,gfx.getColors(self.Theme.BorderColor))
  566.             gfx.drawText(self.X+baseX+5,self.Y+baseY+i*14+3+self.Height, self.Items[i+1],gfx.getColors(self.Theme.TextColor))
  567.           end
  568.         end
  569.       else
  570.         obj.IsItemsShown = false
  571.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
  572.         if self.SelectedIndex>=0 then
  573.           gfx.drawText(self.X+baseX+5,self.Y+baseY+3, self.Items[self.SelectedIndex+1],gfx.getColors(self.Theme.UnfocusedTextColor))
  574.         end
  575.         if x>self.X+self.Width-self.Height and x<self.X+self.Width and y>self.Y and y<self.Y+self.Height then
  576.           gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.UnfocusedButtonMouseOverBackColor))
  577.         else
  578.           gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height,gfx.getColors(self.Theme.UnfocusedButtonBackColor))
  579.         end
  580.         gfx.drawRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
  581.       end
  582.     end
  583.     function obj:Show()
  584.       self.IsShowing = true
  585.     end
  586.     function obj:Hide()
  587.       self.IsShowing = false
  588.     end
  589.     function obj:Click(x,y,e,b)
  590.       if self.IsItemsShown==true then
  591.         return self.ItemClickHelper:ProcessClick(self.Width,#self.Items*14,self.X,self.Y+self.Height,x,y,e,b)
  592.       end
  593.       return self.DropClickHelper:ProcessClick(self.Height,self.Height,self.X+self.Width-self.Height,self.Y,x,y,e,b)
  594.     end
  595.     setmetatable(obj, self)
  596.     self.__index = self;
  597.     return obj
  598.   end
  599.  
  600.   function interface_s.Components.Graph:new(x, y,w,h, theme)
  601.     local obj= {}
  602.     obj.Type = "Graph"
  603.     obj.X = x
  604.     obj.Y = y
  605.     obj.Focused=false
  606.     obj.Theme = theme
  607.     obj.IsShowing = true
  608.     obj.Width = w
  609.     obj.Height = h
  610.     obj.PointX = {}
  611.     obj.PointY = {}
  612.     obj.Base = nil
  613.     obj.MaxValue = 0
  614.     obj.NewMaxValue = 0
  615.     obj.MinValue = 0
  616.     obj.NewMinValue = 0
  617.     obj.UpdateSpeed = 20
  618.     obj.UpdateCounter = 0
  619.     obj.GetValue = nil
  620.     obj.ZeroHeight = 0
  621.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  622.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  623.       if self.UpdateCounter>self.UpdateSpeed then
  624.         if self.GetValue ~= nil then
  625.           self:AddPoint(self.GetValue())
  626.         end
  627.         self.UpdateCounter=0
  628.       end
  629.       self.UpdateCounter=self.UpdateCounter+1
  630.       self.Focused = IsFocused
  631.       if IsFocused==true then
  632.         gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
  633.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
  634.         gfx.drawText(self.X+baseX,self.Y+baseY-10,"Max: "..self.MaxValue,gfx.getColors(self.Theme.TextColor))
  635.         gfx.drawText(self.X+baseX+100,self.Y+baseY-10,"Min: "..self.MinValue,gfx.getColors(self.Theme.TextColor))
  636.       else
  637.         gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBackColor))
  638.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
  639.         gfx.drawText(self.X+baseX,self.Y+baseY-10,"Max: "..self.MaxValue,gfx.getColors(self.Theme.UnfocusedTextColor))
  640.         gfx.drawText(self.X+baseX+100,self.Y+baseY-10,"Min: "..self.MinValue,gfx.getColors(self.Theme.UnfocusedTextColor))
  641.       end
  642.       self.NewMaxValue = 0
  643.       self.NewMinValue = 0
  644.       if self.PointX[#self.PointX] ~= nil then
  645.         local v = self.PointX[#self.PointX]-self.Width+1
  646.         if v>0 then
  647.           for i=v,#self.PointY do
  648.             self.PointY[i-v]=self.PointY[i]
  649.             self.PointX[i-v]=self.PointX[i]-v
  650.           end
  651.           for i=#self.PointY-v,#self.PointY do
  652.             self.PointY[i]=nil
  653.             self.PointX[i]=nil
  654.           end
  655.         end
  656.       end
  657.       for i=2, #self.PointX do
  658.         if self.PointX[i]<self.Width-1 then
  659.           if self.NewMaxValue < self.PointY[i] then
  660.             self.NewMaxValue = self.PointY[i]
  661.           else
  662.             if self.NewMinValue>self.PointY[i] then
  663.               self.NewMinValue = self.PointY[i]
  664.             end
  665.           end
  666.           if self.MaxValue < self.PointY[i] then
  667.             self.MaxValue = self.PointY[i]
  668.           else
  669.             if self.MinValue>self.PointY[i] then
  670.               self.MinValue = self.PointY[i]
  671.             end
  672.           end
  673.           local x1 = self.PointX[i]+self.X+baseX
  674.           local y1 = (self.Height-((self.PointY[i]+math.abs( self.MinValue ))/(self.MaxValue+math.abs( self.MinValue )))*(self.Height-3))+self.Y+baseY-2
  675.           local x2 = self.PointX[i-1]+self.X+baseX
  676.           local y2 = (self.Height-((self.PointY[i-1]+math.abs( self.MinValue ))/(self.MaxValue+math.abs( self.MinValue )))*(self.Height-3))+self.Y+baseY-2
  677.           if y1==y1 and y2==y2 then
  678.             if IsFocused==true then    
  679.               gfx.drawLine(x1,y1,x2,y2,gfx.getColors(self.Theme.GraphColor))
  680.             else
  681.               gfx.drawLine(x1,y1,x2,y2,gfx.getColors(self.Theme.UnfocusedGraphColor))
  682.             end
  683.           end
  684.         end
  685.       end
  686.       if self.PointY[1]~=nil then
  687.         if self.NewMaxValue < self.PointY[1] then
  688.           self.NewMaxValue = self.PointY[1]
  689.         else
  690.           if self.NewMinValue>self.PointY[1] then
  691.             self.NewMinValue = self.PointY[1]
  692.           end
  693.         end
  694.         if self.MaxValue < self.PointY[1] then
  695.           self.MaxValue = self.PointY[1]
  696.         else
  697.           if self.MinValue>self.PointY[1] then
  698.             self.MinValue = self.PointY[1]
  699.           end
  700.         end
  701.         self.ZeroHeight = (self.Height-((math.abs( self.MinValue ))/(self.MaxValue+math.abs( self.MinValue )))*(self.Height-3))+self.Y+baseY-2
  702.         if self.ZeroHeight == self.ZeroHeight then
  703.           if IsFocused== true then
  704.             gfx.drawLine(self.X+baseX,self.ZeroHeight,self.X+baseX+self.Width-1,self.ZeroHeight,gfx.getColors(self.Theme.ZeroLine))
  705.           else
  706.             gfx.drawLine(self.X+baseX,self.ZeroHeight,self.X+baseX+self.Width-1,self.ZeroHeight,gfx.getColors(self.Theme.UnfocusedZeroLine))
  707.           end
  708.         end
  709.       end
  710.       self.MaxValue = self.NewMaxValue
  711.       self.MinValue = self.NewMinValue
  712.     end
  713.     function obj:Show()
  714.       self.IsShowing = true
  715.     end
  716.     function obj:Hide()
  717.       self.IsShowing = false
  718.     end
  719.     function obj:AddPoint(v)
  720.       if v~= nil then
  721.       if #self.PointY==0 then
  722.         self.PointY[1]=v
  723.         self.PointX[1]=1
  724.       else
  725.         if #self.PointY+1 < self.Width-1 then
  726.         self.PointY[#self.PointY+1]=v
  727.         self.PointX[#self.PointX+1]=self.PointX[#self.PointX]+1
  728.         else
  729.           for i=2,#self.PointY do
  730.             self.PointY[i-1]=self.PointY[i]
  731.             self.PointX[i-1]=self.PointX[i]-1
  732.           end
  733.           self.PointY[#self.PointY]=v
  734.           self.PointX[#self.PointX]=self.PointX[#self.PointX]
  735.         end
  736.       end
  737.       end
  738.     end
  739.     function obj:ClearPoints()
  740.         self.PointY = {}
  741.         self.PointX = {}
  742.     end
  743.     function obj:Click(x,y,e,b)
  744.       if (x>self.X+self.Width-self.Height) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
  745.         return true
  746.       end
  747.     end
  748.     setmetatable(obj, self)
  749.     self.__index = self;
  750.     return obj
  751.   end
  752.  
  753.   function interface_s.Components.Label:new(x, y, t, theme)
  754.     local obj= {}
  755.     obj.Type = "Label"
  756.     obj.X = x
  757.     obj.Y = y
  758.     obj.Focused=false
  759.     obj.Theme = theme
  760.     obj.IsShowing = true
  761.     obj.Text = t
  762.     obj.Base = nil
  763.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  764.     obj.OnMouseEvent = nil
  765.     obj.HintText = ""
  766.     obj.HintHelper = nil
  767.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  768.       self.Focused = IsFocused
  769.       if IsFocused==true then
  770.         gfx.drawText(self.X+baseX,self.Y+baseY,self.Text,gfx.getColors(self.Theme.TextColor))
  771.         local tw, th = gfx.textSize(self.Text)
  772.         if (x>self.X) and (x<self.X+tw) and (y>self.Y) and (y<self.Y+th) then
  773.           if self.HintHelper~=nil then
  774.             self.HintHelper:MouseOver(x+baseX,y+baseY,self.HintText)
  775.           end
  776.         else
  777.           if self.HintHelper~=nil then
  778.             self.HintHelper:Reset()
  779.           end
  780.         end
  781.        
  782.       else
  783.         if self.HintHelper~=nil then
  784.           self.HintHelper:Reset()
  785.         end
  786.         gfx.drawText(self.X+baseX,self.Y+baseY,self.Text,gfx.getColors(self.Theme.UnfocusedTextColor))
  787.       end
  788.     end
  789.     function obj:Show()
  790.       self.IsShowing = true
  791.     end
  792.     function obj:Hide()
  793.       self.IsShowing = false
  794.     end
  795.     function obj:Click(x,y,e,b,w)
  796.       if self.OnMouseEvent~=nil then
  797.         self.OnMouseEvent(x,y,e,b,w)
  798.       end
  799.     end
  800.     function obj:AddHint(text)
  801.       self.HintText = text
  802.       self.HintHelper = interface_s.ComponentsHelpers.Hint:new()
  803.     end
  804.     setmetatable(obj, self)
  805.     self.__index = self;
  806.     return obj
  807.   end
  808.  
  809.   function interface_s.Components.Textbox:new(x, y, w, h, theme)
  810.     local obj= {}
  811.     obj.Type = "Textbox"
  812.     obj.X = x
  813.     obj.Y = y
  814.     obj.Focused=false
  815.     obj.Theme = theme
  816.     obj.IsShowing = true
  817.     obj.Width = w
  818.     obj.Height = h
  819.     obj.Text = ""
  820.     obj.Base = nil
  821.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  822.     obj.IsActive = false
  823.     obj.MaxTextLength = 10
  824.     obj.PointerIndex = 0
  825.     obj.PointerBlinkStep =0
  826.     obj.OnTextChanged = nil
  827.     obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
  828.     obj.ClickHelper.OnPress = function()
  829.         obj.IsActive = true
  830.       end
  831.     obj.ClickHelper.OnMissClick = function()
  832.         obj.IsActive = false
  833.       end
  834.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  835.       self.Focused = IsFocused
  836.       gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
  837.       if self.IsActive==true then
  838.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
  839.         self.PointerBlinkStep = self.PointerBlinkStep + 1
  840.         if self.PointerBlinkStep > 30 then
  841.           self.PointerBlinkStep=0
  842.         end
  843.         if self.PointerBlinkStep > 15 then
  844.           local x = gfx.textSize(string.sub(self.Text, 0,self.PointerIndex) )
  845.           gfx.drawLine(x+self.X+baseX+1,self.Y+baseY+4, x+self.X+baseX+1, self.Y+baseY+self.Height-4,gfx.getColors(self.Theme.PointerColor))
  846.         end
  847.       else
  848.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
  849.       end
  850.       local x, y = gfx.textSize(string.sub(self.Text, 0,self.PointerIndex) )
  851.       if IsFocused==true then
  852.         gfx.drawText(self.X+baseX+2,self.Y+baseY+(self.Height-y+3)/2,self.Text,gfx.getColors(self.Theme.TextColor))
  853.       else
  854.         gfx.drawText(self.X+baseX+2,self.Y+baseY+(self.Height-y+3)/2,self.Text,gfx.getColors(self.Theme.UnfocusedTextColor))
  855.       end
  856.     end
  857.     function obj:Show()
  858.       self.IsShowing = true
  859.     end
  860.     function obj:Hide()
  861.       self.IsShowing = false
  862.     end
  863.     function obj:Click(x,y,e,b)
  864.       self.ClickHelper:ProcessClick(self.Width,self.Height,self.X,self.Y,x,y,e,b)
  865.     end
  866.     function obj:KeyPress(char, code, mod, evt)
  867.       if self.IsActive==true then
  868.         if evt==1 then
  869.           if code==8 and self.PointerIndex>0 then
  870.             self.PointerIndex=self.PointerIndex-1
  871.             self.Text=string.sub(self.Text,0,self.PointerIndex)..string.sub(self.Text,self.PointerIndex+2)
  872.             if self.OnTextChanged~=nil then
  873.               self.OnTextChanged(self.Text)
  874.             end
  875.           elseif code==127 and self.PointerIndex~=string.len(self.Text) then
  876.             self.PointerIndex=self.PointerIndex
  877.             self.Text=string.sub(self.Text,0,self.PointerIndex)..string.sub(self.Text,self.PointerIndex+2)
  878.             if self.OnTextChanged~=nil then
  879.               self.OnTextChanged(self.Text)
  880.             end
  881.           elseif code==275 and string.len(self.Text)>=self.PointerIndex+1 then
  882.             self.PointerIndex=self.PointerIndex+1
  883.           elseif code==276 and self.PointerIndex>0 then
  884.             self.PointerIndex=self.PointerIndex-1
  885.           else
  886.             if string.len(self.Text)<=self.MaxTextLength and code>31 and code<127 then
  887.               self.PointerIndex=self.PointerIndex+1
  888.               self.Text=string.sub(self.Text,0,self.PointerIndex-1)..char..string.sub(self.Text,self.PointerIndex)
  889.               if self.OnTextChanged~=nil then
  890.                 self.OnTextChanged(self.Text)
  891.               end
  892.             end
  893.           end
  894.         end
  895.         return true
  896.       end
  897.     end
  898.     setmetatable(obj, self)
  899.     self.__index = self;
  900.     return obj
  901.   end
  902.  
  903.   function interface_s.Components.Checkbox:new(x, y, s, t, theme)
  904.     local obj= {}
  905.     obj.Type = "Checkbox"
  906.     obj.X = x
  907.     obj.Y = y
  908.     obj.Focused=false
  909.     obj.Theme = theme
  910.     obj.IsShowing = true
  911.     obj.Size = s
  912.     obj.Text = t
  913.     obj.Base = nil
  914.     obj.Checked = false
  915.     obj.OnStateChanged = nil
  916.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  917.     obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
  918.     obj.ClickHelper.OnPress = function()
  919.         if obj.Checked==true then
  920.           obj.Checked = false
  921.         else
  922.           obj.Checked = true
  923.         end
  924.         if obj.OnStateChanged~=nil then
  925.           obj.OnStateChanged(obj.Checked)
  926.         end
  927.       end
  928.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  929.       self.Focused = IsFocused
  930.       local x, y = gfx.textSize(self.Text)
  931.       if IsFocused==true then
  932.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Size,self.Size,gfx.getColors(self.Theme.BorderColor))
  933.         if self.Checked==true then
  934.           gfx.fillRect(self.X+baseX+3,self.Y+baseY+3,self.Size-6,self.Size-6,gfx.getColors(self.Theme.CheckColor))
  935.         end
  936.         gfx.drawText(self.X+baseX+self.Size+4,self.Y+baseY+(self.Size-y)/2+1,self.Text,gfx.getColors(self.Theme.TextColor))
  937.       else
  938.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Size,self.Size,gfx.getColors(self.Theme.UnfocusedBorderColor))
  939.         if self.Checked==true then
  940.           gfx.fillRect(self.X+baseX+3,self.Y+baseY+3,self.Size-6,self.Size-6,gfx.getColors(self.Theme.UnfocusedCheckColor))
  941.         end
  942.         gfx.drawText(self.X+baseX+self.Size+4,self.Y+baseY+(self.Size-y)/2+1,self.Text,gfx.getColors(self.Theme.UnfocusedCheckColor))
  943.       end
  944.     end
  945.     function obj:Show()
  946.       self.IsShowing = true
  947.     end
  948.     function obj:Hide()
  949.       self.IsShowing = false
  950.     end
  951.     function obj:Click(x,y,e,b)
  952.       return self.ClickHelper:ProcessClick(self.Size,self.Size,self.X,self.Y,x,y,e,b)
  953.     end
  954.     setmetatable(obj, self)
  955.     self.__index = self;
  956.     return obj
  957.   end
  958.  
  959.  
  960.   function interface_s.Components.Listbox:new(x, y, w, h, theme)
  961.     local obj= {}
  962.     obj.Type = "Listbox"
  963.     obj.X = x
  964.     obj.Y = y
  965.     obj.Focused=false
  966.     obj.Theme = theme
  967.     obj.IsShowing = true
  968.     obj.Width = w
  969.     obj.Height = h
  970.    
  971.     obj.OnItemSelected = nil
  972.  
  973.     obj.ItemsColsCount = 1
  974.     obj.ItemsColsPadding = {0}
  975.     obj.Base = nil
  976.     obj.Items = {}
  977.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  978.     obj.IsActive = false
  979.     obj.ScrollStartItemIndex = 1
  980.     obj.SelectedIndex = 1
  981.     obj.ItemClickHelper = interface_s.ComponentsHelpers.Click:new()
  982.     obj.ItemClickHelper.OnPress = function(x,y)
  983.         obj.SelectedIndex=math.floor((y-obj.Y)/11)+obj.ScrollStartItemIndex-1
  984.         if obj.OnItemSelected~= nil then
  985.           obj.OnItemSelected(obj.SelectedIndex,obj.Items[obj.SelectedIndex])
  986.         end
  987.         return true
  988.     end
  989.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  990.       self.Focused = IsFocused
  991.       gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
  992.       gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
  993.       local endindex = math.floor(self.Height/11)+self.ScrollStartItemIndex-1
  994.       if table.getn(self.Items)<math.floor(self.Height/11) then
  995.         endindex = table.getn(self.Items)
  996.       end
  997.       for i=self.ScrollStartItemIndex, endindex do
  998.         if IsFocused then
  999.           if self.SelectedIndex==i-1 then
  1000.             gfx.fillRect(self.X+baseX+2,self.Y+baseY+(i-self.ScrollStartItemIndex)*11+2,self.Width-4,10,gfx.getColors(self.Theme.SelectionColor))
  1001.             if self.ItemsColsCount==1 then
  1002.               gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.SelectionTextColor))
  1003.             else
  1004.               for j=1, self.ItemsColsCount do
  1005.                 gfx.drawText(self.X+baseX+3+self.ItemsColsPadding[j],self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i][j],gfx.getColors(self.Theme.SelectionTextColor))
  1006.               end
  1007.             end
  1008.           else
  1009.             if self.ItemsColsCount==1 then
  1010.               gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.TextColor))
  1011.             else
  1012.               for j=1, self.ItemsColsCount do
  1013.                 gfx.drawText(self.X+baseX+3+self.ItemsColsPadding[j],self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i][j],gfx.getColors(self.Theme.TextColor))
  1014.               end
  1015.             end
  1016.           end
  1017.           if x>self.X+3 and x<self.X+self.Width and y>self.Y+(i-self.ScrollStartItemIndex)*11 and y<self.Y+(i-self.ScrollStartItemIndex)*11+11 then
  1018.             gfx.fillRect(self.X+baseX+1,self.Y+baseY+(i-self.ScrollStartItemIndex)*11,self.Width-2,12,gfx.getColors(self.Theme.MouseOverColor))
  1019.           end
  1020.       else -- unfocused
  1021.         if self.SelectedIndex==i-1 then
  1022.           gfx.fillRect(self.X+baseX+2,self.Y+baseY+(i-self.ScrollStartItemIndex)*11+2,self.Width-4,10,gfx.getColors(self.Theme.UnfocusedSelectionColor))
  1023.           if self.ItemsColsCount==1 then
  1024.             gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.UnfocusedSelectionTextColor))
  1025.           else
  1026.             for j=1, self.ItemsColsCount do
  1027.               gfx.drawText(self.X+baseX+3+self.ItemsColsPadding[j],self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i][j],gfx.getColors(self.Theme.UnfocusedSelectionTextColor))
  1028.             end
  1029.           end
  1030.         else
  1031.           if self.ItemsColsCount==1 then
  1032.             gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.UnfocusedTextColor))
  1033.           else
  1034.             for j=1, self.ItemsColsCount do
  1035.               gfx.drawText(self.X+baseX+3+self.ItemsColsPadding[j],self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i][j],gfx.getColors(self.Theme.UnfocusedTextColor))
  1036.             end
  1037.           end
  1038.         end
  1039.         if x>self.X+3 and x<self.X+self.Width and y>self.Y+(i-self.ScrollStartItemIndex)*11 and y<self.Y+(i-self.ScrollStartItemIndex)*11+11 then
  1040.           gfx.fillRect(self.X+baseX+1,self.Y+baseY+(i-self.ScrollStartItemIndex)*11,self.Width-2,12,gfx.getColors(self.Theme.UnfocusedMouseOverColor))
  1041.         end
  1042.       end
  1043.     end
  1044.     end
  1045.     function obj:Show()
  1046.       self.IsShowing = true
  1047.     end
  1048.     function obj:Hide()
  1049.       self.IsShowing = false
  1050.     end
  1051.     function obj:Click(x,y,e,b,w)
  1052.       if w==1 and self.ScrollStartItemIndex<table.getn(self.Items)-math.floor( self.Height/11 )+1 then
  1053.         self.ScrollStartItemIndex=self.ScrollStartItemIndex+1
  1054.         return true
  1055.       elseif w==-1 and self.ScrollStartItemIndex>1 then
  1056.         self.ScrollStartItemIndex=self.ScrollStartItemIndex-1
  1057.         return true
  1058.       end
  1059.       return self.ItemClickHelper:ProcessClick(self.Width,(#self.Items-self.ScrollStartItemIndex+1)*11,self.X,self.Y,x,y,e,b)
  1060.     end
  1061.     function obj:KeyPress(char, code, mod, evt)
  1062.     end
  1063.     setmetatable(obj, self)
  1064.     self.__index = self;
  1065.     return obj
  1066.   end
  1067.  
  1068.   function interface_s.Components.Rectangle:new(x, y, w,h, theme)
  1069.     local obj= {}
  1070.     obj.Type = "Rectangle"
  1071.     obj.X = x
  1072.     obj.Y = y
  1073.     obj.Width = w
  1074.     obj.Height = h
  1075.     obj.Focused=false
  1076.     obj.Theme = theme
  1077.     obj.IsShowing = true
  1078.     obj.Text = t
  1079.     obj.Base = nil
  1080.     obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
  1081.     function obj:Draw(IsFocused, baseX, baseY,x,y)
  1082.       self.Focused = IsFocused
  1083.       if IsFocused==true then
  1084.         gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
  1085.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
  1086.       else
  1087.         gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBackColor))
  1088.         gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
  1089.       end
  1090.     end
  1091.     function obj:Show()
  1092.       self.IsShowing = true
  1093.     end
  1094.     function obj:Hide()
  1095.       self.IsShowing = false
  1096.     end
  1097.     function obj:Click(x,y,e,b)
  1098.     end
  1099.     setmetatable(obj, self)
  1100.     self.__index = self;
  1101.     return obj
  1102.   end
  1103.  
  1104.   function interface_s.ComponentsHelpers.Click:new(x, y)
  1105.     local obj= {}
  1106.     obj.IsFirstClick = false
  1107.     obj.IsHold = false
  1108.     obj.OnPress = nil
  1109.     obj.OnHold = nil
  1110.     obj.OnFirstClick = nil
  1111.     obj.OnMissClick = nil
  1112.     function obj:ProcessClick(width,height,x,y,clickX,clickY,e,b)
  1113.       if (clickX>x) and (clickX<x+width) and (clickY>y) and (clickY<y+height) and (self.IsFirstClick==false) and (e==1) and (b==1) then
  1114.         self.IsFirstClick=true
  1115.         if self.OnFirstClick ~= nil then
  1116.           return self.OnFirstClick(clickX,clickY)
  1117.         else
  1118.           return true
  1119.         end
  1120.       else
  1121.         if (clickX>x) and (clickX<x+width) and (clickY>y) and (clickY<y+height) and (self.IsFirstClick==true) and (e==3) and (b==1) then
  1122.           self.IsHold = true
  1123.           if self.OnHold~= nil then
  1124.             return self.OnHold(clickX,clickY)
  1125.           else
  1126.             return true
  1127.           end
  1128.         else
  1129.           if (clickX>x) and (clickX<x+width) and (clickY>y) and (clickY<y+height) and (self.IsFirstClick==true) and (self.IsHold==true) and (e==2) and (b==1) then
  1130.             self.IsHold = false
  1131.             self.IsFirstClick = false  
  1132.             if self.OnPress~= nil then
  1133.               return self.OnPress(clickX,clickY)
  1134.             else
  1135.               return true
  1136.             end
  1137.           else
  1138.             self.IsHold = false
  1139.             self.IsFirstClick = false
  1140.             if self.OnMissClick~= nil then
  1141.               return self.OnMissClick(clickX,clickY)
  1142.             end
  1143.           end
  1144.         end
  1145.       end
  1146.     end
  1147.     setmetatable(obj, self)
  1148.     self.__index = self;
  1149.     return obj
  1150.   end
  1151.   function interface_s.ComponentsHelpers.Hint:new()
  1152.     local obj= {}
  1153.     obj.HintFrames = 0
  1154.     obj.Window = interface_s.Components.Window:new(0, 0, 0, 12,false, DefaultTheme.Window)
  1155.     obj.Label = interface_s.Components.Label:new(5,2,"",DefaultTheme.Label)
  1156.     obj.Window:AddComponent(obj.Label)
  1157.     obj.Window.AllowResize = false
  1158.     obj.Window.AlwaysFocused = true
  1159.     function obj:MouseOver(x,y,text)
  1160.       if text~="" then
  1161.         self.HintFrames = self.HintFrames + 1
  1162.         if self.HintFrames>40 then
  1163.           local w,h = gfx.textSize(text)
  1164.           self.Window.X = x
  1165.           self.Window.Y = y+12
  1166.           self.Window.Width = w+10
  1167.           self.Label.Text = text
  1168.           self.Window:Draw(true,x,y)
  1169.         end
  1170.       end
  1171.     end
  1172.     function obj:Reset()
  1173.       self.HintFrames = 0
  1174.     end
  1175.     setmetatable(obj, self)
  1176.     self.__index = self;
  1177.     return obj
  1178.   end
  1179. end
  1180. local function DefineAPI()
  1181.   interface_s.Components.Window = {}
  1182.   interface_s.Components.Button = {}
  1183.   interface_s.Components.Selection = {}
  1184.   interface_s.Components.SelectionMover = {}
  1185.   interface_s.Components.Combobox = {}
  1186.   interface_s.Components.Graph = {}
  1187.   interface_s.Components.Label = {}
  1188.   interface_s.Components.Textbox = {}
  1189.   interface_s.Components.Checkbox = {}
  1190.   interface_s.Components.Listbox = {}
  1191.   interface_s.Components.Rectangle = {}
  1192.   interface_s.ComponentsHelpers.Click = {}
  1193.   interface_s.ComponentsHelpers.Hint = {}
  1194.  
  1195.   interface_s.AddOnClickAction = function(func)
  1196.     for i=#interface_s.OnClick+1,1,-1 do
  1197.       interface_s.OnClick[i]=interface_s.OnClick[i-1]
  1198.     end
  1199.     if type(func) == "function" then
  1200.       interface_s.OnClick[0]={}
  1201.       interface_s.OnClick[0].Click = func
  1202.     else
  1203.       interface_s.OnClick[0] = func
  1204.     end
  1205.   end
  1206.  
  1207.   interface_s.RemoveOnClickAction = function(func)
  1208.     local index = interface_s.GetOnClickActionIndex(func)
  1209.     if index~=-1 then
  1210.       for i=index, #interface_s.OnClick-1 do
  1211.         interface_s.OnClick[i]=interface_s.OnClick[i+1]
  1212.       end
  1213.       interface_s.OnClick[#interface_s.OnClick] = nil
  1214.     end
  1215.   end
  1216.  
  1217.   interface_s.GetOnClickActionIndex=function(obj)
  1218.     if type(obj) == "function" then
  1219.       for i=0, #interface_s.OnClick do
  1220.         if interface_s.OnClick[i].Click == obj then
  1221.           return i
  1222.         end
  1223.       end
  1224.     else
  1225.       for i=0, #interface_s.OnClick do
  1226.         if interface_s.OnClick[i] == obj then
  1227.           return i
  1228.         end
  1229.       end
  1230.     end
  1231.     return -1
  1232.   end
  1233.  
  1234.   interface_s.AddOnStepAction = function(func)
  1235.     for i=#interface_s.OnStep+1,1,-1 do
  1236.       interface_s.OnStep[i]=interface_s.OnStep[i-1]
  1237.     end
  1238.     interface_s.OnStep[0] = func
  1239.   end
  1240.  
  1241.   interface_s.RemoveOnStepAction = function(func)
  1242.     local index = interface_s.GetOnStepActionIndex(func)
  1243.     if index~=-1 then
  1244.       for i=index, #interface_s.OnStep-1 do
  1245.         interface_s.OnStep[i]=interface_s.OnStep[i+1]
  1246.       end
  1247.       interface_s.OnStep[#interface_s.OnStep] = nil
  1248.     end
  1249.   end
  1250.  
  1251.   interface_s.GetOnStepActionIndex=function(obj)
  1252.     for i=0, #interface_s.OnStep do
  1253.       if interface_s.OnStep[i] == obj then
  1254.         return i
  1255.       end
  1256.     end
  1257.     return -1
  1258.   end
  1259.  
  1260.   interface_s.AddKeyPressAction = function(func)
  1261.     for i=#interface_s.OnKeyPress+1,1,-1 do
  1262.       interface_s.OnKeyPress[i]=interface_s.OnKeyPress[i-1]
  1263.     end
  1264.     if type(func) == "function" then
  1265.       interface_s.OnKeyPress[0]={}
  1266.       interface_s.OnKeyPress[0].KeyPress = func
  1267.     else
  1268.       interface_s.OnKeyPress[0] = func
  1269.     end
  1270.   end
  1271.  
  1272.   interface_s.RemoveKeyPressAction = function(func)
  1273.     local index = interface_s.GetOnKeyPressActionIndex(func)
  1274.     if index~=-1 then
  1275.       for i=index, #interface_s.OnKeyPress-1 do
  1276.         interface_s.OnKeyPress[i]=interface_s.OnKeyPress[i+1]
  1277.       end
  1278.       interface_s.OnKeyPress[#interface_s.OnKeyPress] = nil
  1279.     end
  1280.   end
  1281.  
  1282.   interface_s.GetOnKeyPressActionIndex=function(obj)
  1283.     if type(obj) == "function" then
  1284.       for i=0, #interface_s.OnKeyPress do
  1285.         if interface_s.OnKeyPress[i].KeyPress == obj then
  1286.           return i
  1287.         end
  1288.       end
  1289.     else
  1290.       for i=0, #interface_s.OnKeyPress do
  1291.         if interface_s.OnKeyPress[i] == obj then
  1292.           return i
  1293.         end
  1294.       end
  1295.     end
  1296.     return -1
  1297.   end
  1298.   interface_s.AddLeftWindow=function(obj)
  1299.     for i=#interface_s.windows+1,1,-1 do
  1300.       interface_s.windows[i]=interface_s.windows[i-1]
  1301.     end
  1302.     interface_s.windows[0]=obj
  1303.   end
  1304.  
  1305.   interface_s.addComponent=function(obj)
  1306.     interface_s.AddLeftWindow(obj)
  1307.   end
  1308.  
  1309.   interface_s.GetComponentIndex=function(obj)
  1310.     for i=0, #interface_s.windows do
  1311.       if interface_s.windows[i] == obj then
  1312.         return i
  1313.       end
  1314.     end
  1315.     return -1
  1316.   end
  1317.  
  1318.   interface_s.RemoveComponent=function(obj)
  1319.     local index = interface_s.GetComponentIndex(obj)
  1320.     if index~=-1 then
  1321.       for i=index, #interface_s.windows-1 do
  1322.         interface_s.windows[i]=interface_s.windows[i+1]
  1323.       end
  1324.       interface_s.windows[#interface_s.windows] = nil
  1325.     end
  1326.   end
  1327.  
  1328.   interface_s.focusComponent = function(index)
  1329.     local temp= interface_s.windows[index]
  1330.     for i=index, 1,-1 do
  1331.       interface_s.windows[i] = interface_s.windows[i-1]
  1332.     end
  1333.     interface_s.windows[0] = temp
  1334.   end
  1335.  
  1336.   interface_s.step = function()
  1337.     if interface_s.OnStep[0] ~= nil then
  1338.       for i=0,#interface_s.OnStep do
  1339.         if interface_s.OnStep[i] then
  1340.           interface_s.OnStep[i](tpt.mousex,tpt.mousey)
  1341.         end
  1342.       end
  1343.     end
  1344.     for i=#interface_s.windows, 0,-1 do
  1345.       if (interface_s.windows[i] ~= nil) and (interface_s.windows[i].IsShowing==true) then
  1346.         if i==0 then
  1347.           interface_s.windows[i]:Draw(true,tpt.mousex,tpt.mousey)
  1348.         else
  1349.           interface_s.windows[i]:Draw(false,tpt.mousex,tpt.mousey)
  1350.         end
  1351.       end
  1352.     end
  1353.   end
  1354.  
  1355.   interface_s.click = function(mousex, mousey, button, event,wheel)
  1356.     if interface_s.OnClick[0] ~= nil then
  1357.       local f = false
  1358.       for i=0,#interface_s.OnClick do
  1359.         if interface_s.OnClick[i].Base~=nil then
  1360.           if interface_s.OnClick[i]:Click(mousex-interface_s.OnClick[i].Base.X , mousey-interface_s.OnClick[i].Base.Y , event, button,wheel) then
  1361.             f=true
  1362.           end
  1363.         else
  1364.           if interface_s.OnClick[i].Click(mousex, mousey, event, button,wheel) then
  1365.             f=true
  1366.           end
  1367.         end
  1368.       end
  1369.       if f==true then
  1370.         return false
  1371.       end
  1372.     end
  1373.     for i=0,#interface_s.windows do
  1374.       if interface_s.windows[i] == nil then
  1375.         interface_s.RemoveComponent(interface_s.windows[i])
  1376.         break
  1377.       end
  1378.       if (interface_s.windows ~= nil) then
  1379.         if interface_s.windows[i]:Click(mousex , mousey , event, button,wheel) then
  1380.           if (interface_s.windows[i]~=nil) and (interface_s.windows[i].IsShowing~=nil) and (interface_s.windows[i].IsShowing==true) then
  1381.             interface_s.focusComponent(i)
  1382.             return false
  1383.           end
  1384.         end
  1385.       end
  1386.     end
  1387.   end
  1388.  
  1389.   interface_s.key = function(char, code, mod, evt)
  1390.     local f = false
  1391.     if interface_s.windows[0] ~= nil then
  1392.       if interface_s.windows[0]:KeyPress(char, code, mod, evt) then
  1393.         f = true
  1394.       end
  1395.     end
  1396.     if interface_s.OnKeyPress[0] ~= nil then
  1397.       for i=0,#interface_s.OnKeyPress do
  1398.         if interface_s.OnKeyPress[i].Base~=nil then
  1399.           if interface_s.OnKeyPress[i]:KeyPress(char, code, mod, evt) then
  1400.             f=true
  1401.           end
  1402.         end
  1403.       end
  1404.     end
  1405.     if interface_s.BlockKeyboard == true or f==true then
  1406.       return false
  1407.     end
  1408.   end
  1409.   tpt.register_step(interface_s.step)
  1410.   tpt.register_mouseclick(interface_s.click)
  1411.   tpt.register_keypress(interface_s.key)
  1412. end
  1413.  
  1414. local function InitIntefaceAPI()
  1415.   if interface_s == nil then
  1416.     interface_s = {
  1417.       Version = InterfaceAPIVersion,
  1418.       Components = {},
  1419.       ComponentsHelpers = {},
  1420.       windows = {},
  1421.       step = nil,
  1422.       click = nil,
  1423.       key = nil,
  1424.       addLeft = nil,
  1425.       addComponent = nil,
  1426.       GetComponentIndex = nil,
  1427.       RemoveComponent = nil,
  1428.       focusComponent = nil,
  1429.       BlockKeyboard = false,
  1430.       OnClick = {},
  1431.       OnKeyPress = {},
  1432.       OnStep = {}
  1433.     }
  1434.     DefineAPI()
  1435.     DefineInterfaceComponents()
  1436.   else
  1437.     if interface_s.Version<InterfaceAPIVersion then
  1438.       tpt.unregister_step(interface_s.step)
  1439.       tpt.unregister_mouseclick(interface_s.click)
  1440.       tpt.unregister_keypress(interface_s.key)
  1441.       interface_s = {
  1442.         Version = InterfaceAPIVersion,
  1443.         Components = {},
  1444.         ComponentsHelpers = {},
  1445.         windows = interface_s.windows,
  1446.         step = nil,
  1447.         click = nil,
  1448.         key = nil,
  1449.         addLeft = nil,
  1450.         addComponent = nil,
  1451.         GetComponentIndex = nil,
  1452.         RemoveComponent = nil,
  1453.         focusComponent = nil,
  1454.         BlockKeyboard = interface_s.BlockKeyboard,
  1455.         OnClick = interface_s.OnClick or {},
  1456.         OnKeyPress = interface_s.OnKeyPress or {},
  1457.         OnStep = interface_s.OnStep or {}
  1458.       }
  1459.       DefineAPI()
  1460.       DefineInterfaceComponents()
  1461.     end
  1462.   end
  1463. end
  1464.  
  1465. InitIntefaceAPI()
  1466.  
  1467. --=================================================================--
  1468. --                       THEME START                               --
  1469. --=================================================================--
  1470. DefaultTheme.Window.BackColor = gfx.getHexColor(0,0,0,255)
  1471. DefaultTheme.Window.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
  1472. DefaultTheme.Window.BorderColor = gfx.getHexColor(255,255,255,255)
  1473. DefaultTheme.Window.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1474. DefaultTheme.Window.HeaderColor = gfx.getHexColor(150,150,255,255)
  1475. DefaultTheme.Window.UnfocusedHeaderColor = gfx.getHexColor(32,32,55,255)
  1476.  
  1477. DefaultTheme.Button.BackColor = gfx.getHexColor(0,0,0,0)
  1478. DefaultTheme.Button.UnfocusedBackColor = gfx.getHexColor(0,0,0,0)
  1479. DefaultTheme.Button.PressedBackColor = gfx.getHexColor(240,240,240,255)
  1480. DefaultTheme.Button.BorderColor = gfx.getHexColor(255,255,255,255)
  1481. DefaultTheme.Button.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1482. DefaultTheme.Button.MouseOverColor = gfx.getHexColor(255,255,255,128)
  1483. DefaultTheme.Button.UnfocusedMouseOverColor = gfx.getHexColor(150,150,150,128)
  1484. DefaultTheme.Button.TextColor = gfx.getHexColor(255,255,255,255)
  1485. DefaultTheme.Button.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1486. DefaultTheme.Button.PressedTextColor = gfx.getHexColor(0,0,0,255)
  1487.  
  1488. DefaultTheme.Selection.BackColor = gfx.getHexColor(140,140,200,100)
  1489. DefaultTheme.Selection.BorderColor = gfx.getHexColor(140,140,200,255)
  1490.  
  1491. DefaultTheme.Combobox.BackColor = gfx.getHexColor(0,0,0,255)
  1492. DefaultTheme.Combobox.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
  1493. DefaultTheme.Combobox.BorderColor = gfx.getHexColor(255,255,255,255)
  1494. DefaultTheme.Combobox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1495. DefaultTheme.Combobox.TextColor = gfx.getHexColor(255,255,255,255)
  1496. DefaultTheme.Combobox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1497. DefaultTheme.Combobox.ButtonBackColor = gfx.getHexColor(0,0,0,255)
  1498. DefaultTheme.Combobox.ButtonPressedBackColor = gfx.getHexColor(255,255,255,255)
  1499. DefaultTheme.Combobox.ButtonMouseOverBackColor = gfx.getHexColor(150,150,150,128)
  1500. DefaultTheme.Combobox.UnfocusedButtonBackColor = gfx.getHexColor(0,0,0,255)
  1501. DefaultTheme.Combobox.UnfocusedButtonMouseOverBackColor = gfx.getHexColor(150,150,150,128)
  1502.  
  1503. DefaultTheme.Graph.BackColor = gfx.getHexColor(0,0,0,255)
  1504. DefaultTheme.Graph.BorderColor = gfx.getHexColor(255,255,255,255)
  1505. DefaultTheme.Graph.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
  1506. DefaultTheme.Graph.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1507. DefaultTheme.Graph.TextColor = gfx.getHexColor(255,255,255,255)
  1508. DefaultTheme.Graph.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1509. DefaultTheme.Graph.GraphColor = gfx.getHexColor(255,100,100,255)
  1510. DefaultTheme.Graph.UnfocusedGraphColor = gfx.getHexColor(100,30,30,255)
  1511. DefaultTheme.Graph.ZeroLine = gfx.getHexColor(255,200,200,255)
  1512. DefaultTheme.Graph.UnfocusedZeroLine = gfx.getHexColor(100,80,80,255)
  1513.  
  1514. DefaultTheme.Label.TextColor = gfx.getHexColor(255,255,255,255)
  1515. DefaultTheme.Label.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1516.  
  1517. DefaultTheme.Textbox.BackColor = gfx.getHexColor(0,0,0,255)
  1518. DefaultTheme.Textbox.BorderColor = gfx.getHexColor(255,200,200,255)
  1519. DefaultTheme.Textbox.TextColor = gfx.getHexColor(255,255,255,255)
  1520. DefaultTheme.Textbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1521. DefaultTheme.Textbox.PointerColor = gfx.getHexColor(255,255,255,255)
  1522. DefaultTheme.Textbox.UnfocusedBorderColor = gfx.getHexColor(200,200,200,255)
  1523.  
  1524. DefaultTheme.Checkbox.BorderColor = gfx.getHexColor(255,255,255,255)
  1525. DefaultTheme.Checkbox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1526. DefaultTheme.Checkbox.CheckColor = gfx.getHexColor(255,255,255,255)
  1527. DefaultTheme.Checkbox.UnfocusedCheckColor = gfx.getHexColor(150,150,150,255)
  1528. DefaultTheme.Checkbox.TextColor = gfx.getHexColor(255,255,255,255)
  1529. DefaultTheme.Checkbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1530.  
  1531. DefaultTheme.Rectangle.BackColor = gfx.getHexColor(0,0,0,255)
  1532. DefaultTheme.Rectangle.BorderColor = gfx.getHexColor(255,255,255,255)
  1533. DefaultTheme.Rectangle.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
  1534. DefaultTheme.Rectangle.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1535.  
  1536. DefaultTheme.Listbox.BackColor = gfx.getHexColor(0,0,0,255)
  1537. DefaultTheme.Listbox.BorderColor = gfx.getHexColor(255,255,255,255)
  1538. DefaultTheme.Listbox.SelectionColor = gfx.getHexColor(255,255,255,255)
  1539. DefaultTheme.Listbox.SelectionTextColor = gfx.getHexColor(0,0,0,255)
  1540. DefaultTheme.Listbox.TextColor = gfx.getHexColor(255,255,255,255)
  1541. DefaultTheme.Listbox.MouseOverColor = gfx.getHexColor(255,255,255,50)
  1542. DefaultTheme.Listbox.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
  1543. DefaultTheme.Listbox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
  1544. DefaultTheme.Listbox.UnfocusedSelectionColor = gfx.getHexColor(150,150,150,255)
  1545. DefaultTheme.Listbox.UnfocusedSelectionTextColor = gfx.getHexColor(0,0,0,255)
  1546. DefaultTheme.Listbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
  1547. DefaultTheme.Listbox.UnfocusedMouseOverColor = gfx.getHexColor(150,150,150,50)
  1548. --=================================================================--
  1549. --                         THEME END                               --
  1550. --=================================================================--
  1551. --=================================================================--
  1552. --                    CODE IS BELOW THIS LINE                      --
  1553. --=================================================================--
  1554.  
  1555. function Timer(func)
  1556.   local endtime = nil
  1557.   local IsStarted = false
  1558.   local time = {0,0,0,0}
  1559.  
  1560.   local MainWindow = interface_s.Components.Window:new(40, 40, 86, 25,true, DefaultTheme.Window)
  1561.   MainWindow.AllowResize = false
  1562.   MainWindow.AlwaysFocused = true
  1563.  
  1564.   local TimeLabel = interface_s.Components.Label:new(5,12,"00:00",DefaultTheme.Label)
  1565.   TimeLabel:AddHint("Use scroll to change time")
  1566.  
  1567.   local TimeToLabel=function()
  1568.     TimeLabel.Text = time[1]..time[2]..":"..time[3]..time[4]
  1569.   end
  1570.  
  1571.   TimeToLabel()
  1572.  
  1573.   local ChangeValue = function(var, w, i)
  1574.     var[i] = var[i] + w
  1575.     if i==1 or i==3 then
  1576.       if var[i]<0 then
  1577.         var[i] = 0
  1578.       else
  1579.         if var[i]>5 then
  1580.           var[i] = 5
  1581.         end
  1582.       end
  1583.     else
  1584.       if var[i]<0 then
  1585.         var[i] = 0
  1586.       else
  1587.         if var[i]>9 then
  1588.           var[i] = 9
  1589.         end
  1590.       end
  1591.     end
  1592.   end
  1593.   TimeLabel.OnMouseEvent = function(x,y,e,b,w)
  1594.     if y>=11 and y<=20 then
  1595.       if x>=4 and x<=10 then
  1596.         ChangeValue(time,w,1)
  1597.         TimeToLabel()
  1598.       else
  1599.         if x>=11 and x<=14 then
  1600.           ChangeValue(time,w,2)
  1601.           TimeToLabel()
  1602.         else
  1603.           if x>=20 and x<=25 then
  1604.             ChangeValue(time,w,3)
  1605.             TimeToLabel()
  1606.           else
  1607.             if x>=26 and x<= 31 then
  1608.               ChangeValue(time,w,4)
  1609.               TimeToLabel()
  1610.             end
  1611.           end
  1612.         end
  1613.       end
  1614.     end
  1615.   end
  1616.  
  1617.  
  1618.   local onstep = nil
  1619.  
  1620.   onstep = function()
  1621.     if endtime-os.time() < 0 or endtime-os.time() == 0 then
  1622.       IsStarted = false
  1623.       interface_s.RemoveOnStepAction(onstep)
  1624.       if func == nil then
  1625.         tpt.set_pause(1)
  1626.       else
  1627.         func()
  1628.       end
  1629.     end
  1630.     TimeLabel.Text = os.date("%M:%S",endtime-os.time())
  1631.   end
  1632.  
  1633.   local StartButton = interface_s.Components.Button:new(35, 10, 12, 12, "S", DefaultTheme.Button)
  1634.   StartButton:AddHint("Start/Resume timer")
  1635.   StartButton.OnPressed = function()
  1636.     if IsStarted == false then
  1637.       IsStarted = true
  1638.       endtime = os.time()+time[4]+time[3]*10+time[2]*60+time[1]*600
  1639.       interface_s.AddOnStepAction(onstep)
  1640.     end
  1641.   end
  1642.  
  1643.   local PauseButton = interface_s.Components.Button:new(52, 10, 12, 12, "P", DefaultTheme.Button)
  1644.   PauseButton:AddHint("Pause timer")
  1645.   PauseButton.OnPressed = function()
  1646.     if IsStarted == true then
  1647.       IsStarted = false
  1648.       interface_s.RemoveOnStepAction(onstep)
  1649.       local currenttime = os.time()
  1650.       local s = os.date("%S",endtime-currenttime)
  1651.       local m = os.date("%M",endtime-currenttime)
  1652.       if string.len(s) == 2 then
  1653.         time[4]=string.sub(s,2,2)
  1654.         time[3]=string.sub(s,1,1)
  1655.       else
  1656.         time[4]=string.sub(s,2,2)
  1657.         time[3]=0
  1658.       end
  1659.       if string.len(m) == 2 then
  1660.         time[2]=string.sub(m,2,2)
  1661.         time[1]=string.sub(m,1,1)
  1662.       else
  1663.         time[2]=string.sub(m,2,2)
  1664.         time[1]=0
  1665.       end
  1666.       TimeToLabel()
  1667.     end
  1668.   end
  1669.  
  1670.   local ResetButton = interface_s.Components.Button:new(69, 10, 12, 12, "R", DefaultTheme.Button)
  1671.   ResetButton:AddHint("Reset timer")
  1672.   ResetButton.OnPressed = function()
  1673.     if IsStarted == true then
  1674.       IsStarted = false
  1675.       interface_s.RemoveOnStepAction(onstep)
  1676.     end
  1677.     time = {0,0,0,0}
  1678.     TimeToLabel()
  1679.   end
  1680.  
  1681.   local Exit = interface_s.Components.Button:new(78, 0, 8, 8,"x", DefaultTheme.Button)
  1682.   Exit.OnPressed = (function()
  1683.     if IsStarted == true then
  1684.       IsStarted = false
  1685.       interface_s.RemoveOnStepAction(onstep)
  1686.     end
  1687.     interface_s.RemoveComponent(MainWindow)
  1688.   end)
  1689.  
  1690.   MainWindow:AddComponent(TimeLabel)
  1691.   MainWindow:AddComponent(StartButton)
  1692.   MainWindow:AddComponent(PauseButton)
  1693.   MainWindow:AddComponent(ResetButton)
  1694.   MainWindow:AddComponent(Exit)
  1695.  
  1696.   interface_s.addComponent(MainWindow)
  1697. end
  1698. --=================================================================--
  1699. --                    CODE IS ABOVE THIS LINE                      --
  1700. --=================================================================--
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement