Advertisement
ssccsscc

TPT - WIFI Tuner

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