added sort btn & configs. to enable or disable

This commit is contained in:
Matthew Rodrigues
2022-10-26 09:43:00 +01:00
parent 4e3aff9d89
commit e3c3e45ad0
8 changed files with 489 additions and 180 deletions
+2 -1
View File
@@ -9,11 +9,12 @@
<Script file="components\itemFrame.lua"/>
<Script file="components\moneyFrame.lua"/>
<Script file="components\optionsToggle.lua"/>
<Script file="components\sortBtn.lua"/>
<Script file="components\playerSelector.lua"/>
<Script file="components\savedSettings.lua"/>
<Script file="components\searchFrame.lua"/>
<Script file="components\searchToggle.lua"/>
<Script file="components\settings.lua"/>
<Script file="components\titleFrame.lua"/>
<Script file="components\savedFrameSettings.lua"/>
<Script file="components\savedFrameSettings.lua"/>
</Ui>
+81 -54
View File
@@ -21,12 +21,12 @@ function Frame:New(frameID)
f:SetMovable(true)
f:EnableMouse(true)
f:SetBackdrop{
bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
edgeSize = 16,
tile = true, tileSize = 16,
insets = {left = 4, right = 4, top = 4, bottom = 4}
f:SetBackdrop {
bgFile = [[Interface\ChatFrame\ChatFrameBackground]],
edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
edgeSize = 16,
tile = true, tileSize = 16,
insets = { left = 4, right = 4, top = 4, bottom = 4 }
}
f:SetScript('OnShow', f.OnShow)
@@ -40,7 +40,6 @@ function Frame:New(frameID)
return f
end
--[[
Frame Messages
--]]
@@ -68,6 +67,7 @@ function Frame:UpdateEvents()
self:RegisterMessage('MONEY_FRAME_ENABLE_UPDATE')
self:RegisterMessage('DATABROKER_FRAME_ENABLE_UPDATE')
self:RegisterMessage('SEARCH_TOGGLE_ENABLE_UPDATE')
self:RegisterMessage('SORT_BTN_ENABLE_UPDATE')
self:RegisterMessage('OPTIONS_TOGGLE_ENABLE_UPDATE')
end
end
@@ -175,12 +175,17 @@ function Frame:SEARCH_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
end
end
function Frame:OPTIONS_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
function Frame:SORT_BTN_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:Layout()
end
end
function Frame:OPTIONS_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:Layout()
end
end
--[[
Frame Events
@@ -218,7 +223,6 @@ function Frame:IsBankFrame()
return self:GetFrameID() == 'bank'
end
--[[
Update Methods
--]]
@@ -243,7 +247,6 @@ function Frame:UpdateLook()
self:Layout()
end
--[[
Frame Scale
--]]
@@ -258,7 +261,7 @@ function Frame:UpdateScale()
local ratio = newScale / oldScale
self:SetScale(newScale)
self:GetSettings():SetPosition(point, x/ratio, y/ratio)
self:GetSettings():SetPosition(point, x / ratio, y / ratio)
end
end
@@ -271,7 +274,6 @@ function Frame:Rescale()
self:SetScale(self:GetFrameScale())
end
--[[
Frame Opacity
--]]
@@ -284,7 +286,6 @@ function Frame:GetFrameOpacity()
return self:GetSettings():GetOpacity()
end
--[[
Frame Position
--]]
@@ -305,24 +306,25 @@ function Frame:GetRelativePosition()
local s = self:GetScale()
if not (x and y) then return end
w = w/s h = h/s
w = w / s
h = h / s
local dx, dy
local hHalf = (x > w/2) and 'RIGHT' or 'LEFT'
local hHalf = (x > w / 2) and 'RIGHT' or 'LEFT'
if hHalf == 'RIGHT' then
dx = self:GetRight() - w
else
dx = self:GetLeft()
end
local vHalf = (y > h/2) and 'TOP' or 'BOTTOM'
local vHalf = (y > h / 2) and 'TOP' or 'BOTTOM'
if vHalf == 'TOP' then
dy = self:GetTop() - h
else
dy = self:GetBottom()
end
return vHalf..hHalf, dx, dy
return vHalf .. hHalf, dx, dy
end
function Frame:UpdatePosition()
@@ -334,7 +336,6 @@ function Frame:GetFramePosition()
return self:GetSettings():GetPosition()
end
--[[
Frame Color
--]]
@@ -357,7 +358,6 @@ function Frame:GetFrameBackdropBorderColor()
return self:GetSettings():GetBorderColor()
end
--[[
Frame Visibility
--]]
@@ -378,7 +378,6 @@ function Frame:HideFrame()
self:GetSettings():Hide()
end
--[[
Frame Layer/Strata
--]]
@@ -412,7 +411,6 @@ function Frame:GetFrameLayer()
return self:GetSettings():GetLayer()
end
--[[
Layout Methods
--]]
@@ -438,6 +436,10 @@ function Frame:Layout()
width = width + w + 24 --append spacing between close button and this
height = height + 20
local w, h = self:PlaceSortBtn()
width = width + w + 24 --append spacing between close button and this
height = height + 20
local w, h = self:PlaceTitleFrame()
width = width + w
@@ -468,8 +470,7 @@ function Frame:Layout()
self:SavePosition()
end
--[[ Menu Button Placement ]]--
--[[ Menu Button Placement ]] --
function Frame:PlaceMenuButtons()
local menuButtons = self.menuButtons or {}
@@ -501,7 +502,7 @@ function Frame:PlaceMenuButtons()
if i == 1 then
button:SetPoint('TOPLEFT', self, 'TOPLEFT', 8, -8)
else
button:SetPoint('TOPLEFT', menuButtons[i-1], 'TOPRIGHT', 4, 0)
button:SetPoint('TOPLEFT', menuButtons[i - 1], 'TOPRIGHT', 4, 0)
end
button:Show()
end
@@ -520,13 +521,12 @@ function Frame:GetMenuButtons()
return self.menuButtons
end
--[[
Frame Components
--]]
--[[ close button ]]--
--[[ close button ]] --
local function CloseButton_OnClick(self)
self:GetParent():GetSettings():Hide(true) --force hide the frame
@@ -552,8 +552,7 @@ function Frame:PlaceCloseButton()
return 20, 20 --make the same size as the other menu buttons
end
--[[ search frame ]]--
--[[ search frame ]] --
function Frame:CreateSearchFrame()
local f = Bagnon.SearchFrame:New(self:GetFrameID(), self)
@@ -576,7 +575,9 @@ function Frame:PlaceSearchFrame()
frame:SetPoint('TOPLEFT', self, 'TOPLEFT', 8, -8)
end
if self:HasOptionsToggle() then
if self:HasSortBtn() then
frame:SetPoint('RIGHT', self:GetSortBtn(), 'LEFT', -2, 0)
elseif self:HasOptionsToggle() then
frame:SetPoint('RIGHT', self:GetOptionsToggle(), 'LEFT', -2, 0)
else
frame:SetPoint('RIGHT', self:GetCloseButton(), 'LEFT', -2, 0)
@@ -587,11 +588,10 @@ function Frame:PlaceSearchFrame()
return frame:GetWidth(), frame:GetHeight()
end
--[[ search toggle ]]--
--[[ search toggle ]] --
function Frame:CreateSearchToggle()
local toggle = Bagnon.SearchToggle:New(self:GetFrameID(), self)
local toggle = Bagnon.SearchToggle:New(self:GetFrameID(), self)
self.searchToggle = toggle
return toggle
end
@@ -604,11 +604,10 @@ function Frame:HasSearchToggle()
return self:GetSettings():HasSearchToggle()
end
--[[ bag frame ]]--
--[[ bag frame ]] --
function Frame:CreateBagFrame()
local f = Bagnon.BagFrame:New(self:GetFrameID(), self)
local f = Bagnon.BagFrame:New(self:GetFrameID(), self)
self.bagFrame = f
return f
end
@@ -655,8 +654,7 @@ function Frame:PlaceBagFrame()
return 0, 0
end
--[[ bag toggle ]]--
--[[ bag toggle ]] --
function Frame:CreateBagToggle()
local toggle = Bagnon.BagToggle:New(self:GetFrameID(), self)
@@ -673,8 +671,7 @@ function Frame:HasBagToggle()
return true
end
--[[ title frame ]]--
--[[ title frame ]] --
function Frame:CreateTitleFrame()
local f = Bagnon.TitleFrame:New(self:GetFrameID(), self)
@@ -702,18 +699,20 @@ function Frame:PlaceTitleFrame()
h = 20
end
if self:HasOptionsToggle() then
frame:SetPoint('RIGHT', self:GetOptionsToggle(), 'LEFT', -4, 0)
if self:HasSortBtn() then
frame:SetPoint('RIGHT', self:GetSortBtn(), 'LEFT', -2, 0)
elseif self:HasOptionsToggle() then
frame:SetPoint('RIGHT', self:GetOptionsToggle(), 'LEFT', -2, 0)
else
frame:SetPoint('RIGHT', self:GetCloseButton(), 'LEFT', -4, 0)
frame:SetPoint('RIGHT', self:GetCloseButton(), 'LEFT', -2, 0)
end
frame:SetHeight(20)
return w, h
end
--[[ item frame ]]--
--[[ item frame ]] --
function Frame:CreateItemFrame()
local f = Bagnon.ItemFrame:New(self:GetFrameID(), self)
@@ -744,8 +743,7 @@ function Frame:PlaceItemFrame()
return frame:GetWidth() - 2, frame:GetHeight()
end
--[[ player selector ]]--
--[[ player selector ]] --
function Frame:GetPlayerSelector()
return self.playerSelector
@@ -761,8 +759,7 @@ function Frame:HasPlayerSelector()
return BagnonDB and true or false
end
--[[ money frame ]]--
--[[ money frame ]] --
function Frame:GetMoneyFrame()
return self.moneyFrame
@@ -794,9 +791,7 @@ function Frame:PlaceMoneyFrame()
return 0, 0
end
--[[ libdatabroker display ]]--
--[[ libdatabroker display ]] --
function Frame:GetBrokerDisplay()
return self.brokerDisplay
@@ -835,8 +830,41 @@ function Frame:PlaceBrokerDisplayFrame()
return 0, 0
end
--[[ sort bags ]] --
--[[ options toggle ]]--
function Frame:GetSortBtn()
return self.sortBtn
end
function Frame:CreateSortBtn()
local f = Bagnon.SortBtn:New(self:GetFrameID(), self)
self.sortBtn = f
return f
end
function Frame:PlaceSortBtn()
if self:HasSortBtn() then
local toggle = self:GetSortBtn() or self:CreateSortBtn()
toggle:ClearAllPoints()
toggle:SetPoint('TOPRIGHT', self, 'TOPRIGHT', -58, -8)
toggle:Show()
return toggle:GetWidth(), toggle:GetHeight()
end
local toggle = self:GetSortBtn()
if toggle then
toggle:Hide()
end
return 0, 0
end
function Frame:HasSortBtn()
local name, title, notes, enabled = GetAddOnInfo('Bagnon_Config')
return enabled and self:GetSettings():HasSortBtn()
end
--[[ options toggle ]] --
function Frame:GetOptionsToggle()
return self.optionsToggle
@@ -870,7 +898,6 @@ function Frame:HasOptionsToggle()
return enabled and self:GetSettings():HasOptionsToggle()
end
--[[
Frame Settings Access
--]]
@@ -881,4 +908,4 @@ end
function Frame:GetSettings()
return Bagnon.FrameSettings:Get(self:GetFrameID())
end
end
+39 -41
View File
@@ -10,26 +10,25 @@ Bagnon.FrameSettings = FrameSettings
--[[---------------------------------------------------------------------------
Constructorish
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
FrameSettings.mt = {
__index = FrameSettings
}
FrameSettings.objects = setmetatable({}, {__index = function(tbl, id)
local obj = setmetatable({frameID = id, shown = 0}, FrameSettings.mt)
FrameSettings.objects = setmetatable({}, { __index = function(tbl, id)
local obj = setmetatable({ frameID = id, shown = 0 }, FrameSettings.mt)
tbl[id] = obj
return obj
end})
end })
function FrameSettings:Get(id)
return self.objects[id]
end
--[[---------------------------------------------------------------------------
Accessor Methods
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
function FrameSettings:GetID()
@@ -42,22 +41,20 @@ function FrameSettings:GetDB()
return db
end
--[[---------------------------------------------------------------------------
Message Passing
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
function FrameSettings:SendMessage(msg, ...)
Bagnon.Callbacks:SendMessage(msg, self:GetID(), ...)
end
--[[---------------------------------------------------------------------------
Update Methods
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
--[[ Frame Visibility ]]--
--[[ Frame Visibility ]] --
--the logic here is a little wacky, since we deal with auto open/close events
--if a frame was manually opened, then it should only be closable manually
@@ -94,14 +91,13 @@ function FrameSettings:IsShown()
return (self.shown or 0) > 0
end
--[[ Frame Position ]]--
--[[ Frame Position ]] --
--position
function FrameSettings:SetPosition(point, x, y)
local oPoint, oX, oY = self:GetPosition()
if not(point == oPoint and x == oX and y == oY) then
if not (point == oPoint and x == oX and y == oY) then
self:GetDB():SetPosition(point, x, y)
self:SendMessage('FRAME_POSITION_UPDATE', self:GetPosition())
end
@@ -116,8 +112,7 @@ function FrameSettings:IsMovable()
return not Bagnon.Settings:AreFramePositionsLocked()
end
--[[ Frame Layout ]]--
--[[ Frame Layout ]] --
--scale
function FrameSettings:SetScale(scale)
@@ -147,7 +142,7 @@ end
function FrameSettings:SetColor(r, g, b, a)
local pR, pG, pB, pA = self:GetColor()
if not(pR == r and pG == g and pB == b and pA == a) then
if not (pR == r and pG == g and pB == b and pA == a) then
self:GetDB():SetColor(r, g, b, a)
self:SendMessage('FRAME_COLOR_UPDATE', self:GetColor())
end
@@ -161,7 +156,7 @@ end
function FrameSettings:SetBorderColor(r, g, b, a)
local pR, pG, pB, pA = self:GetBorderColor()
if not(pR == r and pG == g and pB == b and pA == a) then
if not (pR == r and pG == g and pB == b and pA == a) then
self:GetDB():SetBorderColor(r, g, b, a)
self:SendMessage('FRAME_BORDER_COLOR_UPDATE', self:GetBorderColor())
end
@@ -186,13 +181,12 @@ end
--returns a list of all possible frame layers
function FrameSettings:GetAvailableLayers()
if not FrameSettings.availableFrameLayers then
FrameSettings.availableFrameLayers = {'LOW', 'MEDIUMLOW', 'MEDIUM', 'MEDIUMHIGH', 'HIGH', 'TOPLEVEL'}
FrameSettings.availableFrameLayers = { 'LOW', 'MEDIUMLOW', 'MEDIUM', 'MEDIUMHIGH', 'HIGH', 'TOPLEVEL' }
end
return FrameSettings.availableFrameLayers
end
--[[ Frame Components ]]--
--[[ Frame Components ]] --
--returns true if the frame has a bag frame, and false otherwise
function FrameSettings:SetHasBagFrame(enable)
@@ -250,6 +244,20 @@ function FrameSettings:HasSearchToggle()
return self:GetDB():HasSearchToggle()
end
--sort btn
function FrameSettings:SetHasSortBtn(enable)
local enable = enable and true or false
if self:HasSortBtn() ~= enable then
self:GetDB():SetHasSortBtn(enable)
self:SendMessage('SORT_BTN_ENABLE_UPDATE', self:HasSortBtn())
end
end
function FrameSettings:HasSortBtn()
return self:GetDB():HasSortBtn()
end
--options toggle
function FrameSettings:SetHasOptionsToggle(enable)
local enable = enable and true or false
@@ -264,8 +272,7 @@ function FrameSettings:HasOptionsToggle()
return self:GetDB():HasOptionsToggle()
end
--[[ Broker Display Object ]]--
--[[ Broker Display Object ]] --
function FrameSettings:SetBrokerDisplayObject(objectName)
if self:GetBrokerDisplayObject() ~= objectName then
@@ -278,8 +285,7 @@ function FrameSettings:GetBrokerDisplayObject()
return self:GetDB():GetBrokerDisplayObject()
end
--[[ Bag Frame Visibility ]]--
--[[ Bag Frame Visibility ]] --
function FrameSettings:ShowBagFrame()
if not self:IsBagFrameShown() then
@@ -307,8 +313,7 @@ function FrameSettings:IsBagFrameShown()
return self.showBagFrame
end
--[[ Item Frame Layout ]]--
--[[ Item Frame Layout ]] --
--spacing
function FrameSettings:SetItemFrameSpacing(spacing)
@@ -348,8 +353,7 @@ function FrameSettings:IsBagBreakEnabled()
return self:GetDB():IsBagBreakEnabled()
end
--[[ Bag Slot Availability ]]--
--[[ Bag Slot Availability ]] --
--returns true if the slot is available to this frame, and false otherwise
function FrameSettings:HasBagSlot(slot)
@@ -366,8 +370,7 @@ function FrameSettings:GetBagSlots()
return ipairs(self:GetDB():GetBags())
end
--[[ Bag Slot Visibility ]]--
--[[ Bag Slot Visibility ]] --
function FrameSettings:ShowBagSlot(slotToShow)
if not self:IsBagSlotShown(slotToShow) then
@@ -404,8 +407,7 @@ function FrameSettings:IsBagSlotHidden(slot)
return not self:GetDB():IsBagShown(slot)
end
--[[ Bag Slot Iterators ]]--
--[[ Bag Slot Iterators ]] --
--returns an iterator for all bag slots that are available to this frame and marked as visible
local function reverseVisibleSlotIterator(obj, i)
@@ -440,7 +442,6 @@ function FrameSettings:GetVisibleBagSlots()
return visibleSlotIterator, self, 0
end
function FrameSettings:SetReverseSlotOrder(enable)
local enable = enable and true or false
if self:IsSlotOrderReversed() ~= enable then
@@ -453,8 +454,7 @@ function FrameSettings:IsSlotOrderReversed()
return self:GetDB():IsSlotOrderReversed()
end
--[[ Text Filtering ]]--
--[[ Text Filtering ]] --
function FrameSettings:EnableTextSearch()
if not self:IsTextSearchEnabled() then
@@ -482,8 +482,7 @@ function FrameSettings:IsTextSearchEnabled()
return self.enableTextSearch
end
--[[ Bag Filtering ]]--
--[[ Bag Filtering ]] --
function FrameSettings:SetBagSearch(bagSlotID)
if self:GetBagSearch() ~= bagSlotID then
@@ -496,8 +495,7 @@ function FrameSettings:GetBagSearch()
return self.bagSearch or false
end
--[[ Player Filtering ]]--
--[[ Player Filtering ]] --
function FrameSettings:SetPlayerFilter(player)
local currentFilter = self:GetPlayerFilter()
@@ -509,4 +507,4 @@ end
function FrameSettings:GetPlayerFilter()
return self.playerFilter or UnitName('player')
end
end
+48 -52
View File
@@ -10,7 +10,7 @@ Bagnon.SavedFrameSettings = SavedFrameSettings
--[[---------------------------------------------------------------------------
Local Functions of Justice
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
local function removeDefaults(tbl, defaults)
for k, v in pairs(defaults) do
@@ -37,29 +37,27 @@ local function copyDefaults(tbl, defaults)
return tbl
end
--[[---------------------------------------------------------------------------
Constructorish
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
SavedFrameSettings.mt = {
__index = SavedFrameSettings
}
SavedFrameSettings.objects = setmetatable({}, {__index = function(tbl, id)
local obj = setmetatable({frameID = id}, SavedFrameSettings.mt)
SavedFrameSettings.objects = setmetatable({}, { __index = function(tbl, id)
local obj = setmetatable({ frameID = id }, SavedFrameSettings.mt)
tbl[id] = obj
return obj
end})
end })
function SavedFrameSettings:Get(id)
return self.objects[id]
end
--[[---------------------------------------------------------------------------
Events
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
--create an event handler
do
@@ -79,10 +77,9 @@ function SavedFrameSettings:PLAYER_LOGOUT()
self:ClearDefaults()
end
--[[---------------------------------------------------------------------------
Accessor Methods
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
--get settings for all frames
--only one instance of this for everything (hence the lack of self use)
@@ -124,15 +121,14 @@ function SavedFrameSettings:GetFrameID()
return self.frameID
end
--[[---------------------------------------------------------------------------
Upgrade Methods
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
function SavedFrameSettings:UpgradeDB()
local major, minor, bugfix = self:GetDBVersion():match('(%w+)%.(%w+)%.(%w+)')
local db = self:GetGlobalDB()
--hidden bags upgrade
for frameID, settings in pairs(db.frames) do
local hiddenBags = settings.hiddenBags
@@ -166,19 +162,18 @@ function SavedFrameSettings:ClearDefaults()
for frameID, settings in pairs(db.frames) do
removeDefaults(settings, self:GetDefaultSettings(frameID))
if next(settings) == nil then
db[frameID] = nil
end
end
end
--[[---------------------------------------------------------------------------
Update Methods
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
--[[ Frame Color ]]--
--[[ Frame Color ]] --
--background
function SavedFrameSettings:SetColor(r, g, b, a)
@@ -208,8 +203,7 @@ function SavedFrameSettings:GetBorderColor()
return r, g, b, a
end
--[[ Frame Position ]]--
--[[ Frame Position ]] --
function SavedFrameSettings:SetPosition(point, x, y)
local db = self:GetDB()
@@ -223,8 +217,7 @@ function SavedFrameSettings:GetPosition()
return db.point, db.x, db.y
end
--[[ Frame Scale ]]--
--[[ Frame Scale ]] --
function SavedFrameSettings:SetScale(scale)
self:GetDB().scale = scale
@@ -234,8 +227,7 @@ function SavedFrameSettings:GetScale()
return self:GetDB().scale
end
--[[ Frame Opacity ]]--
--[[ Frame Opacity ]] --
function SavedFrameSettings:SetOpacity(opacity)
self:GetDB().opacity = opacity
@@ -245,8 +237,7 @@ function SavedFrameSettings:GetOpacity()
return self:GetDB().opacity
end
--[[ Frame Layer]]--
--[[ Frame Layer]] --
function SavedFrameSettings:SetLayer(layer)
self:GetDB().frameLayer = layer
@@ -256,8 +247,7 @@ function SavedFrameSettings:GetLayer()
return self:GetDB().frameLayer
end
--[[ Frame Components ]]--
--[[ Frame Components ]] --
function SavedFrameSettings:SetHasBagFrame(enable)
self:GetDB().hasBagFrame = enable or false
@@ -291,6 +281,14 @@ function SavedFrameSettings:HasSearchToggle()
return self:GetDB().hasSearchToggle
end
function SavedFrameSettings:SetHasSortBtn(enable)
self:GetDB().hasSortBtn = enable or false
end
function SavedFrameSettings:HasSortBtn()
return self:GetDB().hasSortBtn
end
function SavedFrameSettings:SetHasOptionsToggle(enable)
self:GetDB().hasOptionsToggle = enable or false
end
@@ -299,8 +297,7 @@ function SavedFrameSettings:HasOptionsToggle()
return self:GetDB().hasOptionsToggle
end
--[[ Frame Bags ]]--
--[[ Frame Bags ]] --
--show a bag
function SavedFrameSettings:ShowBag(bag)
@@ -326,8 +323,7 @@ function SavedFrameSettings:GetHiddenBags()
return self:GetDB().hiddenBags
end
--[[ Item Frame Layout ]]--
--[[ Item Frame Layout ]] --
--columns
function SavedFrameSettings:SetItemFrameColumns(columns)
@@ -356,8 +352,7 @@ function SavedFrameSettings:IsBagBreakEnabled()
return self:GetDB().bagBreak
end
--[[ Item Frame Slot ORdering ]]--
--[[ Item Frame Slot ORdering ]] --
function SavedFrameSettings:SetReverseSlotOrder(enable)
self:GetDB().reverseSlotOrder = enable
@@ -367,8 +362,7 @@ function SavedFrameSettings:IsSlotOrderReversed()
return self:GetDB().reverseSlotOrder
end
--[[ Databroker Display Object ]]--
--[[ Databroker Display Object ]] --
function SavedFrameSettings:SetBrokerDisplayObject(objectName)
self:GetDB().dataBrokerObject = objectName
@@ -378,10 +372,9 @@ function SavedFrameSettings:GetBrokerDisplayObject()
return self:GetDB().dataBrokerObject
end
--[[---------------------------------------------------------------------------
Frame Defaults
--]]---------------------------------------------------------------------------
--]] ---------------------------------------------------------------------------
--generic
function SavedFrameSettings:GetDefaultSettings(frameID)
@@ -402,9 +395,9 @@ end
function SavedFrameSettings:GetDefaultInventorySettings()
local defaults = SavedFrameSettings.invDefaults or {
--bag settings
availableBags = {BACKPACK_CONTAINER, 1, 2, 3, 4, KEYRING_CONTAINER},
hiddenBags = {
availableBags = { BACKPACK_CONTAINER, 1, 2, 3, 4, KEYRING_CONTAINER },
hiddenBags = {
[BACKPACK_CONTAINER] = false,
[1] = false,
[2] = false,
@@ -414,8 +407,8 @@ function SavedFrameSettings:GetDefaultInventorySettings()
},
--frame
frameColor = {0, 0, 0, 0.5},
frameBorderColor = {1, 1, 1, 1},
frameColor = { 0, 0, 0, 0.5 },
frameBorderColor = { 1, 1, 1, 1 },
scale = 1,
opacity = 1,
point = 'BOTTOMRIGHT',
@@ -433,12 +426,13 @@ function SavedFrameSettings:GetDefaultInventorySettings()
hasBagFrame = true,
hasDBOFrame = true,
hasSearchToggle = true,
hasSortBtn = true,
hasOptionsToggle = true,
hasKeyringToggle = true,
--dbo display object
dataBrokerObject = 'BagnonLauncher',
--slot ordering
reverseSlotOrder = false,
}
@@ -451,7 +445,7 @@ end
function SavedFrameSettings:GetDefaultBankSettings()
local defaults = SavedFrameSettings.bankDefaults or {
--bag settings
availableBags = {BANK_CONTAINER, 5, 6, 7, 8, 9, 10, 11},
availableBags = { BANK_CONTAINER, 5, 6, 7, 8, 9, 10, 11 },
hiddenBags = {
[BANK_CONTAINER] = false,
[5] = false,
@@ -464,8 +458,8 @@ function SavedFrameSettings:GetDefaultBankSettings()
},
--frame
frameColor = {0, 0, 0, 0.5},
frameBorderColor = {1, 1, 0, 1},
frameColor = { 0, 0, 0, 0.5 },
frameBorderColor = { 1, 1, 0, 1 },
scale = 1,
opacity = 1,
point = 'BOTTOMLEFT',
@@ -483,12 +477,13 @@ function SavedFrameSettings:GetDefaultBankSettings()
hasBagFrame = true,
hasDBOFrame = true,
hasSearchToggle = true,
hasSortBtn = false,
hasOptionsToggle = true,
hasKeyringToggle = false,
--dbo display object
dataBrokerObject = 'BagnonLauncher',
--slot ordering
reverseSlotOrder = false,
}
@@ -500,14 +495,14 @@ end
function SavedFrameSettings:GetDefaultKeyRingSettings()
local defaults = SavedFrameSettings.keyDefaults or {
--bag settings
availableBags = {KEYRING_CONTAINER},
availableBags = { KEYRING_CONTAINER },
hiddenBags = {
[KEYRING_CONTAINER] = false
},
--frame,
frameColor = {0, 0, 0, 0.5},
frameBorderColor = {0, 1, 1, 1},
frameColor = { 0, 0, 0, 0.5 },
frameBorderColor = { 0, 1, 1, 1 },
scale = 1,
opacity = 1,
point = 'BOTTOMRIGHT',
@@ -525,12 +520,13 @@ function SavedFrameSettings:GetDefaultKeyRingSettings()
hasBagFrame = false,
hasDBOFrame = false,
hasSearchToggle = false,
hasSortBtn = false,
hasOptionsToggle = true,
hasKeyringToggle = false,
--dbo display object
dataBrokerObject = 'BagnonLauncher',
--slot ordering
reverseSlotOrder = false,
}
@@ -540,4 +536,4 @@ end
function SavedFrameSettings:GetDefaultGuildBankSettings()
return self:GetDefaultInventorySettings()
end
end
+269
View File
@@ -0,0 +1,269 @@
--[[
sortBtn.lua
imagine a button that sorts your inventory in Bagnon, crazy am I right?!1
--]]
local Bagnon = LibStub('AceAddon-3.0'):GetAddon('Bagnon')
local L = LibStub('AceLocale-3.0'):GetLocale('Bagnon')
local SortBtn = Bagnon.Classy:New('Button')
Bagnon.SortBtn = SortBtn
local SIZE = 20
local NORMAL_TEXTURE_SIZE = 64 * (SIZE / 36)
-- Bag Sorter code from Sushi Regular
local moves = {};
local frame = CreateFrame("Frame");
local t = 0;
local current = nil;
local function GetIDFromLink(link)
return link and tonumber(string.match(link, "item:(%d+)"));
end
local function DoMoves()
while (current ~= nil or #moves > 0) do
if current ~= nil then
if CursorHasItem() then
local _, id = GetCursorInfo();
if (current ~= nil and current.id == id) then
if (current.sourcebag ~= nil) then
PickupContainerItem(current.targetbag, current.targetslot);
local link = select(7, GetContainerItemInfo(current.targetbag, current.targetslot));
if (current.id ~= GetIDFromLink(link)) then
return;
end
end
else
moves = {};
current = nil;
frame:Hide();
return;
end
else
if (current.sourcebag ~= nil) then
local link = select(7, GetContainerItemInfo(current.targetbag, current.targetslot));
if (current.id ~= GetIDFromLink(link)) then
return;
end
end
current = nil;
end
else
if (#moves > 0) then
current = table.remove(moves, 1);
if (current.sourcebag ~= nil) then
PickupContainerItem(current.sourcebag, current.sourceslot);
if CursorHasItem() == false then
return;
end
PickupContainerItem(current.targetbag, current.targetslot);
local link = select(7, GetContainerItemInfo(current.targetbag, current.targetslot));
if (current.id == GetIDFromLink(link)) then
current = nil;
else
return;
end
end
end
end
end
frame:Hide();
end
local function CompareItems(lItem, rItem)
if (rItem.id == nil) then
return true;
elseif (lItem.id == nil) then
return false;
elseif (lItem.class ~= rItem.class) then
return (lItem.class < rItem.class);
elseif (lItem.subclass ~= rItem.subclass) then
return (lItem.subclass < rItem.subclass);
elseif (lItem.quality ~= rItem.quality) then
return (lItem.quality > rItem.quality);
elseif (lItem.name ~= rItem.name) then
return (lItem.name < rItem.name);
elseif ((lItem.count) ~= (rItem.count)) then
return ((lItem.count) >= (rItem.count));
else
return true;
end
end
local function BeginSort()
current = nil;
moves = {};
ClearCursor();
end
local function SortBag(bag)
for i = 1, #bag, 1 do
local lowest = i;
for j = #bag, i + 1, -1 do
if (CompareItems(bag[lowest], bag[j]) == false) then
lowest = j;
end
end
if (i ~= lowest) then
-- store move
move = {};
move.id = bag[lowest].id;
move.name = bag[lowest].name;
move.sourcebag = bag[lowest].bag;
move.sourcetab = bag[lowest].tab;
move.sourceslot = bag[lowest].slot;
move.targetbag = bag[i].bag;
move.targettab = bag[i].tab;
move.targetslot = bag[i].slot;
table.insert(moves, move);
-- swap items
local tmp = bag[i];
bag[i] = bag[lowest];
bag[lowest] = tmp;
-- swap slots
tmp = bag[i].slot;
bag[i].slot = bag[lowest].slot;
bag[lowest].slot = tmp;
tmp = bag[i].bag;
bag[i].bag = bag[lowest].bag;
bag[lowest].bag = tmp;
tmp = bag[i].tab;
bag[i].tab = bag[lowest].tab;
bag[lowest].tab = tmp;
end
end
end
local function CreateBagFromID(bagID)
local items = GetContainerNumSlots(bagID);
local bag = {};
for i = 1, items, 1 do
local item = {};
local _, count, _, _, _, _, link = GetContainerItemInfo(bagID, i);
item.bag = bagID;
item.slot = i;
item.name = "<EMPTY>";
item.id = GetIDFromLink(link);
if (item.id ~= nil) then
item.count = count;
item.name, _, item.quality, _, _, item.class, item.subclass, _, item.type, _, item.price = GetItemInfo(item.id);
end
table.insert(bag, item);
end
return bag;
end
frame:SetScript("OnUpdate", function()
t = t + arg1;
if t > 0.03 then
t = 0
DoMoves();
end
end)
frame:Hide();
--
--[[ Constructor ]] --
function SortBtn:New(frameID, parent)
local b = self:Bind(CreateFrame('Button', nil, parent))
b:SetWidth(SIZE)
b:SetHeight(SIZE)
b:RegisterForClicks('anyUp')
local nt = b:CreateTexture()
nt:SetTexture([[Interface\Buttons\UI-Quickslot2]])
nt:SetWidth(NORMAL_TEXTURE_SIZE)
nt:SetHeight(NORMAL_TEXTURE_SIZE)
nt:SetPoint('CENTER', 0, -1)
b:SetNormalTexture(nt)
local pt = b:CreateTexture()
pt:SetTexture([[Interface\Buttons\UI-Quickslot-Depress]])
pt:SetAllPoints(b)
b:SetPushedTexture(pt)
local ht = b:CreateTexture()
ht:SetTexture([[Interface\Buttons\ButtonHilight-Square]])
ht:SetAllPoints(b)
b:SetHighlightTexture(ht)
local icon = b:CreateTexture()
icon:SetAllPoints(b)
icon:SetTexture([[Interface\Icons\ability_racial_bagoftricks]])
b:SetScript('OnClick', b.OnClick)
b:SetScript('OnEnter', b.OnEnter)
b:SetScript('OnLeave', b.OnLeave)
b:SetFrameID(frameID)
return b
end
--[[ Frame Events ]] --
function SortBtn:OnClick()
local bags = {};
for i = 0, NUM_BAG_FRAMES, 1 do
local bag = CreateBagFromID(i);
local type = select(2, GetContainerNumFreeSlots(i));
if type == nil then
type = "ALL"
else
type = tostring(type);
end
if bags[type] == nil then
bags[type] = bag;
else
for j = 1, #bag, 1 do
table.insert(bags[type], bag[j]);
end
end
end
BeginSort();
for k, v in pairs(bags) do
if v ~= nil then
SortBag(v);
end
end
frame:Show();
end
function SortBtn:OnEnter()
if self:GetRight() > (GetScreenWidth() / 2) then
GameTooltip:SetOwner(self, 'ANCHOR_LEFT')
else
GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
end
self:UpdateTooltip()
end
function SortBtn:OnLeave()
if GameTooltip:IsOwned(self) then
GameTooltip:Hide()
end
end
--[[ Update Methods ]] --
function SortBtn:UpdateTooltip()
if GameTooltip:IsOwned(self) then
GameTooltip:SetText(L.TipShowSortBtn)
end
end
--[[ Properties ]] --
function SortBtn:SetFrameID(frameID)
if self:GetFrameID() ~= frameID then
self.frameID = frameID
end
end
function SortBtn:GetFrameID()
return self.frameID
end
+1
View File
@@ -44,6 +44,7 @@ L.TipShowBags = 'Click to show the bag frame.'
L.TipShowMenu = 'Right-Click to configure this frame.'
L.TipShowSearch = 'Click to show the search frame.'
L.TipShowSearch = 'Click to search.'
L.TipShowSortBtn = 'Click to sort your inventory.'
L.TipShowFrameConfig = 'Click to configure this frame.'
L.TipDoubleClickSearch = 'Alt-Drag to move.\nRight-Click to configure.\nDouble-Click to search.'
L.Total = 'Total'
+3 -2
View File
@@ -18,7 +18,7 @@ L.KeyRing = 'Keyring'
L.GuildBank = 'Guild Bank'
L.LockFramePositions = 'Lock frame positions'
L.ShowEmptyItemSlotBackground = 'Display a background for empty item slots'
L.HighlightItemsByQuality = 'Highlight items by quality'
L.HighlightItemsByQuality = 'Highlight items by quality'
L.HighlightQuestItems = 'Highlight quest items'
L.ReverseSlotOrdering = 'Reverse bag slot ordering'
L.ColorItemSlotsByBagType = 'Color empty item slots by bag type'
@@ -27,6 +27,7 @@ L.EnableBagFrame = 'Enable bag frame'
L.EnableMoneyFrame = 'Enable money frame'
L.EnableDBOFrame = 'Enable databroker frame'
L.EnableSearchToggle = 'Enable search toggle'
L.EnableSortBtn = "Enable sort button"
L.EnableOptionsToggle = 'Enable options toggle'
L.EnableFrame_inventory = 'Enable inventory frame'
L.EnableFrame_bank = 'Enable bank frame'
@@ -54,4 +55,4 @@ L.ItemHighlightOpacity = 'Item highlight brightness'
L.ItemSlotColor_ammo = 'Ammo bag slot color'
L.ItemSlotColor_trade = 'Trade bag slot color'
L.ItemSlotColor_shard = 'Soul bag slot color'
L.ItemSlotColor_keyring = 'Keyring slot color'
L.ItemSlotColor_keyring = 'Keyring slot color'
+46 -30
View File
@@ -29,7 +29,6 @@ function FrameOptions:ShowFrame(frameID)
InterfaceOptionsFrame_OpenToCategory(self)
end
--[[
Messages
--]]
@@ -53,6 +52,7 @@ function FrameOptions:UpdateMessages()
self:RegisterMessage('DATABROKER_FRAME_ENABLE_UPDATE')
self:RegisterMessage('SEARCH_TOGGLE_ENABLE_UPDATE')
self:RegisterMessage('SLOT_ORDER_UPDATE')
self:RegisterMessage('SORT_BTN_ENABLE_UPDATE')
self:RegisterMessage('OPTIONS_TOGGLE_ENABLE_UPDATE')
end
@@ -134,13 +134,18 @@ function FrameOptions:ITEM_FRAME_BAG_BREAK_UPDATE(msg, frameID, enable)
end
end
function FrameOptions:SORT_BTN_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetSortBtnCheckBox():UpdateChecked()
end
end
function FrameOptions:OPTIONS_TOGGLE_ENABLE_UPDATE(msg, frameID, enable)
if self:GetFrameID() == frameID then
self:GetToggleOptionsCheckbox():UpdateChecked()
end
end
--[[
Frame Events
--]]
@@ -154,20 +159,19 @@ function FrameOptions:OnHide()
self:UpdateMessages()
end
--[[
Components
--]]
function FrameOptions:AddWidgets()
--[[ Dropdowns ]]--
--[[ Dropdowns ]] --
--add frame selector
local frameSelector = self:CreateFrameSelector()
frameSelector:SetPoint('TOPLEFT', self, 'TOPLEFT', -4, -64)
--[[ Checkboxes ]]--
--[[ Checkboxes ]] --
local toggleBagFrame = self:CreateToggleBagFrameCheckbox()
toggleBagFrame:SetPoint('TOPLEFT', frameSelector, 'BOTTOMLEFT', 16, -4)
@@ -180,18 +184,21 @@ function FrameOptions:AddWidgets()
local toggleSearchFrame = self:CreateToggleSearchFrameCheckbox()
toggleSearchFrame:SetPoint('TOPLEFT', toggleDBOFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local sortBtnFrame = self:CreateBtnSortCheckbox()
sortBtnFrame:SetPoint('TOPLEFT', toggleSearchFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local toggleOptionsFrame = self:CreateToggleOptionsCheckbox()
toggleOptionsFrame:SetPoint('TOPLEFT', toggleSearchFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
toggleOptionsFrame:SetPoint('TOPLEFT', sortBtnFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local reverseSlotOrdering = self:CreateReverseSlotOrderCheckbox()
reverseSlotOrdering:SetPoint('TOPLEFT', toggleOptionsFrame, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
local bagBreak = self:CreateBagBreakCheckbox()
bagBreak:SetPoint('TOPLEFT', reverseSlotOrdering, 'BOTTOMLEFT', 0, -CHECK_BUTTON_SPACING)
--[[ Color Selectors ]]--
--[[ Color Selectors ]] --
--add color selector
local frameColor = self:CreateColorSelector()
@@ -202,7 +209,7 @@ function FrameOptions:AddWidgets()
frameBorderColor:SetPoint('TOPLEFT', frameColor, 'BOTTOMLEFT', 0, -8)
--[[ Sliders ]]--
--[[ Sliders ]] --
--add opacity slider
local opacity = self:CreateOpacitySlider()
@@ -249,17 +256,17 @@ function FrameOptions:UpdateWidgets()
self:GetToggleMoneyFrameCheckbox():UpdateChecked()
self:GetToggleDBOFrameCheckbox():UpdateChecked()
self:GetToggleSearchFrameCheckbox():UpdateChecked()
self:GetSortBtnCheckBox():UpdateChecked()
self:GetToggleOptionsCheckbox():UpdateChecked()
self:GetReverseSlotOrderCheckbox():UpdateChecked()
self:GetReverseSlotOrderCheckbox():SetDisabled(self:GetFrameID() == 'guildbank')
self:GetBagBreakCheckbox():UpdateChecked()
self:GetBagBreakCheckbox():SetDisabled(self:GetFrameID() == 'keys' or self:GetFrameID() == 'guildbank')
end
--[[ Dropdowns ]]--
--[[ Dropdowns ]] --
--frame selector
function FrameOptions:CreateFrameSelector()
@@ -270,7 +277,7 @@ function FrameOptions:CreateFrameSelector()
self:AddItem(L.Inventory, 'inventory')
self:AddItem(L.Bank, 'bank')
self:AddItem(L.KeyRing, 'keys')
if IsAddOnLoaded('Bagnon_GuildBank') then
self:AddItem(L.GuildBank, 'guildbank')
end
@@ -292,8 +299,7 @@ function FrameOptions:GetFrameSelector()
return self.frameSelector
end
--[[ Color Pickers ]]--
--[[ Color Pickers ]] --
--frame color
function FrameOptions:CreateColorSelector()
@@ -335,8 +341,7 @@ function FrameOptions:GetBorderColorSelector()
return self.borderColorSelector
end
--[[ Sliders ]]--
--[[ Sliders ]] --
--columns
function FrameOptions:CreateColumnsSlider()
@@ -458,9 +463,7 @@ function FrameOptions:GetLayerSlider()
return self.layerSlider
end
--[[ Check Boxes ]]--
--[[ Check Boxes ]] --
--bag frame
function FrameOptions:CreateToggleBagFrameCheckbox()
@@ -482,7 +485,6 @@ function FrameOptions:GetToggleBagFrameCheckbox()
return self.toggleBagFrameCheckbox
end
--money frame
function FrameOptions:CreateToggleMoneyFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableMoneyFrame, self)
@@ -503,7 +505,6 @@ function FrameOptions:GetToggleMoneyFrameCheckbox()
return self.toggleMoneyFrameCheckbox
end
--databroker frame
function FrameOptions:CreateToggleDBOFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableDBOFrame, self)
@@ -524,7 +525,6 @@ function FrameOptions:GetToggleDBOFrameCheckbox()
return self.toggleDBOFrameCheckbox
end
--search frame toggle
function FrameOptions:CreateToggleSearchFrameCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableSearchToggle, self)
@@ -545,6 +545,25 @@ function FrameOptions:GetToggleSearchFrameCheckbox()
return self.toggleSearchFrameCheckbox
end
--sortBtn toggle
function FrameOptions:CreateBtnSortCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.EnableSortBtn, self)
button.OnEnableSetting = function(self, enable)
self:GetParent():GetSettings():SetHasSortBtn(enable)
end
button.IsSettingEnabled = function(self, enable)
return self:GetParent():GetSettings():HasSortBtn()
end
self.btnSortCheckbox = button
return button
end
function FrameOptions:GetSortBtnCheckBox()
return self.btnSortCheckbox
end
--options frame toggle
function FrameOptions:CreateToggleOptionsCheckbox()
@@ -566,7 +585,6 @@ function FrameOptions:GetToggleOptionsCheckbox()
return self.toggleOptionsCheckbox
end
--reverse slot ordering
function FrameOptions:CreateReverseSlotOrderCheckbox()
local button = Bagnon.OptionsCheckButton:New(L.ReverseSlotOrdering, self)
@@ -607,7 +625,6 @@ function FrameOptions:GetBagBreakCheckbox()
return self.bagBreakCheckbox
end
--[[
Update Methods
--]]
@@ -627,7 +644,6 @@ function FrameOptions:GetSettings()
return Bagnon.FrameSettings:Get(self:GetFrameID())
end
--[[ Load the thing ]] --
--[[ Load the thing ]]--
FrameOptions:Load()
FrameOptions:Load()