new post | browse code | authors | help | about

LuaBin 2.0

Viewing file root / lua / vgui / vgui_panellist.lua

  1.  
  2. local PANEL = {}
  3.  
  4. /*---------------------------------------------------------
  5.    Name: Init
  6. ---------------------------------------------------------*/
  7. function PANEL:Init()
  8.  
  9.         self.pnlCanvas  = vgui.Create( "Panel", self )
  10.         self.Items = {}
  11.         self.YOffset = 0
  12.        
  13.         self:SetSpacing( 0 )
  14.         self:SetPadding( 4 )
  15.         self:EnableHorizontal( false )
  16.        
  17.         self.BackgroundColor = Color( 0, 0, 0, 200 )
  18.  
  19. end
  20.  
  21. /*---------------------------------------------------------
  22.    Name: EnableHorizontal
  23. ---------------------------------------------------------*/
  24. function PANEL:EnableHorizontal( bHoriz )
  25.  
  26.         self.Horizontal = bHoriz
  27.        
  28. end
  29.  
  30. /*---------------------------------------------------------
  31.    Name: EnableVerticalScrollbar
  32. ---------------------------------------------------------*/
  33. function PANEL:EnableVerticalScrollbar()
  34.  
  35.         if (self.VBar) then return end
  36.        
  37.         self.VBar = vgui.Create( "SlideBar", self )
  38.         self:InvalidateLayout()
  39.        
  40. end
  41.  
  42. /*---------------------------------------------------------
  43.    Name: GetCanvas
  44. ---------------------------------------------------------*/
  45. function PANEL:GetCanvas()
  46.  
  47.         return self.pnlCanvas
  48.  
  49. end
  50.  
  51. /*---------------------------------------------------------
  52.    Name: GetCanvas
  53. ---------------------------------------------------------*/
  54. function PANEL:Clear()
  55.  
  56.         for k, panel in pairs( self.Items ) do
  57.        
  58.                 panel:Remove()
  59.        
  60.         end
  61.        
  62.         self.Items = {}
  63.  
  64. end
  65.  
  66. /*---------------------------------------------------------
  67.    Name: AddItem
  68. ---------------------------------------------------------*/
  69. function PANEL:AddItem( item )
  70.  
  71.         item:SetParent( self:GetCanvas() )
  72.         table.insert( self.Items, item )
  73.        
  74.         self:InvalidateLayout()
  75.  
  76. end
  77.  
  78. /*---------------------------------------------------------
  79.    Name: Rebuild
  80. ---------------------------------------------------------*/
  81. function PANEL:Rebuild()
  82.  
  83.         local Offset = 0
  84.        
  85.         if ( self.Horizontal ) then
  86.        
  87.                 local x, y = 0, 0;
  88.                 for k, panel in pairs( self.Items ) do
  89.                
  90.                         local w = panel:GetWide()
  91.                         local h = panel:GetTall()
  92.                        
  93.                         if ( x + w  > self:GetWide() ) then
  94.                        
  95.                                 x = 0
  96.                                 y = y + h + self.Spacing
  97.                        
  98.                         end
  99.                        
  100.                         panel:SetPos( x, y )
  101.                        
  102.                         x = x + w + self.Spacing
  103.                         Offset = y + h + self.Spacing
  104.                
  105.                 end
  106.        
  107.         else
  108.        
  109.                 for k, panel in pairs( self.Items ) do
  110.                
  111.                         panel:SetSize( self:GetCanvas():GetWide(), panel:GetTall() )
  112.                         panel:SetPos( 0, Offset )
  113.                         Offset = Offset + panel:GetTall() + self.Spacing
  114.                
  115.                 end
  116.                
  117.         end
  118.        
  119.         self:GetCanvas():SetSize( self:GetCanvas():GetWide(), Offset + self.Padding * 2 - self.Spacing )
  120.  
  121. end
  122.  
  123. /*---------------------------------------------------------
  124.    Name: OnMouseWheeled
  125. ---------------------------------------------------------*/
  126. function PANEL:OnMouseWheeled( dlta )
  127.  
  128.         if ( self.VBar ) then
  129.                 return self.VBar:AddVelocity( dlta )
  130.         end
  131.        
  132. end
  133.  
  134. /*---------------------------------------------------------
  135.    Name: Paint
  136. ---------------------------------------------------------*/
  137. function PANEL:Paint()
  138.        
  139.         draw.RoundedBox( 4, 0, 0, self:GetWide(), self:GetTall(), self.BackgroundColor )
  140.         return true
  141.        
  142. end
  143.  
  144. /*---------------------------------------------------------
  145.    Name: SetSpacing
  146. ---------------------------------------------------------*/
  147. function PANEL:SetSpacing( _num_ )
  148.        
  149.         self.Spacing = _num_
  150.        
  151. end
  152.  
  153. /*---------------------------------------------------------
  154.    Name: SetPadding
  155. ---------------------------------------------------------*/
  156. function PANEL:SetPadding( _num_ )
  157.        
  158.         self.Padding = _num_
  159.        
  160. end
  161.  
  162.  
  163. /*---------------------------------------------------------
  164.    Name: Think
  165. ---------------------------------------------------------*/
  166. function PANEL:Think()
  167.        
  168.         if ( self.VBar && self.VBar:Changed() ) then
  169.        
  170.                 local MaxOffset = self.pnlCanvas:GetTall() - self:GetTall()
  171.                 self.YOffset = MaxOffset * self.VBar:Value()
  172.                 self:InvalidateLayout()
  173.                
  174.         end
  175.        
  176. end
  177.  
  178. /*---------------------------------------------------------
  179.    Name: PerformLayout
  180. ---------------------------------------------------------*/
  181. function PANEL:PerformLayout()
  182.  
  183.         local Wide = self:GetWide()
  184.        
  185.         if ( self.VBar ) then
  186.        
  187.                 self.VBar:SetPos( self:GetWide() - 18, 2 )
  188.                 self.VBar:SetSize( 16, self:GetTall() - 4 )
  189.                 self.VBar:SetBarScale( self.pnlCanvas:GetTall() / self:GetTall() )
  190.        
  191.                 if ( self.VBar.Enabled ) then Wide = Wide - 20 end
  192.                
  193.         end
  194.  
  195.         self.pnlCanvas:SetPos( self.Padding, self.YOffset * -1 + self.Padding )
  196.         self.pnlCanvas:SetSize( Wide - self.Padding * 2, self.pnlCanvas:GetTall() )
  197.        
  198.         self:Rebuild()
  199.  
  200. end
  201.  
  202. function PANEL:OnMousePressed( mcode )
  203.  
  204.         if ( mcode == MOUSE_RIGHT ) then
  205.        
  206.                 if ( self.VBar ) then
  207.                         self.VBar:Grip()
  208.                 end
  209.                
  210.         end
  211.        
  212. end
  213.  
  214.  
  215. vgui.Register( "PanelList", PANEL, "Panel" )