Advertisement
Guest User

Untitled

a guest
Jul 15th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1. /*---------------------------------------------------------------------------
  2. F4 tab
  3. ---------------------------------------------------------------------------*/
  4. local PANEL = {}
  5.  
  6. function PANEL:Init()
  7. self.BaseClass.Init(self)
  8. self:SetFont("DarkRPHUD2")
  9. end
  10.  
  11. local gray = Color(110, 110, 110, 255)
  12. function PANEL:Paint(w, h)
  13. local drawFunc = self:GetSkin().tex.TabT_Inactive
  14.  
  15. if self:GetDisabled() then
  16. drawFunc(0, 0, w, h, gray)
  17. return
  18. end
  19. self.BaseClass.Paint(self, w, h)
  20. end
  21.  
  22. function PANEL:ApplySchemeSettings()
  23. local ExtraInset = 10
  24.  
  25. if self.Image then
  26. ExtraInset = ExtraInset + self.Image:GetWide()
  27. end
  28.  
  29. local Active = self:GetPropertySheet():GetActiveTab() == self
  30.  
  31. self:SetTextInset(ExtraInset, 4)
  32. local w, h = self:GetContentSize()
  33. h = Active and 38 or 30
  34.  
  35. self:SetSize(w + 30, h)
  36.  
  37. DLabel.ApplySchemeSettings(self)
  38. end
  39.  
  40. derma.DefineControl("F4MenuTab", "", PANEL, "DTab")
  41.  
  42.  
  43.  
  44. /*---------------------------------------------------------------------------
  45. F4 tab sheet
  46. ---------------------------------------------------------------------------*/
  47.  
  48. PANEL = {}
  49.  
  50. local mouseX, mouseY = ScrW() / 2, ScrH() / 2
  51. function PANEL:Init()
  52. self.F4Down = true
  53.  
  54. self:StretchToParent(100, 100, 100, 100)
  55. self:Center()
  56. self:SetVisible(true)
  57. self:MakePopup()
  58. self:SetupCloseButton(fn.Curry(self.Hide, 2)(self))
  59. end
  60.  
  61. function PANEL:SetupCloseButton(func)
  62. self.CloseButton = self.tabScroller:Add("DButton")
  63. self.CloseButton:SetText("")
  64. self.CloseButton.DoClick = func
  65. self.CloseButton.Paint = function(panel, w, h) derma.SkinHook("Paint", "WindowCloseButton", panel, w, h) end
  66. self.CloseButton:Dock(RIGHT)
  67. self.CloseButton:DockMargin(0, 0, 0, 8)
  68. self.CloseButton:SetSize(32, 32)
  69. end
  70.  
  71. function PANEL:AddSheet(label, panel, material, NoStretchX, NoStretchY, Tooltip)
  72. if not IsValid(panel) then return end
  73.  
  74. local sheet = {}
  75.  
  76. sheet.Name = label
  77.  
  78. sheet.Tab = vgui.Create("F4MenuTab", self)
  79. sheet.Tab:SetTooltip(Tooltip)
  80. sheet.Tab:Setup(label, self, panel, material)
  81.  
  82. sheet.Panel = panel
  83. sheet.Panel.tab = sheet.Tab
  84. sheet.Panel.NoStretchX = NoStretchX
  85. sheet.Panel.NoStretchY = NoStretchY
  86. sheet.Panel:SetPos(self:GetPadding(), sheet.Tab:GetTall() + 8 + self:GetPadding())
  87. sheet.Panel:SetVisible(false)
  88. if sheet.Panel.shouldHide and sheet.Panel:shouldHide() then sheet.Tab:SetDisabled(true) end
  89.  
  90. panel:SetParent(self)
  91.  
  92. table.insert(self.Items, sheet)
  93. local index = #self.Items
  94.  
  95. if not self:GetActiveTab() then
  96. self:SetActiveTab(sheet.Tab)
  97. sheet.Panel:SetVisible(true)
  98. end
  99.  
  100. self.tabScroller:AddPanel(sheet.Tab)
  101.  
  102. if panel.Refresh then panel:Refresh() end
  103.  
  104. return sheet, index
  105. end
  106.  
  107. local F4Bind
  108. function PANEL:Think()
  109. self.CloseButton:SetVisible(not self.tabScroller.btnRight:IsVisible())
  110.  
  111. F4Bind = F4Bind or input.KeyNameToNumber(input.LookupBinding("gm_showspare2"))
  112. if not F4Bind then return end
  113.  
  114. if self.F4Down and not input.IsKeyDown(F4Bind) then
  115. self.F4Down = false
  116. return
  117. elseif not self.F4Down and input.IsKeyDown(F4Bind) then
  118. self.F4Down = true
  119. self:Hide()
  120. end
  121. end
  122.  
  123. hook.Add("PlayerBindPress", "DarkRPF4Bind", function(ply, bind, pressed)
  124. if string.find(bind, "gm_showspare2", 1, true) then
  125. F4Bind = input.KeyNameToNumber(input.LookupBinding(bind))
  126. end
  127. end)
  128.  
  129. function PANEL:Refresh()
  130. for k,v in pairs(self.Items) do
  131. if v.Panel.shouldHide and v.Panel:shouldHide() then v.Tab:SetDisabled(true)
  132. else v.Tab:SetDisabled(false) end
  133. if v.Panel.Refresh then v.Panel:Refresh() end
  134. end
  135. end
  136.  
  137. function PANEL:Show()
  138. self:Refresh()
  139. if #self.Items > 0 and self:GetActiveTab() and self:GetActiveTab():GetDisabled() then
  140. self:SetActiveTab(self.Items[1].Tab) --Jobs
  141. end
  142. self.F4Down = true
  143. self:SetVisible(true)
  144. gui.SetMousePos(mouseX, mouseY)
  145. end
  146.  
  147. function PANEL:Hide()
  148. mouseX, mouseY = gui.MousePos()
  149. self:SetVisible(false)
  150. end
  151.  
  152. function PANEL:Close()
  153. self:Hide()
  154. end
  155.  
  156. function PANEL:createTab(name, panel)
  157. local sheet, index = self:AddSheet(name, panel)
  158. return index, sheet
  159. end
  160.  
  161. function PANEL:removeTab(name)
  162. for k, v in pairs(self.Items) do
  163. if v.Tab:GetText() ~= name then continue end
  164. return self:CloseTab(v.Tab, true)
  165. end
  166. end
  167.  
  168. function PANEL:switchTabOrder(tab1, tab2)
  169. self.Items[tab1], self.Items[tab2] = self.Items[tab2], self.Items[tab1]
  170. self.tabScroller.Panels[tab1], self.tabScroller.Panels[tab2] = self.tabScroller.Panels[tab2], self.tabScroller.Panels[tab1]
  171. self.tabScroller:InvalidateLayout(true)
  172. end
  173.  
  174.  
  175. function PANEL:generateTabs()
  176. DarkRP.hooks.F4MenuTabs()
  177. hook.Call("F4MenuTabs")
  178. // self:SetSkin(GAMEMODE.Config.DarkRPSkin)
  179. end
  180.  
  181. derma.DefineControl("F4EditablePropertySheet", "", vgui.GetControlTable("DPropertySheet"), "EditablePanel")
  182. derma.DefineControl("F4MenuFrame", "", PANEL, "F4EditablePropertySheet")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement