From 2857b79a1577ac560f0e1e8c1c52a7793c4149f2 Mon Sep 17 00:00:00 2001 From: Adrian L Lange Date: Fri, 24 May 2013 22:52:43 +0200 Subject: [PATCH] Complete rewrite - Added config - Support for Loot Specialization --- Config.lua | 114 ++++++++++++ HabeebIt.lua | 543 +++++++++++++++++++++++++++++++++------------------------- HabeebIt.toc | 4 +- 3 files changed, 422 insertions(+), 239 deletions(-) create mode 100644 Config.lua diff --git a/Config.lua b/Config.lua new file mode 100644 index 0000000..b305da9 --- /dev/null +++ b/Config.lua @@ -0,0 +1,114 @@ +local addonName, ns = ... + +local buttons = {} +local temporary = {} + +local defaults = { + position = 'TOP', +} + +local Panel = CreateFrame('Frame', nil, InterfaceOptionsFramePanelContainer) +Panel.name = addonName +Panel:Hide() + +Panel:RegisterEvent('PLAYER_LOGIN') +Panel:SetScript('OnEvent', function() + HabeebItDB = HabeebItDB or defaults + + for key, value in pairs(defaults) do + if(HabeebItDB[key] == nil) then + HabeebItDB[key] = value + end + end + + HabeebItContainer:PLAYER_LOGIN() +end) + +function Panel:okay() + for key, value in pairs(temporary) do + HabeebItDB[key] = value + end + + HabeebItContainer:HandleUpdate() +end + +function Panel:default() + HabeebItDB = defaults + table.wipe(temporary) +end + +function Panel:refresh() + for key, button in pairs(buttons) do + if(button:IsObjectType('Button')) then + UIDropDownMenu_SetSelectedValue(button, HabeebItDB[key]) + + -- This is for some reason needed, gotta take a look into it later + UIDropDownMenu_SetText(button, _G[HabeebItDB[key] .. '_KEY']) + end + end +end + +local CreateDropdown +do + local function OnClick(self) + UIDropDownMenu_SetSelectedValue(self:GetParent().dropdown, self.value) + temporary[self:GetParent().dropdown.key] = self.value + end + + function CreateDropdown(parent, key, func) + local Dropdown = CreateFrame('Button', addonName .. 'DropDown_' .. GetTime(), parent, 'UIDropDownMenuTemplate') + Dropdown.OnClick = OnClick + Dropdown.key = key + + UIDropDownMenu_SetWidth(Dropdown, 90) + UIDropDownMenu_SetSelectedValue(Dropdown, HabeebItDB[key]) + UIDropDownMenu_Initialize(Dropdown, func) + + local Text = Dropdown:CreateFontString(nil, nil, 'GameFontHighlight') + Text:SetPoint('LEFT', Dropdown, 'RIGHT', -1, 2) + Dropdown.Text = Text + + buttons[key] = Dropdown + + return Dropdown + end +end + +Panel:SetScript('OnShow', function(self) + local Title = self:CreateFontString(nil, nil, 'GameFontNormalLarge') + Title:SetPoint('TOPLEFT', 16, -16) + Title:SetText(addonName) + + local Description = self:CreateFontString(nil, nil, 'GameFontHighlightSmall') + Description:SetPoint('TOPLEFT', Title, 'BOTTOMLEFT', 0, -8) + Description:SetPoint('RIGHT', -32, 0) + Description:SetJustifyH('LEFT') + Description:SetText('Quick access to your upcoming loot!') + self.Description = Description + + local Position = CreateDropdown(self, 'position', function(self) + local selected = UIDropDownMenu_GetSelectedValue(self) + local info = UIDropDownMenu_CreateInfo() + info.text = 'Bottom' + info.value = 'BOTTOM' + info.func = self.OnClick + info.checked = selected == info.value + UIDropDownMenu_AddButton(info) + + info.text = 'Top' + info.value = 'TOP' + info.checked = selected == info.value + UIDropDownMenu_AddButton(info) + end) + Position:SetPoint('TOPLEFT', Description, 'BOTTOMLEFT', -13, -14) + Position.Text:SetText('Position of the list') + + self:SetScript('OnShow', nil) +end) + +InterfaceOptions_AddCategory(Panel) + +SLASH_HabeebIt1 = '/habeebit' +SlashCmdList[addonName] = function() + InterfaceOptionsFrame_OpenToCategory(addonName) +end diff --git a/HabeebIt.lua b/HabeebIt.lua index 3553734..2682635 100644 --- a/HabeebIt.lua +++ b/HabeebIt.lua @@ -1,20 +1,151 @@ local _, ns = ... -local items = {} -local specializations = {} -local collapsed = true local currentEncounterID +local itemButtons = {} -local Frame = CreateFrame('Frame', 'HabeebItFrame', BonusRollFrame) -local Handle = CreateFrame('Button', 'HabeebItHandle', BonusRollFrame) - -local backdrop = { - bgFile = [[Interface\ChatFrame\ChatFrameBackground]], tile = true, tileSize = 16, - edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], edgeSize = 16, +local BACKDROP = { + bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=], tile = true, tileSize = 16, + edgeFile = [=[Interface\Tooltips\UI-Tooltip-Border]=], edgeSize = 16, insets = {left = 4, right = 4, top = 4, bottom = 4} } -local function OnUpdate(self, elapsed) +local Container = CreateFrame('Frame', 'HabeebItContainer', BonusRollFrame) +local Handle = CreateFrame('Button', 'HabeebItHandle', BonusRollFrame) + +local Hotspot = CreateFrame('Frame', nil, BonusRollFrame) +local Buttons = CreateFrame('Frame', 'HabeebItSpecButtons', Hotspot) + +local function SpecButtonClick(self) + SetLootSpecialization(self.specID) + Buttons:Hide() + BonusRollFrame.SpecIcon:SetDesaturated(false) +end + +local function SpecButtonEnter(self) + GameTooltip:SetOwner(self, 'ANCHOR_TOPRIGHT') + GameTooltip:AddLine(self.name, 1, 1, 1) + GameTooltip:Show() +end + +local specButtons +local function HotspotEnter() + if(not Buttons:IsShown()) then + if(not specButtons) then + local numSpecs = GetNumSpecializations() + for index = 1, numSpecs do + local specID, name, _, texture = GetSpecializationInfo(index) + + local SpecButton = CreateFrame('Button', nil, Buttons) + SpecButton:SetPoint('LEFT', index * 28, 0) + SpecButton:SetSize(22, 22) + SpecButton:SetScript('OnClick', SpecButtonClick) + SpecButton:SetScript('OnEnter', SpecButtonEnter) + SpecButton:SetScript('OnLeave', GameTooltip_Hide) + + SpecButton.specID = specID + SpecButton.name = name + + local Icon = SpecButton:CreateTexture(nil, 'OVERLAY', nil, 1) + Icon:SetAllPoints() + Icon:SetTexture(texture) + + local Ring = SpecButton:CreateTexture(nil, 'OVERLAY', nil, 2) + Ring:SetPoint('TOPLEFT', -6, 6) + Ring:SetSize(58, 58) + Ring:SetTexture([=[Interface\Minimap\Minimap-TrackingBorder]=]) + end + + Buttons:SetSize(numSpecs * 28 + 34, 38) + + specButtons = true + end + + BonusRollFrame.SpecIcon:SetDesaturated(true) + Buttons:Show() + end +end + +local function HotspotLeave() + if(not Buttons:IsMouseOver()) then + BonusRollFrame.SpecIcon:SetDesaturated(false) + Buttons:Hide() + end +end + +local function ButtonsLeave(self) + local parent = GetMouseFocus():GetParent() + if(not Hotspot:IsMouseOver() and not (parent and parent == self)) then + BonusRollFrame.SpecIcon:SetDesaturated(false) + self:Hide() + end +end + +local collapsed = true +local function HandleClick() + Handle:ClearAllPoints() + + if(collapsed) then + if(HabeebItDB.position == 'BOTTOM') then + Handle.Arrow:SetTexCoord(1/2, 1, 1, 1, 1/2, 0, 1, 0) + Handle:SetPoint('BOTTOM', Container, 0, -14) + else + Handle.Arrow:SetTexCoord(1, 0, 1/2, 0, 1, 1, 1/2, 1) + Handle:SetPoint('TOP', Container, 0, 14) + end + + Container:Show() + else + if(HabeebItDB.position == 'BOTTOM') then + Handle.Arrow:SetTexCoord(0, 0, 1/2, 0, 0, 1, 1/2, 1) + Handle:SetPoint('TOP', BonusRollFrame, 'BOTTOM', 0, 2) + else + Handle.Arrow:SetTexCoord(1/2, 1, 0, 1, 1/2, 0, 0, 0) + Handle:SetPoint('BOTTOM', BonusRollFrame, 'TOP', 0, -2) + end + + Container:Hide() + end + + collapsed = not collapsed +end + +function Container:HandleUpdate() + self:ClearAllPoints() + + if(HabeebItDB.position == 'BOTTOM') then + self:SetPoint('TOP', BonusRollFrame, 'BOTTOM') + + Handle.Arrow:SetTexCoord(0, 0, 1/2, 0, 0, 1, 1/2, 1) + Handle.TopCenter:Hide() + Handle.TopRight:Hide() + Handle.TopLeft:Hide() + Handle.BottomCenter:Show() + Handle.BottomRight:Show() + Handle.BottomLeft:Show() + else + self:SetPoint('BOTTOM', BonusRollFrame, 'TOP') + + Handle.Arrow:SetTexCoord(1/2, 1, 0, 1, 1/2, 0, 0, 0) + Handle.TopCenter:Show() + Handle.TopRight:Show() + Handle.TopLeft:Show() + Handle.BottomCenter:Hide() + Handle.BottomRight:Hide() + Handle.BottomLeft:Hide() + end + + self:Hide() + collapsed = true +end + +local function HookStartRoll() + local specID = GetLootSpecialization() + if(not specID or specID == 0) then + SetLootSpecialization(GetSpecializationInfo(GetSpecialization())) + end +end + +local function ItemButtonUpdate(self, elapsed) if(IsModifiedClick('COMPAREITEMS')) then GameTooltip_ShowCompareItem() else @@ -30,119 +161,102 @@ local function OnUpdate(self, elapsed) end end -local function OnEnter(self) +local function ItemButtonClick(self) + HandleModifiedItemClick(self.itemLink) +end + +local function ItemButtonEnter(self) GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT') GameTooltip:SetItemByID(self.itemID) - self:SetScript('OnUpdate', OnUpdate) + self:SetScript('OnUpdate', ItemButtonUpdate) end -local function OnLeave(self) +local function ItemButtonLeave(self) GameTooltip:Hide() self:SetScript('OnUpdate', nil) end -local function OnClick(self) - HandleModifiedItemClick(self.itemLink) -end - local function GetItemLine(index) - local Item = items[index] - if(not Item) then - Item = CreateFrame('Button', nil, Frame) - Item:SetSize(321, 45) + local ItemButton = itemButtons[index] + if(not ItemButton) then + ItemButton = CreateFrame('Button', nil, Container) + ItemButton:SetSize(276, 38) - local Icon = Item:CreateTexture(nil, 'BACKGROUND') - Icon:SetPoint('TOPLEFT', 2, -2) - Icon:SetSize(42, 42) - Item.Icon = Icon + local Icon = ItemButton:CreateTexture(nil, 'BACKGROUND') + Icon:SetPoint('TOPLEFT', 1, -1) + Icon:SetSize(36, 36) + ItemButton.Icon = Icon - local Background = Item:CreateTexture(nil, 'BORDER') + local Background = ItemButton:CreateTexture(nil, 'BORDER') Background:SetAllPoints() Background:SetTexture([[Interface\EncounterJournal\UI-EncounterJournalTextures]]) Background:SetTexCoord(0.00195313, 0.62890625, 0.61816406, 0.66210938) Background:SetDesaturated(true) - local Name = Item:CreateFontString(nil, 'ARTWORK', 'GameFontNormalMed3') - Name:SetPoint('TOPLEFT', Icon, 'TOPRIGHT', 7, -7) - Name:SetSize(250, 12) + local Name = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontNormalMed3') + Name:SetPoint('TOPLEFT', Icon, 'TOPRIGHT', 7, -4) + Name:SetPoint('TOPRIGHT', -6, -4) + Name:SetHeight(12) Name:SetJustifyH('LEFT') - Item.Name = Name + ItemButton.Name = Name - local Class = Item:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') - Class:SetPoint('BOTTOMRIGHT', Name, 'TOPLEFT', 264, -30) + local Class = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') + Class:SetPoint('BOTTOMRIGHT', Name, 'TOPLEFT', 224, -28) Class:SetSize(0, 12) Class:SetJustifyH('RIGHT') - Item.Class = Class + ItemButton.Class = Class - local Slot = Item:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') - Slot:SetPoint('BOTTOMLEFT', Icon, 'BOTTOMRIGHT', 7, 5) + local Slot = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') + Slot:SetPoint('BOTTOMLEFT', Icon, 'BOTTOMRIGHT', 7, 4) Slot:SetPoint('BOTTOMRIGHT', Class, 'BOTTOMLEFT', -15, 0) Slot:SetSize(0, 12) Slot:SetJustifyH('LEFT') - Item.Slot = Slot - - Item:SetScript('OnClick', OnClick) - Item:SetScript('OnEnter', OnEnter) - Item:SetScript('OnLeave', OnLeave) - - items[index] = Item - end - - return Item -end + ItemButton.Slot = Slot -local function UpdatePosition() - local populateDown = Frame:GetBottom() > (UIParent:GetHeight() / 1.5) + ItemButton:SetScript('OnClick', ItemButtonClick) + ItemButton:SetScript('OnEnter', ItemButtonEnter) + ItemButton:SetScript('OnLeave', ItemButtonLeave) - Frame:ClearAllPoints() - if(populateDown) then - Frame:SetPoint('TOPLEFT', BonusRollFrame, 'TOPRIGHT') - else - Frame:SetPoint('BOTTOMLEFT', BonusRollFrame, 'BOTTOMRIGHT') + itemButtons[index] = ItemButton end - for index, button in pairs(items) do - button:ClearAllPoints() - if(populateDown) then - button:SetPoint('TOP', 0, (6 + ((index - 1) * 48)) * -1) - else - button:SetPoint('BOTTOM', 0, 6 + ((index - 1) * 48)) - end - end + return ItemButton end -local function PopulateList() +function Container:Populate() local numItems = 0 for index = 1, EJ_GetNumLoot() do local name, texture, slot, itemClass, itemID, itemLink, encounterID = EJ_GetLootInfoByIndex(index) if(encounterID == currentEncounterID) then numItems = numItems + 1 - local Item = GetItemLine(numItems) - Item.Icon:SetTexture(texture) - Item.Name:SetText(name) - Item.Slot:SetText(slot) - Item.Class:SetText(itemClass) + local ItemButton = GetItemLine(numItems) + ItemButton.Icon:SetTexture(texture) + ItemButton.Name:SetText(name) + ItemButton.Slot:SetText(slot) + ItemButton.Class:SetText(itemClass) - Item.itemID = itemID - Item.itemLink = itemLink + ItemButton.itemID = itemID + ItemButton.itemLink = itemLink - Item:Show() + if(HabeebItDB.position == 'BOTTOM') then + ItemButton:SetPoint('TOP', 0, (6 + ((numItems - 1) * 40)) * -1) + else + ItemButton:SetPoint('BOTTOM', 0, 6 + ((numItems - 1) * 40)) + end + + ItemButton:Show() end end - Frame:SetHeight(math.max(76, 8 + (numItems * 48))) + self:SetHeight(math.max(50, 10 + (numItems * 40))) if(numItems > 0) then - Frame.Empty:Hide() + self.Empty:Hide() else - Frame.Empty:Show() - end - - if(Frame:IsShown()) then - UpdatePosition() + self.Empty:Show() end if(EncounterJournal) then @@ -151,33 +265,15 @@ local function PopulateList() end end -local function UpdateSpecializations(currentIndex) - for index, button in pairs(specializations) do - if(currentIndex == index) then - button.LeftBorder:SetVertexColor(1, 0, 0) - button.RightBorder:SetVertexColor(1, 0, 0) - else - button.LeftBorder:SetVertexColor(1, 1, 1) - button.RightBorder:SetVertexColor(1, 1, 1) - end - end -end - -local function InitializeList(specialization, shown) +function Container:Update() if(EncounterJournal) then EncounterJournal:UnregisterEvent('EJ_DIFFICULTY_UPDATE') end - for index, button in pairs(items) do + for index, button in pairs(itemButtons) do button:Hide() end - if(not shown) then - collapsed = false - Handle:GetScript('OnClick')(Handle) - UpdateSpecializations(specialization) - end - local _, _, difficulty = GetInstanceInfo() EJ_SetDifficulty(difficulty > 2 and (difficulty - 2) or 1) @@ -186,163 +282,134 @@ local function InitializeList(specialization, shown) EJ_SelectEncounter(currentEncounterID) local _, _, classID = UnitClass('player') - EJ_SetLootFilter(classID, specialization and GetSpecializationInfo(specialization) or 0) + EJ_SetLootFilter(classID, GetLootSpecialization() or GetSpecializationInfo(GetSpecialization() or 0) or 0) - PopulateList() + self:Populate() end -local function SpecializationClick(self) - UpdateSpecializations(self.index) - InitializeList(self.index, true) -end +function Container:Initialize() + collapsed = false + HandleClick() -local function SpecializationEnter(self) - GameTooltip:SetOwner(self, 'ANCHOR_TOPRIGHT') - GameTooltip:AddLine(self.name, 1, 1, 1) - GameTooltip:Show() + Container:Update() end -local function GetSpec() - local loot = GetLootSpecialization() - if(loot and loot > 0) then - for index = 1, GetNumSpecializations() do - if(GetSpecializationInfo(index) == loot) then - return index - end - end - else - return GetSpecialization() +function Container:EJ_LOOT_DATA_RECIEVED(event) + if(EncounterJournal) then + EncounterJournal:UnregisterEvent(event) end -end -local function CreateSpecializationTabs(self) - for index = 1, GetNumSpecializations() do - local SpecButton = CreateFrame('Button', nil, self) - SpecButton:SetSize(24, 16) - SpecButton:SetScript('OnClick', SpecializationClick) - SpecButton:SetScript('OnEnter', SpecializationEnter) - SpecButton:SetScript('OnLeave', GameTooltip_Hide) - SpecButton:SetFrameLevel(6) - - local _, name, _, texture = GetSpecializationInfo(index) - SpecButton.index = index - SpecButton.name = name - - local SpecBackground = SpecButton:CreateTexture(nil, 'BACKGROUND') - SpecBackground:SetAllPoints() - SpecBackground:SetTexture(texture) - SpecBackground:SetTexCoord(0, 1, 0.2, 0.8) - - local SpecLeft = SpecButton:CreateTexture(nil, 'BORDER') - SpecLeft:SetPoint('BOTTOMLEFT', -6, -7) - SpecLeft:SetSize(18, 24) - SpecLeft:SetTexture([[Interface\RaidFrame\RaidPanel-BottomLeft]]) - SpecLeft:SetTexCoord(0, 0.8, 0, 1) - SpecButton.LeftBorder = SpecLeft - - local SpecRight = SpecButton:CreateTexture(nil, 'BORDER') - SpecRight:SetPoint('BOTTOMRIGHT', 6, -7) - SpecRight:SetSize(18, 24) - SpecRight:SetTexture([[Interface\RaidFrame\RaidPanel-BottomRight]]) - SpecRight:SetTexCoord(0.2, 1, 0, 1) - SpecButton.RightBorder = SpecRight - - if(index == 1) then - SpecButton:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 20, 2) - else - SpecButton:SetPoint('LEFT', specializations[index - 1], 'RIGHT', 15, 0) - end - - specializations[index] = SpecButton - end + self:Populate() +end - UpdateSpecializations(GetSpec()) +function Container:PLAYER_LOOT_SPEC_UPDATED(event) + self:Update() end -Frame:RegisterEvent('PLAYER_LOGIN') -Frame:SetScript('OnEvent', function(self, event, ...) - if(event == 'SPELL_CONFIRMATION_PROMPT') then - local spellID, confirmType = ... - if(confirmType == CONFIRMATION_PROMPT_BONUS_ROLL) then - currentEncounterID = ns.GetEncounterID(spellID) - if(currentEncounterID) then - if(#specializations == 0) then - CreateSpecializationTabs(self) - end - - InitializeList(GetSpec()) - else - print('|cffff8080HabeebIt:|r Found an unknown spell [' .. spellID .. ']. Please report this!') - end - end - elseif(event == 'SPELL_CONFIRMATION_TIMEOUT') then - currentEncounterID = nil - elseif(event == 'EJ_LOOT_DATA_RECIEVED' and currentEncounterID) then - PopulateList() +function Container:SPELL_CONFIRMATION_PROMPT(event, spellID, confirmType) + if(confirmType == CONFIRMATION_PROMPT_BONUS_ROLL) then + currentEncounterID = ns.GetEncounterID(spellID) - if(EncounterJournal) then - EncounterJournal:UnregisterEvent(event) - end - elseif(event == 'PLAYER_LOGIN') then - self:RegisterEvent('SPELL_CONFIRMATION_PROMPT') - self:RegisterEvent('SPELL_CONFIRMATION_TIMEOUT') - self:RegisterEvent('EJ_LOOT_DATA_RECIEVED') - - self:SetScript('OnShow', UpdatePosition) - self:SetPoint('BOTTOMLEFT', BonusRollFrame, 'BOTTOMRIGHT') - self:SetSize(338, 76) - self:SetFrameLevel(10) - self:Hide() + if(currentEncounterID) then + self:RegisterEvent('EJ_LOOT_DATA_RECIEVED') + self:RegisterEvent('PLAYER_LOOT_SPEC_UPDATED') - self:SetBackdrop(backdrop) - self:SetBackdropColor(0, 0, 0, 0.8) - self:SetBackdropBorderColor(0.6, 0.6, 0.6) - - local Empty = self:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') - Empty:SetPoint('CENTER') - Empty:SetText('This encounter has no possible items for\nyour current class and/or specialization') - self.Empty = Empty - - Handle:SetPoint('BOTTOMRIGHT', 16, 4) - Handle:SetSize(16, 64) - Handle:SetNormalTexture([[Interface\RaidFrame\RaidPanel-Toggle]]) - Handle:GetNormalTexture():SetTexCoord(0, 1/2, 0, 1) - Handle:SetFrameLevel(6) - - local HandleBackground = Handle:CreateTexture(nil, 'BACKGROUND') - HandleBackground:SetPoint('BOTTOMLEFT', -2, 0) - HandleBackground:SetPoint('TOPRIGHT') - HandleBackground:SetTexture(0, 0, 0, 0.8) - - local BorderBottom = Handle:CreateTexture(nil, 'BORDER') - BorderBottom:SetPoint('BOTTOMRIGHT', 6, -3) - BorderBottom:SetSize(24, 24) - BorderBottom:SetTexture([[Interface\RaidFrame\RaidPanel-BottomRight]]) - - local BorderRight = Handle:CreateTexture(nil, 'BORDER') - BorderRight:SetPoint('RIGHT', 7.5, 0) - BorderRight:SetSize(12, 24) - BorderRight:SetTexture([[Interface\RaidFrame\RaidPanel-Right]]) - - local BorderTop = Handle:CreateTexture(nil, 'BORDER') - BorderTop:SetPoint('TOPRIGHT', 6, 3) - BorderTop:SetSize(24, 24) - BorderTop:SetTexture([[Interface\RaidFrame\RaidPanel-UpperRight]]) + self:Initialize() + else + print('|cffff8080HabeebIt:|r Found an unknown spell [' .. spellID .. ']. Please report this!') + end end -end) +end -Handle:SetScript('OnClick', function(self) - self:ClearAllPoints() +function Container:SPELL_CONFIRMATION_TIMEOUT() + currentEncounterID = nil - if(collapsed) then - self:SetPoint('BOTTOMRIGHT', Frame, 16, 4) - self:GetNormalTexture():SetTexCoord(1/2, 1, 0, 1) - Frame:Show() + self:UnregisterEvent('EJ_LOOT_DATA_RECIEVED') + self:UnregisterEvent('PLAYER_LOOT_SPEC_UPDATED') +end + +function Container:PLAYER_LOGIN() + if(HabeebItDB.position == 'BOTTOM') then + self:SetPoint('TOP', BonusRollFrame, 'BOTTOM') + Handle:SetPoint('TOP', BonusRollFrame, 'BOTTOM', 0, 2) else - self:SetPoint('BOTTOMRIGHT', BonusRollFrame, 16, 4) - self:GetNormalTexture():SetTexCoord(0, 1/2, 0, 1) - Frame:Hide() + self:SetPoint('BOTTOM', BonusRollFrame, 'TOP') + Handle:SetPoint('BOTTOM', BonusRollFrame, 'TOP', 0, -2) end - collapsed = not collapsed -end) + self:SetWidth(286) + self:SetFrameLevel(self:GetParent():GetFrameLevel() - 2) + self:SetBackdrop(BACKDROP) + self:SetBackdropColor(0, 0, 0, 0.8) + self:SetBackdropBorderColor(2/3, 2/3, 2/3) + + self:RegisterEvent('SPELL_CONFIRMATION_PROMPT') + self:RegisterEvent('SPELL_CONFIRMATION_TIMEOUT') + + local Empty = self:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight') + Empty:SetPoint('CENTER') + Empty:SetText('This encounter has no possible items for\nyour current class and/or specialization.') + self.Empty = Empty + + Handle:SetSize(64, 16) + Handle:SetNormalTexture([=[Interface\RaidFrame\RaidPanel-Toggle]=]) + Handle:SetScript('OnClick', HandleClick) + Handle.Arrow = Handle:GetNormalTexture() + + local HandleBackground = Handle:CreateTexture(nil, 'BACKGROUND') + HandleBackground:SetAllPoints() + HandleBackground:SetTexture(0, 0, 0, 0.8) + + local TopCenter = Handle:CreateTexture(nil, 'BORDER') + TopCenter:SetPoint('TOP', 0, 4.5) + TopCenter:SetSize(24, 12) + TopCenter:SetTexture([=[Interface\RaidFrame\RaidPanel-UpperMiddle]=]) + Handle.TopCenter = TopCenter + + local TopRight = Handle:CreateTexture(nil, 'BORDER') + TopRight:SetPoint('TOPRIGHT', 4, 4) + TopRight:SetSize(24, 20) + TopRight:SetTexture([=[Interface\RaidFrame\RaidPanel-UpperRight]=]) + TopRight:SetTexCoord(0, 1, 0, 0.8) + Handle.TopRight = TopRight + + local TopLeft = Handle:CreateTexture(nil, 'BORDER') + TopLeft:SetPoint('TOPLEFT', -4, 4) + TopLeft:SetSize(24, 20) + TopLeft:SetTexture([=[Interface\RaidFrame\RaidPanel-UpperLeft]=]) + TopLeft:SetTexCoord(0, 1, 0, 0.8) + Handle.TopLeft = TopLeft + + local BottomCenter = Handle:CreateTexture(nil, 'BORDER') + BottomCenter:SetPoint('BOTTOM', 0, -9) + BottomCenter:SetSize(24, 12) + BottomCenter:SetTexture([=[Interface\RaidFrame\RaidPanel-BottomMiddle]=]) + Handle.BottomCenter = BottomCenter + + local BottomRight = Handle:CreateTexture(nil, 'BORDER') + BottomRight:SetPoint('BOTTOMRIGHT', 4, -6) + BottomRight:SetSize(24, 22) + BottomRight:SetTexture([=[Interface\RaidFrame\RaidPanel-BottomRight]=]) + BottomRight:SetTexCoord(0, 1, 0.1, 1) + Handle.BottomRight = BottomRight + + local BottomLeft = Handle:CreateTexture(nil, 'BORDER') + BottomLeft:SetPoint('BOTTOMLEFT', -4, -6) + BottomLeft:SetSize(24, 22) + BottomLeft:SetTexture([=[Interface\RaidFrame\RaidPanel-BottomLeft]=]) + BottomLeft:SetTexCoord(0, 1, 0.1, 1) + Handle.BottomLeft = BottomLeft + + self:HandleUpdate() + + Hotspot:SetAllPoints(BonusRollFrame.SpecIcon) + Hotspot:SetScript('OnEnter', HotspotEnter) + Hotspot:SetScript('OnLeave', HotspotLeave) + + Buttons:SetPoint('LEFT', 4, 4) + Buttons:SetScript('OnLeave', ButtonsLeave) + + hooksecurefunc('BonusRollFrame_StartBonusRoll', HookStartRoll) +end + +Container:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end) diff --git a/HabeebIt.toc b/HabeebIt.toc index 7ce3ee4..6b28eb6 100644 --- a/HabeebIt.toc +++ b/HabeebIt.toc @@ -1,8 +1,10 @@ -## Interface: 50200 +## Interface: 50300 ## Author: p3lim ## Version: @project-version@ ## Title: Habeeb It ## Notes: Easily see what the bonus loot roll can yield +## SavedVariables: HabeebItDB +Config.lua Encounters.lua HabeebIt.lua -- 1.7.9.5