Guest User

cl_categories

a guest
Apr 24th, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 KB | None | 0 0
  1. /*---------------------------------------------------------------------------
  2. Category header
  3. ---------------------------------------------------------------------------*/
  4. local PANEL = {}
  5.  
  6. function PANEL:Init()
  7. self:SetContentAlignment(4)
  8. self:SetTextInset(5, 0)
  9. self:SetFont("DarkRPHUD2")
  10. end
  11.  
  12. function PANEL:Paint(w, h)
  13. if not self.category then return end
  14. draw.RoundedBox(4, 0, 0, w, h, self.category.color)
  15. end
  16.  
  17. function PANEL:UpdateColours() end
  18.  
  19. function PANEL:SetCategory(cat)
  20. self.category = cat
  21. self:SetText(cat.name)
  22. end
  23.  
  24. derma.DefineControl("F4MenuCategoryHeader", "", PANEL, "DCategoryHeader")
  25.  
  26. /*---------------------------------------------------------------------------
  27. Contents of category headers
  28. ---------------------------------------------------------------------------*/
  29. PANEL = {}
  30.  
  31. function PANEL:Init()
  32. self:EnableVerticalScrollbar()
  33. end
  34.  
  35. function PANEL:Rebuild()
  36. if #self.Items == 0 then return end
  37.  
  38. local height = 0
  39. local k = 0
  40. for i, item in pairs(self.Items) do
  41. if not item:IsVisible() then continue end
  42. k = k + 1
  43. item:SetWide(self:GetWide() - 10)
  44. item:SetPos(5, height)
  45. height = height + item:GetTall() + 2
  46. end
  47. self:GetCanvas():SetTall(height)
  48. self:SetTall(height)
  49. end
  50.  
  51.  
  52. function PANEL:Refresh()
  53. for k,v in pairs(self.Items) do
  54. if v.Refresh then v:Refresh() end
  55. end
  56. self:InvalidateLayout()
  57. end
  58.  
  59. derma.DefineControl("F4MenuCategoryContents", "", PANEL, "DPanelList")
  60.  
  61. /*---------------------------------------------------------------------------
  62. Category panel
  63. ---------------------------------------------------------------------------*/
  64. PANEL = {}
  65.  
  66. function PANEL:Init()
  67. if self.Header then self.Header:Remove() end
  68. self.Header = vgui.Create("F4MenuCategoryHeader", self)
  69. self.Header:Dock(TOP)
  70. self.Header:SetSize(20, 40)
  71. self:SetSize(16, 16)
  72. self:SetExpanded(true)
  73. self:SetMouseInputEnabled(true)
  74. self:SetAnimTime(0.2)
  75. self.animSlide = Derma_Anim("Anim", self, self.AnimSlide)
  76. self:SetPaintBackgroundEnabled(false)
  77. self:DockMargin(0, 0, 0, 10)
  78. self:DockPadding(0, 0, 0, 10)
  79.  
  80. self:SetContents(vgui.Create("F4MenuCategoryContents", self))
  81. end
  82.  
  83. function PANEL:Paint()
  84.  
  85. end
  86.  
  87. function PANEL:SetButtonFactory(f)
  88. self.buttonFactory = f
  89. end
  90.  
  91. function PANEL:SetCategory(cat)
  92. self.category = cat
  93. self.Header:SetCategory(cat)
  94. self:Fill()
  95. self:SetExpanded(cat.startExpanded)
  96. end
  97.  
  98. function PANEL:SetPerformLayout(f)
  99. self.Contents.PerformLayout = function()
  100. f(self.Contents)
  101. self.Contents.BaseClass.PerformLayout(self.Contents)
  102. end
  103. end
  104.  
  105. function PANEL:GetItems()
  106. return self.Contents:GetItems()
  107. end
  108.  
  109. function PANEL:Fill()
  110. self.Contents:Clear(true)
  111. for k, v in ipairs(self.category.members) do
  112. local pnl = self.buttonFactory(v, self.Contents)
  113. self.Contents:AddItem(pnl)
  114. end
  115.  
  116. self:InvalidateLayout(true)
  117. end
  118.  
  119. function PANEL:Refresh()
  120. if IsValid(self.Contents) then self.Contents:Refresh() end
  121.  
  122. if not self.category then return end
  123. local canSee = #self.category.members == 0 or isfunction(self.category.canSee) and not self.category.canSee(LocalPlayer())
  124. self:SetVisible(not canSee)
  125.  
  126. self:InvalidateLayout()
  127. end
  128.  
  129. derma.DefineControl("F4MenuCategory", "", PANEL, "DCollapsibleCategory")
Add Comment
Please, Sign In to add comment