Advertisement
ssccsscc

TPT Element sample (Full)

Feb 20th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 64.61 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 Ruler = elements.allocate("ssccsscc", "SMPL")
  1733. elements.property(Ruler, "Name", "SMPL")
  1734. elements.property(Ruler, "Color", SamplColor)
  1735. elements.property(Ruler, "MenuSection", 13)
  1736. elements.property(Ruler, "MenuVisible", 1)
  1737.  
  1738. local elementInfo = { ["type"]=0 }
  1739.  
  1740. local function fillElementInfo(i)
  1741.   local props = {"type","life","ctype","temp","flags","tmp","tmp2","dcolour","pavg0","pavg1","vx","vy"}
  1742.   for k,v in pairs(props) do
  1743.     elementInfo[v] = sim.partProperty(i,v)
  1744.   end
  1745. end
  1746.  
  1747. local function createElementFromInfo(x,y)
  1748.   if elementInfo["type"]~=0 then
  1749.     local ni = sim.partCreate(-1,x,y,elementInfo["type"])
  1750.     for k,v in pairs(elementInfo) do
  1751.       sim.partProperty(ni,k,v)
  1752.     end
  1753.   end
  1754. end
  1755.  
  1756. local mouseDown = false
  1757. local lastX,lastY = 0,0
  1758.  
  1759. local function onStep(x,y)
  1760.   x,y = sim.adjustCoords(x, y)
  1761.   bx,by=x,y
  1762.   if mouseDown then
  1763.     if x~=lastX or y~=lastY then
  1764.       local dx = lastX-x
  1765.       local dy = lastY-y
  1766.       local step = math.abs(dy)
  1767.       if (math.abs(dx) >= step) then
  1768.         step = math.abs(dx)
  1769.       end
  1770.       dx = dx / step
  1771.       dy = dy / step
  1772.       local i = 1
  1773.       while (i <= step) do
  1774.         for bx,by in sim.brush(x,y) do
  1775.           createElementFromInfo(bx,by)
  1776.         end
  1777.         x = x + dx
  1778.         y = y + dy
  1779.         i = i + 1;
  1780.       end
  1781.       lastX,lastY=bx,by
  1782.     end
  1783.   end
  1784. end
  1785. interface_s.AddOnStepAction(onStep)
  1786.  
  1787. local function onClick(mousex, mousey, event, button,wheel)
  1788.   if event==mouseEvents.Up then
  1789.     mouseDown = false
  1790.     lastX,lastY = 0,0
  1791.   end
  1792.   if event==mouseEvents.Down then
  1793.     if (elements[tpt.selectedl]==Ruler and button==1) or (elements[tpt.selectedr]==Ruler and (button==4 or button==3)) or (elements[tpt.selecteda]==Ruler and button==2) then
  1794.       if mousex<sim.XRES and mousey<sim.YRES then
  1795.         mouseDown = true
  1796.         mousex,mousey = sim.adjustCoords(mousex, mousey)
  1797.         lastX,lastY = mousex,mousey
  1798.         local id = sim.partID(mousex, mousey)
  1799.         if id~=nil then
  1800.           fillElementInfo(id)
  1801.         else
  1802.           for bx,by in sim.brush(mousex,mousey) do
  1803.             createElementFromInfo(bx,by)
  1804.           end
  1805.         end
  1806.         return true
  1807.       end
  1808.     end
  1809.   end
  1810. end
  1811. interface_s.AddOnClickAction(onClick)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement