206 lines
		
	
	
		
			No EOL
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			No EOL
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| UIMenuListItem = setmetatable({}, UIMenuListItem)
 | |
| UIMenuListItem.__index = UIMenuListItem
 | |
| UIMenuListItem.__call = function() return "UIMenuItem", "UIMenuListItem" end
 | |
| 
 | |
| function UIMenuListItem.New(Text, Items, Index, Description)
 | |
| 	if type(Items) ~= "table" then Items = {} end
 | |
| 	if Index == 0 then Index = 1 end
 | |
| 	local _UIMenuListItem = {
 | |
| 		Base = UIMenuItem.New(Text or "", Description or ""),
 | |
| 		Items = Items,
 | |
| 		LeftArrow = Sprite.New("commonmenu", "arrowleft", 110, 105, 30, 30),
 | |
| 		RightArrow = Sprite.New("commonmenu", "arrowright", 280, 105, 30, 30),
 | |
| 		ItemText = UIResText.New("", 290, 104, 0.35, 255, 255, 255, 255, 0, "Right"),
 | |
| 		_Index = tonumber(Index) or 1,
 | |
| 		Panels = {},
 | |
| 		OnListChanged = function(menu, item, newindex) end,
 | |
| 		OnListSelected = function(menu, item, newindex) end,
 | |
| 	}
 | |
| 	return setmetatable(_UIMenuListItem, UIMenuListItem)
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:SetParentMenu(Menu)
 | |
| 	if Menu ~= nil and Menu() == "UIMenu" then
 | |
| 		self.Base.ParentMenu = Menu
 | |
| 	else
 | |
| 		return self.Base.ParentMenu
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Position(Y)
 | |
| 	if tonumber(Y) then
 | |
| 		self.LeftArrow:Position(300 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y)
 | |
| 		self.RightArrow:Position(400 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y)
 | |
| 		self.ItemText:Position(300 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, 147 + Y + self.Base._Offset.Y)
 | |
| 		self.Base:Position(Y)
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Selected(bool)
 | |
| 	if bool ~= nil then
 | |
| 		self.Base._Selected = tobool(bool)
 | |
| 	else
 | |
| 		return self.Base._Selected
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Hovered(bool)
 | |
| 	if bool ~= nil then
 | |
| 		self.Base._Hovered = tobool(bool)
 | |
| 	else
 | |
| 		return self.Base._Hovered
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Enabled(bool)
 | |
| 	if bool ~= nil then
 | |
| 		self.Base._Enabled = tobool(bool)
 | |
| 	else
 | |
| 		return self.Base._Enabled
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Description(str)
 | |
| 	if tostring(str) and str ~= nil then
 | |
| 		self.Base._Description = tostring(str)
 | |
| 	else
 | |
| 		return self.Base._Description
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Offset(X, Y)
 | |
| 	if tonumber(X) or tonumber(Y) then
 | |
| 		if tonumber(X) then
 | |
| 			self.Base._Offset.X = tonumber(X)
 | |
| 		end
 | |
| 		if tonumber(Y) then
 | |
| 			self.Base._Offset.Y = tonumber(Y)
 | |
| 		end
 | |
| 	else
 | |
| 		return self.Base._Offset
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Text(Text)
 | |
| 	if tostring(Text) and Text ~= nil then
 | |
| 		self.Base.Text:Text(tostring(Text))
 | |
| 	else
 | |
| 		return self.Base.Text:Text()
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Index(Index)
 | |
| 	if tonumber(Index) then
 | |
| 		if tonumber(Index) > #self.Items then
 | |
| 			self._Index = 1
 | |
| 		elseif tonumber(Index) < 1 then
 | |
| 			self._Index = #self.Items
 | |
| 		else
 | |
| 			self._Index = tonumber(Index)
 | |
| 		end
 | |
| 	else
 | |
| 		return self._Index
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:ItemToIndex(Item)
 | |
| 	for i = 1, #self.Items do
 | |
| 		if type(Item) == type(self.Items[i]) and Item == self.Items[i] then
 | |
| 			return i
 | |
| 		elseif type(self.Items[i]) == "table" and (type(Item) == type(self.Items[i].Name) or type(Item) == type(self.Items[i].Value)) and (Item == self.Items[i].Name or Item == self.Items[i].Value) then
 | |
| 			return i
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:IndexToItem(Index)
 | |
| 	if tonumber(Index) then
 | |
| 		if tonumber(Index) == 0 then Index = 1 end
 | |
| 		if self.Items[tonumber(Index)] then
 | |
| 			return self.Items[tonumber(Index)]
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:SetLeftBadge()
 | |
| 	error("This item does not support badges")
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:SetRightBadge()
 | |
| 	error("This item does not support badges")
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:RightLabel()
 | |
| 	error("This item does not support a right label")
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:AddPanel(Panel)
 | |
| 	if Panel() == "UIMenuPanel" then
 | |
| 		table.insert(self.Panels, Panel)
 | |
| 		Panel:SetParentItem(self)
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:RemovePanelAt(Index)
 | |
| 	if tonumber(Index) then
 | |
| 		if self.Panels[Index] then
 | |
| 			table.remove(self.Panels, tonumber(Index))
 | |
| 		end
 | |
| 	end
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:FindPanelIndex(Panel)
 | |
| 	if Panel() == "UIMenuPanel" then
 | |
| 		for Index = 1, #self.Panels do
 | |
| 			if self.Panels[Index] == Panel then
 | |
| 				return Index
 | |
| 			end
 | |
| 		end
 | |
| 	end
 | |
| 	return nil
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:FindPanelItem()
 | |
| 	for Index = #self.Items, 1, -1 do
 | |
| 		if self.Items[Index].Panel then
 | |
| 			return Index
 | |
| 		end
 | |
| 	end
 | |
| 	return nil
 | |
| end
 | |
| 
 | |
| function UIMenuListItem:Draw()
 | |
| 	self.Base:Draw()
 | |
| 
 | |
| 	if self:Enabled() then
 | |
| 		if self:Selected() then
 | |
| 			self.ItemText:Colour(0, 0, 0, 255)
 | |
| 			self.LeftArrow:Colour(0, 0, 0, 255)
 | |
| 			self.RightArrow:Colour(0, 0, 0, 255)
 | |
| 		else
 | |
| 			self.ItemText:Colour(245, 245, 245, 255)
 | |
| 			self.LeftArrow:Colour(245, 245, 245, 255)
 | |
| 			self.RightArrow:Colour(245, 245, 245, 255)
 | |
| 		end
 | |
| 	else
 | |
| 		self.ItemText:Colour(163, 159, 148, 255)
 | |
| 		self.LeftArrow:Colour(163, 159, 148, 255)
 | |
| 		self.RightArrow:Colour(163, 159, 148, 255)
 | |
| 	end
 | |
| 
 | |
| 	local Text = (type(self.Items[self._Index]) == "table") and tostring(self.Items[self._Index].Name) or tostring(self.Items[self._Index])
 | |
| 	local Offset = MeasureStringWidth(Text, 0, 0.35)
 | |
| 
 | |
| 	self.ItemText:Text(Text)
 | |
| 	self.LeftArrow:Position(378 - Offset + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.LeftArrow.Y)
 | |
| 
 | |
| 	if self:Selected() then
 | |
| 		self.LeftArrow:Draw()
 | |
| 		self.RightArrow:Draw()
 | |
| 		self.ItemText:Position(403 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.ItemText.Y)
 | |
| 	else
 | |
| 		self.ItemText:Position(418 + self.Base._Offset.X + self.Base.ParentMenu.WidthOffset, self.ItemText.Y)
 | |
| 	end
 | |
| 
 | |
| 	self.ItemText:Draw()
 | |
| end | 
