Advertisement
Guest User

Liste-DxKlasse by Strobe v1.1

a guest
Mar 1st, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.69 KB | None | 0 0
  1. --############################
  2. --##    Widget-ScrollBox    ##
  3. --##        main_c.lua      ##
  4. --##    @author: Str0^      ##
  5. --##    @date: 01.03.2015   ##
  6. --############################
  7.  
  8. local w, h = guiGetScreenSize()
  9. ScrollBox = {   }
  10. ScrollBox.CHILDS = {    }
  11. ScrollBox.KEYS =    { { "pgup","mouse_wheel_up"} , {"pgdn","mouse_wheel_down" } }
  12. ScrollBox.__index = ScrollBox  
  13. function ScrollBox.new( I_SX, I_SY , I_WIDTH , I_HEIGHT , TBL_CONTENT, BG_COLOR, S_FONT, I_FONT, B_SCROLLBAR, I_SCROLLAMOUNT  )
  14.     local B_CHECK =  Check_Multiple( "number" , I_SX, I_SY , I_WIDTH , I_HEIGHT ) and type( TBL_CONTENT ) == "table"
  15.     S_FONT = S_FONT or "default"
  16.     I_FONT = I_FONT or 1
  17.     BG_COLOR = BG_COLOR or 0
  18.     if B_CHECK then
  19.         outputDebugString("Check Passed!")
  20.         local SELF = setmetatable( {    } , ScrollBox )
  21.         SELF.id = #ScrollBox.CHILDS
  22.         SELF.BOUNDS ={ I_SX , I_SY , I_WIDTH , I_HEIGHT }
  23.         SELF.FONT = S_FONT
  24.         SELF.FONTSIZE = I_FONT
  25.         SELF.FONT_HEIGHT = dxGetFontHeight( I_FONT , S_FONT )
  26.         SELF.TABLE = TBL_CONTENT
  27.         SELF:createRenderTarget( )
  28.         SELF.BG_COLOR = BG_COLOR
  29.         SELF.B_SCROLLBAR = B_SCROLLBAR
  30.         SELF.SCROLL_AMOUNT = I_SCROLLAMOUNT
  31.         SELF.SCROLLBAR_VALUE = I_SY
  32.         SELF.RENDER_FUNC_POINTER = function () SELF:render_main ( ) end
  33.         SELF.KEY_FUNC_POINTER = function( ) SELF:onKey(  ) end
  34.         SELF.SCROLL_FUNC_POINTER = function(button,bPress ) SELF:onScroll (button,bPress) end
  35.         addEventHandler("onClientRender",root,SELF.RENDER_FUNC_POINTER )
  36.         addEventHandler("onClientRender",root, SELF.KEY_FUNC_POINTER)
  37.         addEventHandler("onClientKey",root,SELF.SCROLL_FUNC_POINTER)
  38.         table.insert( ScrollBox.CHILDS , SELF )
  39.         return SELF
  40.     end
  41. end
  42.  
  43. function ScrollBox.remove( ELEMENT_ID )
  44.     for key, obj in ipairs( ScrollBox.CHILDS ) do
  45.         if obj.id == ELEMENT_ID then
  46.             removeEventHandler("onClientRender",root,obj.RENDER_FUNC_POINTER )
  47.             removeEventHandler("onClientRender",root, obj.KEY_FUNC_POINTER)
  48.             removeEventHandler("onClientKey",root,obj.SCROLL_FUNC_POINTER)
  49.             ELEMENT = nil
  50.         end
  51.     end
  52. end
  53.  
  54. function ScrollBox:onScroll(bButton, bPress)
  55.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  56.     if bButton == "mouse_wheel_up" then
  57.         if self.SCROLLBAR_VALUE <= I_Y then
  58.             self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  + self.SCROLL_AMOUNT
  59.         end
  60.         self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  -  self.SCROLL_AMOUNT
  61.     elseif bButton == "mouse_wheel_down" then
  62.         if self.SCROLLBAR_VALUE+self.scrollbar_height>=  (I_Y+I_HEIGHT)-(self.scrollbar_height)  then
  63.             self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  - self.SCROLL_AMOUNT
  64.         end
  65.         self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  + self.SCROLL_AMOUNT
  66.     end
  67. end
  68. --// RENDER-ON_KEY //
  69. function ScrollBox:onKey( B_BUTTON , B_PRESS )
  70.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  71.     for key, BTN in ipairs( ScrollBox.KEYS[1] ) do
  72.         if getKeyState( BTN ) then
  73.             if self.SCROLLBAR_VALUE <= I_Y then
  74.                 self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  + self.SCROLL_AMOUNT
  75.             end
  76.             self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  -  self.SCROLL_AMOUNT
  77.             return
  78.         end
  79.     end
  80.     for key, BTN in ipairs( ScrollBox.KEYS[2] ) do
  81.         if  getKeyState( BTN ) then
  82.             if self.SCROLLBAR_VALUE+self.scrollbar_height>=  (I_Y+I_HEIGHT)-(self.scrollbar_height)  then
  83.                 self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  - self.SCROLL_AMOUNT
  84.             end
  85.             self.SCROLLBAR_VALUE = self.SCROLLBAR_VALUE  + self.SCROLL_AMOUNT
  86.             return
  87.         end
  88.     end
  89. end
  90.  
  91. --// #Render Routines# //
  92. function ScrollBox:createRenderTarget( )
  93.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  94.     self.REAL_HEIGHT =  self.FONT_HEIGHT * #self.TABLE
  95.     self.RENDER_TARGET = dxCreateRenderTarget( I_WIDTH , self.REAL_HEIGHT ,true )
  96.     if not self.RENDER_TARGET then
  97.         self:createRenderTarget( )
  98.     end
  99. end
  100.  
  101. function ScrollBox:render_main( )
  102.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  103.     dxSetTextureEdge(self.RENDER_TARGET, "border", self.BG_COLOR )
  104.     dxDrawBoxShape( I_X,I_Y,I_WIDTH,I_HEIGHT,tocolor(50,50,50,255))
  105.     dxSetRenderTarget( self.RENDER_TARGET )
  106.     self:render_subroutine( )
  107.     dxSetRenderTarget(  )
  108.     dxDrawImageSection( I_X , I_Y, I_WIDTH , I_HEIGHT ,0,( self.SCROLLBAR_VALUE-I_Y)* ( self.REAL_HEIGHT / I_HEIGHT ) ,I_WIDTH,I_HEIGHT, self.RENDER_TARGET)
  109.     self:render_scrollbar( )
  110. end
  111.  
  112. function ScrollBox:render_subroutine( )
  113.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  114.     for KEY, D_OBJ in ipairs( self.TABLE ) do
  115.         local DX_TEXT, F_COLOR, BG_COLOR  = unpack( D_OBJ)
  116.         local HEIGHT_INDEX  =  ( KEY - 1)  * self.FONT_HEIGHT  
  117.         dxDrawRectangle( 0, HEIGHT_INDEX, I_WIDTH , I_HEIGHT , BG_COLOR )
  118.         dxDrawText( DX_TEXT, 0, HEIGHT_INDEX, I_WIDTH,  HEIGHT_INDEX + self.FONT_HEIGHT , tocolor( F_COLOR ) , self.FONTSIZE , self.FONT, "center", "center" )
  119.     end
  120. end
  121.  
  122. function ScrollBox:render_scrollbar( )
  123.     local I_X,I_Y,I_WIDTH,I_HEIGHT = self:getBounds( )
  124.     self.scrollbar_width = w*0.01
  125.     self.scrollbar_height =  ( ( (  self.FONT_HEIGHT ) / self.SCROLL_AMOUNT  )  ) * ( I_HEIGHT / self.REAL_HEIGHT )
  126.     if self.B_SCROLLBAR  then
  127.         dxDrawBoxShape( I_X+( I_WIDTH - self.scrollbar_width ) , I_Y, self.scrollbar_width,I_HEIGHT ,tocolor(50,50,50,255))
  128.         dxDrawRectangle(I_X+( I_WIDTH - self.scrollbar_width ) , I_Y, self.scrollbar_width,I_HEIGHT , tocolor(200,200,200,200) )
  129.         dxDrawRectangle( I_X+ ( I_WIDTH - self.scrollbar_width ) , self.SCROLLBAR_VALUE,self.scrollbar_width, self.scrollbar_height , tocolor( 50,50,50,255))
  130.     end
  131. end
  132. --// #Render Routines# //
  133.  
  134. --// GET-BOUNDS( ) //
  135. function ScrollBox:getBounds( )
  136.     return unpack( self.BOUNDS )
  137. end
  138.  
  139. --// CHECK_FUNCTIONS //
  140. function Check_Multiple( S_TYPE , ... )
  141.     for I_ARG = 1, #arg do
  142.         if type( arg[I_ARG] ) ~= S_TYPE then return false
  143.         end
  144.     end
  145.     return true
  146. end
  147.  
  148. createScrollBox = ScrollBox.new
  149. destroyScrollBox = ScrollBox.remove
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement