Quantcast

Rename time!

Adrian L Lange [07-25-14 - 12:00]
Rename time!
Filename
BonusRollPreview.lua
BonusRollPreview.toc
Config.lua
HabeebIt.lua
HabeebIt.toc
diff --git a/BonusRollPreview.lua b/BonusRollPreview.lua
new file mode 100644
index 0000000..a890674
--- /dev/null
+++ b/BonusRollPreview.lua
@@ -0,0 +1,503 @@
+local encounterIDs = select(2, ...)
+
+local currentEncounterID
+local itemButtons = {}
+
+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 Container = CreateFrame('Frame', 'BonusRollPreviewContainer', BonusRollFrame)
+local Handle = CreateFrame('Button', 'BonusRollPreviewHandle', BonusRollFrame)
+
+local Hotspot = CreateFrame('Frame', nil, BonusRollFrame)
+local Buttons = CreateFrame('Frame', 'BonusRollPreviewSpecButtons', 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(BonusRollPreviewDB.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(BonusRollPreviewDB.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(BonusRollPreviewDB.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') or (GetCVarBool('alwaysCompareItems') and not IsEquippedItem(self.itemID))) then
+		GameTooltip_ShowCompareItem()
+	else
+		ShoppingTooltip1:Hide()
+		ShoppingTooltip2:Hide()
+		ShoppingTooltip3:Hide()
+	end
+
+	if(IsModifiedClick('DRESSUP')) then
+		ShowInspectCursor()
+	else
+		ResetCursor()
+	end
+end
+
+local function ItemButtonClick(self)
+	HandleModifiedItemClick(self.itemLink)
+end
+
+local function ItemButtonEnter(self)
+	GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT')
+	GameTooltip:SetItemByID(self.itemID)
+
+	self:SetScript('OnUpdate', ItemButtonUpdate)
+end
+
+local function ItemButtonLeave(self)
+	GameTooltip:Hide()
+
+	self:SetScript('OnUpdate', nil)
+end
+
+local function GetItemLine(index)
+	local ItemButton = itemButtons[index]
+	if(not ItemButton) then
+		ItemButton = CreateFrame('Button', nil, Container.ScrollChild)
+		ItemButton:SetPoint('TOPLEFT', 6, (index - 1) * -40)
+		ItemButton:SetPoint('TOPRIGHT', -22, (index - 1) * -40)
+		ItemButton:SetHeight(38)
+
+		local Icon = ItemButton:CreateTexture(nil, 'BACKGROUND')
+		Icon:SetPoint('TOPLEFT', 1, -1)
+		Icon:SetSize(36, 36)
+		ItemButton.Icon = Icon
+
+		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 = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontNormalMed3')
+		Name:SetPoint('TOPLEFT', Icon, 'TOPRIGHT', 7, -4)
+		Name:SetPoint('TOPRIGHT', -6, -4)
+		Name:SetHeight(12)
+		Name:SetJustifyH('LEFT')
+		ItemButton.Name = Name
+
+		local Class = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
+		Class:SetPoint('BOTTOMRIGHT', -6, 5)
+		Class:SetSize(0, 12)
+		Class:SetJustifyH('RIGHT')
+		ItemButton.Class = Class
+
+		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')
+		ItemButton.Slot = Slot
+
+		ItemButton:SetScript('OnClick', ItemButtonClick)
+		ItemButton:SetScript('OnEnter', ItemButtonEnter)
+		ItemButton:SetScript('OnLeave', ItemButtonLeave)
+
+		itemButtons[index] = ItemButton
+	end
+
+	return ItemButton
+end
+
+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 ItemButton = GetItemLine(numItems)
+			ItemButton.Icon:SetTexture(texture)
+			ItemButton.Name:SetText(name)
+			ItemButton.Slot:SetText(slot)
+			ItemButton.Class:SetText(itemClass)
+
+			ItemButton.itemID = itemID
+			ItemButton.itemLink = itemLink
+
+			ItemButton:Show()
+		end
+	end
+
+	self:SetHeight(math.min(330, math.max(50, 10 + (numItems * 40))))
+
+	if(numItems > 0) then
+		local height = (10 + (numItems * 40)) - self:GetHeight()
+		self.Slider:SetMinMaxValues(0, height > 0 and height or 0)
+		self.Slider:SetValue(0)
+
+		if(numItems > 8) then
+			self:EnableMouseWheel(true)
+			self.Slider:Show()
+			self.ScrollChild:SetWidth(286)
+		else
+			self:EnableMouseWheel(false)
+			self.Slider:Hide()
+			self.ScrollChild:SetWidth(302)
+		end
+
+		self.Empty:Hide()
+	else
+		self.Empty:Show()
+	end
+
+	if(EncounterJournal) then
+		EncounterJournal:RegisterEvent('EJ_LOOT_DATA_RECIEVED')
+		EncounterJournal:RegisterEvent('EJ_DIFFICULTY_UPDATE')
+	end
+end
+
+function Container:Update()
+	if(EncounterJournal) then
+		EncounterJournal:UnregisterEvent('EJ_DIFFICULTY_UPDATE')
+	end
+
+	for index, button in next, itemButtons do
+		button:Hide()
+	end
+
+	local _, _, difficulty = GetInstanceInfo()
+	EJ_SetDifficulty(difficulty > 0 and difficulty or 4)
+
+	local currentInstance = EJ_GetCurrentInstance()
+	EJ_SelectInstance(currentInstance > 0 and currentInstance or 322)
+	EJ_SelectEncounter(currentEncounterID)
+
+	local _, _, classID = UnitClass('player')
+	EJ_SetLootFilter(classID, GetLootSpecialization() or GetSpecializationInfo(GetSpecialization() or 0) or 0)
+
+	self:Populate()
+end
+
+function Container:Initialize()
+	collapsed = false
+	HandleClick()
+
+	Container:Update()
+end
+
+function Container:EJ_LOOT_DATA_RECIEVED(event)
+	if(EncounterJournal) then
+		EncounterJournal:UnregisterEvent(event)
+	end
+
+	self:Populate()
+end
+
+function Container:PLAYER_LOOT_SPEC_UPDATED(event)
+	self:Update()
+end
+
+function Container:SPELL_CONFIRMATION_PROMPT(event, spellID, confirmType)
+	if(confirmType == CONFIRMATION_PROMPT_BONUS_ROLL) then
+		currentEncounterID = encounterIDs[spellID]
+
+		if(currentEncounterID) then
+			self:RegisterEvent('EJ_LOOT_DATA_RECIEVED')
+			self:RegisterEvent('PLAYER_LOOT_SPEC_UPDATED')
+
+			self:Initialize()
+		else
+			print('|cffff8080BonusRollPreview:|r Found an unknown spell [' .. spellID .. ']. Please report this!')
+		end
+	end
+end
+
+function Container:SPELL_CONFIRMATION_TIMEOUT()
+	currentEncounterID = nil
+
+	self:UnregisterEvent('EJ_LOOT_DATA_RECIEVED')
+	self:UnregisterEvent('PLAYER_LOOT_SPEC_UPDATED')
+end
+
+function Container:PLAYER_LOGIN()
+	if(BonusRollPreviewDB.position == 'BOTTOM') then
+		self:SetPoint('TOP', BonusRollFrame, 'BOTTOM')
+		Handle:SetPoint('TOP', BonusRollFrame, 'BOTTOM', 0, 2)
+	else
+		self:SetPoint('BOTTOM', BonusRollFrame, 'TOP')
+		Handle:SetPoint('BOTTOM', BonusRollFrame, 'TOP', 0, -2)
+	end
+
+	local ScrollChild = CreateFrame('Frame', nil, self)
+	ScrollChild:SetHeight(1) -- Completely ignores this value, bug?
+	self.ScrollChild = ScrollChild
+
+	local Scroll = CreateFrame('ScrollFrame', nil, self)
+	Scroll:SetPoint('TOPLEFT', 0, -6)
+	Scroll:SetPoint('BOTTOMRIGHT', 0, 6)
+	Scroll:SetScrollChild(ScrollChild)
+
+	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:EnableMouseWheel(true)
+
+	local Slider = CreateFrame('Slider', nil, Scroll)
+	Slider:SetPoint('TOPRIGHT', -5, -16)
+	Slider:SetPoint('BOTTOMRIGHT', -5, 14)
+	Slider:SetWidth(16)
+	Slider:SetFrameLevel(self:GetFrameLevel() + 10)
+	Slider:SetThumbTexture([=[Interface\Buttons\UI-ScrollBar-Knob]=])
+	self.Slider = Slider
+
+	local Thumb = Slider:GetThumbTexture()
+	Thumb:SetSize(16, 24)
+	Thumb:SetTexCoord(1/4, 3/4, 1/8, 7/8)
+
+	local Up = CreateFrame('Button', nil, Slider)
+	Up:SetPoint('BOTTOM', Slider, 'TOP')
+	Up:SetSize(16, 16)
+	Up:SetNormalTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Up]=])
+	Up:SetDisabledTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Disabled]=])
+	Up:SetHighlightTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Highlight]=])
+	Up:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Up:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Up:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Up:GetHighlightTexture():SetBlendMode('ADD')
+	Up:SetScript('OnClick', function()
+		Slider:SetValue(Slider:GetValue() - Slider:GetHeight() / 3)
+	end)
+
+	local Down = CreateFrame('Button', nil, Slider)
+	Down:SetPoint('TOP', Slider, 'BOTTOM')
+	Down:SetSize(16, 16)
+	Down:SetScript('OnClick', ScrollClick)
+	Down:SetNormalTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Up]=])
+	Down:SetDisabledTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Disabled]=])
+	Down:SetHighlightTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Highlight]=])
+	Down:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Down:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Down:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
+	Down:GetHighlightTexture():SetBlendMode('ADD')
+	Down:SetScript('OnClick', function()
+		Slider:SetValue(Slider:GetValue() + Slider:GetHeight() / 3)
+	end)
+
+	Slider:SetScript('OnValueChanged', function(self, value)
+		local min, max = self:GetMinMaxValues()
+		if(value == min) then
+			Up:Disable()
+		else
+			Up:Enable()
+		end
+
+		if(value == max) then
+			Down:Disable()
+		else
+			Down:Enable()
+		end
+
+		local Parent = self:GetParent()
+		Parent:SetVerticalScroll(value)
+		ScrollChild:SetPoint('TOP', 0, value)
+	end)
+
+	Scroll:SetScript('OnMouseWheel', function(self, alpha)
+		if(alpha > 0) then
+			Slider:SetValue(Slider:GetValue() - Slider:GetHeight() / 3)
+		else
+			Slider:SetValue(Slider:GetValue() + Slider:GetHeight() / 3)
+		end
+	end)
+
+	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)
+
+	self:RegisterEvent('SPELL_CONFIRMATION_PROMPT')
+	self:RegisterEvent('SPELL_CONFIRMATION_TIMEOUT')
+
+	hooksecurefunc('BonusRollFrame_StartBonusRoll', HookStartRoll)
+end
+
+Container:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)
diff --git a/BonusRollPreview.toc b/BonusRollPreview.toc
new file mode 100644
index 0000000..4da2719
--- /dev/null
+++ b/BonusRollPreview.toc
@@ -0,0 +1,11 @@
+## Interface: 50400
+## Author: p3lim
+## Version: @project-version@
+## Title: Bonus Roll Preview
+## Notes: Easily see what the bonus loot roll can yield
+## SavedVariables: BonusRollPreviewDB
+
+encounters\Pandaria.lua
+
+Config.lua
+BonusRollPreview.lua
diff --git a/Config.lua b/Config.lua
index 9f1892d..a1efc00 100644
--- a/Config.lua
+++ b/Config.lua
@@ -13,37 +13,37 @@ Panel:Hide()

 Panel:RegisterEvent('PLAYER_LOGIN')
 Panel:SetScript('OnEvent', function()
-	HabeebItDB = HabeebItDB or defaults
+	BonusRollPreviewDB = BonusRollPreviewDB or defaults

 	for key, value in next, defaults do
-		if(HabeebItDB[key] == nil) then
-			HabeebItDB[key] = value
+		if(BonusRollPreviewDB[key] == nil) then
+			BonusRollPreviewDB[key] = value
 		end
 	end

-	HabeebItContainer:PLAYER_LOGIN()
+	BonusRollPreviewContainer:PLAYER_LOGIN()
 end)

 function Panel:okay()
 	for key, value in next, temporary do
-		HabeebItDB[key] = value
+		BonusRollPreviewDB[key] = value
 	end

-	HabeebItContainer:HandleUpdate()
+	BonusRollPreviewContainer:HandleUpdate()
 end

 function Panel:default()
-	HabeebItDB = defaults
+	BonusRollPreviewDB = defaults
 	table.wipe(temporary)
 end

 function Panel:refresh()
 	for key, button in next, buttons do
 		if(button:IsObjectType('Button')) then
-			UIDropDownMenu_SetSelectedValue(button, HabeebItDB[key])
+			UIDropDownMenu_SetSelectedValue(button, BonusRollPreviewDB[key])

 			-- This is for some reason needed, gotta take a look into it later
-			UIDropDownMenu_SetText(button, _G[HabeebItDB[key] .. '_KEY'])
+			UIDropDownMenu_SetText(button, _G[BonusRollPreviewDB[key] .. '_KEY'])
 		end
 	end
 end
@@ -61,7 +61,7 @@ do
 		Dropdown.key = key

 		UIDropDownMenu_SetWidth(Dropdown, 90)
-		UIDropDownMenu_SetSelectedValue(Dropdown, HabeebItDB[key])
+		UIDropDownMenu_SetSelectedValue(Dropdown, BonusRollPreviewDB[key])
 		UIDropDownMenu_Initialize(Dropdown, func)

 		local Text = Dropdown:CreateFontString(nil, nil, 'GameFontHighlight')
@@ -108,7 +108,8 @@ end)

 InterfaceOptions_AddCategory(Panel)

-SLASH_HabeebIt1 = '/habeebit'
+SLASH_BonusRollPreview1 = '/brp'
+SLASH_BonusRollPreview1 = '/bonusrollpreview'
 SlashCmdList[addonName] = function()
 	InterfaceOptionsFrame_OpenToCategory(addonName)
 end
diff --git a/HabeebIt.lua b/HabeebIt.lua
deleted file mode 100644
index e52c063..0000000
--- a/HabeebIt.lua
+++ /dev/null
@@ -1,503 +0,0 @@
-local encounterIDs = select(2, ...)
-
-local currentEncounterID
-local itemButtons = {}
-
-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 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') or (GetCVarBool('alwaysCompareItems') and not IsEquippedItem(self.itemID))) then
-		GameTooltip_ShowCompareItem()
-	else
-		ShoppingTooltip1:Hide()
-		ShoppingTooltip2:Hide()
-		ShoppingTooltip3:Hide()
-	end
-
-	if(IsModifiedClick('DRESSUP')) then
-		ShowInspectCursor()
-	else
-		ResetCursor()
-	end
-end
-
-local function ItemButtonClick(self)
-	HandleModifiedItemClick(self.itemLink)
-end
-
-local function ItemButtonEnter(self)
-	GameTooltip:SetOwner(self, 'ANCHOR_TOPLEFT')
-	GameTooltip:SetItemByID(self.itemID)
-
-	self:SetScript('OnUpdate', ItemButtonUpdate)
-end
-
-local function ItemButtonLeave(self)
-	GameTooltip:Hide()
-
-	self:SetScript('OnUpdate', nil)
-end
-
-local function GetItemLine(index)
-	local ItemButton = itemButtons[index]
-	if(not ItemButton) then
-		ItemButton = CreateFrame('Button', nil, Container.ScrollChild)
-		ItemButton:SetPoint('TOPLEFT', 6, (index - 1) * -40)
-		ItemButton:SetPoint('TOPRIGHT', -22, (index - 1) * -40)
-		ItemButton:SetHeight(38)
-
-		local Icon = ItemButton:CreateTexture(nil, 'BACKGROUND')
-		Icon:SetPoint('TOPLEFT', 1, -1)
-		Icon:SetSize(36, 36)
-		ItemButton.Icon = Icon
-
-		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 = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontNormalMed3')
-		Name:SetPoint('TOPLEFT', Icon, 'TOPRIGHT', 7, -4)
-		Name:SetPoint('TOPRIGHT', -6, -4)
-		Name:SetHeight(12)
-		Name:SetJustifyH('LEFT')
-		ItemButton.Name = Name
-
-		local Class = ItemButton:CreateFontString(nil, 'ARTWORK', 'GameFontHighlight')
-		Class:SetPoint('BOTTOMRIGHT', -6, 5)
-		Class:SetSize(0, 12)
-		Class:SetJustifyH('RIGHT')
-		ItemButton.Class = Class
-
-		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')
-		ItemButton.Slot = Slot
-
-		ItemButton:SetScript('OnClick', ItemButtonClick)
-		ItemButton:SetScript('OnEnter', ItemButtonEnter)
-		ItemButton:SetScript('OnLeave', ItemButtonLeave)
-
-		itemButtons[index] = ItemButton
-	end
-
-	return ItemButton
-end
-
-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 ItemButton = GetItemLine(numItems)
-			ItemButton.Icon:SetTexture(texture)
-			ItemButton.Name:SetText(name)
-			ItemButton.Slot:SetText(slot)
-			ItemButton.Class:SetText(itemClass)
-
-			ItemButton.itemID = itemID
-			ItemButton.itemLink = itemLink
-
-			ItemButton:Show()
-		end
-	end
-
-	self:SetHeight(math.min(330, math.max(50, 10 + (numItems * 40))))
-
-	if(numItems > 0) then
-		local height = (10 + (numItems * 40)) - self:GetHeight()
-		self.Slider:SetMinMaxValues(0, height > 0 and height or 0)
-		self.Slider:SetValue(0)
-
-		if(numItems > 8) then
-			self:EnableMouseWheel(true)
-			self.Slider:Show()
-			self.ScrollChild:SetWidth(286)
-		else
-			self:EnableMouseWheel(false)
-			self.Slider:Hide()
-			self.ScrollChild:SetWidth(302)
-		end
-
-		self.Empty:Hide()
-	else
-		self.Empty:Show()
-	end
-
-	if(EncounterJournal) then
-		EncounterJournal:RegisterEvent('EJ_LOOT_DATA_RECIEVED')
-		EncounterJournal:RegisterEvent('EJ_DIFFICULTY_UPDATE')
-	end
-end
-
-function Container:Update()
-	if(EncounterJournal) then
-		EncounterJournal:UnregisterEvent('EJ_DIFFICULTY_UPDATE')
-	end
-
-	for index, button in next, itemButtons do
-		button:Hide()
-	end
-
-	local _, _, difficulty = GetInstanceInfo()
-	EJ_SetDifficulty(difficulty > 0 and difficulty or 4)
-
-	local currentInstance = EJ_GetCurrentInstance()
-	EJ_SelectInstance(currentInstance > 0 and currentInstance or 322)
-	EJ_SelectEncounter(currentEncounterID)
-
-	local _, _, classID = UnitClass('player')
-	EJ_SetLootFilter(classID, GetLootSpecialization() or GetSpecializationInfo(GetSpecialization() or 0) or 0)
-
-	self:Populate()
-end
-
-function Container:Initialize()
-	collapsed = false
-	HandleClick()
-
-	Container:Update()
-end
-
-function Container:EJ_LOOT_DATA_RECIEVED(event)
-	if(EncounterJournal) then
-		EncounterJournal:UnregisterEvent(event)
-	end
-
-	self:Populate()
-end
-
-function Container:PLAYER_LOOT_SPEC_UPDATED(event)
-	self:Update()
-end
-
-function Container:SPELL_CONFIRMATION_PROMPT(event, spellID, confirmType)
-	if(confirmType == CONFIRMATION_PROMPT_BONUS_ROLL) then
-		currentEncounterID = encounterIDs[spellID]
-
-		if(currentEncounterID) then
-			self:RegisterEvent('EJ_LOOT_DATA_RECIEVED')
-			self:RegisterEvent('PLAYER_LOOT_SPEC_UPDATED')
-
-			self:Initialize()
-		else
-			print('|cffff8080HabeebIt:|r Found an unknown spell [' .. spellID .. ']. Please report this!')
-		end
-	end
-end
-
-function Container:SPELL_CONFIRMATION_TIMEOUT()
-	currentEncounterID = nil
-
-	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('BOTTOM', BonusRollFrame, 'TOP')
-		Handle:SetPoint('BOTTOM', BonusRollFrame, 'TOP', 0, -2)
-	end
-
-	local ScrollChild = CreateFrame('Frame', nil, self)
-	ScrollChild:SetHeight(1) -- Completely ignores this value, bug?
-	self.ScrollChild = ScrollChild
-
-	local Scroll = CreateFrame('ScrollFrame', nil, self)
-	Scroll:SetPoint('TOPLEFT', 0, -6)
-	Scroll:SetPoint('BOTTOMRIGHT', 0, 6)
-	Scroll:SetScrollChild(ScrollChild)
-
-	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:EnableMouseWheel(true)
-
-	local Slider = CreateFrame('Slider', nil, Scroll)
-	Slider:SetPoint('TOPRIGHT', -5, -16)
-	Slider:SetPoint('BOTTOMRIGHT', -5, 14)
-	Slider:SetWidth(16)
-	Slider:SetFrameLevel(self:GetFrameLevel() + 10)
-	Slider:SetThumbTexture([=[Interface\Buttons\UI-ScrollBar-Knob]=])
-	self.Slider = Slider
-
-	local Thumb = Slider:GetThumbTexture()
-	Thumb:SetSize(16, 24)
-	Thumb:SetTexCoord(1/4, 3/4, 1/8, 7/8)
-
-	local Up = CreateFrame('Button', nil, Slider)
-	Up:SetPoint('BOTTOM', Slider, 'TOP')
-	Up:SetSize(16, 16)
-	Up:SetNormalTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Up]=])
-	Up:SetDisabledTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Disabled]=])
-	Up:SetHighlightTexture([=[Interface\Buttons\UI-ScrollBar-ScrollUpButton-Highlight]=])
-	Up:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Up:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Up:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Up:GetHighlightTexture():SetBlendMode('ADD')
-	Up:SetScript('OnClick', function()
-		Slider:SetValue(Slider:GetValue() - Slider:GetHeight() / 3)
-	end)
-
-	local Down = CreateFrame('Button', nil, Slider)
-	Down:SetPoint('TOP', Slider, 'BOTTOM')
-	Down:SetSize(16, 16)
-	Down:SetScript('OnClick', ScrollClick)
-	Down:SetNormalTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Up]=])
-	Down:SetDisabledTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Disabled]=])
-	Down:SetHighlightTexture([=[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Highlight]=])
-	Down:GetNormalTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Down:GetDisabledTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Down:GetHighlightTexture():SetTexCoord(1/4, 3/4, 1/4, 3/4)
-	Down:GetHighlightTexture():SetBlendMode('ADD')
-	Down:SetScript('OnClick', function()
-		Slider:SetValue(Slider:GetValue() + Slider:GetHeight() / 3)
-	end)
-
-	Slider:SetScript('OnValueChanged', function(self, value)
-		local min, max = self:GetMinMaxValues()
-		if(value == min) then
-			Up:Disable()
-		else
-			Up:Enable()
-		end
-
-		if(value == max) then
-			Down:Disable()
-		else
-			Down:Enable()
-		end
-
-		local Parent = self:GetParent()
-		Parent:SetVerticalScroll(value)
-		ScrollChild:SetPoint('TOP', 0, value)
-	end)
-
-	Scroll:SetScript('OnMouseWheel', function(self, alpha)
-		if(alpha > 0) then
-			Slider:SetValue(Slider:GetValue() - Slider:GetHeight() / 3)
-		else
-			Slider:SetValue(Slider:GetValue() + Slider:GetHeight() / 3)
-		end
-	end)
-
-	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)
-
-	self:RegisterEvent('SPELL_CONFIRMATION_PROMPT')
-	self:RegisterEvent('SPELL_CONFIRMATION_TIMEOUT')
-
-	hooksecurefunc('BonusRollFrame_StartBonusRoll', HookStartRoll)
-end
-
-Container:SetScript('OnEvent', function(self, event, ...) self[event](self, event, ...) end)
diff --git a/HabeebIt.toc b/HabeebIt.toc
deleted file mode 100644
index aa3e519..0000000
--- a/HabeebIt.toc
+++ /dev/null
@@ -1,11 +0,0 @@
-## Interface: 50400
-## Author: p3lim
-## Version: @project-version@
-## Title: HabeebIt
-## Notes: Easily see what the bonus loot roll can yield
-## SavedVariables: HabeebItDB
-
-encounters\Pandaria.lua
-
-Config.lua
-HabeebIt.lua