102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
-- ------------------------------------------------------------------------------ --
 | 
						|
--                                TradeSkillMaster                                --
 | 
						|
--                          https://tradeskillmaster.com                          --
 | 
						|
--    All Rights Reserved - Detailed license information included with addon.     --
 | 
						|
-- ------------------------------------------------------------------------------ --
 | 
						|
 | 
						|
--- SelectionList UI Element Class.
 | 
						|
-- A selection list is a scrollable list of entries which allows selecting a single one. It is a subclass of the
 | 
						|
-- @{ScrollingTable} class.
 | 
						|
-- @classmod SelectionList
 | 
						|
 | 
						|
local _, TSM = ...
 | 
						|
local Theme = TSM.Include("Util.Theme")
 | 
						|
local SelectionList = TSM.Include("LibTSMClass").DefineClass("SelectionList", TSM.UI.ScrollingTable)
 | 
						|
local UIElements = TSM.Include("UI.UIElements")
 | 
						|
UIElements.Register(SelectionList)
 | 
						|
TSM.UI.SelectionList = SelectionList
 | 
						|
local private = {}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- ============================================================================
 | 
						|
-- Public Class Methods
 | 
						|
-- ============================================================================
 | 
						|
 | 
						|
function SelectionList.__init(self)
 | 
						|
	self.__super:__init()
 | 
						|
	self._selectedEntry = nil
 | 
						|
	self._onEntrySelectedHandler = nil
 | 
						|
end
 | 
						|
 | 
						|
function SelectionList.Acquire(self)
 | 
						|
	self._headerHidden = true
 | 
						|
	self.__super:Acquire()
 | 
						|
	self:SetSelectionDisabled(true)
 | 
						|
	self:GetScrollingTableInfo()
 | 
						|
		:NewColumn("text")
 | 
						|
			:SetFont("BODY_BODY2")
 | 
						|
			:SetJustifyH("LEFT")
 | 
						|
			:SetTextFunction(private.GetText)
 | 
						|
			:DisableHiding()
 | 
						|
			:Commit()
 | 
						|
		:Commit()
 | 
						|
end
 | 
						|
 | 
						|
function SelectionList.Release(self)
 | 
						|
	self._selectedEntry = nil
 | 
						|
	self._onEntrySelectedHandler = nil
 | 
						|
	self.__super:Release()
 | 
						|
end
 | 
						|
 | 
						|
--- Sets the entries.
 | 
						|
-- @tparam SelectionList self The selection list object
 | 
						|
-- @tparam table entries A list of entries
 | 
						|
-- @tparam string selectedEntry The selected entry
 | 
						|
-- @treturn SelectionList The selection list object
 | 
						|
function SelectionList.SetEntries(self, entries, selectedEntry)
 | 
						|
	wipe(self._data)
 | 
						|
	for _, entry in ipairs(entries) do
 | 
						|
		tinsert(self._data, entry)
 | 
						|
	end
 | 
						|
	self._selectedEntry = selectedEntry
 | 
						|
	return self
 | 
						|
end
 | 
						|
 | 
						|
--- Registers a script handler.
 | 
						|
-- @tparam SelectionList self The selection list object
 | 
						|
-- @tparam string script The script to register for (supported scripts: `OnEntrySelected`)
 | 
						|
-- @tparam function handler The script handler which will be called with the selection list object followed by any
 | 
						|
-- arguments to the script
 | 
						|
-- @treturn SelectionList The selection list object
 | 
						|
function SelectionList.SetScript(self, script, handler)
 | 
						|
	if script == "OnEntrySelected" then
 | 
						|
		self._onEntrySelectedHandler = handler
 | 
						|
	else
 | 
						|
		error("Unknown SelectionList script: "..tostring(script))
 | 
						|
	end
 | 
						|
	return self
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- ============================================================================
 | 
						|
-- Private Class Methods
 | 
						|
-- ============================================================================
 | 
						|
 | 
						|
function SelectionList._HandleRowClick(self, data)
 | 
						|
	if self._onEntrySelectedHandler then
 | 
						|
		self:_onEntrySelectedHandler(data)
 | 
						|
	end
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
-- ============================================================================
 | 
						|
-- Private Helper Functions
 | 
						|
-- ============================================================================
 | 
						|
 | 
						|
function private.GetText(self, data)
 | 
						|
	return Theme.GetColor(data == self._selectedEntry and "INDICATOR" or "TEXT"):ColorText(data)
 | 
						|
end
 |