TPT Script Server

This page is used for previewing and submitting scripts for use with the Script Manager

Available Scripts

(2) TPTMulti by LBPHacker
(3) set wifi v2 by jacob1
(4) Script Paste by jacob1
(5) Random Element by jacob1
(6) Magical Merge Master 3000 by nucular
(7) More Fuel Mod-heavy by jward212
(9) Breakpoints (BRPT) by boxmein
(10) Cockroaches! by boxmein
(11) Random tree by ssccsscc
(12) Element with random properties by ssccsscc
(15) Minimalistic Element Dehider by nucular
(16) FPS Gauge by mniip
(17) TPT Radio by jward212
(18) Print Debugger by FeynmanLogomaker
(19) Powered BHOL by jacob1
(20) Light and lamps by electronic_steve
(21) Extremely Durable TTAN by QuentinADay
(22) New Buttons by QuentinADay
(23) Pure Energy by QuentinADay
(25) RCA's HUD XV Update I by RCAProduction
(27) 123456787654 vols by mjpowder
(28) Singularity Bomb by QuentinADay
(29) ES wifi set by electronic_steve
(30) Lua Elements Pack by FeynmanLogomaker
(31) stkm gun by jward212
(32) space building materials by kjack1111
(34) Rust bomb by Damian97
(35) Simple command block by ssccsscc
(36) Everlasting Fusion by QuentinADay
(37) Screenshot Organiser by mecha-man
(38) Napalm mod by cccp3
(39) Rocket fuel mod v0.15 by cccp3
(41) Useful web links by jward212
(42) TPT Logic Gates Mod by iamdumb
(43) ESTools by electronic_steve
(44) Head Crabs-HL2 by jward212
(45) Procedural Save Generator by boxmein
(46) smooth colours for nametag by jward212
(47) ZAKPACK by zak03
(49) Performance Monitor by FeynmanLogomaker
(51) Texter by byzod
(52) Texter default fonts by byzod
(53) Schicko's Font Pack for Texter by Schicko
(54) Realistic Element Names by Atomic10
(55) TPT's Mod V.3 Update 1 by Amy
(56) Temporaryaccount-Decorator by Temporaryaccount
(57) random save loader by jward212
(58) Tmp gradient display by ssccsscc
(59) particle re-orderer by mniip
(60) Electric Glow by jacob1
(61) More Fuel Mod-lite by jward212
(63) Rythidium by janekbe04
(64) Simple FPS GUI by Sfsjunior
(65) Enhanced Element Dehider by ChargedCreeper
(66) Graph of average temp by ssccsscc
(67) Template save loader by jacob1
(68) Lua Text Generator by jBot-42
(70) Pixel's Freezer by Pixelguru26
(71) Thingy | Fusion For Ever by TheChosenEvilOne
(72) op explosions by zolly_bro
(73) Scar by DorkyBobster
(74) ScreenShotMod by lill74
(77) Useful Things by TheEvilChosenOne
(78) Alchemy Mod by _MrN_
(79) Nuke v2 by Fnaf65
(80) Compressor mod by TheChosenEvilOne
(81) Custom Render Mode Loader by jacob1
(82) Spacewars by JosephMA
(83) MOAR - Alpha 0.1 by TheChosenEvilOne
(86) Element Creator by cxi
(88) Soapworm by LBPHacker
(90) Pressure Bomb by God_Kra
(91) SMFB by wntjq69
(92) Potato by cxi
(93) Subatomic Pack (BDS) by TPT_PL
(94) Acidic Pack (BDS) by TPT_PL
(95) Starbound Building Materials by Sanpypr
(96) Factory problems by TPT_PL
(97) Gamma Ray-diation by Kostia4381
(98) Magic by livingfossil
(99) Cross-window Copy/Cut/Paste by LBPHacker
(100) Langton's Ant with variations by LBPHacker
(101) Remote particle creator/deleter by TPT_PL
(102) Force fields by electronic_steve
(103) Reinforced Concrete by 12Me21
(105) TPT_PL's Lua Mod by TPT_PL
(106) Nuke v4 by Fnaf65
(107) CHEMMOD V1 by KevAK
(108) Chemicals by Ligan
(109) VonDaniel's Template by VonDaniel
(110) The Inaccurate Radioactivity Toy Mod by TuDoR2007
(112) textmonsterPack by textmonster404
(113) Meteor by TheScienceKid
(114) Tgpm by TuDoR2007
(115) Civilizations by TPT_PL
(116) RAD-MOD 1.2.1B by Kev_AK
(117) MicroLua by RamiLego4Game
(118) Extra customizable HUD by djy0212
(119) Ingame brush editor by ssccsscc
(120) Window Maker by Paul_31415
(121) CHEM-MOD V1.2B by Kev_AK
(122) Rainbow PHOT by Mrprocom
(123) stronger stickmanv by yuval
(124) 3D Pressure Visualizer by mniip
(125) Arkadian Liquid by JanKaszanka
(126) Fuel by nukers473
(127) Immersive Radioactivity v2.1 by Potbelly
(128) ElementLaunchingTool by juh9870
(129) CHEM-MOD_v1.2.2b by KevAK
(130) Slingshot by Mrprocom
(131) Perlin Noise Generator by DoubleF
(132) Element Replace by TomW1605
(133) Flooder V2 by TheAwesomeMutant
(134) Link Sign GUI by QuanTech
(135) Element dehider by 4e616d65
(136) Subphoton ROM Builder by mad-cow
(137) Hardened Dust by Liftski
(138) Bio-Vir by TheAwesomeMutant
(140) Orbit Simulator by Mrprocom
(141) johnnyou's Font for Texter by johnnyou (49796346)
(142) auto_wifi by phisically
(143) Layering helper by ssccsscc
(144) Layering Helper Extended by LuaMaster
(145) TPT Remade by TuDoR2007
(146) All-seeing sampler by djy0212
(147) Layering helper remastered by ssccsscc
(148) Eraser by thepowdertoy12
(149) EXPLOSIONS by olix3001
(150) Simple rocket fuel mod by ArseniyPlotnikov2006
(151) Pure Fission by Fnaf65
(154) Graph by ssccsscc
(155) Little's Pack! by LittleProgramming
(156) Lead by LoftisGaming
(157) WIFI Tuner by ssccsscc
(158) Previous Brush by TomW1605
(159) HUD Auto-Hider by Tim
(161) Stack tool by thepowdertoy12
(162) Oil and plastic by ArseniyPlotnikov2006
(163) Colored Ember by DUC
(164) Timer by ssccsscc
(165) Bacteria Mod by TuDoR2007
(166) Noise filter by LBPHacker
(167) Future-proof element dehider by LBPHacker
(168) RadioactiveNuke by DreamingWarlord
(169) Only Hot Element by DreamingWarlord
(170) Philosopher's Stone by Godhydra
(171) Conic section generator by LBPHacker
(172) Interface API by ssccsscc
(173) Metals&Materials by Ferrous26
(174) tpt.all by LBPHacker
(175) The Visual Elements Pack by Goblin01, vvv331
(176) Layering Helper Reforged by PowderNotSolid
(177) SNOWified SING by LBPHacker
(178) FPS Chart by Goblin01
(179) TPT font writer by Goblin01
(180) Simple Ruler by PowderNotSolid
(181) Heat Modifier by DreamingWarlord
(182) TPT Remade II by TuDoR2007
(183) Gravity simulator by ArseniyPlotnikov2k6
(184) Unobtainium by christheboss894
(185) TPTMIDI noteblock in tpt by djy0212
(186) DreamingWarlord's Lua Tool by DreamingWarlord
(187) Elements Tooltip by Goblin01
(189) Explodium script by 0d15ea5ebe57c0debadc0ffee0ddf00d
(190) more powered force elements by 6nop6nop
(191) Yzaak1Scifire Modpack by Yzaak1Scifire
(194) Fluor and more modpack! by galaktor
(195) Hot Powder by lieve_blendi
(196) Star by TUANMINHVIETNAM
(197) Heat Powders by lieve_blendi
(200) Tangeriinium (thx 2 cxi 4 code) by LostEditor
(201) Freezer by lieve_blendi
(202) Powder Power! by TPTSortaGuy
(203) PowderPlus v1.4 by PowderPlus Team
(204) fire by ME
(205) Stacked Goo Animations by Maticzpl
(206) Stickman Control for Android Version by PhauloRiquelme
(207) Spark Removal Button by Xyz
(208) More HEAC's! by Maxhd1234
(209) Immersive Radioactivity v3.0 by Potbelly
(210) Subframe Chipmaker Script by Maticzpl
(211) Realistic Propellants by ArseniyPlotnikov2k6
(212) Mass Equals Gravity by Maticzpl
(213) PhiMod v1 by ArolaunTech
(214) PC Controls for Android by Cracker1000
(217) Single-pixel pipe configurator by LBPHacker
(218) Omega Death Laser Gun by Dogeoum
(219) Notifications by Maticzpl
(221) Powderizer by ArolaunTech
(222) ElemDehider 1.2 by Inventor70
(223) Unobtainum V2 by DoomKittyAttack
(224) Organics Mod v0.2B by PowderPlus Team
(225) Gravity distortion by Avolte55
(226) tmp Wifi by PhauloRiquelme
(227) Alchemagica Mod v1.0 by RebMiami
(228) Fan Elements Mod by RebMiami
(229) Impossibilities by ArolaunTech
(230) Realistic Explosives by ArseniyPlotnikov2k6
(231) libactivation by anamorphic
(232) Alloy Brushes by Maticzpl
(233) Gravity bender by pres
(234) Slow Tick by Pixel
(235) Paste ID by Maticzpl
(236) many things by jadenflp2
(237) Territect by Rebmiami
(238) Better Descriptions v1.0.5 by ashyboi2022
(239) LIGHTNING SPRK by GOLmaster10101
(240) Small Bombs by juh9870
(241) Save Shop by aaccbb
(242) Moving solids v1.3.0 Beta by ArolaunTech
(244) Alchemistry by rdococ
(245) ETRD (Formerly PowderIM) by aaccbb
(246) RadonX by Justadirtblock
(248) Water-X by deuterium_oxide
(250) Indestructible INSL by CheekyRand0m
(252) Console's Mod by Console/Compec
(255) Slow motion by LBPHacker
(256) Powered Repeller by Hythonia
(257) Zeta's Electric Tools. by Zetalasis
(258) Azure serum (AZSR) by ALumpOfPowderToy
(259) COLORFULSAND by xert
(260) Lightning Circle by defaultuser0
(261) Powder Future Tech by JonaHungary
(262) TPTGlowingSolids by DestinyDyson
(263) Volcano Bomb by I_am_the_NugsWorld
(264) Neon Lights by Rebmiami
(265) Radioactive Materials by xyz
(266) Eater mod by VIPERGAMEZ
(267) the biology mod by someone
(268) Atomic Physics by qe
(269) Pure Radiation by ronansb
(270) Fake Elements by That_PowderToy_Guy
(271) Tachyons and MISC by RamenNoods
(272) Exotic Particles by rdococ
(273) FPS Slider by aaccbb
(274) Enphosian's Radioactive mod pack by Enphosian
(276) ROM Builder by QnpfvTPz

+ Submit new script!

Title: Author:
Script:
------------------- Configuration -------------------
local InterfaceAPIVersion = 2.42
-----------------------------------------------------
local mouseEvents = {
  Down = 1,
  Up = 2
}
local function DefineInterfaceComponents()
  function interface_s.Components.Window:new(x, y, Width, Height, Movable, theme)
    local obj= {}
    obj.Type = "Window"

    obj.AllowResize = true
    obj.AlwaysFocused = false
    obj.IsMovable = Movable
    obj.MinWidth = 16
    obj.MinHeight = 16
    obj.Theme = theme
    obj.X = x
    obj.Y = y
    obj.Width = Width
    obj.Height = Height

    obj.OnShow = nil
    obj.OnHide = nil
    obj.OnDraw = nil
    obj.OnEndDraw = nil
    obj.OnMove = nil
    obj.OnClick = nil

    obj.Focused=false
    obj.Items = {}
    obj.MoveStartX = -1
    obj.MoveStartY = -1
    obj.IsMoving = false
    obj.IsShowing = true
    obj.IsResizing = false
    obj.ResizeStartX = 1
    obj.ResizeStartY = 1
    obj.ResizeStartWidth = 1
    obj.ResizeStartHeight = 1
    obj.ResizeLastWidth =0
    obj.ResizeLastHeight=0  
    obj.SizeOfHeader = 8  
    function obj:Draw(IsFocused,mx,my)
      self.Focused=IsFocused or self.AlwaysFocused
      if self.OnDraw ~= nil then
        if self.OnDraw(IsFocused,mx,my) == true then
          return
        end
      end
      if self.Focused == true then
        gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
        gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
        if self.IsMovable then
          gfx.fillRect(self.X, self.Y, self.Width,self.SizeOfHeader, gfx.getColors(self.Theme.HeaderColor))
        end
        if self.AllowResize==true then
          gfx.fillRect(self.X+self.Width-6, self.Y+self.Height-6, 6,6, gfx.getColors(self.Theme.BorderColor))
        end
      else
        gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBackColor))
        gfx.drawRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
        if self.AllowResize==true then
          gfx.fillRect(self.X+self.Width-6, self.Y+self.Height-6, 6,6, gfx.getColors(self.Theme.UnfocusedBorderColor))
        end
        if self.IsMovable then
          gfx.fillRect(self.X, self.Y, self.Width,self.SizeOfHeader, gfx.getColors(self.Theme.UnfocusedHeaderColor))
        end
      end
      for i=#self.Items,0,-1 do
        if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) then
          self.Items[i]:Draw(self.Focused,self.X,self.Y,mx-self.X,my-self.Y)
        end
      end
      if self.OnEndDraw ~= nil then
        if self.OnEndDraw(IsFocused,mx,my) == true then
          return
        end
      end
    end 
    function obj:Show()
      self.IsShowing = true
      if self.OnShow ~= nil then
         self.OnShow(self)
      end
    end
    function obj:Hide()
      self.IsShowing = false
      if self.OnHide ~= nil then
         self.OnHide(self)
      end
    end
    function obj:Resize(ws,hs)
      if ws < self.MinWidth then
        ws=self.MinWidth
      end
      if hs < self.MinHeight then
        hs=self.MinHeight
      end
      self.ResizeLastHeight = self.Height
      self.ResizeLastWidth = self.Width
      self.Height = hs
      self.Width = ws
      hs = self.Height-self.ResizeLastHeight
      ws = self.Width-self.ResizeLastWidth
      for i=0,#self.Items do
        if self.Items[i]~=nil then
          if self.Items[i].Anchor.Top==true and self.Items[i].Anchor.Bottom==true then
            self.Items[i].Height = self.Items[i].Height + hs
          end
          if self.Items[i].Anchor.Top==false and self.Items[i].Anchor.Bottom==true then
            self.Items[i].Y = self.Items[i].Y + hs
          end
          if self.Items[i].Anchor.Left==true and self.Items[i].Anchor.Right==true then
            self.Items[i].Width = self.Items[i].Width + ws
          end
          if self.Items[i].Anchor.Left==false and self.Items[i].Anchor.Right==true then
            self.Items[i].X = self.Items[i].X + ws
          end
        end
      end
    end
    function obj:AddComponent(component)
      self.Items[#self.Items+1] = component
      component.Base = self
    end
    function obj:GetComponentIndex(obj2)
      for i=0, #self.Items do
        if self.Items[i] == obj2 then
          return i
        end
      end
      return -1
    end
    function obj:focusComponent(obj2)
      local index = self:GetComponentIndex(obj2)
      for i=index, 1,-1 do
        self.Items[i] = self.Items[i-1] 
      end
      self.Items[0] = obj2
    end
    function obj:KeyPress(key, scan, r, ctrl, shift, alt)
      for i=0,#self.Items do
        if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) and (self.Items[i].KeyPress~=nil) then
          if self.Items[i]:KeyPress(key, scan, r, ctrl, shift, alt) then
            return true
          end
        end
      end
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if (self.IsMovable) and (e==mouseEvents.Up) and (self.IsMoving) then
        self.IsMoving = false
      end
      if self.IsResizing== false then
        for i=0,#self.Items do
          if (self.Items[i]~=nil) and (self.Items[i].IsShowing==true) then
            if self.Items[i]:Click(x-self.X,y-self.Y,e,b,w) then
              return true
            end
          end
        end
      end
      if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
        if self.Focused then
          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
            self.IsResizing=true
            self.ResizeStartX = x
            self.ResizeStartY = y
            self.ResizeStartWidth = self.Width
            self.ResizeStartHeight = self.Height
            return true
          end
          if (self.IsMovable) and (y>self.Y) and (y<self.Y+self.SizeOfHeader) and (e==mouseEvents.Down) then
            self.MoveStartX = x - self.X
            self.MoveStartY = y - self.Y
            self.IsMoving = true
          end
          if self.IsResizing==false then
            return true
          end
        else
          if e==mouseEvents.Down then
            return true
          end
        end
      else
        if IsResizing==false then
          return false
        end
      end

      if self.IsResizing==true and e==mouseEvents.Up then
        self.IsResizing = false
        return true
      end

    end
    function obj:Move(x,y,dx,dy)
      if (self.IsMovable) and (self.IsMoving) then
        self.X = x-self.MoveStartX
        self.Y = y-self.MoveStartY
        if self.OnMove~=nil then
          self.OnMove(self.X,self.Y)
        end
      else
        if self.IsResizing==true then
          self:Resize(self.ResizeStartWidth-self.ResizeStartX+x,self.ResizeStartHeight-self.ResizeStartY+y)
          return true
        end
      end
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end
  function interface_s.Components.Button:new(x, y, Width, Height, text, theme)
    local obj= {}
    obj.Type = "Button"

    obj.X = x
    obj.Y = y
    obj.Width = Width
    obj.Height = Height
    obj.Theme = theme
    obj.IsShowing = true
    obj.Text = text
    obj.Enabled = true
    obj.HintText = ""
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}

    obj.OnPressed = nil
    obj.OnDraw = nil
    obj.OnEndDraw = nil
    obj.OnClick = nil
    
    obj.Base = nil
    obj.Focused=false
    obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
    obj.HintHelper = nil
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused=IsFocused
      if self.OnDraw ~= nil then
        if self.OnDraw(IsFocused,self.X+baseX,self.Y+baseY,x,y) == true then
          return
        end
      end
      local tw, th = gfx.textSize(self.Text)
      if IsFocused == true and self.Enabled then
        if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
          if self.ClickHelper.IsFirstClick then
            gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.PressedBackColor))
            gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.PressedTextColor))
          else
            gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.MouseOverColor))
            gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.TextColor))
            if self.HintHelper~=nil then
              self.HintHelper:MouseOver(x+baseX,y+baseY,self.HintText)
            end
          end
        else
          if self.HintHelper~=nil then
            self.HintHelper:Reset()
          end
          gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
          gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.TextColor))
        end
        gfx.drawRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.BorderColor))
      else
        if self.HintHelper~=nil then
          self.HintHelper:Reset()
        end
        if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
          if self.ClickHelper.IsFirstClick then
            gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.PressedBackColor))
            gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.PressedTextColor))
          else
            gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedMouseOverColor))
            gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.UnfocusedTextColor))
          end
        else
          gfx.fillRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBackColor))
          gfx.drawText(self.X+baseX+(self.Width-tw)/2, self.Y+baseY + (self.Height-th)/2+1, self.Text, gfx.getColors(self.Theme.UnfocusedTextColor))
        end
        gfx.drawRect(self.X+baseX, self.Y+baseY, self.Width,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
      end
      if self.OnEndDraw ~= nil then
        if self.OnEndDraw(IsFocused,self.X+baseX,self.Y+baseY,x,y) == true then
          return
        end
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if self.Enabled then
        self.ClickHelper.OnPress = self.OnPressed
        self.ClickHelper:ProcessClick(self.Width,self.Height,self.X,self.Y,x,y,e,b)
      end
    end
    function obj:AddHint(text)
      self.HintText = text
      self.HintHelper = interface_s.ComponentsHelpers.Hint:new()
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Combobox:new(x, y,w,h,i, theme)
    local obj= {}
    obj.Type = "Combobox"

    obj.X = x
    obj.Y = y

    obj.Theme = theme
    obj.IsShowing = true
    obj.Width = w
    obj.Height = h
    obj.Enabled = true
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
    obj.Items = i
    obj.IsItemsShown = false
    
    obj.SelectedIndex=0
    obj.OnItemSelected = nil
    obj.OnClick = nil

    obj.Base = nil
    obj.Focused=false
    obj.DropClickHelper = interface_s.ComponentsHelpers.Click:new()
      obj.DropClickHelper.OnPress = function()
          if obj.IsItemsShown==false then
            obj.Base:focusComponent(obj)
            obj.IsItemsShown = true
          end
        end
    obj.ItemClickHelper = interface_s.ComponentsHelpers.Click:new()
      obj.ItemClickHelper.OnFirstClick = function() return true end
      obj.ItemClickHelper.OnPress = function(x,y)
          local i = y-obj.Y-obj.Height
          obj.SelectedIndex=math.floor(i/14)
          if obj.OnItemSelected~= nil then
            obj.OnItemSelected(obj.SelectedIndex,obj.Items[obj.SelectedIndex+1])
          end
          obj.IsItemsShown = false
          interface_s.RemoveOnClickAction(obj)
          return true
        end
      obj.ItemClickHelper.OnMissClick = function(x,y)
        obj.IsItemsShown = false
        interface_s.RemoveOnClickAction(obj)
        return true
      end
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused = IsFocused
      if IsFocused and self.Enabled then
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
        if self.SelectedIndex>=0 then
          gfx.drawText(self.X+baseX+5,self.Y+baseY+3, self.Items[self.SelectedIndex+1], gfx.getColors(self.Theme.TextColor))
        end
        if self.IsItemsShown==true then
          gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonPressedBackColor))
        else
          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
            gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonMouseOverBackColor))
          else
            gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.ButtonBackColor))
          end
        end
        gfx.drawRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.BorderColor))
        if self.IsItemsShown==true then
          gfx.fillRect(self.X+baseX,self.Y+baseY+self. Height,self.Width,#self.Items*14,gfx.getColors(self.Theme.BackColor))
          for i=0,#self.Items-1 do
            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
              gfx.fillRect(self.X+baseX,self.Y+baseY+i*14+self.Height,self.Width,14+1,gfx.getColors(self.Theme.ButtonMouseOverBackColor))
            end
            gfx.drawRect(self.X+baseX,self.Y+baseY+i*14+self.Height,self.Width,14+1,gfx.getColors(self.Theme.BorderColor))
            gfx.drawText(self.X+baseX+5,self.Y+baseY+i*14+3+self.Height, self.Items[i+1],gfx.getColors(self.Theme.TextColor))
          end
        end
      else
        obj.IsItemsShown = false
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
        if self.SelectedIndex>=0 then
          gfx.drawText(self.X+baseX+5,self.Y+baseY+3, self.Items[self.SelectedIndex+1],gfx.getColors(self.Theme.UnfocusedTextColor))
        end
        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
          gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.UnfocusedButtonMouseOverBackColor))
        else
          gfx.fillRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height,gfx.getColors(self.Theme.UnfocusedButtonBackColor))
        end
        gfx.drawRect(self.X+self.Width-self.Height+baseX, self.Y+baseY, self.Height,self.Height, gfx.getColors(self.Theme.UnfocusedBorderColor))
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if self.Enabled then
        if self.IsItemsShown==true then
          return self.ItemClickHelper:ProcessClick(self.Width,#self.Items*14,self.X,self.Y+self.Height,x,y,e,b)
        end
        return self.DropClickHelper:ProcessClick(self.Height,self.Height,self.X+self.Width-self.Height,self.Y,x,y,e,b)
      end
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Graph:new(x, y,w,h, theme)
    local obj= {}
    obj.Type = "Graph"

    obj.X = x
    obj.Y = y
    obj.Theme = theme
    obj.IsShowing = true
    obj.Width = w
    obj.Height = h
    obj.UpdateSpeed = 20
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}

    obj.GetValue = nil
    obj.OnClick = nil

    obj.Focused=false
    obj.ZeroHeight = 0
    obj.MaxValue = 0
    obj.NewMaxValue = 0
    obj.MinValue = 0
    obj.NewMinValue = 0
    obj.UpdateCounter = 0
    obj.PointX = {} 
    obj.PointY = {} 
    obj.Base = nil
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      if self.UpdateCounter>self.UpdateSpeed then
        if self.GetValue ~= nil then
          self:AddPoint(self.GetValue())
        end
        self.UpdateCounter=0
      end
      self.UpdateCounter=self.UpdateCounter+1
      self.Focused = IsFocused
      if IsFocused==true then
        gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
        gfx.drawText(self.X+baseX,self.Y+baseY-10,"Max: "..self.MaxValue,gfx.getColors(self.Theme.TextColor))
        gfx.drawText(self.X+baseX+100,self.Y+baseY-10,"Min: "..self.MinValue,gfx.getColors(self.Theme.TextColor))
      else
        gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBackColor))
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
        gfx.drawText(self.X+baseX,self.Y+baseY-10,"Max: "..self.MaxValue,gfx.getColors(self.Theme.UnfocusedTextColor))
        gfx.drawText(self.X+baseX+100,self.Y+baseY-10,"Min: "..self.MinValue,gfx.getColors(self.Theme.UnfocusedTextColor))
      end
      self.NewMaxValue = 0
      self.NewMinValue = 0
      if self.PointX[#self.PointX] ~= nil then
        local v = self.PointX[#self.PointX]-self.Width+1
        if v>0 then
          for i=v,#self.PointY do
            self.PointY[i-v]=self.PointY[i]
            self.PointX[i-v]=self.PointX[i]-v
          end
          for i=#self.PointY-v,#self.PointY do
            self.PointY[i]=nil
            self.PointX[i]=nil
          end
        end
      end
      for i=2, #self.PointX do
        if self.PointX[i]<self.Width-1 then
          if self.NewMaxValue < self.PointY[i] then
            self.NewMaxValue = self.PointY[i]
          else
            if self.NewMinValue>self.PointY[i] then
              self.NewMinValue = self.PointY[i]
            end
          end
          if self.MaxValue < self.PointY[i] then
            self.MaxValue = self.PointY[i]
          else
            if self.MinValue>self.PointY[i] then
              self.MinValue = self.PointY[i]
            end
          end
          local x1 = self.PointX[i]+self.X+baseX
          local y1 = (self.Height-((self.PointY[i]+math.abs( self.MinValue ))/(self.MaxValue+math.abs( self.MinValue )))*(self.Height-3))+self.Y+baseY-2
          local x2 = self.PointX[i-1]+self.X+baseX
          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
          if y1==y1 and y2==y2 then
            if IsFocused==true then    
              gfx.drawLine(x1,y1,x2,y2,gfx.getColors(self.Theme.GraphColor))
            else
              gfx.drawLine(x1,y1,x2,y2,gfx.getColors(self.Theme.UnfocusedGraphColor))
            end
          end
        end
      end
      if self.PointY[1]~=nil then
        if self.NewMaxValue < self.PointY[1] then
          self.NewMaxValue = self.PointY[1]
        else
          if self.NewMinValue>self.PointY[1] then
            self.NewMinValue = self.PointY[1]
          end
        end
        if self.MaxValue < self.PointY[1] then
          self.MaxValue = self.PointY[1]
        else
          if self.MinValue>self.PointY[1] then
            self.MinValue = self.PointY[1]
          end
        end
        self.ZeroHeight = (self.Height-((math.abs( self.MinValue ))/(self.MaxValue+math.abs( self.MinValue )))*(self.Height-3))+self.Y+baseY-2
        if self.ZeroHeight == self.ZeroHeight then
          if IsFocused== true then
            gfx.drawLine(self.X+baseX,self.ZeroHeight,self.X+baseX+self.Width-1,self.ZeroHeight,gfx.getColors(self.Theme.ZeroLine))
          else
            gfx.drawLine(self.X+baseX,self.ZeroHeight,self.X+baseX+self.Width-1,self.ZeroHeight,gfx.getColors(self.Theme.UnfocusedZeroLine))
          end
        end
      end
      self.MaxValue = self.NewMaxValue
      self.MinValue = self.NewMinValue
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:AddPoint(v) 
      if v~= nil then
      if #self.PointY==0 then
        self.PointY[1]=v
        self.PointX[1]=1
      else
        if #self.PointY+1 < self.Width-1 then
        self.PointY[#self.PointY+1]=v
        self.PointX[#self.PointX+1]=self.PointX[#self.PointX]+1
        else
          for i=2,#self.PointY do
            self.PointY[i-1]=self.PointY[i]
            self.PointX[i-1]=self.PointX[i]-1
          end
          self.PointY[#self.PointY]=v
          self.PointX[#self.PointX]=self.PointX[#self.PointX]
        end
      end
      end
    end
    function obj:ClearPoints() 
        self.PointY = {}
        self.PointX = {}
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      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
        return true
      end
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Label:new(x, y, t, theme)
    local obj= {}
    obj.Type = "Label"

    obj.X = x
    obj.Y = y
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
    obj.Theme = theme
    obj.HintText = ""
    obj.IsShowing = true
    obj.Text = t
    
    obj.OnClick = nil

    obj.Base = nil
    obj.Focused=false
    obj.HintHelper = nil
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused = IsFocused
      if IsFocused==true then
        gfx.drawText(self.X+baseX,self.Y+baseY,self.Text,gfx.getColors(self.Theme.TextColor))
        local tw, th = gfx.textSize(self.Text)
        if (x>self.X) and (x<self.X+tw) and (y>self.Y) and (y<self.Y+th) then
          if self.HintHelper~=nil then
            self.HintHelper:MouseOver(x+baseX,y+baseY,self.HintText)
          end
        else
          if self.HintHelper~=nil then
            self.HintHelper:Reset()
          end
        end
      else
        if self.HintHelper~=nil then
          self.HintHelper:Reset()
        end
        gfx.drawText(self.X+baseX,self.Y+baseY,self.Text,gfx.getColors(self.Theme.UnfocusedTextColor))
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
    end
    function obj:AddHint(text)
      self.HintText = text
      self.HintHelper = interface_s.ComponentsHelpers.Hint:new()
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Textbox:new(x, y, w, h, theme)
    local obj= {}
    obj.Type = "Textbox"

    obj.X = x
    obj.Y = y
    obj.Theme = theme
    obj.IsShowing = true
    obj.Width = w
    obj.Height = h
    obj.Text = ""
    obj.Enabled = true
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
    obj.MaxTextLength = 10
    obj.PointerIndex = 0

    obj.OnTextChanged = nil
    obj.OnClick = nil

    obj.Focused=false
    obj.Base = nil
    obj.IsActive = false
    obj.PointerBlinkStep =0
    obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
    obj.ClickHelper.OnPress = function()
        obj.IsActive = true
      end
    obj.ClickHelper.OnMissClick = function()
        obj.IsActive = false
      end
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused = IsFocused
      gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
      if self.IsActive==true and self.Enabled then
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
        self.PointerBlinkStep = self.PointerBlinkStep + 1
        if self.PointerBlinkStep > 30 then
          self.PointerBlinkStep=0
        end
        if self.PointerBlinkStep > 15 then
          local x = gfx.textSize(string.sub(self.Text, 0,self.PointerIndex) )
          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)) 
        end
      else
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.UnfocusedBorderColor))
      end
      local x, y = gfx.textSize(string.sub(self.Text, 0,self.PointerIndex) )
      if IsFocused==true and self.Enabled then
        gfx.drawText(self.X+baseX+2,self.Y+baseY+(self.Height-y+3)/2,self.Text,gfx.getColors(self.Theme.TextColor))
      else
        gfx.drawText(self.X+baseX+2,self.Y+baseY+(self.Height-y+3)/2,self.Text,gfx.getColors(self.Theme.UnfocusedTextColor))
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if self.Enabled then
        self.ClickHelper:ProcessClick(self.Width,self.Height,self.X,self.Y,x,y,e,b)
      end
    end
    function obj:KeyPress(code, scan, r, ctrl, shift, alt)
      if self.IsActive==true and self.Enabled then
        if scan~=nil then
          if code==8 and self.PointerIndex>0 then
            self.PointerIndex=self.PointerIndex-1
            self.Text=string.sub(self.Text,0,self.PointerIndex)..string.sub(self.Text,self.PointerIndex+2)
            if self.OnTextChanged~=nil then
              self.OnTextChanged(self.Text)
            end
          elseif code==127 and self.PointerIndex~=string.len(self.Text) then
            self.PointerIndex=self.PointerIndex
            self.Text=string.sub(self.Text,0,self.PointerIndex)..string.sub(self.Text,self.PointerIndex+2)
            if self.OnTextChanged~=nil then
              self.OnTextChanged(self.Text)
            end
          elseif code==1073741903 and string.len(self.Text)>=self.PointerIndex+1 then
            self.PointerIndex=self.PointerIndex+1
          elseif code==1073741904 and self.PointerIndex>0 then
            self.PointerIndex=self.PointerIndex-1
          end
        else
          if string.len(self.Text)<=self.MaxTextLength then
            self.PointerIndex=self.PointerIndex+1
            self.Text=string.sub(self.Text,0,self.PointerIndex-1)..code..string.sub(self.Text,self.PointerIndex)
            if self.OnTextChanged~=nil then
              self.OnTextChanged(self.Text)
            end
          end
        end
        return true
      end
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Checkbox:new(x, y, s, t, theme)
    local obj= {}
    obj.Type = "Checkbox"

    obj.X = x
    obj.Y = y
    obj.Theme = theme
    obj.IsShowing = true
    obj.Size = s
    obj.Text = t
    obj.Enabled = true
    obj.Checked = false
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}

    obj.OnStateChanged = nil
    obj.OnClick = nil

    obj.Focused=false
    obj.Base = nil
    obj.ClickHelper = interface_s.ComponentsHelpers.Click:new()
    obj.ClickHelper.OnPress = function()
        if obj.Checked==true then
          obj.Checked = false
        else
          obj.Checked = true
        end
        if obj.OnStateChanged~=nil then
          obj.OnStateChanged(obj.Checked)
        end
      end
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused = IsFocused
      local x, y = gfx.textSize(self.Text)
      if IsFocused==true and self.Enabled then
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Size,self.Size,gfx.getColors(self.Theme.BorderColor))
        if self.Checked==true then
          gfx.fillRect(self.X+baseX+3,self.Y+baseY+3,self.Size-6,self.Size-6,gfx.getColors(self.Theme.CheckColor))
        end
        gfx.drawText(self.X+baseX+self.Size+4,self.Y+baseY+(self.Size-y)/2+1,self.Text,gfx.getColors(self.Theme.TextColor))
      else
        gfx.drawRect(self.X+baseX,self.Y+baseY,self.Size,self.Size,gfx.getColors(self.Theme.UnfocusedBorderColor))
        if self.Checked==true then
          gfx.fillRect(self.X+baseX+3,self.Y+baseY+3,self.Size-6,self.Size-6,gfx.getColors(self.Theme.UnfocusedCheckColor))
        end
        gfx.drawText(self.X+baseX+self.Size+4,self.Y+baseY+(self.Size-y)/2+1,self.Text,gfx.getColors(self.Theme.UnfocusedCheckColor))
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if self.Enabled then
        return self.ClickHelper:ProcessClick(self.Size,self.Size,self.X,self.Y,x,y,e,b)
      end
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Selection:new(x, y, theme)
    local obj= {}
    obj.X = x
    obj.Y = y
    obj.Focused=false
    obj.Theme = theme
    obj.IsShowing = true
    obj.IsPointSet = false
    obj.FirstPointX = -1
    obj.FirstPointY = -1
    obj.IsFinished = false
    obj.EndPointX = -1
    obj.EndPointY = -1
    obj.OnSelectionStart = nil
    obj.OnSelected = nil
    obj.OnSelectionAborted = nil
    obj.V2EndWidth = -1
    obj.V2EndHeight = -1
    obj.V2StartX = -1
    obj.V2StartY = -1
    obj.OnClick = nil
    obj.OnDraw = nil
    function obj:Draw(IsFocused,x,y)
      if self.OnDraw~=nil then
        IsFocused,x,y = self.OnDraw(IsFocused,x,y)
        if IsFocused == nil then return end
      end
      self.Focused = IsFocused
      if IsFocused then
        if (self.IsPointSet) and (self.IsFinished==false) then
          local arg11 = -1
          local arg12 = -1
          local arg21 = -1
          local arg22 = -1
          if self.FirstPointX-x>=0 then
            arg11 = x
            arg12 = self.FirstPointX-x
          else
            arg11 = self.FirstPointX
            arg12 = x-self.FirstPointX
          end
          if self.FirstPointY - y>=0 then
            arg21 = y
            arg22 = self.FirstPointY - y
          else
            arg21 = self.FirstPointY
            arg22 = y-self.FirstPointY
          end
          if (self.IsFinished==false) and (self.IsPointSet==true)  then
            self.V2EndWidth = arg12
            self.V2EndHeight = arg22
            self.V2StartX = arg11
            self.V2StartY = arg21
          end
          gfx.fillRect(arg11, arg21, arg12,arg22, gfx.getColors(self.Theme.BackColor))
        end
      else
        self.IsPointSet = false
      end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if (e==mouseEvents.Down) and (self.IsPointSet==false) and (b==1) then
        self.IsPointSet = true
        self.FirstPointX = x
        self.FirstPointY = y
        if self.OnSelectionStart ~= nil then
          self.OnSelectionStart(self.FirstPointX,self.FirstPointY)
        end
        return true
      else 
        if (e==mouseEvents.Up) and (self.IsPointSet==true) and (b==1) and (self.IsFinished == false) then
          self.IsFinished = true
          self.EndPointX = x
          self.EndPointY = y
          if self.OnSelected ~= nil then
            self.OnSelected(self.FirstPointX,self.FirstPointY,self.EndPointX,self.EndPointY, self.V2StartX, self.V2StartY, self.V2EndWidth,self.V2EndHeight)
          end
          return true
        end
        if (self.IsPointSet==true) and (b~=1) and (self.IsFinished==false) then
          self.IsPointSet=false
          if self.OnSelectionAborted ~= nil then
            self.OnSelectionAborted()
          end
        end
      end
    end
    function obj:Move()
    end
    function obj:KeyPress(key, scan, r, ctrl, shift, alt)
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.SelectionMover:new(x, y,w,h, theme)
    local obj= {}
    obj.X = x
    obj.Y = y
    obj.Focused=false
    obj.Theme = theme
    obj.IsShowing = true
    obj.Width = w
    obj.Height = h
    obj.OnMovement = nil
    obj.OnAbort = nil
    obj.OnDone = nil
    obj.MoveStartX = -1
    obj.MoveStartY = -1
    obj.NewPosX = -1
    obj.NewPosY = -1
    obj.IsMoving = false
    obj.SumDX = 0
    obj.SumDY = 0
    obj.IsMoved = false
    obj.OnDraw = nil
    obj.OnClick = nil
    obj.OnMove = nil
    function obj:Draw(IsFocused,x,y)
      if self.OnDraw~=nil then
        self.OnDraw(IsFocused,x,y)
      end
      self.Focused = IsFocused
      gfx.fillRect(self.X, self.Y, self.Width,self.Height, gfx.getColors(self.Theme.BackColor))
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if (e==3) and (self.IsMoving) then  --For old versions
        if self.OnMovement ~= nil then
          self.OnMovement(-self.MoveStartX + x,- self.MoveStartY + y)
        end
        if (-self.MoveStartX + x ~= 0) and (- self.MoveStartY + y ~= 0) then
          self.IsMoved = true
        end
        self.SumDX = self.SumDX - self.MoveStartX + x
        self.SumDY = self.SumDY - self.MoveStartY + y
        self.X = self.X - self.MoveStartX + x
        self.Y = self.Y - self.MoveStartY + y
        self.MoveStartX = x
        self.MoveStartY = y
      else
        if (e==mouseEvents.Up) and (self.IsMoving) then
          if self.IsMoved == false then
            if self.OnDone ~= nil then
              self.OnDone(self.SumDX,self.SumDY)
            end
          end
          self.IsMoving = false
        end
      end
      if (x>self.X) and (x<self.X+self.Width) and (y>self.Y) and (y<self.Y+self.Height) then
        if (e==1) and (b==4) then
          if self.OnAbort ~= nil then
            self.OnAbort(self.SumDX,self.SumDY)
          end
        end
        if (y>self.Y) and (y<self.Y+self.Height) and (e==1) then
          self.MoveStartX = x
          self.MoveStartY = y
          self.IsMoving = true
        end
        if (e==1) and (b==1) then
          self.IsMoved = false
        end
        return true
      end
    end
    function obj:Move(x,y,dx,dy)
      if self.OnMove~=nil then
        x,y,dx,dy = self.OnMove(x,y,dx,dy)
        if x==nil then
          return
        end
      end
      if self.IsMoving then
        if self.OnMovement ~= nil then
          self.OnMovement(-self.MoveStartX + x,- self.MoveStartY + y)
        end
        if (-self.MoveStartX + x ~= 0) and (- self.MoveStartY + y ~= 0) then
          self.IsMoved = true
        end
        self.SumDX = self.SumDX - self.MoveStartX + x
        self.SumDY = self.SumDY - self.MoveStartY + y
        self.X = self.X - self.MoveStartX + x
        self.Y = self.Y - self.MoveStartY + y
        self.MoveStartX = x
        self.MoveStartY = y
      end
    end
    function obj:KeyPress(key, scan, r, ctrl, shift, alt)
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.Components.Listbox:new(x, y, w, h, theme)
    local obj= {}
    obj.Type = "Listbox"
    obj.X = x
    obj.Y = y
    obj.Focused=false
    obj.Theme = theme
    obj.IsShowing = true
    obj.Width = w
    obj.Height = h
    obj.Anchor = {Top = false,Bottom=false,Left=false,Right=false}
    obj.SelectedIndex = 1
    obj.Items = {}
    obj.ItemsColsCount = 1
    obj.ItemsColsPadding = {0}

    obj.OnItemSelected = nil
    obj.OnClick = nil

    obj.Base = nil
    obj.IsActive = false
    obj.ScrollStartItemIndex = 1
    obj.ItemClickHelper = interface_s.ComponentsHelpers.Click:new()
    obj.ItemClickHelper.OnPress = function(x,y)
        obj.SelectedIndex=math.floor((y-obj.Y)/11)+obj.ScrollStartItemIndex-1
        if obj.OnItemSelected~= nil then
          obj.OnItemSelected(obj.SelectedIndex,obj.Items[obj.SelectedIndex])
        end
        return true
    end
    function obj:Draw(IsFocused, baseX, baseY,x,y)
      if not self.IsShowing then return end
      self.Focused = IsFocused
      gfx.fillRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BackColor))
      gfx.drawRect(self.X+baseX,self.Y+baseY,self.Width,self.Height,gfx.getColors(self.Theme.BorderColor))
      local endindex = math.floor(self.Height/11)+self.ScrollStartItemIndex-1
      if table.getn(self.Items)<math.floor(self.Height/11) then
        endindex = table.getn(self.Items)
      end
      for i=self.ScrollStartItemIndex, endindex do
        if IsFocused then
          if self.SelectedIndex==i-1 then
            gfx.fillRect(self.X+baseX+2,self.Y+baseY+(i-self.ScrollStartItemIndex)*11+2,self.Width-4,10,gfx.getColors(self.Theme.SelectionColor))
            if self.ItemsColsCount==1 then
              gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.SelectionTextColor))
            else
              for j=1, self.ItemsColsCount do
                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))
              end
            end
          else
            if self.ItemsColsCount==1 then
              gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.TextColor))
            else
              for j=1, self.ItemsColsCount do
                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))
              end
            end
          end
          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
            gfx.fillRect(self.X+baseX+1,self.Y+baseY+(i-self.ScrollStartItemIndex)*11,self.Width-2,12,gfx.getColors(self.Theme.MouseOverColor))
          end
      else -- unfocused
        if self.SelectedIndex==i-1 then
          gfx.fillRect(self.X+baseX+2,self.Y+baseY+(i-self.ScrollStartItemIndex)*11+2,self.Width-4,10,gfx.getColors(self.Theme.UnfocusedSelectionColor))
          if self.ItemsColsCount==1 then
            gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.UnfocusedSelectionTextColor))
          else
            for j=1, self.ItemsColsCount do
              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))
            end
          end
        else
          if self.ItemsColsCount==1 then
            gfx.drawText(self.X+baseX+3,self.Y+baseY+3+(i-self.ScrollStartItemIndex)*11,self.Items[i],gfx.getColors(self.Theme.UnfocusedTextColor))
          else
            for j=1, self.ItemsColsCount do
              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))
            end
          end
        end
        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
          gfx.fillRect(self.X+baseX+1,self.Y+baseY+(i-self.ScrollStartItemIndex)*11,self.Width-2,12,gfx.getColors(self.Theme.UnfocusedMouseOverColor))
        end
      end
    end
    end 
    function obj:Show()
      self.IsShowing = true
    end
    function obj:Hide()
      self.IsShowing = false
    end
    function obj:Click(x,y,e,b,w)
      if self.OnClick~=nil then
        x,y,e,b,w = self.OnClick(x,y,e,b,w)
        if x==nil then
          return
        end
      end
      if w==1 and self.ScrollStartItemIndex<table.getn(self.Items)-math.floor( self.Height/11 )+1 then
        self.ScrollStartItemIndex=self.ScrollStartItemIndex+1
        return true
      elseif w==-1 and self.ScrollStartItemIndex>1 then
        self.ScrollStartItemIndex=self.ScrollStartItemIndex-1
        return true
      end
      return self.ItemClickHelper:ProcessClick(self.Width,(#self.Items-self.ScrollStartItemIndex+1)*11,self.X,self.Y,x,y,e,b)
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end

  function interface_s.ComponentsHelpers.Click:new(x, y)
    local obj= {}
    obj.IsFirstClick = false
    obj.OnPress = nil
    obj.OnFirstClick = nil
    obj.OnMissClick = nil
    function obj:ProcessClick(width,height,x,y,clickX,clickY,e,b)
      if (clickX>x) and (clickX<x+width) and (clickY>y) and (clickY<y+height) and (self.IsFirstClick==false) and (e==mouseEvents.Down) and (b==1) then
        self.IsFirstClick=true
        if self.OnFirstClick ~= nil then
          return self.OnFirstClick(clickX,clickY)
        else
          return true
        end
      else
        if (clickX>x) and (clickX<x+width) and (clickY>y) and (clickY<y+height) and (self.IsFirstClick==true) and (e==mouseEvents.Up) and (b==1) then
          self.IsFirstClick = false   
          if self.OnPress~= nil then
            return self.OnPress(clickX,clickY)
          else
            return true
          end
        else
          self.IsFirstClick = false
          if self.OnMissClick~= nil then
            return self.OnMissClick(clickX,clickY)
          end
        end
      end 
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end
  function interface_s.ComponentsHelpers.Hint:new()
    local obj= {}
    obj.HintFrames = 0
    obj.Window = interface_s.Components.Window:new(0, 0, 0, 12,false, interface_s.DefaultTheme.Window)
    obj.Label = interface_s.Components.Label:new(5,2,"",interface_s.DefaultTheme.Label)
    obj.Window:AddComponent(obj.Label)
    obj.Window.AllowResize = false
    obj.Window.AlwaysFocused = true
    function obj:MouseOver(x,y,text)
      if text~="" then
        self.HintFrames = self.HintFrames + 1
        if self.HintFrames>40 then
          local w,h = gfx.textSize(text)
          self.Window.X = x
          self.Window.Y = y+12
          self.Window.Width = w+10
          self.Label.Text = text
          self.Window:Draw(true,x,y)
        end
      end
    end
    function obj:Reset()
      self.HintFrames = 0
    end
    setmetatable(obj, self)
    self.__index = self;
    return obj
  end
end
local function DefineAPI()
  interface_s.Components.Window = {}
  interface_s.Components.Button = {}
  interface_s.Components.Combobox = {}
  interface_s.Components.Graph = {}
  interface_s.Components.Label = {}
  interface_s.Components.Textbox = {}
  interface_s.Components.Checkbox = {}
  interface_s.Components.Listbox = {}
  interface_s.Components.Selection = {}
  interface_s.Components.SelectionMover = {}
  interface_s.ComponentsHelpers.Click = {}
  interface_s.ComponentsHelpers.Hint = {}
  
  interface_s.AddOnClickAction = function(func)
    for i=#interface_s.OnClick+1,2,-1 do
      interface_s.OnClick[i]=interface_s.OnClick[i-1]
    end
    if type(func) == "function" then
      interface_s.OnClick[1]={}
      interface_s.OnClick[1].Click = func
    else
      interface_s.OnClick[1] = func
    end
  end

  interface_s.RemoveOnClickAction = function(func)
    local index = interface_s.GetOnClickActionIndex(func)
    if index~=-1 then
      interface_s.OnClick[index] = 0
    end
  end

  interface_s.GetOnClickActionIndex=function(obj)
    if type(obj) == "function" then
      for i=1, #interface_s.OnClick do
        if interface_s.OnClick[i]~=0 then
          if interface_s.OnClick[i].Click == obj then
            return i
          end
        end
      end
    else
      for i=1, #interface_s.OnClick do
        if interface_s.OnClick[i] == obj then
          return i
        end
      end
    end
    return -1
  end

  interface_s.AddOnStepAction = function(func)
    for i=#interface_s.OnStep+1,2,-1 do
      interface_s.OnStep[i]=interface_s.OnStep[i-1]
    end
    interface_s.OnStep[1] = func
  end

  interface_s.RemoveOnStepAction = function(func)
    local index = interface_s.GetOnStepActionIndex(func)
    if index~=-1 then
      interface_s.OnStep[index]=0
    end
  end

  interface_s.GetOnStepActionIndex=function(obj)
    for i=1, #interface_s.OnStep do
      if interface_s.OnStep[i] == obj then
        return i
      end
    end
    return -1
  end

  interface_s.AddKeyPressAction = function(func)
    for i=#interface_s.OnKeyPress+1,2,-1 do
      interface_s.OnKeyPress[i]=interface_s.OnKeyPress[i-1]
    end
    if type(func) == "function" then
      interface_s.OnKeyPress[1]={}
      interface_s.OnKeyPress[1].KeyPress = func
    else
      interface_s.OnKeyPress[1] = func
    end
  end

  interface_s.RemoveKeyPressAction = function(func)
    local index = interface_s.GetOnKeyPressActionIndex(func)
    if index~=-1 then
      interface_s.OnKeyPress[index]=0
    end
  end

  interface_s.GetOnKeyPressActionIndex=function(obj)
    if type(obj) == "function" then
      for i=1, #interface_s.OnKeyPress do
        if interface_s.OnKeyPress[i].KeyPress == obj then
          return i
        end
      end
    else
      for i=1, #interface_s.OnKeyPress do
        if interface_s.OnKeyPress[i] == obj then
          return i
        end
      end
    end
    return -1
  end
  interface_s.AddLeftWindow=function(obj) 
    for i=#interface_s.windows+1,2,-1 do
      interface_s.windows[i]=interface_s.windows[i-1]
    end
    interface_s.windows[1]=obj
  end
  
  interface_s.addComponent=function(obj) 
    interface_s.AddLeftWindow(obj) 
  end
  
  interface_s.GetComponentIndex=function(obj)
    for i=1, #interface_s.windows do
      if interface_s.windows[i] == obj then
        return i
      end
    end
    return -1
  end
  
  interface_s.RemoveComponent=function(obj) 
    local index = interface_s.GetComponentIndex(obj)
    if index~=-1 then
      for i=index, #interface_s.windows-1 do
        interface_s.windows[i]=interface_s.windows[i+1]
      end
      interface_s.windows[#interface_s.windows] = nil
    end
  end
  
  interface_s.focusComponent = function(index)
    local temp= interface_s.windows[index] 
    for i=index, 2,-1 do
      interface_s.windows[i] = interface_s.windows[i-1] 
    end
    interface_s.windows[1] = temp
  end

  interface_s.deleteFromArray = function(ar,index)
    for i=index, #ar-1 do
      ar[i]=ar[i+1]
    end
    ar[#ar] = nil
  end

  interface_s.step = function()
    local deletedFound = false
    for i=1,#interface_s.OnStep do
      if interface_s.OnStep[i]~=0 then
        interface_s.OnStep[i](tpt.mousex,tpt.mousey)
      else
        deletedFound = true
      end
    end
    if deletedFound then
      for i=1,#interface_s.OnStep do
        if interface_s.OnStep[i]==0 then
          interface_s.deleteFromArray(interface_s.OnStep,i)
          i=i-1
        end
      end
    end
    for i=#interface_s.windows, 1,-1 do
      if (interface_s.windows[i] ~= nil) and (interface_s.windows[i].IsShowing==true) then
        if i==1 then
          interface_s.windows[i]:Draw(true,tpt.mousex,tpt.mousey)
        else
          interface_s.windows[i]:Draw(false,tpt.mousex,tpt.mousey)
        end
      end
    end
  end

  interface_s.click = function(mousex, mousey, button, event,wheel)
    if event==3 then
      interface_s.mousemove(mousex,mousey,-1,-1)
      return true
    end
    local deletedFound = false
    local f = false
    for i=1,#interface_s.OnClick do
      if interface_s.OnClick[i]~=0 then
        if interface_s.OnClick[i].Base~=nil then
          if interface_s.OnClick[i]:Click(mousex-interface_s.OnClick[i].Base.X , mousey-interface_s.OnClick[i].Base.Y , event, button,wheel) then
            f=true
          end
        else
          if interface_s.OnClick[i].Click(mousex, mousey, event, button,wheel) then
            f=true
          end
        end
      else
        deletedFound = true
      end
    end
    if deletedFound then
      for i=1,#interface_s.OnClick do
        if interface_s.OnClick[i]==0 then
          interface_s.deleteFromArray(interface_s.OnClick,i)
          i=i-1
        end
      end
    end
    for i=1,#interface_s.windows do
      if interface_s.windows[i] == nil then
        interface_s.RemoveComponent(interface_s.windows[i])
        break
      end
      if (interface_s.windows ~= nil) then
        if interface_s.windows[i]:Click(mousex , mousey , event, button,wheel) then
          if (interface_s.windows[i]~=nil) and (interface_s.windows[i].IsShowing~=nil) and (interface_s.windows[i].IsShowing==true) then
            interface_s.focusComponent(i) 
            return false
          end
        end 
      end
    end
    if f==true then
      return false
    end
  end

  interface_s.key = function(char, code, mod, evt)
    local f = false
    if interface_s.windows[1] ~= nil then
      if interface_s.windows[1]:KeyPress(char, code, mod, evt) then
        f = true
      end
    end
    local deletedFound = false
    for i=1,#interface_s.OnKeyPress do
      if interface_s.OnKeyPress[i]~=0 then
        if interface_s.OnKeyPress[i].Base~=nil then
          if interface_s.OnKeyPress[i]:KeyPress(char, code, mod, evt) then
            f=true
          end
        else
          if interface_s.OnKeyPress[i].KeyPress(char, code, mod, evt) then
            f=true
          end
        end
      else
        deletedFound = true
      end
    end
    if deletedFound then
      for i=1,#interface_s.OnKeyPress do
        if interface_s.OnKeyPress[i]==0 then
          interface_s.deleteFromArray(interface_s.OnKeyPress,i)
          i=i-1
        end
      end
    end
    if interface_s.BlockKeyboard == true or f==true then
      return false
    end
  end

  interface_s.mousemove = function(x, y, dx, dy)
    for i=1,#interface_s.windows do
      if interface_s.windows[i] == nil then
        interface_s.RemoveComponent(interface_s.windows[i])
        break
      end
      if (interface_s.windows ~= nil) then
        if interface_s.windows[i]:Move(x , y , dx, dy) then
          if (interface_s.windows[i]~=nil) and (interface_s.windows[i].IsShowing~=nil) and (interface_s.windows[i].IsShowing==true) then
            interface_s.focusComponent(i) 
            return false
          end
        end 
      end
    end
  end

  interface_s.mouseUpToClick = function(x, y, b)
    return interface_s.click(x,y,b,mouseEvents.Up)
  end
  
  interface_s.mouseDownToClick = function(x, y, b)
    return interface_s.click(x,y,b,mouseEvents.Down)
  end
  
  interface_s.mouseWheelToClick = function(x, y, d)
    return interface_s.click(x,y,0,0,d)
  end

  if tpt.version.major<=93 and tpt.version.jacob1s_mod==nil or tpt.version.jacob1s_mod~=nil and tpt.version.jacob1s_mod<42 then
    tpt.register_step(interface_s.step)
    tpt.register_mouseclick(interface_s.click)
    tpt.register_keypress(interface_s.key)
  else
    event.register(event.tick, interface_s.step)  
    event.register(event.mousedown, interface_s.mouseDownToClick)
    event.register(event.mouseup, interface_s.mouseUpToClick)
    event.register(event.mousemove, interface_s.mousemove)
    event.register(event.mousewheel, interface_s.mouseWheelToClick)
    event.register(event.keypress, interface_s.key)
    event.register(event.textinput, interface_s.key)
  end
end
local function InitIntefaceAPI()
  if interface_s == nil then
    interface_s = {
      Version = InterfaceAPIVersion,
      Components = {},
      ComponentsHelpers = {},
      windows = {},
      step = nil,
      click = nil,
      mouseUpToClick = nil,
      mouseDownToClick = nil,
      mouseWheelToClick = nil,
      mousemove = nil,
      key = nil,
      addLeft = nil,
      addComponent = nil,
      GetComponentIndex = nil,
      RemoveComponent = nil,
      focusComponent = nil,
      BlockKeyboard = false,
      OnClick = {},
      OnKeyPress = {},
      OnStep = {},
      DefaultTheme = {}
    }
    DefineAPI()
    DefineInterfaceComponents()
  else
    if interface_s.Version<InterfaceAPIVersion then
      if tpt.version.major<=93 and tpt.version.jacob1s_mod==nil or tpt.version.jacob1s_mod~=nil and tpt.version.jacob1s_mod<42 then
        tpt.unregister_step(interface_s.step)
        tpt.unregister_mouseclick(interface_s.click)
        tpt.unregister_keypress(interface_s.key)
      else
        event.unregister(event.tick, interface_s.step)  
        event.unregister(event.mousedown, interface_s.mouseDownToClick)
        event.unregister(event.mouseup, interface_s.mouseUpToClick)
        event.unregister(event.mousemove, interface_s.mousemove)
        event.unregister(event.mousewheel, interface_s.mouseWheelToClick)
        event.unregister(event.keypress, interface_s.key)
        event.unregister(event.textinput, interface_s.key)
      end
      interface_s = {
        Version = InterfaceAPIVersion,
        Components = {},
        ComponentsHelpers = {},
        windows = interface_s.windows,
        step = nil,
        click = nil,
        mouseUpToClick = nil,
        mouseDownToClick = nil,
        mouseWheelToClick = nil,
        mousemove = nil,
        key = nil,
        addLeft = nil,
        addComponent = nil,
        GetComponentIndex = nil,
        RemoveComponent = nil,
        focusComponent = nil,
        BlockKeyboard = interface_s.BlockKeyboard,
        OnClick = interface_s.OnClick or {},
        OnKeyPress = interface_s.OnKeyPress or {},
        OnStep = interface_s.OnStep or {},
        DefaultTheme = interface_s.DefaultTheme or {}
      }
      DefineAPI()
      DefineInterfaceComponents()
    end
  end
end

InitIntefaceAPI()

--=================================================================--
--                       THEME START                               --
--=================================================================--
interface_s.DefaultTheme = {
  Window = {},
  Button = {},
  Combobox = {},
  Graph = {},
  Label = {},
  Textbox = {},
  Checkbox = {},
  Listbox = {},
  Selection = {}
}

interface_s.DefaultTheme.Window.BackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Window.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Window.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Window.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Window.HeaderColor = gfx.getHexColor(150,150,255,255)
interface_s.DefaultTheme.Window.UnfocusedHeaderColor = gfx.getHexColor(32,32,55,255)

interface_s.DefaultTheme.Button.BackColor = gfx.getHexColor(0,0,0,0)
interface_s.DefaultTheme.Button.UnfocusedBackColor = gfx.getHexColor(0,0,0,0)
interface_s.DefaultTheme.Button.PressedBackColor = gfx.getHexColor(240,240,240,255)
interface_s.DefaultTheme.Button.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Button.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Button.MouseOverColor = gfx.getHexColor(255,255,255,128)
interface_s.DefaultTheme.Button.UnfocusedMouseOverColor = gfx.getHexColor(150,150,150,128)
interface_s.DefaultTheme.Button.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Button.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Button.PressedTextColor = gfx.getHexColor(0,0,0,255)

interface_s.DefaultTheme.Combobox.BackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Combobox.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Combobox.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Combobox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Combobox.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Combobox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Combobox.ButtonBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Combobox.ButtonPressedBackColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Combobox.ButtonMouseOverBackColor = gfx.getHexColor(150,150,150,128)
interface_s.DefaultTheme.Combobox.UnfocusedButtonBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Combobox.UnfocusedButtonMouseOverBackColor = gfx.getHexColor(150,150,150,128)

interface_s.DefaultTheme.Graph.BackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Graph.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Graph.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Graph.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Graph.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Graph.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Graph.GraphColor = gfx.getHexColor(255,100,100,255)
interface_s.DefaultTheme.Graph.UnfocusedGraphColor = gfx.getHexColor(100,30,30,255)
interface_s.DefaultTheme.Graph.ZeroLine = gfx.getHexColor(255,200,200,255)
interface_s.DefaultTheme.Graph.UnfocusedZeroLine = gfx.getHexColor(100,80,80,255)

interface_s.DefaultTheme.Label.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Label.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)

interface_s.DefaultTheme.Textbox.BackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Textbox.BorderColor = gfx.getHexColor(255,200,200,255)
interface_s.DefaultTheme.Textbox.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Textbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Textbox.PointerColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Textbox.UnfocusedBorderColor = gfx.getHexColor(200,200,200,255)

interface_s.DefaultTheme.Checkbox.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Checkbox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Checkbox.CheckColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Checkbox.UnfocusedCheckColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Checkbox.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Checkbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)

interface_s.DefaultTheme.Listbox.BackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Listbox.BorderColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Listbox.SelectionColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Listbox.SelectionTextColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Listbox.TextColor = gfx.getHexColor(255,255,255,255)
interface_s.DefaultTheme.Listbox.MouseOverColor = gfx.getHexColor(255,255,255,50)
interface_s.DefaultTheme.Listbox.UnfocusedBackColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Listbox.UnfocusedBorderColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Listbox.UnfocusedSelectionColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Listbox.UnfocusedSelectionTextColor = gfx.getHexColor(0,0,0,255)
interface_s.DefaultTheme.Listbox.UnfocusedTextColor = gfx.getHexColor(150,150,150,255)
interface_s.DefaultTheme.Listbox.UnfocusedMouseOverColor = gfx.getHexColor(150,150,150,50)

interface_s.DefaultTheme.Selection.BackColor = gfx.getHexColor(140,140,200,70)
--=================================================================--
--                         THEME END                               --
--=================================================================--

Description:

Changelog: