2010-11-08 14:28:59 +01:00
QuestHelper_File [ " mapbutton.lua " ] = " 4.0.1.$svnversion$ "
2010-10-24 23:17:33 +02:00
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 )
2011-02-05 14:59:20 +01:00
-- self:CreateMenuItem(submenu, QHText("MENU_HELP_CHANGES")):SetFunction(self.ChangeLog, self)
2010-10-24 23:17:33 +02:00
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