-- MainFrame.lua: main Recipe Radar window code -- $Id: MainFrame.lua 459 2006-09-16 18:33:44Z jnmiller $ function RecipeRadar_MainFrame_Init() RecipeRadarFrame:RegisterForDrag("LeftButton") RecipeRadarListScrollFrameScrollBar:SetMinMaxValues(0, 0) RecipeRadarListScrollFrameScrollBar:SetValue(0) RecipeRadarListScrollFrameScrollBar.scrollBarHideable = 1 RecipeRadarOptionsButton:SetText(RRS("Options")) RecipeRadarMapVendorIndicatorText:SetText(RRS("Locate Vendor on Map")) RecipeRadar_UpdateLock() RecipeRadar_RadarTab_Init() RECIPERADAR_TOOLTIP_LINK = "" end function RecipeRadar_Toggle() if (RecipeRadarFrame:IsVisible()) then HideUIPanel(RecipeRadarFrame) else RecipeRadar_InitVendorFilters() RecipeRadar_InitRecipeFilters() RecipeRadar_Frame_Show() end end function RecipeRadar_Frame_Show() ShowUIPanel(RecipeRadarFrame) RecipeRadar_SkillDB_ParseSpellbookFrame() RecipeRadar_SkillDB_ParseSkillFrame() RecipeRadar_SkillDB_ParseReputationFrame() RecipeRadar_FrameUpdate() end function RecipeRadar_FrameUpdate() if (RecipeRadar_Options.ActiveTab == 1) then RecipeRadar_RadarTab_Update() else RecipeRadar_RecipesTab_Update() end end ------------------------------------------------------------------------ -- Tab code ------------------------------------------------------------------------ -- Draws the borders around each tab according to which is active. function RecipeRadar_SetActiveTab(id) local active_tab_height, background_tab_height = 33, 29 if (id == 1) then RecipeRadarRadarTabFrameMiddle:SetHeight(active_tab_height) RecipeRadarRadarTabFrameRight:SetHeight(active_tab_height) RecipeRadarRecipesTabFrameLeft:SetHeight(background_tab_height) RecipeRadarRecipesTabFrameMiddle:SetHeight(background_tab_height) RecipeRadarRecipesTabFrameRight:SetHeight(background_tab_height) RecipeRadar_Options.ActiveTab = 1 else RecipeRadarRadarTabFrameMiddle:SetHeight(background_tab_height) RecipeRadarRadarTabFrameRight:SetHeight(background_tab_height) RecipeRadarRecipesTabFrameLeft:SetHeight(active_tab_height) RecipeRadarRecipesTabFrameMiddle:SetHeight(active_tab_height) RecipeRadarRecipesTabFrameRight:SetHeight(active_tab_height) RecipeRadar_Options.ActiveTab = 2 end end -- Sets the button color and the corresponding highlight color. function RecipeRadar_SetButtonColors(button, text_color) button:SetTextColor(text_color.r, text_color.g, text_color.b) button:SetHighlightTextColor( text_color.r + RecipeRadar_Colors.Highlight, text_color.g + RecipeRadar_Colors.Highlight, text_color.b + RecipeRadar_Colors.Highlight) end -- Common drawing code for list items in the scroll frame. function RecipeRadar_DrawListItem(index, recipe) local button = getglobal("RecipeRadarVendor" .. index) -- get and set the text color according to recipe availability local name = RecipeRadar_GetSafeItemInfo(recipe.ID) local indicator = RecipeRadar_Availability_GetIndicator(recipe) if (name == RRS("Uncached Recipe")) then RecipeRadar_SetButtonColors(button, RecipeRadar_Colors.UncachedRecipe) else RecipeRadar_SetButtonColors(button, RecipeRadar_Colors.LightGray) end -- basic drawing code if (RecipeRadar_Options.RealmAvailability) then button:SetText(name .. indicator) else button:SetText(name) end button:SetID(index) button:Show() -- drawing code for the little subtext field local subtext = getglobal("RecipeRadarVendor" .. index .. "SubText") if (not RecipeRadar_Options.RealmAvailability) then local avail = RecipeRadar_Availability_GetKey(recipe) if (avail) then button.r = RecipeRadar_Availabilities[avail].Color.r button.g = RecipeRadar_Availabilities[avail].Color.g button.b = RecipeRadar_Availabilities[avail].Color.b else button.r = RecipeRadar_Colors.UncachedRecipe.r button.g = RecipeRadar_Colors.UncachedRecipe.g button.b = RecipeRadar_Colors.UncachedRecipe.b end subtext:SetText(indicator) subtext:SetTextColor(button.r, button.g, button.b) subtext:SetPoint("LEFT", "RecipeRadarVendor" .. index .. "Text", "RIGHT", 10, 0) subtext:Show() else subtext:Hide() end -- provide information for the availability tooltip button.Recipe = recipe end ------------------------------------------------------------------------ -- Base vendor/recipe selection code ------------------------------------------------------------------------ -- OnClick handler for the vendor/recipe buttons in the scroll frame. function RecipeRadar_VendorButton_OnClick(button) local offset = FauxScrollFrame_GetOffset(RecipeRadarListScrollFrame) local index = this:GetID() + offset RecipeRadar_ServiceClickIndex(index, button) if (button == "LeftButton") then RecipeRadar_FrameUpdate() end end -- Selects the first visible recipe (not vendor). function RecipeRadar_SelectFirstRecipe() RecipeRadar_ServiceClickIndex(-1) end -- Abstracts front for click handlers. function RecipeRadar_ServiceClickIndex(index, button) if (RecipeRadar_Options.ActiveTab == 1) then RecipeRadar_RadarTab_ServiceClickIndex(index, button) else RecipeRadar_RecipesTab_ServiceClickIndex(index, button) end end ------------------------------------------------------------------------ -- Recipe details and map frames ------------------------------------------------------------------------ function RecipeRadar_ShowRecipeDetails() RecipeDetailName:Show() RecipeDetailIcon:Show() RecipeDetailCostText:Show() RecipeDetailMoneyFrame:Show() end function RecipeRadar_HideRecipeDetails() RecipeDetailName:Hide() RecipeDetailIcon:Hide() RecipeDetailCostText:Hide() RecipeDetailMoneyFrame:Hide() RecipeDetailNoteText:Hide() RecipeDetailRequirements:Hide() RecipeRadarRegionMap:Hide() -- reset the mapped indicator to red/off RecipeRadarMapVendorIndicator:SetVertexColor(1.0, 0, 0) -- hide all of our little mapping scrolls for i = 1, RecipeRadar_MaxVendorCoordinates do getglobal("RecipeRadarScroll" .. i):Hide() end end -- When a recipe is actually selected, this function handles the -- subsequent drawing in the lower details and map frames. function RecipeRadar_SetSelection(vendor, recipe, region_name) local name, link, colorcode, _, _, _, texture, cached = RecipeRadar_GetSafeItemInfo(recipe.ID) RecipeDetailName:SetText(name) -- handle the little icon in the details frame RecipeDetailIcon:SetNormalTexture(texture) RecipeDetailIcon.NeedsUpdate = not cached RecipeDetailIcon.Name = name RecipeDetailIcon.Link = link RecipeDetailIcon.Hyperlink = RecipeRadar_GetHyperlinkByParts(name, link, colorcode) -- set the color/content of the money text if (GetMoney() >= recipe.Cost) then SetMoneyFrameColor("RecipeDetailMoneyFrame", 1.0, 1.0, 1.0); else SetMoneyFrameColor("RecipeDetailMoneyFrame", 1.0, 0.1, 0.1); end MoneyFrame_Update("RecipeDetailMoneyFrame", recipe.Cost); -- some vendors have special requirements if (RecipeRadar_GetRecipeReqsString(recipe)) then RecipeDetailRequirements:SetText(RecipeRadar_GetRecipeReqsString(recipe)) RecipeDetailNoteText:Show() RecipeDetailRequirements:Show() else RecipeDetailNoteText:Hide() RecipeDetailRequirements:Hide() end -- sets the color on the little radio button at the top if (vendor.IsMapped) then RecipeRadarMapVendorIndicator:SetVertexColor(0, 1.0, 0) else RecipeRadarMapVendorIndicator:SetVertexColor(1.0, 0, 0) end if (vendor.Coordinates) then if (not region_name) then region_name = RecipeRadar_Options.CurrentRegion end local region = RecipeRadar_RegionData[region_name] if (not region) then return end -- draw the map first RecipeRadarRegionMap:SetTexture( RECIPERADAR_IMAGE_ROOT .. "Regions\\" .. region.MapFile) RecipeRadarRegionMap:Show() -- then draw the little icon (or multiple icons for moble vendors) for i = 1, RecipeRadar_MaxVendorCoordinates do local scroll_icon = getglobal("RecipeRadarScroll" .. i) local coords = vendor.Coordinates[i] if (not coords) then scroll_icon:Hide() else local x = RecipeRadarMapFrame:GetWidth() * coords.x local y = RecipeRadarMapFrame:GetHeight() * -coords.y scroll_icon.Vendor = vendor scroll_icon:SetPoint("CENTER", "RecipeRadarMapFrame", "TOPLEFT", x, y) scroll_icon:Show() end end else -- no vendor coordinates means no map RecipeRadarRegionMap:Hide() for i = 1, RecipeRadar_MaxVendorCoordinates do getglobal("RecipeRadarScroll" .. i):Hide() end end end function RecipeRadar_RecipeDetailIcon_ShowToolTip() GameTooltip:SetOwner(this, "ANCHOR_RIGHT") GameTooltip:SetHyperlink(RecipeDetailIcon.Link) GameTooltip:Show() if RecipeDetailIcon.NeedsUpdate then return end if (RecipeBook_DoHookedFunction) then RecipeBook_DoHookedFunction(GameTooltip, RecipeDetailIcon.Link) end if (EnhTooltip and EnhTooltip.TooltipCall) then EnhTooltip.TooltipCall(GameTooltip, RecipeDetailIcon.Name, RecipeDetailIcon.Hyperlink, nil, 1) end end ------------------------------------------------------------------------- -- Frame Movement ------------------------------------------------------------------------- function RecipeRadar_ToggleLock() if (RecipeRadar_Options.Locked) then RecipeRadar_Options.Locked = false RecipeRadar_UpdateLock() else RecipeRadar_Options.Locked = true RecipeRadar_UpdateLock() end end function RecipeRadar_UpdateLock() if (RecipeRadar_Options.Locked) then RecipeRadarLockNormal:SetTexture( RECIPERADAR_IMAGE_ROOT .. "Frame\\LockButton-Locked-Up") RecipeRadarLockPushed:SetTexture( RECIPERADAR_IMAGE_ROOT .. "Frame\\LockButton-Locked-Down") else RecipeRadarLockNormal:SetTexture( RECIPERADAR_IMAGE_ROOT .. "Frame\\LockButton-Unlocked-Up") RecipeRadarLockPushed:SetTexture( RECIPERADAR_IMAGE_ROOT .. "Frame\\LockButton-Unlocked-Down") end end function RecipeRadar_StartMoving() if (not RecipeRadar_Options.Locked) then RecipeRadarFrame:StartMoving() end end