Advertisement
ssccsscc

TPT Replace alpha (Full)

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