From dabfbfc067cbb138ad6aa872e6dc7f78355035b1 Mon Sep 17 00:00:00 2001 From: Crum Date: Sun, 21 Jan 2018 22:18:33 -0600 Subject: [PATCH] update numberPrefixStyle and add decimalLength --- 2/3/4/5/6/7/ElvUI/Core/Math.lua | 79 ++++++++++++------- 2/3/4/5/6/7/ElvUI/Settings/Profile.lua | 2 + 2/3/4/5/6/7/ElvUI_Config/General.lua | 19 ++++- .../7/ElvUI_Config/Locales/Chinese_Config.lua | 2 + .../7/ElvUI_Config/Locales/English_Config.lua | 2 + .../7/ElvUI_Config/Locales/French_Config.lua | 2 + .../7/ElvUI_Config/Locales/German_Config.lua | 2 + .../7/ElvUI_Config/Locales/Korean_Config.lua | 2 + .../Locales/Portuguese_Config.lua | 2 + .../7/ElvUI_Config/Locales/Russian_Config.lua | 2 + .../7/ElvUI_Config/Locales/Spanish_Config.lua | 2 + .../ElvUI_Config/Locales/Taiwanese_Config.lua | 2 + 12 files changed, 86 insertions(+), 32 deletions(-) diff --git a/2/3/4/5/6/7/ElvUI/Core/Math.lua b/2/3/4/5/6/7/ElvUI/Core/Math.lua index 43512a2..acbbd1d 100644 --- a/2/3/4/5/6/7/ElvUI/Core/Math.lua +++ b/2/3/4/5/6/7/ElvUI/Core/Math.lua @@ -5,39 +5,62 @@ local E, L, V, P, G = unpack(ElvUI); --Import: Engine, Locales, PrivateDB, Profi local select, unpack, assert, tonumber, type, pairs = select, unpack, assert, tonumber, type, pairs local getn, tinsert, tremove = table.getn, tinsert, tremove local abs, ceil, floor, modf, mod = math.abs, math.ceil, math.floor, math.modf, math.mod -local format, byte, len, sub, upper, split, utf8sub = string.format, string.byte, string.len, string.sub, string.upper, string.split, string.utf8sub +local find, format, byte, len, sub, gsub, upper, split, utf8sub = string.find, string.format, string.byte, string.len, string.sub, string.gsub, string.upper, string.split, string.utf8sub --WoW API / Variables local GetScreenWidth, GetScreenHeight = GetScreenWidth, GetScreenHeight local CreateFrame = CreateFrame +--Return short value of a number +local shortValueDec function E:ShortValue(v) + shortValueDec = format("%%.%df", E.db.general.decimalLength or 1) if E.db.general.numberPrefixStyle == "METRIC" then if abs(v) >= 1e9 then - return format("%.1fG", v / 1e9) + return format(shortValueDec.."G", v / 1e9) elseif abs(v) >= 1e6 then - return format("%.1fM", v / 1e6) + return format(shortValueDec.."M", v / 1e6) elseif abs(v) >= 1e3 then - return format("%.1fk", v / 1e3) + return format(shortValueDec.."k", v / 1e3) else - return format("%d", v) + return format("%s", v) end elseif E.db.general.numberPrefixStyle == "CHINESE" then if abs(v) >= 1e8 then - return format("%.1fY", v / 1e8) - elseif(abs(v) >= 1e4) then - return format("%.1fW", v / 1e4) + return format(shortValueDec.."Y", v / 1e8) + elseif abs(v) >= 1e4 then + return format(shortValueDec.."W", v / 1e4) else - return format("%d", v) + return format("%s", v) + end + elseif E.db.general.numberPrefixStyle == "KOREAN" then + if abs(v) >= 1e8 then + return format(shortValueDec.."억", v / 1e8) + elseif abs(v) >= 1e4 then + return format(shortValueDec.."만", v / 1e4) + elseif abs(v) >= 1e3 then + return format(shortValueDec.."천", v / 1e3) + else + return format("%s", v) + end + elseif E.db.general.numberPrefixStyle == "GERMAN" then + if abs(v) >= 1e9 then + return format(shortValueDec.."Mrd", v / 1e9) + elseif abs(v) >= 1e6 then + return format(shortValueDec.."Mio", v / 1e6) + elseif abs(v) >= 1e3 then + return format(shortValueDec.."Tsd", v / 1e3) + else + return format("%s", v) end else if abs(v) >= 1e9 then - return format("%.1fB", v / 1e9) + return format(shortValueDec.."B", v / 1e9) elseif abs(v) >= 1e6 then - return format("%.1fM", v / 1e6) + return format(shortValueDec.."M", v / 1e6) elseif abs(v) >= 1e3 then - return format("%.1fK", v / 1e3) + return format(shortValueDec.."K", v / 1e3) else - return format("%d", v) + return format("%s", v) end end end @@ -168,6 +191,8 @@ function E:GetXYOffset(position, override) end local styles = { + -- keep percents in this table with `PERCENT` in the key, and `%.1f%%` in the value somewhere. + -- we use these two things to follow our setting for decimal length. they need to be EXACT. ["CURRENT"] = "%s", ["CURRENT_MAX"] = "%s - %s", ["CURRENT_PERCENT"] = "%s - %.1f%%", @@ -183,28 +208,26 @@ function E:GetFormattedText(style, min, max) if max == 0 then max = 1 end - local useStyle = styles[style] + gftDec = E.db.general.decimalLength or 1 + if gftDec ~= 1 and find(style, "PERCENT") then + gftUseStyle = gsub(styles[style], "%%%.1f%%%%", "%%."..gftDec.."f%%%%") + else + gftUseStyle = styles[style] + end if style == "DEFICIT" then - local deficit = max - min - if deficit <= 0 then - return "" - else - return format(useStyle, E:ShortValue(deficit)) - end + gftDeficit = max - min + return ((gftDeficit > 0) and format(gftUseStyle, E:ShortValue(gftDeficit))) or "" elseif style == "PERCENT" then - local s = format(useStyle, min / max * 100) - return s + return format(gftUseStyle, min / max * 100) elseif style == "CURRENT" or ((style == "CURRENT_MAX" or style == "CURRENT_MAX_PERCENT" or style == "CURRENT_PERCENT") and min == max) then - return format(styles["CURRENT"], E:ShortValue(min)) + return format(styles["CURRENT"], E:ShortValue(min)) elseif style == "CURRENT_MAX" then - return format(useStyle, E:ShortValue(min), E:ShortValue(max)) + return format(gftUseStyle, E:ShortValue(min), E:ShortValue(max)) elseif style == "CURRENT_PERCENT" then - local s = format(useStyle, E:ShortValue(min), min / max * 100) - return s + return format(gftUseStyle, E:ShortValue(min), min / max * 100) elseif style == "CURRENT_MAX_PERCENT" then - local s = format(useStyle, E:ShortValue(min), E:ShortValue(max), min / max * 100) - return s + return format(gftUseStyle, E:ShortValue(min), E:ShortValue(max), min / max * 100) end end diff --git a/2/3/4/5/6/7/ElvUI/Settings/Profile.lua b/2/3/4/5/6/7/ElvUI/Settings/Profile.lua index 33df2d0..5f65729 100644 --- a/2/3/4/5/6/7/ElvUI/Settings/Profile.lua +++ b/2/3/4/5/6/7/ElvUI/Settings/Profile.lua @@ -18,6 +18,8 @@ P["general"] = { ["afk"] = true, ["enhancedPvpMessages"] = true, ["numberPrefixStyle"] = "ENGLISH", + ["decimalLength"] = 1, + ["fontSize"] = 12, ["font"] = "PT Sans Narrow", diff --git a/2/3/4/5/6/7/ElvUI_Config/General.lua b/2/3/4/5/6/7/ElvUI_Config/General.lua index 88684a8..07e4be0 100644 --- a/2/3/4/5/6/7/ElvUI_Config/General.lua +++ b/2/3/4/5/6/7/ElvUI_Config/General.lua @@ -193,11 +193,22 @@ E.Options.args.general = { get = function(info) return E.db.general.numberPrefixStyle; end, set = function(info, value) E.db.general.numberPrefixStyle = value; E:StaticPopup_Show("CONFIG_RL"); end, values = { - ["METRIC"] = "k, M, G", - ["ENGLISH"] = "K, M, B", - ["CHINESE"] = "W, Y" + ["METRIC"] = "Metric (k, M, G)", + ["ENGLISH"] = "English (K, M, B)", + ["CHINESE"] = "Chinese (W, Y)", + ["KOREAN"] = "Korean (천, 만, 억)", + ["GERMAN"] = "German (Tsd, Mio, Mrd)" } - } + }, + decimalLength = { + order = 22, + type = "range", + name = L["Decimal Length"], + desc = L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."], + min = 0, max = 4, step = 1, + get = function(info) return E.db.general.decimalLength end, + set = function(info, value) E.db.general.decimalLength = value; E:StaticPopup_Show("GLOBAL_RL") end + } } }, media = { diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Chinese_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Chinese_Config.lua index 51b57f2..3aae474 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Chinese_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Chinese_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "当访问商人 L["Bottom Panel"] = "底部面板" L["Chat Bubbles Style"] = "聊天气泡样式" L["Chat Bubbles"] = "聊天气泡" +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = "控制像姓名版和团队框架中各数值的小数位数" +L["Decimal Length"] = "小数位数" L["Direction the bar moves on gains/losses"] = "条增加/减少时的方向" L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "显示跨越屏幕底部的面板,仅仅是用于装饰." L["Display a panel across the top of the screen. This is for cosmetic only."] = "显示跨越屏幕顶部的面板,仅仅是用于装饰." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/English_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/English_Config.lua index 9200c39..28d9fe2 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/English_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/English_Config.lua @@ -378,6 +378,8 @@ L["Automatically vendor gray items when visiting a vendor."] = true; L["Bottom Panel"] = true; L["Chat Bubbles Style"] = true; L["Chat Bubbles"] = true; +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = true; L["Display a panel across the bottom of the screen. This is for cosmetic only."] = true; L["Display a panel across the top of the screen. This is for cosmetic only."] = true; diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/French_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/French_Config.lua index 64d736a..853d490 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/French_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/French_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "Vendre automatiq L["Bottom Panel"] = "Bandeau en bas" L["Chat Bubbles Style"] = "Style des bulles de discussion" L["Chat Bubbles"] = "Bulles de discussion" +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = "Direction que prend la barre quand gain / perte" L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "Affiche un bandeau au bas de l'écran. Option purement cosmétique." L["Display a panel across the top of the screen. This is for cosmetic only."] = "Affiche un bandeau en haut de l'écran. Option purement cosmétique." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/German_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/German_Config.lua index a7681a5..3d2888a 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/German_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/German_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "Automatischer Ve L["Bottom Panel"] = "Untere Leiste" L["Chat Bubbles Style"] = "Sprechblasen Stil" L["Chat Bubbles"] = "Sprechblasen" +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = "Kontrolliert die Anzahl der Dezimalstellen in den Werten auf den Namensplaketten und Einheitenfenstern." +L["Decimal Length"] = "Dezimalstellen" L["Direction the bar moves on gains/losses"] = "Richtung in die der Balken wächst/sinkt" L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "Zeige eine Leiste am unterem Bildschirmrand. Das ist rein kosmetisch." L["Display a panel across the top of the screen. This is for cosmetic only."] = "Zeige eine Leiste am oberen Bildschirmrand. Das ist rein kosmetisch." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Korean_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Korean_Config.lua index 9c0a092..399afc7 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Korean_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Korean_Config.lua @@ -437,6 +437,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "상점이 열리 L["Bottom Panel"] = "하단 패널 표시" L["Chat Bubbles Style"] = "말풍선 디자인" L["Chat Bubbles"] = true; +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = "바의 증감방향을 결정합니다." L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "화면 하단에 꾸미기 용도의 바를 생성합니다." L["Display a panel across the top of the screen. This is for cosmetic only."] = "화면 상단에 꾸미기 용도의 바를 생성합니다." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Portuguese_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Portuguese_Config.lua index bccd6b4..cc802d0 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Portuguese_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Portuguese_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "Vender itens cin L["Bottom Panel"] = "Painel Infeior" L["Chat Bubbles Style"] = "Estilo dos Balões de Fala" L["Chat Bubbles"] = true; +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = true; L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "Mostra um painel na parte inferior da tela. Apenas para efeito cosmético." L["Display a panel across the top of the screen. This is for cosmetic only."] = "Mostra um painel na parte superior da tela. Apenas para efeito cosmético." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Russian_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Russian_Config.lua index 4c2ebfe..a1b11ab 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Russian_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Russian_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "Автомати L["Bottom Panel"] = "Нижняя панель" L["Chat Bubbles Style"] = "Стиль облачков сообщений" L["Chat Bubbles"] = "Облачка сообщений" +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = "направление заполнения полосы" L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "Отображать панель на нижней границе экрана. Это косметический элемент." L["Display a panel across the top of the screen. This is for cosmetic only."] = "Отображать панель на верхней границе экрана. Это косметический элемент." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Spanish_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Spanish_Config.lua index 5ba4dea..8a5873a 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Spanish_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Spanish_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "Vender automáti L["Bottom Panel"] = "Panel Inferior" L["Chat Bubbles Style"] = true; L["Chat Bubbles"] = true; +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = true; L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "Despliega un panel a través de la parte inferior de la pantalla. Es es sólo algo cosmético." L["Display a panel across the top of the screen. This is for cosmetic only."] = "Despliega un panel a través de la parte superior de la pantalla. Es es sólo algo cosmético." diff --git a/2/3/4/5/6/7/ElvUI_Config/Locales/Taiwanese_Config.lua b/2/3/4/5/6/7/ElvUI_Config/Locales/Taiwanese_Config.lua index 2f54044..b1b627b 100644 --- a/2/3/4/5/6/7/ElvUI_Config/Locales/Taiwanese_Config.lua +++ b/2/3/4/5/6/7/ElvUI_Config/Locales/Taiwanese_Config.lua @@ -389,6 +389,8 @@ L["Automatically vendor gray items when visiting a vendor."] = "當訪問商人 L["Bottom Panel"] = "底部面板" L["Chat Bubbles Style"] = "聊天氣泡樣式" L["Chat Bubbles"] = "聊天氣泡" +L["Controls the amount of decimals used in values displayed on elements like NamePlates and UnitFrames."] = true +L["Decimal Length"] = true L["Direction the bar moves on gains/losses"] = true; L["Display a panel across the bottom of the screen. This is for cosmetic only."] = "顯示跨越螢幕底部的面板,僅僅是用于裝飾." L["Display a panel across the top of the screen. This is for cosmetic only."] = "顯示跨越螢幕頂部的面板,僅僅是用于裝飾."