Files
RecipeRadar/RecipesTab.lua
T

511 lines
16 KiB
Lua

-- RecipesTab.lua: handles clicking and drawing for the Recipes tab
-- $Id: RecipesTab.lua 443 2006-09-01 04:41:40Z jnmiller $
------------------------------------------------------------------------
-- Main window refresh code
------------------------------------------------------------------------
function RecipeRadar_RecipesTab_Init()
-- reset some of the RegionData GUI settings just once here
for i = 1, RECIPERADAR_VENDORS_DISPLAYED do
local button = getglobal("RecipeRadarVendor" .. i)
-- reset items' horizontal offsets
if (i == 1) then
button:SetPoint("TOPLEFT", "RecipeRadarFrame",
"TOPLEFT", 22, -96)
else
button:SetPoint("TOPLEFT", "RecipeRadarVendor" .. i - 1,
"BOTTOMLEFT", 0, 0)
end
-- turn off highlights and textures for these items
getglobal("RecipeRadarVendor" .. i .. "Check"):Hide()
-- unset to preclude tooltips for these items
button.Recipe = nil
end
RecipeRadar_Prof1DropDown:Hide()
RecipeRadar_Prof2DropDown:Show()
RecipeRadar_SetActiveTab(2)
RecipeRadar_RecipesTab_Update()
RecipeRadarListScrollFrameScrollBar:SetValue(
RecipeRadarRecipesTabFrame.ScrollValue)
end
function RecipeRadar_RecipesTab_OnClick()
if (RecipeRadar_Options.ActiveTab == 2) then
return
end
PlaySound("igSpellBookClose")
RecipeRadar_RecipesTab_Init()
end
function RecipeRadar_RecipesTab_ExpandAll(expand)
local prof = RecipeRadar_RecipeData[RecipeRadar_Options.CurrentProfession]
if (not prof) then return end
for _, recipe in prof.Recipes do
recipe.IsExpanded = expand
end
RecipeRadar_SelectFirstRecipe()
RecipeRadar_FrameUpdate()
end
function RecipeRadar_RecipesTab_Update()
if (RecipeRadar_Options.ActiveTab ~= 2) then
return
end
local prof = RecipeRadar_Options.CurrentProfession
TitleBarText:SetText(RRS("Recipe Radar") .. " - " .. prof .. " " ..
format(TEXT(PARENS_TEMPLATE), RecipeRadar_SkillDB_GetRank(prof)))
-- some globals for the Update() procedure
RecipeRadar_row = 0
RecipeRadar_ContextMenuGlobal.RecipesTabHasExpanded = false
RecipeRadar_ContextMenuGlobal.RecipesTabHasCollapsed = false
RecipeRadarHighlightFrame:Hide()
RecipeRadar_SortRecipes(RecipeRadar_RecipeData[prof])
table.foreach(RecipeRadar_RecipeData[prof].Recipes,
RecipeRadar_RecipesTab_AddRecipe)
-- update the scroll position and the width of the highlight frame
FauxScrollFrame_Update(RecipeRadarListScrollFrame, RecipeRadar_row,
RECIPERADAR_VENDORS_DISPLAYED, RECIPERADAR_VENDOR_HEIGHT,
nil, nil, nil, RecipeRadarHighlightFrame, 361, 384)
-- hide unused item buttons
for i = 1, RECIPERADAR_VENDORS_DISPLAYED do
local button = getglobal("RecipeRadarVendor" .. i)
if (i > RecipeRadar_row) then
button:Hide()
else
if (RecipeRadarListScrollFrame:IsVisible()) then
button:SetWidth(361)
else
button:SetWidth(384)
end
end
end
-- update the current selection (or lack thereof)
if (not prof or not RecipeRadarRecipesTabFrame.SelectedRecipe) then
RecipeRadar_HideRecipeDetails()
elseif (RecipeRadarRecipesTabFrame.SelectedVendor) then
RecipeRadar_SetSelection(RecipeRadarRecipesTabFrame.SelectedVendor,
RecipeRadarRecipesTabFrame.SelectedRecipe,
RecipeRadarRecipesTabFrame.SelectedLocation)
RecipeRadar_ShowRecipeDetails()
end
end
function RecipeRadar_RecipesTab_AddRecipe(key, recipe)
if (RecipeRadar_IsRecipeFiltered(recipe) or
not RecipeRadar_RecipeHasLocations(recipe)) then
return
end
RecipeRadar_row = RecipeRadar_row + 1
local offset = FauxScrollFrame_GetOffset(RecipeRadarListScrollFrame)
local index = RecipeRadar_row - offset
-- only do the following if we're in the scroll frame's visible portion
if (index > 0 and index <= RECIPERADAR_VENDORS_DISPLAYED) then
local button = getglobal("RecipeRadarVendor" .. index)
-- generic list item drawing
RecipeRadar_DrawListItem(index, recipe)
button:UnlockHighlight()
getglobal("RecipeRadarVendor" .. index .. "Check"):Hide()
getglobal("RecipeRadarVendor" .. index .. "Highlight"):SetTexture(
"Interface\\Buttons\\UI-PlusButton-Hilight")
if (recipe.IsExpanded) then
RecipeRadar_ContextMenuGlobal.RecipesTabHasExpanded = true
button:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up")
else
RecipeRadar_ContextMenuGlobal.RecipesTabHasCollapsed = true
button:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up")
return
end
else
-- if the recipe is collapsed, we don't need to traverse its locations
if (recipe.IsExpanded) then
RecipeRadar_ContextMenuGlobal.RecipesTabHasExpanded = true
else
RecipeRadar_ContextMenuGlobal.RecipesTabHasCollapsed = true
return
end
end
RecipeRadar_SortLocations(recipe)
for _, location in recipe.Locations do
-- skip and unmap filtered recipes
if (location.IsFiltered) then
local vendor = RecipeRadar_RecipesTab_FindVendor(
location.Region, location.Vendor)
if (vendor.IsMapped) then
RecipeRadar_Maps_RemoveVendor(vendor)
end
else
RecipeRadar_row = RecipeRadar_row + 1
index = RecipeRadar_row - offset;
-- only do this if we're in the scroll frame's visible portion
if (index > 0 and index <= RECIPERADAR_VENDORS_DISPLAYED) then
local button = getglobal("RecipeRadarVendor" .. index)
-- turn off highlighting textures for these items
button:SetNormalTexture("")
getglobal("RecipeRadarVendor" .. index .. "Highlight"):SetTexture("")
-- basic drawing code
button:SetText(location.Region)
VendorNameDummyText:SetText(location.Region)
button:SetTextColor(
RecipeRadar_Colors.LightGray.r,
RecipeRadar_Colors.LightGray.g,
RecipeRadar_Colors.LightGray.b)
button:SetID(index)
button:Show()
-- drawing code for the little subtext field
local subtext = getglobal("RecipeRadarVendor" .. index .. "SubText")
local vendor = RecipeRadar_RecipesTab_FindVendor(
location.Region, location.Vendor)
local content = location.Vendor
if (vendor.Notes and vendor.Notes ~= "") then
content = content .. " - " ..
RecipeRadar_FormatVendorNote(vendor.Notes)
end
content = format(TEXT(PARENS_TEMPLATE), content)
subtext:SetText(content)
VendorNameDummySubText:SetText(content)
button.r = RecipeRadar_Teams[vendor.Team].Color.r
button.g = RecipeRadar_Teams[vendor.Team].Color.g
button.b = RecipeRadar_Teams[vendor.Team].Color.b
subtext:SetTextColor(
RecipeRadar_Teams[vendor.Team].Color.r,
RecipeRadar_Teams[vendor.Team].Color.g,
RecipeRadar_Teams[vendor.Team].Color.b)
subtext:SetPoint("LEFT", "RecipeRadarVendor" .. index .. "Text",
"RIGHT", 10, 0)
subtext:Show()
-- unset to indicate this is a vendor item for the tooltip stuff
button.Recipe = nil
-- show or hide the little mapped indicator check mark
local check = getglobal("RecipeRadarVendor" .. index .. "Check")
if (vendor.IsMapped) then
local check_offset = VendorNameDummyText:GetWidth() + 42
check_offset = check_offset + VendorNameDummySubText:GetWidth()
check:SetPoint("TOPLEFT", "RecipeRadarVendor" .. index, "TOPLEFT",
check_offset, 0)
check:Show()
else
check:Hide()
end
-- selected recipes look a little bit different
if (RecipeRadarRecipesTabFrame.SelectedLocation == location.Region and
RecipeRadarRecipesTabFrame.SelectedRecipe == recipe and
RecipeRadarRecipesTabFrame.SelectedVendor.Name == location.Vendor) then
RecipeRadarHighlightFrame:SetPoint("TOPLEFT",
"RecipeRadarVendor" .. index, "TOPLEFT", -2, 0)
RecipeRadarHighlightFrame:Show()
button:LockHighlight()
else
button:UnlockHighlight()
end
end
end
end
end
-- Handles a vendor/recipe button click in the main scroll frame. The
-- supplied index is row + offset in the scroll frame. index may also
-- be set to -1 to select the first visible recipe.
function RecipeRadar_RecipesTab_ServiceClickIndex(index, button)
local prof = RecipeRadar_Options.CurrentProfession
if (not button) then button = "LeftButton" end
-- save this index so we can return to it on tab switch
RecipeRadarRecipesTabFrame.SelectedIndex = index
-- sort the recipes so we're counting in the right order
RecipeRadar_SortRecipes(RecipeRadar_RecipeData[prof])
local row = 0
-- iterate through each recipe, counting up to index
for _, recipe in RecipeRadar_RecipeData[prof].Recipes do
-- if this recipe is filtered, it does not count towards our index
if (not RecipeRadar_IsRecipeFiltered(recipe) and
RecipeRadar_RecipeHasLocations(recipe)) then
row = row + 1
if (row == index) then
if (button == "LeftButton") then
RecipeRadar_RecipesTab_ToggleExpanded(recipe)
return
elseif (button == "RightButton") then
HideDropDownMenu(1)
RecipeRadar_ContextMenuGlobal.Recipe = recipe
RecipeRadar_ContextMenuGlobal.Location = nil
RecipeRadar_RecipesTab_ContextMenuOnLoad()
ToggleDropDownMenu(1, nil, RecipesTabDropDown,
this:GetName(), GetCursorPosition(), 0)
return
end
end
if (recipe.IsExpanded) then
-- sort the locations so we're counting in the right order
RecipeRadar_SortLocations(recipe)
local vendor_index = row
-- iterate through each recipe, counting up to index
for _, location in recipe.Locations do
if (not location.IsFiltered) then
row = row + 1
-- if index is -1, this catches on the first iteration
if (row == index or index == -1) then
if (button == "LeftButton") then
local vendor = RecipeRadar_RecipesTab_FindVendor(
location.Region, location.Vendor)
-- if the shift key is down, (un)map this vendor
if (IsShiftKeyDown()) then
if (vendor.IsMapped) then
RecipeRadar_Maps_RemoveVendor(vendor)
else
RecipeRadar_Maps_AddVendor(vendor, location.Region)
end
end
-- select this location and show its details
RecipeRadarRecipesTabFrame.SelectedVendor = vendor
RecipeRadarRecipesTabFrame.SelectedRecipe = recipe
RecipeRadarRecipesTabFrame.SelectedLocation =
location.Region
RecipeRadar_SetSelection(vendor, recipe, location.Region)
RecipeRadar_ShowRecipeDetails()
return
elseif (button == "RightButton") then
HideDropDownMenu(1)
RecipeRadar_ContextMenuGlobal.Recipe = recipe
RecipeRadar_ContextMenuGlobal.Location = location
RecipeRadar_RecipesTab_ContextMenuOnLoad()
ToggleDropDownMenu(1, nil, RecipesTabDropDown,
this:GetName(), GetCursorPosition(), 0)
return
end
end
end
end
end
end
end
-- if the index was not found, select nothing
RecipeRadar_RecipesTab_ClearSelection()
RecipeRadar_HideRecipeDetails()
end
function RecipeRadar_RecipesTab_ToggleExpanded(recipe)
if (recipe.IsExpanded) then
recipe.IsExpanded = false
else
recipe.IsExpanded = true
end
RecipeRadar_RecipesTab_ClearSelection()
RecipeRadar_FrameUpdate()
end
-- Retrieves a vendor's info table from her name and region.
function RecipeRadar_RecipesTab_FindVendor(region_name, vendor_name)
local region_data = RecipeRadar_RegionData[region_name]
if (not region_data) then return end
for _, vendor in region_data.Vendors do
if (vendor.Name == vendor_name) then
return vendor
end
end
return nil
end
function RecipeRadar_RecipesTab_ClearSelection()
RecipeRadarRecipesTabFrame.SelectedVendor = nil
RecipeRadarRecipesTabFrame.SelectedRecipe = nil
RecipeRadarRecipesTabFrame.SelectedLocation = nil
end
-- OnLoad event handler for the right-click context menu for map buttons.
function RecipeRadar_RecipesTab_ContextMenuOnLoad()
UIDropDownMenu_Initialize(RecipesTabDropDown,
RecipeRadar_RecipesTab_ContextMenuInit, "MENU")
end
-- Initialization routine for the right-click context menu for map buttons.
function RecipeRadar_RecipesTab_ContextMenuInit()
if (not RecipeRadar_ContextMenuGlobal.Recipe) then return end
if (RecipeRadar_ContextMenuGlobal.Location) then
local vendor = RecipeRadar_RecipesTab_FindVendor(
RecipeRadar_ContextMenuGlobal.Location.Region,
RecipeRadar_ContextMenuGlobal.Location.Vendor)
-- putting in the vendor's name as the title of the popup
local item = { }
item.text = RecipeRadar_ContextMenuGlobal.Location.Vendor
item.isTitle = 1
item.notCheckable = 1
UIDropDownMenu_AddButton(item)
item = { }
if (vendor.IsMapped) then
item.text = RRS("Unmap Vendor")
item.value = "unmap"
else
item.text = RRS("Map Vendor")
item.value = "map"
end
item.notCheckable = 1
item.func = RecipeRadar_RecipesTab_ContextMenuOnClick
UIDropDownMenu_AddButton(item)
end
item = { }
item.text = RRS("Expand All")
item.value = "expandall"
item.notCheckable = 1
item.func = RecipeRadar_RecipesTab_ContextMenuOnClick
if (not RecipeRadar_ContextMenuGlobal.RecipesTabHasCollapsed) then
item.disabled = 1
end
UIDropDownMenu_AddButton(item)
item = { }
item.text = RRS("Collapse All")
item.value = "collapseall"
item.notCheckable = 1
item.func = RecipeRadar_RecipesTab_ContextMenuOnClick
if (not RecipeRadar_ContextMenuGlobal.RecipesTabHasExpanded) then
item.disabled = 1
end
UIDropDownMenu_AddButton(item)
item = { }
item.text = CANCEL
item.notCheckable = 1
item.func = RecipeRadar_RecipesTab_ContextMenuOnClick
UIDropDownMenu_AddButton(item)
end
-- OnClick event handler for the right-click context menu for map buttons.
function RecipeRadar_RecipesTab_ContextMenuOnClick()
if (RecipeRadar_ContextMenuGlobal.Location) then
local vendor = RecipeRadar_RecipesTab_FindVendor(
RecipeRadar_ContextMenuGlobal.Location.Region,
RecipeRadar_ContextMenuGlobal.Location.Vendor)
if (this.value == "unmap") then
RecipeRadar_Maps_RemoveVendor(vendor)
RecipeRadar_FrameUpdate()
elseif (this.value == "map") then
RecipeRadar_Maps_AddVendor(vendor,
RecipeRadar_ContextMenuGlobal.Location.Region)
RecipeRadar_FrameUpdate()
end
end
if (this.value == "expandall") then
RecipeRadar_RecipesTab_ExpandAll(true)
elseif (this.value == "collapseall") then
RecipeRadar_RecipesTab_ExpandAll(false)
end
end