282 lignes
13 Kio
Lua
282 lignes
13 Kio
Lua
QuestHelper_File["mapbutton.lua"] = "4.0.1.$svnversion$"
|
|
QuestHelper_Loadtime["mapbutton.lua"] = GetTime()
|
|
|
|
--[[
|
|
mapbutton.lua
|
|
|
|
This module contains code to place a button on the Map Frame, and provides the
|
|
functionality of that button.
|
|
|
|
Currently Functionality:
|
|
- Left click on button is equivalent to /qh hide
|
|
- Right-click on button shows Settings menu
|
|
- Button has tooltip to that effect
|
|
- Button serves as hook to detect when map is hidden, in order to hide active menus (if any).
|
|
|
|
History:
|
|
4-20-2008 Nesher Created
|
|
4-24-2008 Smariot Added right-click menu
|
|
4-24-2008 Nesher Localized settings menu. Added hook to hide menus when World Map is hidden.
|
|
--]]
|
|
|
|
-------------------------------------------------------------------------------------
|
|
-- Display a Settings menu. Used from the map button's right-click, and from /qh settings.
|
|
function QuestHelper:DoSettingsMenu()
|
|
local menu = QuestHelper:CreateMenu()
|
|
self:CreateMenuTitle(menu, QHText("MENU_SETTINGS"))
|
|
|
|
self:CreateMenuItem(menu, QHText("SETTINGS_MENU_INCOMPLETE")):SetFunction(QH_Incomplete)
|
|
|
|
arrowmenu = self:CreateMenu()
|
|
QH_Arrow_PopulateMenu(arrowmenu)
|
|
self:CreateMenuItem(menu, QHText("SETTINGS_ARROWLINK_ARROW")):SetSubmenu(arrowmenu)
|
|
|
|
-- Cartographer Waypoints
|
|
if Cartographer_Waypoints then
|
|
self:CreateMenuItem(menu, QHFormat("SETTINGS_MENU_CARTWP", QuestHelper_Pref.cart_wp_new and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleCartWP, self)
|
|
end
|
|
|
|
-- TomTom
|
|
if TomTom then
|
|
self:CreateMenuItem(menu, QHFormat("SETTINGS_MENU_TOMTOM", QuestHelper_Pref.tomtom_wp_new and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTomTomWP, self)
|
|
end
|
|
|
|
|
|
-- Flight Timer
|
|
self:CreateMenuItem(menu, QHFormat("MENU_FLIGHT_TIMER", QuestHelper_Pref.flight_time and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleFlightTimes, self)
|
|
|
|
-- Ant Trails
|
|
self:CreateMenuItem(menu, QHFormat("MENU_ANT_TRAILS", QuestHelper_Pref.show_ants and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleAnts, self)
|
|
|
|
-- Objective Tooltips
|
|
self:CreateMenuItem(menu, QHFormat("MENU_OBJECTIVE_TIPS", QuestHelper_Pref.tooltip and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTooltip, self)
|
|
|
|
-- Options regarding party members.
|
|
local submenu = self:CreateMenu()
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_PARTY_SHARE", QuestHelper_Pref.share and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleShare, self)
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_PARTY_SOLO", QuestHelper_Pref.solo and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleSolo, self)
|
|
self:CreateMenuItem(menu, QHText("MENU_PARTY")):SetSubmenu(submenu)
|
|
|
|
-- Map frame button
|
|
--[[self:CreateMenuItem(menu, QHFormat("MENU_MAP_BUTTON", QuestHelper_Pref.map_button and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleMapButton, self)]]
|
|
|
|
-- Icon Scale
|
|
submenu = self:CreateMenu()
|
|
for pct = 50,120,10 do
|
|
local item = self:CreateMenuItem(submenu, pct.."%")
|
|
local tex = self:CreateIconTexture(item, 10)
|
|
item:SetFunction(QuestHelper.genericSetScale, QuestHelper, "scale", "icon scale", .5, 3, pct.."%")
|
|
item:AddTexture(tex, true)
|
|
tex:SetVertexColor(1, 1, 1, QuestHelper_Pref.scale == pct*0.01 and 1 or 0)
|
|
end
|
|
self:CreateMenuItem(menu, QHText("MENU_ICON_SCALE")):SetSubmenu(submenu)
|
|
|
|
-- Hidden Objectives
|
|
submenu = self:CreateMenu()
|
|
QH_PopulateHidden(submenu)
|
|
self:CreateMenuItem(menu, QHText("HIDDEN_TITLE")):SetSubmenu(submenu)
|
|
|
|
-- Tracker Options
|
|
submenu = self:CreateMenu()
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_QUEST_TRACKER", QuestHelper_Pref.track and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTrack, self)
|
|
--[[
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_TRACKER_LEVEL", QuestHelper_Pref.track_level and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTrackLevel, self)
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_TRACKER_QCOLOUR", QuestHelper_Pref.track_qcolour and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTrackQColour, self)
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_TRACKER_OCOLOUR", QuestHelper_Pref.track_ocolour and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.ToggleTrackOColour, self)
|
|
]]
|
|
local submenu2 = self:CreateMenu()
|
|
for pct = 60,120,10 do
|
|
local item = self:CreateMenuItem(submenu2, pct.."%")
|
|
local tex = self:CreateIconTexture(item, 10)
|
|
item:SetFunction(self.TrackerScale, QuestHelper, pct.."%")
|
|
item:AddTexture(tex, true)
|
|
tex:SetVertexColor(1, 1, 1, QuestHelper_Pref.track_scale == pct*0.01 and 1 or 0)
|
|
end
|
|
self:CreateMenuItem(submenu, QHText("MENU_TRACKER_SCALE")):SetSubmenu(submenu2)
|
|
self:CreateMenuItem(submenu, QHText("MENU_TRACKER_RESET"))
|
|
:SetFunction(self.ResetTrackerPosition, self)
|
|
self:CreateMenuItem(menu, QHText("MENU_TRACKER_OPTIONS")):SetSubmenu(submenu)
|
|
|
|
-- Filters
|
|
submenu = self:CreateMenu()
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_ZONE_FILTER", QuestHelper_Pref.filter_zone and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.Filter, self, "ZONE")
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_DONE_FILTER", QuestHelper_Pref.filter_done and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.Filter, self, "DONE")
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_BLOCKED_FILTER", QuestHelper_Pref.filter_blocked and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.Filter, self, "BLOCKED")
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_WATCHED_FILTER", QuestHelper_Pref.filter_watched and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.Filter, self, "WATCHED")
|
|
self:CreateMenuItem(submenu, QHFormat("MENU_LEVEL_FILTER", QuestHelper_Pref.filter_level and QHText("MENU_DISABLE") or QHText("MENU_ENABLE")))
|
|
:SetFunction(self.Filter, self, "LEVEL")
|
|
submenu2 = self:CreateMenu()
|
|
self:CreateMenuItem(submenu, QHText("MENU_LEVEL_OFFSET")):SetSubmenu(submenu2)
|
|
|
|
for offset = -5,5 do
|
|
local menu = self:CreateMenuItem(submenu2, (offset > 0 and "+" or "")..offset)
|
|
menu:SetFunction(self.LevelOffset, self, offset)
|
|
local tex = self:CreateIconTexture(item, 10)
|
|
menu:AddTexture(tex, true)
|
|
tex:SetVertexColor(1, 1, 1, QuestHelper_Pref.level == offset and 1 or 0)
|
|
end
|
|
self:CreateMenuItem(menu, QHText("MENU_FILTERS")):SetSubmenu(submenu)
|
|
|
|
submenu = self:CreateMenu()
|
|
for scale = 0.2,2,0.2 do
|
|
local menu = self:CreateMenuItem(submenu, (scale*100).."%")
|
|
menu:SetFunction(QuestHelper.genericSetScale, QuestHelper, "perf_scale_2", "performance factor", .1, 5, scale)
|
|
local tex = self:CreateIconTexture(item, 10)
|
|
menu:AddTexture(tex, true)
|
|
tex:SetVertexColor(1, 1, 1, QuestHelper_Pref.perf_scale_2 == scale and 1 or 0)
|
|
end
|
|
self:CreateMenuItem(menu, QHText("MENU_PERFORMANCE")):SetSubmenu(submenu)
|
|
|
|
-- Locale
|
|
submenu = self:CreateMenu()
|
|
for loc, tbl in pairs(QuestHelper_Translations) do
|
|
local item = self:CreateMenuItem(submenu, (tbl.LOCALE_NAME or "???").." ["..loc.."]")
|
|
local tex = self:CreateIconTexture(item, 10)
|
|
item:SetFunction(self.SetLocale, self, loc)
|
|
item:AddTexture(tex, true)
|
|
tex:SetVertexColor(1, 1, 1, QuestHelper_Pref.locale == loc and 1 or 0)
|
|
end
|
|
local item = self:CreateMenuItem(menu, QHText("MENU_LOCALE"))
|
|
--item:AddTexture(self:CreateIconTexture(item, 25), true) -- Add Globe icon to locale menu.
|
|
item:SetSubmenu(submenu)
|
|
|
|
-- Stuff to read.
|
|
submenu = self:CreateMenu()
|
|
self:CreateMenuItem(submenu, QHText("MENU_HELP_SLASH")):SetFunction(self.Help, self)
|
|
self:CreateMenuItem(submenu, QHText("MENU_HELP_CHANGES")):SetFunction(self.ChangeLog, self)
|
|
self:CreateMenuItem(submenu, QHText("MENU_HELP_SUBMIT")):SetFunction(self.Submit, self)
|
|
self:CreateMenuItem(menu, QHText("MENU_HELP")):SetSubmenu(submenu)
|
|
|
|
menu:ShowAtCursor()
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------
|
|
-- Handle clicks on the button
|
|
function QuestHelperWorldMapButton_OnClick(self, clicked)
|
|
|
|
-- Left button toggles whether QuestHelper is displayed (and hence active)
|
|
if clicked == "LeftButton" then
|
|
QuestHelper:ToggleHide()
|
|
|
|
-- Refresh the tooltip to match. Presumably it's showing - how else could the button get clicked?
|
|
-- Note: if I'm wrong about my assumption, this could leave the tooltip stranded until user mouses
|
|
-- back over the button, but I don't think that's too serious.
|
|
QuestHelperWorldMapButton_OnEnter(self)
|
|
elseif clicked == "RightButton" and not QuestHelper_Pref.hide then
|
|
QuestHelper:DoSettingsMenu()
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------
|
|
-- Display or update the tooltip
|
|
function QuestHelperWorldMapButton_OnEnter(self)
|
|
local theme = QuestHelper:GetColourTheme()
|
|
|
|
QuestHelper.tooltip:SetOwner(self, "ANCHOR_BOTTOMLEFT", self:GetWidth(), -5)
|
|
QuestHelper.tooltip:ClearLines()
|
|
QuestHelper.tooltip:AddLine(QHFormat("QH_BUTTON_TOOLTIP1", QHText(QuestHelper_Pref.hide and "QH_BUTTON_SHOW" or "QH_BUTTON_HIDE")),
|
|
unpack(theme.tooltip))
|
|
QuestHelper.tooltip:GetPrevLines():SetFont(QuestHelper.font.serif, 12)
|
|
if not QuestHelper_Pref.hide then
|
|
-- Add the settings menu tooltip when it's available
|
|
QuestHelper.tooltip:AddLine(QHText("QH_BUTTON_TOOLTIP2"), unpack(theme.tooltip))
|
|
QuestHelper.tooltip:GetPrevLines():SetFont(QuestHelper.font.serif, 12)
|
|
end
|
|
QuestHelper.tooltip:Show()
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------
|
|
-- Handle when the world map gets hidden: hide the active menu if any.
|
|
function QuestHelper_WorldMapHidden()
|
|
if QuestHelper.active_menu then
|
|
QuestHelper.active_menu:DoHide()
|
|
if QuestHelper.active_menu.auto_release then
|
|
QuestHelper.active_menu = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-------------------------------------------------------------------------------------
|
|
-- Set up the Map Button
|
|
function QuestHelper:InitMapButton()
|
|
|
|
if not self.MapButton then
|
|
-- Create the button
|
|
local button = CreateFrame("Button", "QuestHelperWorldMapButton", WorldMapButton, "UIPanelButtonTemplate")
|
|
|
|
-- Assign the font QuestHelper selected for the currect locale.
|
|
if button.GetFont then
|
|
button:SetFont(self.font.serif, select(2, button:GetFont()))
|
|
end
|
|
|
|
-- Set up the button
|
|
button:SetText(QHText("QH_BUTTON_TEXT"))
|
|
local width = button:GetTextWidth() + 30
|
|
if width < 110 then
|
|
width = 110
|
|
end
|
|
button:SetWidth(width)
|
|
button:SetHeight(22)
|
|
|
|
-- Desaturate the button texture if QuestHelper is disabled.
|
|
-- This line is also in QuestHelper:ToggleHide
|
|
button:GetNormalTexture():SetDesaturated(QuestHelper_Pref.hide)
|
|
|
|
-- Add event handlers to provide Tooltip
|
|
QH_Hook(button, "OnEnter", QuestHelperWorldMapButton_OnEnter)
|
|
QH_Hook(button, "OnLeave", function(this)
|
|
QuestHelper.tooltip:Hide()
|
|
end)
|
|
|
|
-- Add Click handler
|
|
QH_Hook(button, "OnClick", QuestHelperWorldMapButton_OnClick)
|
|
button:RegisterForClicks("LeftButtonUp", "RightButtonUp")
|
|
|
|
-- Add Hide handler, so we can dismiss any menus when map is closed
|
|
QH_Hook(button, "OnHide", QuestHelper_WorldMapHidden)
|
|
|
|
-- Position it on the World Map frame
|
|
--~ if Cartographer then
|
|
--~ -- If Cartographer is in use, coordinate with their buttons.
|
|
-- Trouble is, this makes Cartographer's buttons conflict with the Zone Map dropdown.
|
|
-- Re-enable this if Cartographer ever learns to work with the Zone Map dropdown.
|
|
--~ Cartographer:AddMapButton(button, 3)
|
|
--~ else
|
|
-- Otherwise, just put it in the upper right corner
|
|
button:SetPoint("TOPRIGHT", WorldMapButton, "TOPRIGHT", -10, -10)
|
|
button:SetFrameLevel(WorldMapButton:GetFrameLevel()+1)
|
|
button:SetFrameStrata("FULLSCREEN")
|
|
-- end
|
|
|
|
-- Save the button so we can reference it later if need be
|
|
self.MapButton = button
|
|
else
|
|
-- User must be toggling the button. We've already got it, so just show it.
|
|
self.MapButton:Show()
|
|
end
|
|
end
|
|
|
|
----------------------------------------------------------------------------------
|
|
-- Hide the map button
|
|
function QuestHelper:HideMapButton()
|
|
if self.MapButton then
|
|
self.MapButton:Hide()
|
|
end
|
|
end
|