-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLabeled.lua
90 lines (84 loc) · 3.56 KB
/
Labeled.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
local LabeledObject = {}
LabeledObject.__index = LabeledObject
local GV = require(script.Parent.Parent.PluginGlobalVariables)
local util = require(GV.MiscDir.GUIUtil)
local TextboxMod = require(GV.ObjectsDir.Textbox)
local GUIObject = require(GV.ObjectsDir.GUIObject)
setmetatable(LabeledObject,GUIObject)
function LabeledObject:SetDisabled(State)
self.Disabled = State
for _, v in pairs(self.Objects) do v:SetDisabled(State) end
if self.Disabled then
self.Label.TextTransparency = 0.5
else
self.Label.TextTransparency = 0
end
end
function LabeledObject:ToggleDisable()
self:SetDisabled(not self.Disabled)
end
function LabeledObject:AddObject(Object, Name, Size)
Object:Move(self.Content, true)
Size = util.GetScale(Size)
if not Size then Size = UDim.new(1-self.TotalUsedScale, -self.TotalUsedOffset) end
Object.MainMovable.Size = UDim2.new(Size.Scale,Size.Offset,1,0)
Object.MainMovable.Position = UDim2.new(self.TotalUsedScale,self.TotalUsedOffset,0,0)
self.TotalUsedScale += Size.Scale
self.TotalUsedOffset += Size.Offset
self[Name] = Object
self.Objects[#self.Objects+1] = Object
end
-- Textbox, LabelSize, Objects
function LabeledObject.new(Arguments, Parent)
local self = GUIObject.new(Arguments, Parent)
setmetatable(self,LabeledObject)
self.Objects = {}
self.TotalUsedScale = 0
self.TotalUsedOffset = 0
self.MainFrame = Instance.new("Frame", self.Parent)
self.MainFrame.BackgroundTransparency = 1
self.MainFrame.Name = "MainFrame"
self.MainLayout = Instance.new("UIListLayout", self.MainFrame)
self.MainLayout.HorizontalAlignment = Enum.HorizontalAlignment.Left
self.MainLayout.SortOrder = Enum.SortOrder.LayoutOrder
self.MainLayout.FillDirection = Enum.FillDirection.Horizontal
self.MainPadding = Instance.new("UIPadding", self.MainFrame)
self.MainPadding.PaddingBottom, self.MainPadding.PaddingLeft, self.MainPadding.PaddingRight, self.MainPadding.PaddingTop = UDim.new(0,2), UDim.new(0,6), UDim.new(0,0), UDim.new(0,2)
local Textbox = self.Arguments.Textbox or self.Arguments.Text
if type(Textbox) == "string" then
self.TextboxTable = TextboxMod.new({Text = Textbox, Alignment = Enum.TextXAlignment.Left, TextSize = 14}, self.MainFrame)
else
self.TextboxTable = Textbox
Textbox:Move(self.MainFrame, true)
end
self.Label = self.TextboxTable.Textbox
self.Content = Instance.new("Frame", self.MainFrame)
self.Content.Name = "Content"
self.Content.BackgroundTransparency = 1
local LabelSize = util.GetScale(self.Arguments.LabelSize)
if LabelSize then
self.Label.Size = UDim2.new(LabelSize.Scale, LabelSize.Offset, 0, 20)
self.Content.Size = UDim2.new(1-LabelSize.Scale, -LabelSize.Offset, 0, 20)
else
local function sync()
self.Label.Size = UDim2.new(0,self.Label.TextBounds.X+self.Label.TextSize, 1, 0)
self.Content.Size = UDim2.new(1,-(self.Label.TextBounds.X+self.Label.TextSize), 0, 20)
end
self.Label.Changed:Connect(function(p)
if p == "TextBounds" then sync() end
end)
end
self.TotalUsedScale = 0
local Objects = self.Arguments.Objects or self.Arguments.Object
if type(Objects) == "table" and Objects[1] and type(Objects[1] == "table") then
for _, v in pairs(Objects) do
self:AddObject(v.Object, v.Name, v.Size)
end
else
self:AddObject(Objects, "Object")
end
self:SetDisabled(self.Arguments.Disabled)
self.MainMovable = self.MainFrame
return self
end
return LabeledObject