├── .gitignore ├── LICENSE.txt ├── README.md ├── RetailUI ├── Atlas.lua ├── Config.lua ├── Core.lua ├── Libs.xml ├── Libs │ ├── AceAddon-3.0 │ │ ├── AceAddon-3.0.lua │ │ └── AceAddon-3.0.xml │ ├── AceConfig-3.0 │ │ ├── AceConfig-3.0.lua │ │ ├── AceConfig-3.0.xml │ │ ├── AceConfigCmd-3.0 │ │ │ ├── AceConfigCmd-3.0.lua │ │ │ └── AceConfigCmd-3.0.xml │ │ ├── AceConfigDialog-3.0 │ │ │ ├── AceConfigDialog-3.0.lua │ │ │ └── AceConfigDialog-3.0.xml │ │ └── AceConfigRegistry-3.0 │ │ │ ├── AceConfigRegistry-3.0.lua │ │ │ └── AceConfigRegistry-3.0.xml │ ├── AceConsole-3.0 │ │ ├── AceConsole-3.0.lua │ │ └── AceConsole-3.0.xml │ ├── AceDB-3.0 │ │ ├── AceDB-3.0.lua │ │ └── AceDB-3.0.xml │ ├── AceEvent-3.0 │ │ ├── AceEvent-3.0.lua │ │ └── AceEvent-3.0.xml │ ├── AceGUI-3.0 │ │ ├── AceGUI-3.0.lua │ │ ├── AceGUI-3.0.xml │ │ └── widgets │ │ │ ├── AceGUIContainer-BlizOptionsGroup.lua │ │ │ ├── AceGUIContainer-DropDownGroup.lua │ │ │ ├── AceGUIContainer-Frame.lua │ │ │ ├── AceGUIContainer-InlineGroup.lua │ │ │ ├── AceGUIContainer-ScrollFrame.lua │ │ │ ├── AceGUIContainer-SimpleGroup.lua │ │ │ ├── AceGUIContainer-TabGroup.lua │ │ │ ├── AceGUIContainer-TreeGroup.lua │ │ │ ├── AceGUIContainer-Window.lua │ │ │ ├── AceGUIWidget-Button.lua │ │ │ ├── AceGUIWidget-CheckBox.lua │ │ │ ├── AceGUIWidget-ColorPicker.lua │ │ │ ├── AceGUIWidget-DropDown-Items.lua │ │ │ ├── AceGUIWidget-DropDown.lua │ │ │ ├── AceGUIWidget-EditBox.lua │ │ │ ├── AceGUIWidget-Heading.lua │ │ │ ├── AceGUIWidget-Icon.lua │ │ │ ├── AceGUIWidget-InteractiveLabel.lua │ │ │ ├── AceGUIWidget-Keybinding.lua │ │ │ ├── AceGUIWidget-Label.lua │ │ │ ├── AceGUIWidget-MultiLineEditBox.lua │ │ │ └── AceGUIWidget-Slider.lua │ ├── AceHook-3.0 │ │ ├── AceHook-3.0.lua │ │ └── AceHook-3.0.xml │ ├── CallbackHandler-1.0 │ │ ├── CallbackHandler-1.0.lua │ │ └── CallbackHandler-1.0.xml │ ├── LibDBIcon-1.0 │ │ ├── LibDBIcon-1.0.lua │ │ └── LibDBIcon-1.0.xml │ ├── LibDataBroker-1.1 │ │ └── LibDataBroker-1.1.lua │ └── LibStub │ │ └── LibStub.lua ├── Modules │ ├── ActionBar.lua │ ├── BuffFrame.lua │ ├── CastingBar.lua │ ├── EditorMode.lua │ ├── Minimap.lua │ ├── QuestLog.lua │ ├── QuestTracker.lua │ └── UnitFrame.lua ├── NineSlice.lua ├── RetailUI.toc └── Textures │ ├── Minimap │ ├── Calendar.blp │ ├── EyeGroupFinderFlipbook.blp │ ├── GuildBanner.blp │ └── MinimapBorder.blp │ ├── PlayerFrame │ ├── ClassOverlayComboPoints.BLP │ ├── ClassOverlayDeathKnightRunes.BLP │ ├── LFGRoleIcons.blp │ └── PlayerRestFlipbook.blp │ ├── TargetFrame │ ├── BossFrame.blp │ └── NameBackground.blp │ └── UI │ ├── ActionBar.blp │ ├── ActionBarHorizontal.blp │ ├── ActionBarVertical.blp │ ├── BagSlots.blp │ ├── BagSlotsKey.blp │ ├── CastingBar.blp │ ├── CollapseButton.blp │ ├── EditorGrid.blp │ ├── ExperienceBar.blp │ ├── MicroMenu.blp │ ├── Minimap.blp │ ├── QuestTracker.BLP │ └── UnitFrame.blp └── media ├── RUI-1.png ├── RUI-2.png ├── RUI-3.png ├── RUI-4.png └── RUI-5.png /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Dmitriy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Retail UI 2 | 3 | ![Client](https://img.shields.io/badge/Client-3%2E3%2E5a-blue) ![Version](https://img.shields.io/badge/Version-1%2E3-blue) ![License](https://img.shields.io/badge/License-MIT-green) 4 | 5 | UI inspired by the Retail version. This addon retextures the existing interface. 6 | 7 | ![Preview](media/RUI-1.png) 8 | 9 | ## Features 10 | 11 | - Action Bars 12 | - Unit Frames 13 | - Minimap 14 | - Casting Bars 15 | - Vehicle UI 16 | - Grid Layout to adjust the possition of UI elements 17 | - Target Health Bar class colored 18 | - scaling the UI 19 | 20 | ## Quick Start 21 | 22 | Type ``/rui edit`` for open grid layout. 23 | 24 | Type ``/rui default`` for reset settings. 25 | 26 | ## Screenshots 27 | 28 | ![Screenshot-1](media/RUI-2.png) 29 | ![Screenshot-2](media/RUI-3.png) 30 | ![Screenshot-3](media/RUI-4.png) 31 | ![Screenshot-4](media/RUI-5.png) 32 | 33 | ## Contributing 34 | 35 | If you are interested in improving this addon, please pull request your changes. 36 | When making a pull request, please adhere to the style and structure of the source code. 37 | -------------------------------------------------------------------------------- /RetailUI/Config.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Copyright (c) Dmitriy. All rights reserved. 3 | Licensed under the MIT license. See LICENSE file in the project root for details. 4 | ]] 5 | 6 | local RUI = LibStub('AceAddon-3.0'):GetAddon('RetailUI') 7 | 8 | RUI.optionsSlash = { 9 | name = "RetailUI Commands", 10 | order = 0, 11 | type = "group", 12 | args = { 13 | edit = { 14 | name = "Enable Edit Mode", 15 | type = 'execute', 16 | order = 0, 17 | func = function() 18 | local EditorMode = RUI:GetModule('EditorMode') 19 | if EditorMode:IsShown() then 20 | EditorMode:Hide() 21 | else 22 | EditorMode:Show() 23 | end 24 | end, 25 | dialogHidden = true 26 | }, 27 | scale = { 28 | name = "Scale", 29 | order = 1, 30 | type = "group", 31 | args = { 32 | player = { 33 | name = "Player Frame Scale", 34 | type = 'input', 35 | order = 0, 36 | set = function(info, input) 37 | SaveUIFrameScale(input, "player") 38 | end, 39 | dialogHidden = true 40 | }, 41 | target = { 42 | name = "Target Frame Scale", 43 | type = 'input', 44 | order = 1, 45 | set = function(info, input) 46 | SaveUIFrameScale(input, "target") 47 | end, 48 | dialogHidden = true 49 | }, 50 | focus = { 51 | name = "Focus Frame Scale", 52 | type = 'input', 53 | order = 1, 54 | set = function(info, input) 55 | SaveUIFrameScale(input, "focus") 56 | end, 57 | dialogHidden = true 58 | }, 59 | tot = { 60 | name = "Target of Target Frame Scale", 61 | type = 'input', 62 | order = 1, 63 | set = function(info, input) 64 | SaveUIFrameScale(input, "targetOfTarget") 65 | end, 66 | dialogHidden = true 67 | }, 68 | pet = { 69 | name = "Pet Frame Scale", 70 | type = 'input', 71 | order = 1, 72 | set = function(info, input) 73 | SaveUIFrameScale(input, "pet") 74 | end, 75 | dialogHidden = true 76 | }, 77 | } 78 | }, 79 | default = { 80 | name = "Load Default Settings", 81 | type = 'execute', 82 | order = 0, 83 | func = function() 84 | local UnitFrameModule = RUI:GetModule("UnitFrame") 85 | local CastingBarModule = RUI:GetModule("CastingBar") 86 | local ActionBarModule = RUI:GetModule("ActionBar") 87 | local MinimapModule = RUI:GetModule("Minimap") 88 | local QuestTrackerModule = RUI:GetModule("QuestTracker") 89 | local BuffFrameModule = RUI:GetModule("BuffFrame") 90 | 91 | ActionBarModule:LoadDefaultSettings() 92 | ActionBarModule:UpdateWidgets() 93 | 94 | UnitFrameModule:LoadDefaultSettings() 95 | UnitFrameModule:UpdateWidgets() 96 | 97 | CastingBarModule:LoadDefaultSettings() 98 | CastingBarModule:UpdateWidgets() 99 | 100 | MinimapModule:LoadDefaultSettings() 101 | MinimapModule:UpdateWidgets() 102 | 103 | QuestTrackerModule:LoadDefaultSettings() 104 | QuestTrackerModule:UpdateWidgets() 105 | 106 | BuffFrameModule:LoadDefaultSettings() 107 | BuffFrameModule:UpdateWidgets() 108 | end, 109 | dialogHidden = true 110 | } 111 | } 112 | } 113 | 114 | RUI.default = { 115 | profile = { 116 | widgets = {} 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /RetailUI/Core.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | Copyright (c) Dmitriy. All rights reserved. 3 | Licensed under the MIT license. See LICENSE file in the project root for details. 4 | ]] 5 | 6 | local RUI = LibStub('AceAddon-3.0'):NewAddon('RetailUI', 'AceConsole-3.0') 7 | local AceConfig = LibStub("AceConfig-3.0") 8 | local AceDB = LibStub("AceDB-3.0") 9 | 10 | RUI.InterfaceVersion = select(4, GetBuildInfo()) 11 | RUI.Wrath = (RUI.InterfaceVersion >= 30300) 12 | RUI.DB = nil 13 | 14 | function RUI:OnInitialize() 15 | RUI.DB = AceDB:New("RetailUIDB", RUI.default, true) 16 | AceConfig:RegisterOptionsTable("RUI Commands", RUI.optionsSlash, "rui") 17 | end 18 | 19 | function RUI:OnEnable() end 20 | 21 | function RUI:OnDisable() end 22 | 23 | function CreateUIFrame(width, height, frameName) 24 | local frame = CreateFrame("Frame", 'RUI_' .. frameName, UIParent) 25 | frame:SetSize(width, height) 26 | 27 | frame:RegisterForDrag("LeftButton") 28 | frame:EnableMouse(false) 29 | frame:SetMovable(false) 30 | frame:SetScript("OnDragStart", function(self, button) 31 | self:StartMoving() 32 | end) 33 | frame:SetScript("OnDragStop", function(self) 34 | self:StopMovingOrSizing() 35 | end) 36 | 37 | frame:SetFrameLevel(100) 38 | frame:SetFrameStrata('FULLSCREEN') 39 | 40 | do 41 | local texture = frame:CreateTexture(nil, 'BACKGROUND') 42 | texture:SetAllPoints(frame) 43 | texture:SetTexture("Interface\\AddOns\\RetailUI\\Textures\\UI\\ActionBarHorizontal.blp") 44 | texture:SetTexCoord(0, 512 / 512, 14 / 2048, 85 / 2048) 45 | texture:Hide() 46 | 47 | frame.editorTexture = texture 48 | end 49 | 50 | do 51 | local fontString = frame:CreateFontString(nil, "BORDER", 'GameFontNormal') 52 | fontString:SetAllPoints(frame) 53 | fontString:SetText(frameName) 54 | fontString:Hide() 55 | 56 | frame.editorText = fontString 57 | end 58 | 59 | return frame 60 | end 61 | 62 | RUI.frames = {} 63 | 64 | function ShowUIFrame(frame) 65 | frame:SetMovable(false) 66 | frame:EnableMouse(false) 67 | 68 | frame.editorTexture:Hide() 69 | frame.editorText:Hide() 70 | 71 | for _, target in pairs(RUI.frames[frame]) do 72 | target:SetAlpha(1) 73 | end 74 | 75 | RUI.frames[frame] = nil 76 | end 77 | 78 | function HideUIFrame(frame, exclude) 79 | frame:SetMovable(true) 80 | frame:EnableMouse(true) 81 | 82 | frame.editorTexture:Show() 83 | frame.editorText:Show() 84 | 85 | RUI.frames[frame] = {} 86 | 87 | exclude = exclude or {} 88 | 89 | for _, target in pairs(exclude) do 90 | target:SetAlpha(0) 91 | tinsert(RUI.frames[frame], target) 92 | end 93 | end 94 | 95 | function SaveUIFramePosition(frame, widgetName) 96 | local _, _, relativePoint, posX, posY = frame:GetPoint('CENTER') 97 | RUI.DB.profile.widgets[widgetName].anchor = relativePoint 98 | RUI.DB.profile.widgets[widgetName].posX = posX 99 | RUI.DB.profile.widgets[widgetName].posY = posY 100 | end 101 | 102 | function SaveUIFrameScale(input, widgetName) 103 | local scale = tonumber(input) -- Convert input to a number 104 | if not scale or scale <= 0 then -- validate 105 | print("Invalid scale. Please provide a positive number.") 106 | return 107 | end 108 | 109 | RUI.DB.profile.widgets[widgetName].scale = scale -- save the scale 110 | 111 | local UnitFrameModule = RUI:GetModule("UnitFrame") -- update the UI to reflect the changes 112 | UnitFrameModule:UpdateWidgets() 113 | print(widgetName .. " Frame Scale saved as " .. GetUIFrameScale(widgetName)) -- print confirmation to a user 114 | end 115 | 116 | function GetUIFrameScale(widgetName) 117 | return RUI.DB.profile.widgets[widgetName].scale 118 | end 119 | 120 | function CheckSettingsExists(self, widgets) 121 | for _, widget in pairs(widgets) do 122 | if RUI.DB.profile.widgets[widget] == nil then 123 | self:LoadDefaultSettings() 124 | break 125 | end 126 | end 127 | self:UpdateWidgets() 128 | end 129 | -------------------------------------------------------------------------------- /RetailUI/Libs.xml: -------------------------------------------------------------------------------- 1 | 2 |