annotate Main.lua @ 13:cc98f28b1c7c tip

remove geradd message fix issue with -- add support for console commands
author Jay Bird <a4blank@yahoo.com>
date Thu, 13 Jan 2011 20:50:34 +0300
parents d2cbfe498c4d
children
rev   line source
a4blank@8 1
a4blank@8 2
a4blank@11 3 RTT = LibStub("AceAddon-3.0"):NewAddon("RaidTargetTactics", "AceConsole-3.0", "AceEvent-3.0")
a4blank@11 4 local _G = _G
a4blank@8 5 local L = LibStub("AceLocale-3.0"):GetLocale("RaidTargetTactics")
a4blank@8 6 local LDB = LibStub("LibDataBroker-1.1", true)
a4blank@8 7 local LDBIcon = LibStub("LibDBIcon-1.0", true)
a4blank@11 8 local Completion = LibStub("AceGUI-3.0-Completing-EditBox");
a4blank@11 9
a4blank@11 10 Completion:Register("Raid", -1, 0)
a4blank@11 11 local GetAutoCompleteResults_original = _G.GetAutoCompleteResults
a4blank@11 12 _G.GetAutoCompleteResults = function(text, include, exclude, results, position)
a4blank@11 13 if include == -1 then -- special hack for Raid members and self
a4blank@11 14 local users = RTT.partyInfo:GetUsers()
a4blank@11 15 local result = {}
a4blank@11 16 for _, name in ipairs(users) do
a4blank@11 17 if name:find(text) == 1 then
a4blank@11 18 table.insert(result, name)
a4blank@11 19 end
a4blank@11 20 if #result > results then
a4blank@11 21 break
a4blank@11 22 end
a4blank@11 23 end
a4blank@11 24 return unpack(result)
a4blank@11 25 else
a4blank@11 26 return GetAutoCompleteResults_original(text, include, exclude, results, position)
a4blank@11 27 end
a4blank@11 28 end
a4blank@11 29
a4blank@8 30
a4blank@8 31 local RTTIcon = LibStub("LibDataBroker-1.1"):NewDataObject("RTTIcon", {
a4blank@8 32 type = "data source",
a4blank@8 33 text = "Raid Target Tactics",
a4blank@8 34 icon = "Interface\\TARGETINGFRAME\\UI-RaidTargetingIcon_8",
a4blank@11 35 OnClick = function(frame, button) RTT:OnIconClick(frame, button) end,
a4blank@8 36 OnTooltipShow = function(tooltip)
a4blank@8 37 tooltip:AddLine("Raid Target Tactics")
a4blank@8 38 tooltip:AddLine(L.Minimap_Icon_Tooltip)
a4blank@8 39 end,
a4blank@8 40 })
a4blank@8 41
a4blank@8 42 local defaults = {
a4blank@8 43 profile = {
a4blank@8 44 visible = true,
a4blank@8 45 minimap = {
a4blank@8 46 hide = false,
a4blank@8 47 },
a4blank@11 48 setups = {},
a4blank@11 49 locked = false,
a4blank@8 50 },
a4blank@8 51 }
a4blank@8 52
a4blank@8 53 function RTT:OnInitialize()
a4blank@8 54 self.db = LibStub("AceDB-3.0"):New("TacticsSettings", defaults, true)
a4blank@11 55 self.partyInfo = PartyInfo()
a4blank@11 56 self.nameDialog = NameDialog(self:GetSetupNames())
a4blank@8 57
a4blank@8 58 LDBIcon:Register("RTTIcon", RTTIcon, self.db.profile.minimap)
a4blank@8 59 self:InitFrame()
a4blank@11 60 self:BindEvents()
a4blank@11 61 self.nameDialog:InitDialog()
a4blank@11 62 self.partyInfo:Update()
a4blank@10 63 if self.f:IsShown() ~= self.db.profile.visible then
a4blank@8 64 if self.db.profile.visible then
a4blank@8 65 self:ShowFrame()
a4blank@8 66 else
a4blank@8 67 self:HideFrame()
a4blank@8 68 end
a4blank@8 69 end
a4blank@11 70 if self.db.profile.locked then
a4blank@11 71 self.f:SetMovable(false)
a4blank@11 72 self.f:EnableMouse(false)
a4blank@11 73 end
a4blank@11 74 end
a4blank@11 75
a4blank@11 76 function RTT:GetSetupNames()
a4blank@11 77 local result = {}
a4blank@11 78 for name, _ in pairs(self.db.profile.setups) do
a4blank@11 79 table.insert(result, name)
a4blank@11 80 end
a4blank@11 81 return result
a4blank@11 82 end
a4blank@11 83
a4blank@11 84 function RTT:BindEvents()
a4blank@11 85 self:RegisterEvent("PARTY_MEMBERS_CHANGED")
a4blank@11 86 self:RegisterEvent("RAID_ROSTER_UPDATE")
a4blank@11 87 end
a4blank@11 88
a4blank@11 89 function RTT:PARTY_MEMBERS_CHANGED()
a4blank@11 90 self.partyInfo:Update()
a4blank@11 91 end
a4blank@11 92
a4blank@11 93 function RTT:RAID_ROSTER_UPDATE()
a4blank@11 94 self.partyInfo:Update()
a4blank@8 95 end
a4blank@8 96
a4blank@8 97 function RTT:InitFrame()
a4blank@11 98 self.f = CreateFrame("Frame", "__RTT_MAIN", UIParent)
a4blank@10 99 self.f:SetWidth(300)
a4blank@11 100 self.f:SetHeight(270)
a4blank@10 101 self.f:SetAlpha(0.8)
a4blank@11 102 self.f:SetMovable(true)
a4blank@11 103 self.f:EnableMouse(true)
a4blank@11 104 self.f:RegisterForDrag("LeftButton")
a4blank@11 105 self.f:SetScript("OnDragStart", self.f.StartMoving)
a4blank@11 106 self.f:SetScript("OnDragStop", self.f.StopMovingOrSizing)
a4blank@8 107 self.f:SetPoint("LEFT", UIParent, "LEFT", 10, 0)
a4blank@10 108 --[[self.f:SetBackdrop({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
a4blank@10 109 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
a4blank@10 110 tile = true, tileSize = 16, edgeSize = 16,
a4blank@10 111 insets = { left = 4, right = 4, top = 4, bottom = 4 }})
a4blank@10 112 ]]
a4blank@10 113 local backdrop = {
a4blank@10 114 -- path to the background texture
a4blank@10 115 bgFile = "Interface\\FrameGeneral\\UI-Background-Marble",
a4blank@10 116 -- path to the border texture
a4blank@10 117 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",
a4blank@10 118 -- true to repeat the background texture to fill the frame, false to scale it
a4blank@10 119 tile = true,
a4blank@10 120 -- size (width or height) of the square repeating background tiles (in pixels)
a4blank@10 121 tileSize = 256,
a4blank@10 122 -- thickness of edge segments and square size of edge corners (in pixels)
a4blank@10 123 edgeSize = 32,
a4blank@10 124 -- distance from the edges of the frame to those of the background texture (in pixels)
a4blank@10 125 insets = {
a4blank@10 126 left = 11,
a4blank@10 127 right = 12,
a4blank@10 128 top = 12,
a4blank@10 129 bottom = 11
a4blank@10 130 }
a4blank@10 131 }
a4blank@10 132 self.f:SetBackdrop(backdrop)
a4blank@10 133 self.f:SetFrameStrata("HIGH")
a4blank@10 134 --self.f:SetBackdropColor(0, 0, 0, 0.5)
a4blank@10 135
a4blank@11 136 local str1 = self.f:CreateFontString()
a4blank@11 137 str1:SetFontObject(GameFontHighlightSmall)
a4blank@11 138 str1:SetPoint("TOPLEFT", 45, -15)
a4blank@11 139 str1:SetText(L.Action .. ":")
a4blank@11 140 str1:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b)
a4blank@11 141 str1:Show()
a4blank@11 142
a4blank@11 143 local str1 = self.f:CreateFontString()
a4blank@11 144 str1:SetFontObject(GameFontHighlightSmall)
a4blank@11 145 str1:SetPoint("TOPLEFT", 175, -15)
a4blank@11 146 str1:SetText(L.Player .. ":")
a4blank@11 147 str1:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b)
a4blank@11 148 str1:Show()
a4blank@11 149
a4blank@11 150 self.icons = {}
a4blank@10 151 self.fields = {}
a4blank@10 152 self.selects = {}
a4blank@10 153 for num, icon in ipairs(RaidIcons) do
a4blank@11 154 self.icons[num] = icon
a4blank@11 155 icon:draw(self.f, 16, (num - 1) * -25 - 30)
a4blank@10 156
a4blank@11 157 local field = RoleField()
a4blank@11 158 field:draw(self.f, 45, (num -1) * -25 - 30)
a4blank@11 159 self.fields[num] = field
a4blank@10 160
a4blank@11 161 local userSelect = UserSelect()
a4blank@11 162 userSelect:draw(self.f, 170, ((num - 1) * -25) - 30)
a4blank@11 163 self.selects[num] = userSelect
a4blank@11 164 end
a4blank@11 165 self.talkButton = CreateFrame("Button", nil, self.f, "OptionsButtonTemplate")
a4blank@11 166 self.talkButton:ClearAllPoints()
a4blank@11 167 self.talkButton:SetText(L.Announce)
a4blank@11 168 self.talkButton:SetPoint("TOPLEFT", 170, -230)
a4blank@11 169 self.talkButton:SetWidth(102)
a4blank@11 170 self.talkButton:SetScript("OnClick", function() RTT:Announce() end)
a4blank@11 171
a4blank@11 172 self.dropdown = CreateFrame("Frame", "__RTT_DROPDOWN", UIParent, "UIDropDownMenuTemplate");
a4blank@11 173 UIDropDownMenu_Initialize(self.dropdown, self.InitDropdown, "MENU");
a4blank@11 174 end
a4blank@11 175
a4blank@11 176 function RTT:InitDropdown(level)
a4blank@11 177 level = level or 1
a4blank@11 178 if (level == 1) then
a4blank@11 179 local info = UIDropDownMenu_CreateInfo()
a4blank@11 180 info.hasArrow = false
a4blank@11 181 info.notCheckable = false
a4blank@11 182 info.text = L.Lock
a4blank@11 183 info.func = function() RTT:ToggleMovable() end
a4blank@11 184 info.keepShownOnClick = true
a4blank@11 185 info.checked = RTT.db.profile.locked
a4blank@11 186 UIDropDownMenu_AddButton(info, level)
a4blank@11 187
a4blank@11 188 info.hasArrow = true
a4blank@11 189 info.notCheckable = true
a4blank@11 190 info.text = L.Load
a4blank@11 191 info.value = "load"
a4blank@11 192 info.keepShownOnClick = false
a4blank@11 193 UIDropDownMenu_AddButton(info, level)
a4blank@11 194
a4blank@11 195 info.hasArrow = false
a4blank@11 196 info.notCheckable = true
a4blank@11 197 info.text = L.Save .. "…"
a4blank@11 198 info.keepShownOnClick = false
a4blank@11 199 local rows = RTT:GetFormData()
a4blank@11 200 if #rows == 0 then
a4blank@11 201 info.disabled = true
a4blank@11 202 else
a4blank@11 203 info.func = function() RTT:AskForSave() end
a4blank@10 204 end
a4blank@11 205 UIDropDownMenu_AddButton(info, level)
a4blank@11 206 end
a4blank@11 207
a4blank@11 208 if (level == 2 and UIDROPDOWNMENU_MENU_VALUE == "load") then
a4blank@11 209 local info = UIDropDownMenu_CreateInfo();
a4blank@11 210 for key, setup in pairs(RTT.db.profile.setups) do
a4blank@11 211 info.hasArrow = false
a4blank@11 212 info.notCheckable = true
a4blank@11 213 info.text = key
a4blank@11 214 info.func = function() RTT:Load(key) end
a4blank@11 215 UIDropDownMenu_AddButton(info, level);
a4blank@11 216 end
a4blank@10 217 end
a4blank@8 218 end
a4blank@8 219
a4blank@11 220 function RTT:AskForSave()
a4blank@11 221 local this = self
a4blank@11 222 self.nameDialog:Show()
a4blank@11 223 self.nameDialog:OnNameChosen(function(name) this:Save(name) end)
a4blank@11 224 end
a4blank@11 225
a4blank@11 226 function RTT:Save(name)
a4blank@11 227 self.db.profile.setups[name] = self:GetFormData(true)
a4blank@11 228 self.nameDialog:SetInvalidNames(self:GetSetupNames())
a4blank@11 229 end
a4blank@11 230
a4blank@11 231 function RTT:Load(name)
a4blank@11 232 local data = self.db.profile.setups[name]
a4blank@11 233 self:SetFormData(data)
a4blank@11 234 end
a4blank@11 235
a4blank@11 236 function RTT:OnIconClick(frame, button)
a4blank@11 237 if button == "RightButton" then
a4blank@11 238 -- context menu
a4blank@11 239 ToggleDropDownMenu(1, nil, self.dropdown, LDBIcon.objects["RTTIcon"], 0, 0)
a4blank@8 240 else
a4blank@11 241 if self.db.profile.visible then
a4blank@11 242 self:HideFrame()
a4blank@11 243 else
a4blank@11 244 self:ShowFrame()
a4blank@11 245 end
a4blank@11 246 self.db.profile.visible = not self.db.profile.visible
a4blank@8 247 end
a4blank@8 248 end
a4blank@8 249
a4blank@8 250 function RTT:HideFrame()
a4blank@8 251 self.f:Hide()
a4blank@8 252 end
a4blank@8 253
a4blank@8 254 function RTT:ShowFrame()
a4blank@8 255 self.f:Show()
a4blank@8 256 end
a4blank@8 257
a4blank@11 258 function RTT:ToggleMovable()
a4blank@11 259 if self.f:IsMovable() then
a4blank@11 260 self.f:SetMovable(false)
a4blank@11 261 self.f:EnableMouse(false)
a4blank@11 262 self.db.profile.locked = true
a4blank@11 263 else
a4blank@11 264 self.f:SetMovable(true)
a4blank@11 265 self.f:EnableMouse(true)
a4blank@11 266 self.db.profile.locked = false
a4blank@11 267 end
a4blank@11 268 end
a4blank@8 269
a4blank@11 270 function RTT:GetDefaultChatChannel()
a4blank@11 271 if self.partyInfo.is_in_raid then
a4blank@11 272 return "RAID"
a4blank@11 273 end
a4blank@11 274 if self.partyInfo.is_in_party then
a4blank@11 275 return "PARTY"
a4blank@11 276 end
a4blank@11 277 return nil
a4blank@11 278 end
a4blank@8 279
a4blank@11 280 function RTT:SetFormData(data)
a4blank@11 281 for idx, row in ipairs(data) do
a4blank@11 282 self.fields[idx]:SetText(row[2])
a4blank@11 283 self.selects[idx]:SetText(row[3])
a4blank@11 284 end
a4blank@11 285 end
a4blank@8 286
a4blank@11 287 function RTT:GetFormData(with_empty)
a4blank@11 288 local result = {}
a4blank@11 289 for idx, icon in ipairs(self.icons) do
a4blank@11 290 local action = strtrim(self.fields[idx]:GetText())
a4blank@11 291 local player = strtrim(self.selects[idx]:GetText())
a4blank@11 292 -- Either we want empty rows (for save)
a4blank@11 293 -- Or action or player are filled
a4blank@11 294 if with_empty or (#action > 0 or #player > 0) then
a4blank@11 295 table.insert(result, {icon:GetChatCommand(),
a4blank@11 296 action,
a4blank@11 297 player})
a4blank@11 298 end
a4blank@11 299 end
a4blank@11 300 return result
a4blank@11 301 end
a4blank@11 302
a4blank@11 303 function RTT:Announce()
a4blank@11 304 local channel = self:GetDefaultChatChannel()
a4blank@11 305 if channel then
a4blank@11 306 for _, data in ipairs(self:GetFormData()) do
a4blank@13 307 local str = data.icon
a4blank@13 308 if data.action then
a4blank@13 309 str = str .. " — " .. data.action
a4blank@13 310 end
a4blank@13 311 if data.player then
a4blank@13 312 str = str .. " — " .. data.player
a4blank@13 313 end
a4blank@11 314 SendChatMessage(str, channel)
a4blank@11 315 end
a4blank@11 316 end
a4blank@11 317 end
a4blank@11 318
a4blank@11 319