From ef0f9824e36549c25c6669c033b44929223f0d3c Mon Sep 17 00:00:00 2001 From: Darthpred Date: Mon, 22 Aug 2016 15:15:46 +0300 Subject: [PATCH] Some sorting forcurrency dt. This closes #293 --- ElvUI_SLE/defaults/profile.lua | 8 +++ ElvUI_SLE/locales/english.lua | 4 ++ ElvUI_SLE/locales/russian.lua | 4 ++ ElvUI_SLE/modules/sledatatexts/currency.lua | 71 +++++++++++++++++++-------- ElvUI_SLE/options/datatexts/currency_c.lua | 57 +++++++++++++++++++++ 5 files changed, 124 insertions(+), 20 deletions(-) diff --git a/ElvUI_SLE/defaults/profile.lua b/ElvUI_SLE/defaults/profile.lua index b4924b1..e615f20 100644 --- a/ElvUI_SLE/defaults/profile.lua +++ b/ElvUI_SLE/defaults/profile.lua @@ -285,6 +285,14 @@ P["sle"] = { ["Icons"] = true, ["Faction"] = true, ["Unused"] = true, + ["gold"] = { + ["direction"] = "normal", + ["method"] = "name", + }, + ["cur"] = { + ["direction"] = "normal", + ["method"] = "name", + }, }, ["regen"] = { ["short"] = false, diff --git a/ElvUI_SLE/locales/english.lua b/ElvUI_SLE/locales/english.lua index ca88634..1cd83e9 100644 --- a/ElvUI_SLE/locales/english.lua +++ b/ElvUI_SLE/locales/english.lua @@ -403,6 +403,10 @@ L["Are you sure you want to remove |cff1784d1%s|r from currency datatexts?"] = t L["Hide panel background"] = true L["Don't show this panel, only datatexts assinged to it"] = true L["SLE_DT_CURRENCY_WARNING_GOLD"] = [[Your datapanel %s has ElvUI's "Gold" datatext active while "S&L Currency" datatext is selected elsewhere. To ensure the correct functioning of "S&L Currency" datatext we are disabling some functions of "Gold" datatext. To avoid this conflict you need to replace one of conflicting datatexts.]] +L["Gold Sorting"] = true +L["Normal"] = true +L["Reverced"] = true +L["Amount"] = true --Enhnced Shadows L["Enhanced Shadows"] = true diff --git a/ElvUI_SLE/locales/russian.lua b/ElvUI_SLE/locales/russian.lua index 050dcd1..bf642e5 100644 --- a/ElvUI_SLE/locales/russian.lua +++ b/ElvUI_SLE/locales/russian.lua @@ -400,6 +400,10 @@ L["Account Time Played"] = "Время в игре на аккаунте" L["Hide panel background"] = "Скрыть фон" L["Don't show this panel, only datatexts assinged to it"] = "Не показывать фон панели, а только назначенные инфо-тексты." L["SLE_DT_CURRENCY_WARNING_GOLD"] = [[На вашей панели %s включен инфо-текст "Gold" при активном инфо-тексте "S&L Currency". Для корректной работы "S&L Currency" мы отключаем некоторые функции инфо-текста "Gold". Для избежания данного конфликта вам необходимо заменить один из конфликтующих инфо-текстов.]] +L["Gold Sorting"] = "Сортировка золота" +L["Normal"] = "Нормальная" +L["Reverced"] = "Обратная" +L["Amount"] = "Количество" --Enhnced Shadows L["Enhanced Shadows"] = "Улучшенные тени" diff --git a/ElvUI_SLE/modules/sledatatexts/currency.lua b/ElvUI_SLE/modules/sledatatexts/currency.lua index 632aa33..c2221b5 100644 --- a/ElvUI_SLE/modules/sledatatexts/currency.lua +++ b/ElvUI_SLE/modules/sledatatexts/currency.lua @@ -3,11 +3,12 @@ local DT = E:GetModule('DataTexts') local DTP = SLE:GetModule('Datatexts') --GLOBALS: ElvDB local abs, mod = abs, mod +local sort = sort local GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, GetCurrencyListInfo = GetMoney, GetCurrencyInfo, GetNumWatchedTokens, GetBackpackCurrencyInfo, GetCurrencyListInfo local defaultColor = { 1, 1, 1 } local Profit = 0 -local Spent = 0 +local Spent = 0 local copperFormatter = T.join("", "%d", L.copperabbrev) local silverFormatter = T.join("", "%d", L.silverabbrev, " %.2d", L.copperabbrev) local goldFormatter = T.join("", "%s", L.goldabbrev, " %.2d", L.silverabbrev, " %.2d", L.copperabbrev) @@ -100,22 +101,6 @@ local MiscellaneousCurrency = { local HordeColor = RAID_CLASS_COLORS["DEATHKNIGHT"] local AllianceColor = RAID_CLASS_COLORS["SHAMAN"] -local function OrderedPairs(t, f) - local function orderednext(t, n) - local key = t[t.__next] - if not key then return end - t.__next = t.__next + 1 - return key, t.__source[key] - end - - local keys, kn = {__source = t, __next = 1}, 1 - for k in T.pairs(t) do - keys[kn], kn = k, kn + 1 - end - T.sort(keys, f) - return orderednext, keys -end - local function ToggleOption(name) if E.db.sle.dt.currency[name] then E.db.sle.dt.currency[name] = false @@ -146,9 +131,28 @@ local function UnusedCheck() end end +local function SortCurrency(a,b) + local method = E.db.sle.dt.currency.cur.method + if E.db.sle.dt.currency.cur.direction == "normal" then + return a[method] < b[method] + else + return a[method] > b[method] + end +end + +local function SortGold(a,b) + local method = E.db.sle.dt.currency.gold.method + if E.db.sle.dt.currency.gold.direction == "normal" then + return a[method] < b[method] + else + return a[method] > b[method] + end +end + local function GetCurrency(CurrencyTable, Text) local Seperator = false UnusedCheck() + local ShownTable = {} for key, id in T.pairs(CurrencyTable) do local name, amount, texture, week, weekmax, maxed, discovered = GetCurrencyInfo(id) local LeftString = GetOption('Icons') and T.format('%s %s', T.format('|T%s:14:14:0:0:64:64:4:60:4:60|t', texture), name) or name @@ -174,9 +178,23 @@ local function GetCurrency(CurrencyTable, Text) DT.tooltip:AddLine(Text) Seperator = true end - DT.tooltip:AddDoubleLine(LeftString, RightString, r1, g1, b1, r2, g2, b2) + T.tinsert(ShownTable, + { + name = name, + left = LeftString, + right = RightString, + r1 = r1, g1 = g1, b1 = b1, + r2 = r2, g2 = g2, b2 = b2, + amount = amount + } + ) end end + sort(ShownTable, SortCurrency) + for i = 1, #ShownTable do + local t = ShownTable[i] + DT.tooltip:AddDoubleLine(t.left, t.right, t.r1, t.g1, t.b1, t.r2, t.g2, t.b2) + end end local function OnEvent(self, event, ...) @@ -273,11 +291,19 @@ local function OnEnter(self) local totalGold, AllianceGold, HordeGold = 0, 0, 0 DT.tooltip:AddLine(L["Character: "]) - for k,_ in OrderedPairs(ElvDB["gold"][E.myrealm]) do + local ShownGold = {} + for k,_ in T.pairs(ElvDB["gold"][E.myrealm]) do if ElvDB["gold"][E.myrealm][k] then local class = ElvDB["class"][E.myrealm][k] local color = RAID_CLASS_COLORS[class or "PRIEST"] - DT.tooltip:AddDoubleLine(k, E:FormatMoney(ElvDB["gold"][E.myrealm][k], E.db.datatexts.goldFormat or "BLIZZARD", not E.db.datatexts.goldCoins), color.r, color.g, color.b, 1, 1, 1) + T.tinsert(ShownGold, + { + name = k, + amount = ElvDB["gold"][E.myrealm][k], + amountText = E:FormatMoney(ElvDB["gold"][E.myrealm][k], E.db.datatexts.goldFormat or "BLIZZARD", not E.db.datatexts.goldCoins), + r = color.r, g = color.g, b =color.b, + } + ) if ElvDB["faction"][E.myrealm]["Alliance"][k] then AllianceGold = AllianceGold + ElvDB["gold"][E.myrealm][k] end @@ -287,6 +313,11 @@ local function OnEnter(self) totalGold = totalGold + ElvDB["gold"][E.myrealm][k] end end + sort(ShownGold, SortGold) + for i = 1, #ShownGold do + local t = ShownGold[i] + DT.tooltip:AddDoubleLine(t.name, t.amountText, t.r, t.g, t.b, 1, 1, 1) + end DT.tooltip:AddLine' ' DT.tooltip:AddLine(L["Server: "]) diff --git a/ElvUI_SLE/options/datatexts/currency_c.lua b/ElvUI_SLE/options/datatexts/currency_c.lua index e761753..e0d3ae8 100644 --- a/ElvUI_SLE/options/datatexts/currency_c.lua +++ b/ElvUI_SLE/options/datatexts/currency_c.lua @@ -70,6 +70,63 @@ local function configTable() E:StaticPopup_Show('SLE_CONFIRM_DELETE_CURRENCY_CHARACTER', nil, nil, { ["name"] = name, ["realm"] = realm }); end, }, + sortGold = { + order = 30, + name = L["Gold Sorting"], + type = "group", + guiInline = true, + get = function(info) return E.db.sle.dt.currency.gold[ info[#info] ] end, + set = function(info, value) E.db.sle.dt.currency.gold[ info[#info] ] = value; end, + args = { + direction = { + order = 1, + type = "select", + name = L["Sort Direction"], + values = { + ["normal"] = L["Normal"], + ["reverced"] = L["Reverced"], + }, + }, + method = { + order = 2, + type = "select", + name = L["Sort Method"], + values = { + ["name"] = NAME, + ["amount"] = L["Amount"], + }, + }, + }, + }, + sortCurrency = { + order = 31, + name = L["Currency Sorting"], + type = "group", + guiInline = true, + get = function(info) return E.db.sle.dt.currency.cur[ info[#info] ] end, + set = function(info, value) E.db.sle.dt.currency.cur[ info[#info] ] = value; end, + args = { + direction = { + order = 1, + type = "select", + name = L["Direction"], + values = { + ["normal"] = L["Normal"], + ["reverced"] = L["Reverced"], + }, + }, + method = { + order = 2, + type = "select", + name = L["Sort Method"], + values = { + ["name"] = NAME, + ["amount"] = L["Amount"], + ["r1"] = L["Tracked"], + }, + }, + }, + }, }, } end -- 1.7.9.5