From a90c2edcdb5842a414570885692bf73d336757b9 Mon Sep 17 00:00:00 2001 From: Brandon Talbot Date: Sun, 24 Jul 2016 20:23:44 +0200 Subject: [PATCH] Added final settings Fixed box formatting --- src/lua/constants/contstants.lua | 18 ++++- src/lua/controller/bag.lua | 6 ++ src/lua/controller/bank.lua | 14 ++++ src/lua/core.lua | 9 ++- src/lua/element/container.lua | 2 +- src/lua/element/item.lua | 12 ++- src/lua/element/itemContainer.lua | 4 +- src/lua/element/mainBar.lua | 3 +- src/lua/element/tooltip.lua | 32 +++++++- src/lua/settings/settingsController.lua | 20 ++++- src/lua/settings/settingsElements.lua | 106 ++++++++++++++++++++++++++- src/lua/tools/boxFormatter.lua | 4 +- src/lua/tools/itemFormatter.lua | 6 +- src/manifest.xml | 4 + src/xml/element/bankBar.xml | 14 +++- src/xml/element/container.xml | 2 + src/xml/element/mainBar.xml | 1 + src/xml/settings/bankBarSettings.xml | 44 +++++++++++ src/xml/settings/categoryDialog.xml | 98 +++++++++++++++++++++++++ src/xml/settings/containerSettings.xml | 15 ++-- src/xml/settings/formatterSettings.xml | 109 ++++++++++++++++++++++++++++ src/xml/settings/itemContainerSettings.xml | 15 ++-- src/xml/settings/mainBarSettings.xml | 44 +++++++++++ src/xml/settings/settingsContainer.xml | 25 +++++-- src/xml/settings/subClassSettings.xml | 37 ++++++++-- src/xml/settings/toggleSettings.xml | 15 ++-- 26 files changed, 603 insertions(+), 56 deletions(-) create mode 100644 src/xml/settings/formatterSettings.xml diff --git a/src/lua/constants/contstants.lua b/src/lua/constants/contstants.lua index d2218a7..9f3fdcc 100644 --- a/src/lua/constants/contstants.lua +++ b/src/lua/constants/contstants.lua @@ -9,8 +9,8 @@ DJBags_TYPE_MAIN = 'djbags_main_settings' DJBags_TYPE_MAIN_BAR = 'djbags_main_bar' DJBags_TYPE_BANK_BAR = 'djbags_bank_bar' -DJBags_FORMATTER_MASONRY = 'Massonry' -DJBags_FORMATTER_BOX = 'Box' +DJBags_FORMATTER_MASONRY = 1 +DJBags_FORMATTER_BOX = 2 --endregion @@ -32,6 +32,8 @@ DJBags_SETTING_TEXT_SIZE = 'djbags_truncate_text_size' DJBags_SETTING_STACK_ALL = 'djbags_stack_all_items' DJBags_SETTING_SELL_JUNK = 'djbags_auto_sell_junk' DJBags_SETTING_DEPOSIT_REAGENT = 'djbags_auto_deposit_reagents' +DJBags_SETTING_BOE = 'djbags_class_boe' +DJBags_SETTING_BOA = 'djbags_class_boa' --endregion @@ -42,6 +44,9 @@ localeText['enUS'] = function() DJBags_LOCALE_ITEM_CONTAINER_SETTINGS = 'Item Container Settings:' DJBags_LOCALE_CONTAINER_SETTINGS = 'Category Container Settings:' DJBags_LOCALE_SUB_CLASS_SETTINGS = 'Sub Class Settings:' + DJBags_LOCALE_MAIN_BAR_SETTINGS = 'Main Bar Settings:' + DJBags_LOCALE_BANK_BAR_SETTINGS = 'Bank Bar Settings:' + DJBags_LOCALE_FORMAT_SETTINGS = 'Format Settings:' DJBags_LOCALE_SETTINGS = 'DJBags Settings:' DJBags_LOCALE_CLEAR_NEW_ITEMS = 'Clear new items' DJBags_LOCALE_BACKGROUND_COLOR = 'Background color' @@ -54,8 +59,15 @@ localeText['enUS'] = function() DJBags_LOCALE_STACK_ALL = 'Stack all items' DJBags_LOCALE_SELL_JUNK = 'Auto sell junk' DJBags_LOCALE_DEPOSIT_REAGENT = 'Auto deposit reagents' - DJBags_LOCALE_MASONRY = 'Massonry' + DJBags_LOCALE_MASONRY = 'Masonry' DJBags_LOCALE_BOX = 'Box' + DJBags_LOCALE_CATEGORY_DIALOG_TITLE = 'Set category for: %s' + DJBags_LOCALE_GLOBAL = 'Global' + DJBags_LOCALE_BOE = 'BoE' + DJBags_LOCALE_BOA = 'BoA' + DJBags_LOCALE_VERTICAL = 'Vertical' + DJBags_LOCALE_MAX_ITEMS = 'Max items' + DJBags_LOCALE_MAX_HEIGHT = 'Max height' end if localeText[GetLocale()] then diff --git a/src/lua/controller/bag.lua b/src/lua/controller/bag.lua index 1c9f704..006d020 100644 --- a/src/lua/controller/bag.lua +++ b/src/lua/controller/bag.lua @@ -58,6 +58,12 @@ function controller:Close() DJBagsBagContainer:Hide() end +function controller:OnItemsCleared() + if DJBagsBagContainer:IsVisible() then + self:Update() + end +end + function controller:BAG_UPDATE(bag) ADDON:UpdateBags({bag}) DJBagsBagContainer:Arrange() diff --git a/src/lua/controller/bank.lua b/src/lua/controller/bank.lua index b160b9f..12ee421 100644 --- a/src/lua/controller/bank.lua +++ b/src/lua/controller/bank.lua @@ -19,6 +19,7 @@ function DJBagsBankBar_OnShow(self) self:Update() controller:Register() controller:Update() + controller:DepositReagents() end function DJBagsBankBar_OnHide(self) @@ -37,12 +38,25 @@ function DJBagsBankTab_OnClick(tab) end end +function controller:DepositReagents() + if ADDON.settings:GetSettings(DJBags_TYPE_MAIN)[DJBags_SETTING_DEPOSIT_REAGENT] then + PlaySound("igMainMenuOption"); + DepositReagentBank(); + end +end + function controller:Update() ADDON:UpdateBags({-1, 5, 6, 7, 8, 9, 10, 11, -3}) DJBagsBankContainer:Arrange() self:ArrangeReagents() end +function controller:OnItemsCleared() + if DJBagsBankBar:IsVisible() then + self:Update() + end +end + function controller:ArrangeReagents() if IsReagentBankUnlocked() then DJBagsReagentContainer.reagentButton:Hide() diff --git a/src/lua/core.lua b/src/lua/core.lua index 8d8f39f..d007dcf 100644 --- a/src/lua/core.lua +++ b/src/lua/core.lua @@ -16,6 +16,11 @@ ADDON.events:Add('ADDON_LOADED', core) --region Bag commands +function DJBags_ItemsCleared() + ADDON.bagController:OnItemsCleared() + ADDON.bankController:OnItemsCleared() +end + ToggleAllBags = function() ADDON.bagController:Toggle() end @@ -48,9 +53,9 @@ end --endregion -SLASH_DJBAGS1 = '/djb'; +SLASH_DJBAGS1, SLASH_DJBAGS2, SLASH_DJBAGS3 = '/djb', '/dj', 'djbags'; function SlashCmdList.DJBAGS(msg, editbox) - DJBagsBankBar:Show() + DJBagsSettingsContainer:Show() end SLASH_RL1 = '/rl'; diff --git a/src/lua/element/container.lua b/src/lua/element/container.lua index 01ed7b0..ce9e008 100644 --- a/src/lua/element/container.lua +++ b/src/lua/element/container.lua @@ -84,6 +84,6 @@ function container:Arrange(override) ADDON.settings:GetSettings(self.__type)[DJBags_SETTING_FORMATTER_MAX_HEIGHT], ADDON.settings:GetSettings(self.__type)[DJBags_SETTING_FORMATTER_BOX_COLS], ADDON.settings:GetSettings(self.__type)[DJBags_SETTING_FORMATTER_VERT], - override + override == 2 ) end \ No newline at end of file diff --git a/src/lua/element/item.lua b/src/lua/element/item.lua index 18fc737..37dd239 100644 --- a/src/lua/element/item.lua +++ b/src/lua/element/item.lua @@ -35,7 +35,7 @@ end function item:OnClick(button) if self:GetParent().id then if IsAltKeyDown() and button == 'LeftButton' then --- ADDON.categoryDialog(self:GetParent().id) + DJBagsCategoryDialogLoad(self:GetParent().id, self:GetParent().name) end end end @@ -58,15 +58,21 @@ function item:GetContainerName() local userDefinedList = ADDON.settings:GetUserDefinedList() if userDefinedList[self.id] then - return userDefinedList[self.id] .. '*' + return userDefinedList[self.id] end local globalDefinedList = ADDON.settings:GetGlobalUserDefinedList() if globalDefinedList[self.id] then - return globalDefinedList[self.id] .. '**' + return globalDefinedList[self.id] end local subClassSplitList = ADDON.settings:GetSettings(DJBags_TYPE_SUB_CLASS) + if subClassSplitList[DJBags_SETTING_BOE] and DJBagsTooltip:IsItemBOE(self.link) then + return DJBags_LOCALE_BOE + end + if subClassSplitList[DJBags_SETTING_BOA] and DJBagsTooltip:IsItemBOA(self.link) then + return DJBags_LOCALE_BOA + end if subClassSplitList[self.classId] then return self.class .. (self.subClass == BAG_FILTER_JUNK and '' or '_' .. self.subClass) end diff --git a/src/lua/element/itemContainer.lua b/src/lua/element/itemContainer.lua index 8b422ae..2861e47 100644 --- a/src/lua/element/itemContainer.lua +++ b/src/lua/element/itemContainer.lua @@ -91,9 +91,9 @@ function container:GetCount() return ADDON:Count(self.items) end -function container:Arrange(max, vert, maxCnt, override) +function container:Arrange(max, vert, maxCnt, override, forceSize) if override then self.arrange = nil end - ADDON:ArrangeItemContainer(self, max, vert, maxCnt) + ADDON:ArrangeItemContainer(self, max, vert, maxCnt, forceSize) end \ No newline at end of file diff --git a/src/lua/element/mainBar.lua b/src/lua/element/mainBar.lua index f2ec1a1..998f505 100644 --- a/src/lua/element/mainBar.lua +++ b/src/lua/element/mainBar.lua @@ -22,6 +22,7 @@ function container:Init() {0, 0, 0, 0.6}, {0.3, 0.3, 0.3, 1} ) + self:Show() end @@ -37,4 +38,4 @@ end function container:SetColors(background, border) self:SetBackdropColor(unpack(background)) self:SetBackdropBorderColor(unpack(border)) -end +end \ No newline at end of file diff --git a/src/lua/element/tooltip.lua b/src/lua/element/tooltip.lua index a6e9609..8e5a168 100644 --- a/src/lua/element/tooltip.lua +++ b/src/lua/element/tooltip.lua @@ -16,4 +16,34 @@ function DJBagsTooltip:GetItemLevel(link) end end end -end \ No newline at end of file +end + +function DJBagsTooltip:IsItemBOE(link) + self:SetOwner(UIParent, "ANCHOR_NONE") + self:SetHyperlink(link) + + for i = 2, self:NumLines() do + local text = _G[self:GetName() .. "TextLeft"..i]:GetText() + + if text and text:find(ITEM_BIND_ON_EQUIP) then + return true + end + end + + return false +end + +function DJBagsTooltip:IsItemBOA(link) + self:SetOwner(UIParent, "ANCHOR_NONE") + self:SetHyperlink(link) + + for i = 2, self:NumLines() do + local text = _G[self:GetName() .. "TextLeft"..i]:GetText() + + if text and text:find(ITEM_BIND_TO_BNETACCOUNT) then + return true + end + end + + return false +end diff --git a/src/lua/settings/settingsController.lua b/src/lua/settings/settingsController.lua index 4b2745e..467fde8 100644 --- a/src/lua/settings/settingsController.lua +++ b/src/lua/settings/settingsController.lua @@ -43,7 +43,7 @@ function settings:Init() [DJBags_SETTING_FORMATTER] = DJBags_FORMATTER_MASONRY, [DJBags_SETTING_FORMATTER_VERT] = false, [DJBags_SETTING_FORMATTER_MAX_ITEMS] = 12, - [DJBags_SETTING_FORMATTER_MAX_HEIGHT] = 0.5, + [DJBags_SETTING_FORMATTER_MAX_HEIGHT] = 50, [DJBags_SETTING_FORMATTER_BOX_COLS] = 4, [DJBags_SETTING_TRUNCATE_SUB_CLASS] = true, }, @@ -65,6 +65,8 @@ function settings:Init() [LE_ITEM_CLASS_RECIPE] = false, [LE_ITEM_CLASS_TRADEGOODS] = true, [LE_ITEM_CLASS_WEAPON] = false, + [DJBags_SETTING_BOE] = false, + [DJBags_SETTING_BOA] = false, }, [DJBags_TYPE_MAIN_BAR] = { [DJBags_SETTING_BACKGROUND_COLOR] = {0, 0, 0, 0.6}, @@ -126,10 +128,26 @@ function settings:GetUserDefinedList() return DJBags_DB[self.realm][self.player].userDefined end +function settings:AddUserDefinedItem(id, name) + DJBags_DB[self.realm][self.player].userDefined[id] = name + self:Update(2) +end + function settings:GetGlobalUserDefinedList() return DJBags_DB.userDefined end +function settings:AddGlobalDefinedItem(id, name) + DJBags_DB.userDefined[id] = name + self:Update(2) +end + +function settings:ClearUserDefinedItem(id) + DJBags_DB[self.realm][self.player].userDefined[id] = nil + DJBags_DB.userDefined[id] = nil + self:Update(2) +end + function settings:MigrateSettings(table, default) for k, v in pairs(default) do if table[k] ~= nil then diff --git a/src/lua/settings/settingsElements.lua b/src/lua/settings/settingsElements.lua index fb80662..3608de4 100644 --- a/src/lua/settings/settingsElements.lua +++ b/src/lua/settings/settingsElements.lua @@ -5,7 +5,7 @@ local function round(num, idp) return math.floor(num * mult + 0.5) / mult end -function DJBagsInitSettingsSlider(slider, name, min, max, step, type, setting) +function DJBagsInitSettingsSlider(slider, name, min, max, step, type, setting, noDeciaml) local value = ADDON.settings:GetSettings(type)[setting] _G[slider:GetName() .. 'Text']:SetText(tostring(name) .. ' - ' .. value) @@ -15,6 +15,7 @@ function DJBagsInitSettingsSlider(slider, name, min, max, step, type, setting) slider.type = type slider.setting = setting slider.name = name + slider.noDecimal = noDeciaml local onChange = slider:GetScript('OnValueChanged') slider:SetScript('OnValueChanged', nil) @@ -24,7 +25,8 @@ function DJBagsInitSettingsSlider(slider, name, min, max, step, type, setting) end function DJBagsSettingsSlider_OnChange(self, value) - _G[self:GetName() .. 'Text']:SetText(tostring(self.name) .. ' - ' .. round(value, 1)) + _G[self:GetName() .. 'Text']:SetText(tostring(self.name) .. ' - ' .. round(value, self.noDecimal and 0 or 1)) + value = self.noDecimal and round(value, 0) or value ADDON.settings:SetSettings(self.type, self.setting, value, 1) end @@ -69,4 +71,104 @@ end function DJBagsSettingsCheckBox_OnChange(checkbox, checked) ADDON.settings:SetSettings(checkbox.type, checkbox.setting, checked, checkbox.arrangeType) +end + +function DJBagsCategoryDialogLoad(id, name) + DJBagsCategoryDialog:Show() + DJBagsCategoryDialog.name:SetText(string.format(DJBags_LOCALE_CATEGORY_DIALOG_TITLE, name)) + DJBagsCategoryDialog.id = id + + local userDefined = ADDON.settings:GetUserDefinedList() + local globalDefined = ADDON.settings:GetGlobalUserDefinedList() + local current = userDefined[id] or globalDefined[id] + + if current then + DJBagsCategoryDialog.edit:SetText(current) + DJBagsCategoryDialog.global:SetChecked(userDefined[id] == nil) + else + DJBagsCategoryDialog.edit:SetText('') + DJBagsCategoryDialog.global:SetChecked(false) + end + DJBagsCategoryDialog.edit:SetFocus() + + UIDropDownMenu_Initialize(DJBagsCategoryDialog.dropdown, function(self, level) + local unique = {} + for _, v in pairs(ADDON.settings:GetUserDefinedList()) do + unique[v] = true + end + for _, v in pairs(ADDON.settings:GetGlobalUserDefinedList()) do + unique[v] = true + end + + if next(unique) ~= nil then + local info + for k, _ in pairs(unique) do + info = UIDropDownMenu_CreateInfo() + info.text = k + info.value = k + info.func = DJBagsCategoryDialog_DropDownClick + UIDropDownMenu_AddButton(info, level) + end + end + end) +end + +function DJBagsCategoryDialog_DropDownClick(self) + UIDropDownMenu_SetSelectedID(DJBagsCategoryDialog.dropdown, self:GetID()) + DJBagsCategoryDialog.edit:SetText(self.value) +end + +function DJBagsCategoryDialog_Done() + local global = DJBagsCategoryDialog.global:GetChecked() + local text = DJBagsCategoryDialog.edit:GetText() + if text and text ~= '' then + if global then + ADDON.settings:AddGlobalDefinedItem(DJBagsCategoryDialog.id, text) + else + ADDON.settings:AddUserDefinedItem(DJBagsCategoryDialog.id, text) + end + DJBagsCategoryDialog:Hide() + end +end + +function DJBagsCategoryDialog_Clear() + ADDON.settings:ClearUserDefinedItem(DJBagsCategoryDialog.id) + DJBagsCategoryDialog:Hide() +end + +function DJBagsFormatSettings_OnLoad(self) + local type = ADDON.settings:GetSettings(DJBags_TYPE_CONTAINER)[DJBags_SETTING_FORMATTER] + function self:ShowContainer(type) + if type == 1 then + self.masonry:Show() + self.box:Hide() + else + self.masonry:Hide() + self.box:Show() + end + end + self:ShowContainer(type) + + UIDropDownMenu_Initialize(self.dropdown, function(_, level) + local unique = { + DJBags_LOCALE_MASONRY, + DJBags_LOCALE_BOX + } + + local cnt = 0 + local info + for _, k in pairs(unique) do + cnt = cnt + 1 + info = UIDropDownMenu_CreateInfo() + info.text = k + info.value = cnt + info.func = function(item) + ADDON.settings:SetSettings(DJBags_TYPE_CONTAINER, DJBags_SETTING_FORMATTER, item.value, 2) + self:ShowContainer(item.value) + UIDropDownMenu_SetSelectedID(self.dropdown, item.value) + end + UIDropDownMenu_AddButton(info, level) + end + end) + UIDropDownMenu_SetSelectedID(self.dropdown, type) end \ No newline at end of file diff --git a/src/lua/tools/boxFormatter.lua b/src/lua/tools/boxFormatter.lua index 33ebcb5..107a6cd 100644 --- a/src/lua/tools/boxFormatter.lua +++ b/src/lua/tools/boxFormatter.lua @@ -31,9 +31,9 @@ ADDON.format[DJBags_FORMATTER_BOX] = function(frame, _, maxHeight, cols, _, over item:Hide() else item:ClearAllPoints() - item:Arrange(cols, nil, (item.name:GetText() == EMPTY and 1), override) + item:Arrange(cols, nil, (item.name:GetText() == EMPTY and 1), override, true) item:Show() - if (y + item:GetHeight() + frame.spacing) > (maxHeight * GetScreenHeight()) then + if (y + item:GetHeight() + frame.spacing) > (maxHeight / 100 * GetScreenHeight()) then y = 0 x = x - item:GetWidth() - frame.spacing end diff --git a/src/lua/tools/itemFormatter.lua b/src/lua/tools/itemFormatter.lua index 822e154..48d6fe8 100644 --- a/src/lua/tools/itemFormatter.lua +++ b/src/lua/tools/itemFormatter.lua @@ -20,7 +20,7 @@ local function alreadySorted(frame, max, vert) return false end -function ADDON:ArrangeItemContainer(frame, max, vert, maxCnt) +function ADDON:ArrangeItemContainer(frame, max, vert, maxCnt, force) if frame:IsEmpty() or alreadySorted(frame, max, vert) then return end local itemCount = 0 @@ -69,7 +69,9 @@ function ADDON:ArrangeItemContainer(frame, max, vert, maxCnt) end local colSize = math.ceil(itemCount / max) * (next(frame.items):GetWidth() + frame.spacing) - frame.spacing - local rowSize = (maxCnt and maxCnt or (itemCount < max and itemCount or max)) * (frame.spacing + next(frame.items):GetWidth()) - frame.spacing + local numCols = force and max or (maxCnt and maxCnt or (itemCount < max and itemCount or max)) + print(numCols, force) + local rowSize = numCols * (frame.spacing + next(frame.items):GetWidth()) - frame.spacing frame:SetSize( (vert and colSize or rowSize) + frame.padding * 2, diff --git a/src/manifest.xml b/src/manifest.xml index 2e49aa6..86f1ef1 100644 --- a/src/manifest.xml +++ b/src/manifest.xml @@ -42,7 +42,11 @@ + + + +