initial commit
This commit is contained in:
117
Core/UI/Elements/SelectionGroupTree.lua
Normal file
117
Core/UI/Elements/SelectionGroupTree.lua
Normal file
@@ -0,0 +1,117 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster --
|
||||
-- https://tradeskillmaster.com --
|
||||
-- All Rights Reserved - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
--- SelectionGroupTree UI Element Class.
|
||||
-- A selection group tree allows for selecting a single group within the tree. It is a subclass of the @{GroupTree} class.
|
||||
-- @classmod SelectionGroupTree
|
||||
|
||||
local _, TSM = ...
|
||||
local Table = TSM.Include("Util.Table")
|
||||
local UIElements = TSM.Include("UI.UIElements")
|
||||
local SelectionGroupTree = TSM.Include("LibTSMClass").DefineClass("SelectionGroupTree", TSM.UI.GroupTree)
|
||||
UIElements.Register(SelectionGroupTree)
|
||||
TSM.UI.SelectionGroupTree = SelectionGroupTree
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Public Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function SelectionGroupTree.__init(self)
|
||||
self.__super:__init()
|
||||
|
||||
self._selectedGroup = TSM.CONST.ROOT_GROUP_PATH
|
||||
self._selectedGroupChangedHandler = nil
|
||||
end
|
||||
|
||||
function SelectionGroupTree.Release(self)
|
||||
self._selectedGroupChangedHandler = nil
|
||||
self._selectedGroup = TSM.CONST.ROOT_GROUP_PATH
|
||||
self.__super:Release()
|
||||
end
|
||||
|
||||
--- Sets the selected group path.
|
||||
-- @tparam SelectionGroupTree self The selection group tree object
|
||||
-- @tparam string groupPath The group path string to select
|
||||
-- @treturn SelectionGroupTree The application group tree object
|
||||
function SelectionGroupTree.SetSelection(self, groupPath)
|
||||
assert(groupPath)
|
||||
self._selectedGroup = groupPath
|
||||
wipe(self._contextTable.selected)
|
||||
self._contextTable.selected[groupPath] = true
|
||||
local index = Table.KeyByValue(self._data, groupPath)
|
||||
assert(index)
|
||||
-- set the scroll so that the selection is visible if necessary
|
||||
local rowHeight = self._rowHeight
|
||||
local firstVisibleIndex = ceil(self._vScrollValue / rowHeight) + 1
|
||||
local lastVisibleIndex = floor((self._vScrollValue + self:_GetDimension("HEIGHT")) / rowHeight)
|
||||
if lastVisibleIndex > firstVisibleIndex and (index < firstVisibleIndex or index > lastVisibleIndex) then
|
||||
self:_OnScrollValueChanged(min((index - 1) * rowHeight, self:_GetMaxScroll()))
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
--- Gets the selected group path.
|
||||
-- @tparam SelectionGroupTree self The selection group tree object
|
||||
-- @treturn string The currently selected group path string
|
||||
function SelectionGroupTree.GetSelection(self)
|
||||
return self._selectedGroup
|
||||
end
|
||||
|
||||
--- Sets the context table.
|
||||
-- This table can be used to preserve selection state across lifecycles of the application group tree and even WoW
|
||||
-- sessions if it's within the settings DB.
|
||||
-- @see GroupTree.SetContextTable
|
||||
-- @tparam SelectionGroupTree self The application group tree object
|
||||
-- @tparam table tbl The context table
|
||||
-- @tparam table defaultTbl The default table (required fields: `selected`, `collapsed`)
|
||||
-- @treturn SelectionGroupTree The application group tree object
|
||||
function SelectionGroupTree.SetContextTable(self, tbl, defaultTbl)
|
||||
assert(type(defaultTbl.selected) == "table")
|
||||
tbl.selected = tbl.selected or CopyTable(defaultTbl.selected)
|
||||
self.__super:SetContextTable(tbl, defaultTbl)
|
||||
return self
|
||||
end
|
||||
|
||||
--- Registers a script handler.
|
||||
-- @tparam SelectionGroupTree self The selection group tree object
|
||||
-- @tparam string script The script to register for (supported scripts: `OnGroupSelectionChanged`)
|
||||
-- @tparam function handler The script handler which will be called with the selection group tree object followed by any
|
||||
-- arguments to the script
|
||||
-- @treturn SelectionGroupTree The selection group tree object
|
||||
function SelectionGroupTree.SetScript(self, script, handler)
|
||||
if script == "OnGroupSelectionChanged" then
|
||||
self._selectedGroupChangedHandler = handler
|
||||
else
|
||||
error("Unknown SelectionGroupTree script: "..tostring(script))
|
||||
end
|
||||
return self
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- ============================================================================
|
||||
-- Private Class Methods
|
||||
-- ============================================================================
|
||||
|
||||
function SelectionGroupTree._HandleRowClick(self, data, mouseButton)
|
||||
if mouseButton == "RightButton" then
|
||||
self.__super:_HandleRowClick(data, mouseButton)
|
||||
return
|
||||
end
|
||||
self._selectedGroup = data
|
||||
wipe(self._contextTable.selected)
|
||||
self._contextTable.selected[data] = true
|
||||
self:Draw()
|
||||
if self._selectedGroupChangedHandler then
|
||||
self:_selectedGroupChangedHandler(data)
|
||||
end
|
||||
end
|
||||
|
||||
function SelectionGroupTree._IsSelected(self, data)
|
||||
return data == self._selectedGroup
|
||||
end
|
||||
Reference in New Issue
Block a user