WoWInterface SVN PocketPlot

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 83 to Rev 84
    Reverse comparison

Rev 83 → Rev 84

trunk/PocketPlot/media/PPblips light.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/default sharp.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/PPblips comic.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/PPblips soft.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/PPblips sharp.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/PPblips.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/default light.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media/default soft.blp Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/PocketPlot/media Property changes : Modified: svn:ignore - *.png *.psd OBJECTICONS.png OBJECTICONS2.png OBJECTICONS4.png PPblips.png PPblips2.png PPblips3 2.png PPblips3 bigger.png PPblips3 comic bigger.png PPblips3 comic.png PPblips3.png PPblips3.psd blip alterations.txt old blip files + *.png *.psd OBJECTICONS.png OBJECTICONS2.png OBJECTICONS4.png PPblips comic.blp PPblips light.blp PPblips sharp.blp PPblips soft.blp PPblips.blp PPblips.png PPblips2.png PPblips3 2.png PPblips3 bigger.png PPblips3 comic bigger.png PPblips3 comic.png PPblips3.png PPblips3.psd blip alterations.txt default light.blp default sharp.blp default soft.blp old blip files
trunk/PocketPlot/pocketplot_options.lua New file
0,0 → 1,755
local _, PocketPlot = ...
local widgetLists = AceGUIWidgetLSMlists
local fonts = widgetLists.font
local oldSetPoint = {}
local mover, moverText, movershown, db
 
local frames = { "None", --frames supported by mover
"Minimap",
"DurabilityFrame",
"VehicleSeatIndicator",
"MiniMapInstanceDifficulty",
"GuildInstanceDifficulty",
"MiniMapChallengeMode",
"GarrisonLandingPageMinimapButton",
"WorldStateAlwaysUpFrame",
}
local stratae = {"BACKGROUND", "LOW", "MEDIUM", "HIGH", "DIALOG"}
local allshapes = { "3-Corner BL",
"3-Corner BR",
"3-Corner TL",
"3-Corner TR",
"Circle",
"Compass",
--"Faded Circle", --<-- Test these more
--"Faded Edges",
--"Faded Square",
"Fancy Frame",
"Flower",
"Half Round B",
"Half Round L",
"Half Round R",
"Half Round T",
"Rectangle",
"Rounded",
"Scalloped",
"Slanted 1",
"Slanted 2",
"Square",
"Teardrop BL",
"Teardrop BR",
"Teardrop TL",
"Teardrop TR",
"Torn",
"Zigzag Round",
"Zigzag Square"
}
PocketPlot.minimapButtonPaths = { --the GetMinimapShape standards are TOTALLY named wrong! >.<
["3-Corner BL"] = "CORNER-TOPRIGHT",
["3-Corner BR"] = "CORNER-TOPLEFT",
["3-Corner TL"] = "CORNER-BOTTOMRIGHT",
["3-Corner TR"] = "CORNER-BOTTOMLEFT",
["Fancy Frame"] = "SQUARE",
["Half Round B"] = "SIDE-TOP",
["Half Round L"] = "SIDE-RIGHT",
["Half Round R"] = "SIDE-LEFT",
["Half Round T"] = "SIDE-BOTTOM",
["Rectangle"] = "SQUARE",
["Rounded"] = "SQUARE",
["Scalloped"] = "SQUARE",
["Slanted 1"] = "SQUARE",
["Slanted 2"] = "SQUARE",
["Square"] = "SQUARE",
["Torn"] = "SQUARE",
["Zigzag Square"] = "SQUARE",
["Circle"] = "ROUND",
["Compass"] = "ROUND",
["Flower"] = "ROUND",
["Teardrop BL"] = "TRICORNER-TOPRIGHT",
["Teardrop BR"] = "TRICORNER-TOPLEFT",
["Teardrop TL"] = "TRICORNER-BOTTOMRIGHT",
["Teardrop TR"] = "TRICORNER-BOTTOMLEFT",
["Zigzag Round"] = "ROUND",
}
local minimapButtonPaths = PocketPlot.minimapButtonPaths
local fontFlags = {"None", "Outline", "Monochrome Outline"} --, "Monochrome"}
 
local defaults = {
shape = "Square",
blips = "PPblips",
lsmfont = "Negotiate Free",
fontFlag = "Outline",
zoneText = true,
zoneSize = 14,
clockSize = 16,
scale = 1,
mapPos = {x = -10, y = -10},
bg = {r = 0, g = 0, b = 0},
mmAlpha = 1,
combatHide = false,
alpha = 1,
top = false,
coords = true,
clock = true,
coordSize = 16,
classbg = false,
classfont = false,
textOffset = 0,
zoneTextOffset = 0,
insets = 4,
strata = "BACKGROUND",
level = 2,
--hideTracking = false,
}
 
local function SetPosition(frame)
local f, fname, fdata = _G[frame], frame, db[frame]
if mover and mover:IsShown() then
local r,_,a,x,y = mover:GetPoint()
fdata = {["r"]=r, ["p"]=UIParent,["a"]=a,["x"]=x,["y"]=y}
end
f:ClearAllPoints()
f:SetPoint(fdata.r, fdata.p, fdata.a, fdata.x, fdata.y)
if not oldSetPoint[fname] then --prehook
oldSetPoint[fname] = f.SetPoint
f.SetPoint = function(self, a,b,c,d,e, ...)
local a,b,c,d,e = fdata.r, fdata.p, fdata.a, fdata.x, fdata.y
return oldSetPoint[fname](self, a,b,c,d,e, ...)
end
end
end
 
local function MoveFrames(frame)
if not mover then
mover = CreateFrame("Frame", nil, UIParent)
mover:SetBackdrop({bgFile ="Interface\\Buttons\\WHITE8x8",})
mover:SetBackdropColor(.2,.2,.9,.6)
mover:SetMovable(1)
mover:SetFrameStrata("HIGH")
mover:Hide()
moverText = mover:CreateFontString(nil, "OVERLAY")
moverText:SetFont("Fonts\\ARIALN.ttf", 15, "OUTLINE")
moverText:SetParent(mover)
moverText:SetPoint("CENTER")
mover:SetScript("OnMouseDown", function() mover:StartMoving() end)
mover:SetScript("OnMouseUp", function() mover:StopMovingOrSizing() SetPosition(movershown) end)
end
if frame == "None" then
mover:SetScale(1)
mover:Hide()
mover:EnableMouse(false)
return
else
mover:Show()
moverText:SetText(frame)
mover:EnableMouse(true)
mover:SetScale(_G[frame]:GetScale())
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end
end
 
local function NudgeMover(xy, offset)
local framePos = db[movershown]
local frame = _G[movershown]
if not framePos then
SetPosition(movershown)
end
framePos[xy] = framePos[xy] + offset
frame:ClearAllPoints()
frame:SetPoint(framePos.r, framePos.p, framePos.a, framePos.x, framePos.y)
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end
 
 
local options = {
name = "PocketPlot Options",
type = "group",
args = {
general = {
name = "General",
type = "group",
args = {
hint = {
name = "Hint: right-click the minimap to open the calendar. Shift-right-click will open the tracking menu.",
type = "description",
order = 1,
},
spacer = {
name = "",
type = "description",
order = 2,
},
header0 = {
name = "",
type = "header",
order = 3,
},
shape = {
name = "Minimap Shape",
desc = "Set the shape of the minimap.",
type = "select",
values = allshapes,
get = function()
for k, v in pairs(allshapes) do
if db.shape == v then
return k
end
end
end,
set = function(_,key)
db.shape = allshapes[key]
PocketPlot.SetShape()
PocketPlot.ClassColors()
end,
order = 4,
},
scale = {
name = "Minimap Scale",
desc = "Set the scale of the minimap.",
type = "range",
min = .25,
max = 2,
step = .05,
get = function() return db.scale end,
set = function(_,value)
db.scale = value
Minimap:SetScale(value)
end,
order = 5,
},
combatHide = {
name = "Hide in Combat",
desc = "Hide the minimap when in combat.",
type = "toggle",
get = function() return db.combatHide end,
set = function()
db.combatHide = not db.combatHide
PocketPlot.CombatHide()
end,
order = 6,
},
strata = {
name = "Minimap Strata",
desc = "Set the strata of the minimap and how it layers with other elements in your interface.",
type = "select",
values = stratae,
get = function()
for k, v in pairs(stratae) do
if db.strata == v then
return k
end
end
end,
set = function(_,key)
db.strata = stratae[key]
Minimap:SetFrameStrata(db.strata)
end,
order = 7,
},
level = {
name = "Strata Level",
desc = "Nudge the minimap up and down different levels on its frame strata.",
type = "range",
min = 1,
max = 10,
step = 1,
get = function() return db.level end,
set = function(_,value)
db.level = value
Minimap:SetFrameLevel(db.level)
end,
order = 8,
},
battleHide = {
name = "Hide in Pet Battle",
desc = "Hide the minimap during pet battles.",
type = "toggle",
get = function() return db.battleHide end,
set = function()
db.battleHide = not db.battleHide
PocketPlot.PetBattleHide()
end,
order = 9,
},
mmAlpha = {
name = "Outdoors Alpha",
desc = "Set the transparency of the minimap when outdoors. Does not take effect when indoors (prevents indoors map from displaying).",
type = "range",
min = 0.05,
max = 1,
step = .05,
get = function() return db.mmAlpha end,
set = function(_,value)
db.mmAlpha = value
PocketPlot.MinimapFade()
end,
order = 10,
},
},
},
border = {
name = "Border",
type = "group",
args = {
header1 = {
name = "",
type = "header",
order = 1,
},
border = {
name = "Border Color",
desc = "Select a color for the minimap's border.",
type = "color",
disabled = function() return db.classbg end,
-- hasAlpha = true,
get = function() return db.bg.r, db.bg.g, db.bg.b end,
set = function(_,r,g,b)
db.bg.r, db.bg.g, db.bg.b = r,g,b
PocketPlot.ClassColors()
end,
order = 2,
},
insets = {
name = "Border size",
desc = "Set the width of the border around the minimap.",
type = "range",
min = .5,
max = 10,
step = .5,
get = function() return db.insets end,
set = function(_,value)
db.insets = value
local dims = Minimap:GetWidth()
PocketPlot.bg:SetHeight(dims + value)
PocketPlot.bg:SetWidth(dims + value)
end,
order = 3,
},
alpha = {
name = "Border Alpha",
desc = "Set the alpha for the minimap border.",
type = "range",
min = 0,
max = 1,
step = .05,
get = function() return db.alpha end,
set = function(_,alpha)
db.alpha = alpha
PocketPlot.ClassColors()
end,
order = 4,
},
classbg = {
name = "Class colored border",
desc = "Color the minimap border by your class.",
type = "toggle",
get = function() return db.classbg end,
set = function()
db.classbg = not db.classbg
PocketPlot.ClassColors()
end,
order = 5,
},
},
},
text = {
name = "Text",
type = "group",
args = {
header2 = {
name = "",
type = "header",
order = 1,
},
font = {
name = "Font",
desc = "Select a font to use.",
type = "select",
dialogControl = "LSM30_Font",
values = fonts,
get = function()
return db.lsmfont
end,
set = function(_,font)
db.lsmfont = font
PocketPlot.SetFonts()
end,
order = 2,
},
fontFlag = {
name = "Font Flag",
desc = "Set how to alter the displayed font.",
type = "select",
values = fontFlags,
get = function()
for k, v in pairs(fontFlags) do
if db.fontFlag == v then
return k
end
end
end,
set = function(_,key)
db.fontFlag = fontFlags[key]
PocketPlot.SetFonts()
end,
order = 3,
},
classfont = {
name = "Class colored text",
desc = "Color the clock and coordinates by your class.",
type = "toggle",
get = function() return db.classfont end,
set = function()
db.classfont = not db.classfont
PocketPlot.ClassColors()
end,
order = 4,
},
zonesize = {
name = "Zone Text Size",
desc = "Change the font size of the Zone Text.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.zoneSize end,
set = function(_,size)
db.zoneSize = size
PocketPlot.SetFonts()
end,
order = 5,
},
clocksize = {
name = "Clock Text Size",
desc = "Change the font size of the clock.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.clockSize end,
set = function(_,size)
db.clockSize = size
PocketPlot.SetFonts()
end,
order = 6,
},
coordsize = {
name = "Coords Text Size",
desc = "Change the font size of the coordinates.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.coordSize end,
set = function(_,size)
db.coordSize = size
PocketPlot.SetFonts()
end,
order = 7,
},
coords = {
name = "Display coords",
desc = "Toggle showing the coordinates display.",
type = "toggle",
get = function() return db.coords end,
set = function()
db.coords = not db.coords
if db.coords then
PocketPlot.coordframe:Show()
else
PocketPlot.coordframe:Hide()
end
PocketPlot.CoordPosition()
end,
order = 8,
},
clock = {
name = "Display clock",
desc = "Toggle showing the clock.",
type = "toggle",
get = function() return db.clock end,
set = function()
db.clock = not db.clock
if db.clock then
TimeManagerClockButton:Show()
else
TimeManagerClockButton:Hide()
end
PocketPlot.CoordPosition()
end,
order = 9,
},
zoneText = {
name = "Display zone text",
desc = "Toggle showing the zone text.",
type = "toggle",
get = function() return db.zoneText end,
set = function()
db.zoneText = not db.zoneText
if db.zoneText then
MinimapZoneTextButton:Show()
else
MinimapZoneTextButton:Hide()
end
end,
order = 10,
},
top = {
name = "Clock/coords on top",
desc = "Toggle showing the clock and coordinates above or below the map.",
type = "toggle",
get = function() return db.top end,
set = function()
db.top = not db.top
PocketPlot.CoordPosition()
end,
order = 11,
},
textOffset = {
name = "Clock/Coord Offset",
desc = "Vertical offset for the clock and coordinates.",
type = "range",
min = -50,
max = 50,
step = 1,
get = function() return db.textOffset end,
set = function(_,offset)
db.textOffset = offset
PocketPlot.CoordPosition()
end,
order = 12,
},
zoneTextOffset = {
name = "Zone Text Offset",
desc = "Vertical offset for the zone text.",
type = "range",
min = -50,
max = 50,
step = 1,
get = function() return db.zoneTextOffset end,
set = function(_,offset)
db.zoneTextOffset = offset
MinimapZoneTextButton:ClearAllPoints()
MinimapZoneTextButton:SetPoint("TOP", Minimap, "TOP", 0, -1 + db.zoneTextOffset)
end,
order = 13,
},
},
},
locations = {
name = "Locations",
type = "group",
args = {
header3 = {
name = "",
type = "header",
order = 1,
},
movers = {
name = "Enable mover for...",
desc = "Shows an anchor to move the selected frame.",
type = "select",
values = frames,
get = function()
if movershown then
for k,v in pairs(frames) do
if v == movershown then
return k
end
end
else
return 1 --key for "None" in frames table
end
end,
set = function(_,frame)
movershown = frames[frame]
MoveFrames(movershown)
end,
order = 2,
},
reset = {
name = "Restore Positions",
desc = "Clicking this will restore all frames to their default positions.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
func = function()
for i=1, #frames do
db[frames[i]] = nil
end
ReloadUI()
end,
order = 3,
},
div3 = {
name = " ",
type = "description",
order = 4,
},
nudgehelp = {
name = "Nudge the selected mover...",
type = "description",
order = 5,
},
nudgeL = {
name = "Left",
desc = "Nudge the frame 1px to the left.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
NudgeMover("x", -1)
end,
order = 6,
},
nudgeR = {
name = "Right",
desc = "Nudge the frame 1px to the right.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
NudgeMover("x", 1)
end,
order = 7,
},
nudgeU = {
name = "Up",
desc = "Nudge the frame 1px towards the top of the screen.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
NudgeMover("y", 1)
end,
order = 8,
},
nudgeD = {
name = "Down",
desc = "Nudge the frame 1px towards the bottom of the screen.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
NudgeMover("y", -1)
end,
order = 9,
},
},
},
profile = {
name = "Profile",
type = "group",
args = {
header4 = {
name = "",
type = "header",
order = 1,
},
charSpec = {
name = "Character specific settings",
desc = "Have this character use their own profile. If checked, any changes made will not affect other characters.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "toggle",
width = "full",
confirm = true,
get = function() return PocketPlotPCDB.charSpec end,
set = function()
PocketPlotPCDB.charSpec = not PocketPlotPCDB.charSpec
ReloadUI()
end,
order = 2,
},
copyProfile = {
name = "Copy from Default",
desc = "Copy all settings from the default, global profile to this character's profile. This will not effect other characters' specific profiles.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
disabled = function() return not PocketPlotPCDB.charSpec end,
func = function()
PocketPlotPCDB = PocketPlotDB
PocketPlotPCDB.charSpec = true
ReloadUI()
end,
order = 3,
},
resetProfile = {
name = "Profile Reset",
desc = "Reset this profile back to the out-of-the-box settings. If you reset the character specific profile, the global profile will be untouched, and vice versa. This will not effect other character specific profiles.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
func = function()
if PocketPlotPCDB.charSpec then
PocketPlotPCDB = {charSpec = true}
else
PocketPlotDB = {}
end
ReloadUI()
end,
order = 4,
},
},
},
},
}
 
local function SetUpDB()
if PocketPlotPCDB.charSpec then
--set defaults if new charSpec DB
for k,v in pairs(defaults) do
if type(PocketPlotPCDB[k]) == "nil" then
PocketPlotPCDB[k] = v
end
end
db = PocketPlotPCDB
else
db = PocketPlotDB
end
PocketPlot.db = db
end
 
local function OnLoad()
PocketPlotDB = PocketPlotDB or {}
PocketPlotPCDB = PocketPlotPCDB or {}
if PocketPlotPCDB.charSpec == nil then
PocketPlotPCDB.charSpec = false
end
for k,v in pairs(defaults) do
if type(PocketPlotDB[k]) == "nil" then
PocketPlotDB[k] = v
end
end
SetUpDB()
 
LibStub("AceConfig-3.0"):RegisterOptionsTable("PocketPlot", options)
PocketPlot.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "PocketPlot", nil, "general")
PocketPlot.optionsFrame.border = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "Border", "PocketPlot", "border")
PocketPlot.optionsFrame.text = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "Text", "PocketPlot", "text")
PocketPlot.optionsFrame.locations = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "Locations", "PocketPlot", "locations")
PocketPlot.optionsFrame.profile = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "Profile", "PocketPlot", "profile")
 
SlashCmdList["POCKETPLOT"] = function()
InterfaceOptionsFrame_OpenToCategory("PocketPlot")
InterfaceOptionsFrame_OpenToCategory("PocketPlot")
end
SLASH_POCKETPLOT1 = "/pocketplot"
SLASH_POCKETPLOT2 = "/pp"
 
--restore moved frame positions--
for i=1, #frames do
if db[frames[i]] then
SetPosition(frames[i])
end
end
 
OnLoad = nil
SetUpDB = nil
end
 
local f = CreateFrame("Frame")
f:RegisterEvent("ADDON_LOADED")
f:SetScript("OnEvent", function(self, event, addon)
if addon == "PocketPlot" then
OnLoad()
end
end)
trunk/PocketPlot/pocketplot.lua
1,145 → 1,28
local PocketPlot = CreateFrame("Frame", nil, Minimap)
local _, PocketPlot = ...
local LSM = LibStub("LibSharedMedia-3.0")
local widgetLists = AceGUIWidgetLSMlists
local fonts = widgetLists.font
local fonts = AceGUIWidgetLSMlists.font
local _, class = UnitClass("player")
local classColor, movershown, clockFrame, clockTime, db, options
local Minimap = Minimap
local MinimapZoneTextButton = MinimapZoneTextButton
local GameTimeFrame = GameTimeFrame
local MiniMapTracking = MiniMapTracking
local QueueStatusMinimapButton = QueueStatusMinimapButton
local MiniMapMailFrame = MiniMapMailFrame
local MiniMapVoiceChatFrame = MiniMapVoiceChatFrame
local MiniMapMeetingStoneFrame = MiniMapMeetingStoneFrame
local TimeManagerClockFrame = TimeManagerClockFrame
PP_oldMinimap, PP_oldDurabilityFrame, PP_oldVehicleSeatIndicator = nil
local _G = _G
local mover, moverText
local wasIndoors
local coordframe = CreateFrame("Frame", nil, Minimap)
coordframe:SetHeight(28) --height of clock button
coordframe:SetWidth(100)
coordframe:EnableMouse(true)
local coords = coordframe:CreateFontString(nil, "OVERLAY")
coords:SetParent(coordframe)
--coords:SetFont("Interface\\AddOns\\PocketPlot\\media\\negotiate_free.ttf", 12) --temporary
local frames = { "None",
"Minimap",
"DurabilityFrame",
"VehicleSeatIndicator",
"MiniMapInstanceDifficulty",
"GuildInstanceDifficulty",
"MiniMapChallengeMode",
"GarrisonLandingPageMinimapButton",
"WorldStateAlwaysUpFrame",
}
local stratae = {"BACKGROUND", "LOW", "MEDIUM", "HIGH", "DIALOG"}
local allshapes = { "3-Corner BL",
"3-Corner BR",
"3-Corner TL",
"3-Corner TR",
"Circle",
"Compass",
--[["Faded Circle", --<-- Test these more
"Faded Edges",
"Faded Square",]]
"Fancy Frame",
"Flower",
"Half Round B",
"Half Round L",
"Half Round R",
"Half Round T",
"Rectangle",
"Rounded",
"Scalloped",
"Slanted 1",
"Slanted 2",
"Square",
"Teardrop BL",
"Teardrop BR",
"Teardrop TL",
"Teardrop TR",
"Torn",
"Zigzag Round",
"Zigzag Square"
}
--need these 2 tables for minimap button paths
local squareMasks = {
["3-Corner BL"] = true,
["3-Corner BR"] = true,
["3-Corner TL"] = true,
["3-Corner TR"] = true,
["Fancy Frame"] = true,
["Half Round B"] = true,
["Half Round L"] = true,
["Half Round R"] = true,
["Half Round T"] = true,
["Rectangle"] = true,
["Rounded"] = true,
["Scalloped"] = true,
["Slanted 1"] = true,
["Slanted 2"] = true,
["Square"] = true,
["Torn"] = true,
["Zigzag Square"] = true,
}
local roundMasks = {
["Circle"] = true,
["Compass"] = true,
["Flower"] = true,
["Teardrop BL"] = true,
["Teardrop BR"] = true,
["Teardrop TL"] = true,
["Teardrop TR"] = true,
["Zigzag Round"] = true,
}
local fontFlags = {"None", "Outline", "Monochrome Outline"} --, "Monochrome"}
local blips = { "default",
"default light",
"default sharp",
"default soft",
"PPblips",
"PPblips light",
"PPblips sharp",
"PPblips soft",
"PPblips comic",
}
local GameTooltip = GameTooltip
local GetPlayerMapPosition = GetPlayerMapPosition
local db, clockBG, clockTime, classColor, coords, coordframe, wasIndoors
 
local defaults = {
shape = "Square",
blips = "PPblips",
lsmfont = "Negotiate Free",
fontFlag = "Outline",
zoneText = true,
zoneSize = 14, --font size
clockSize = 16, --font size
scale = 1, --scale of the minimap
mapPos = {x = -10, y = -10}, --offset of the minimap from the top right corner. If you wish to change where the minimap is anchored, see the "Minimap Location and Size" section below Note: this will move the quest tracker, etc, unless you use other addons to control those frames.
bg = {r = 0, g = 0, b = 0}, --border colors (red, green, blue) -- values are a range from 0-1 (0,0,0 is black and 1,1,1 is white)
mmAlpha = 1,
combHide = false,
alpha = 1,
top = false,
coords = true,
clock = true,
coordSize = 16,
classbg = false,
classfont = false,
textOffset = 0,
zoneTextOffset = 0,
insets = 4,
strata = "BACKGROUND",
level = 2,
hideTracking = false,
}
PocketPlot.bg = CreateFrame("Frame", "PocketPlotBG", Minimap)
local bg = PocketPlot.bg
local f = CreateFrame("Frame") --events frame
 
PocketPlot.SetShape = function()
Minimap:SetMaskTexture("Interface\\AddOns\\PocketPlot\\media\\"..db.shape)
bg:SetBackdrop({ bgFile = "Interface\\AddOns\\PocketPlot\\media\\"..db.shape })
--so minimap buttons follow the border of the map, for any addons that support it
GetMinimapShape = function() return PocketPlot.minimapButtonPaths[db.shape] or "ROUND" end
end
 
local function ClassColors()
PocketPlot.ClassColors = function()
if db.classbg then
PocketPlot:SetBackdropColor(classColor.r, classColor.g, classColor.b, db.alpha)
bg:SetBackdropColor(classColor.r, classColor.g, classColor.b, db.alpha)
else
PocketPlot:SetBackdropColor(db.bg.r-.05,db.bg.g-.05,db.bg.b-.05,db.alpha)
bg:SetBackdropColor(db.bg.r, db.bg.g, db.bg.b, db.alpha)
end
if db.classfont then
clockTime:SetTextColor(classColor.r, classColor.g, classColor.b)
150,128 → 33,130
end
end
 
local function CombatHide()
if db.combHide then
PocketPlot:RegisterEvent("PLAYER_REGEN_ENABLED")
PocketPlot:RegisterEvent("PLAYER_REGEN_DISABLED")
PocketPlot:SetScript("OnEvent", function(self,event)
if event == "PLAYER_REGEN_DISABLED" then
Minimap:Hide()
else
Minimap:Show()
end
end)
PocketPlot.SetFonts = function()
MinimapZoneText:SetFont(LSM:Fetch("font", db.lsmfont), db.zoneSize, db.fontFlag) --font and font size for zone text
coords:SetFont(LSM:Fetch("font",db.lsmfont), db.coordSize, db.fontFlag)
clockTime:SetFont(LSM:Fetch("font", db.lsmfont), db.clockSize, db.fontFlag)
end
 
PocketPlot.CoordPosition = function()
local clockshown = db.clock
local coordshown = db.coords
TimeManagerClockButton:ClearAllPoints()
coordframe:ClearAllPoints()
if not db.top then
if clockshown and not coordshown then
TimeManagerClockButton:SetPoint("TOP", Minimap, "BOTTOM", 0, 0 + db.textOffset)
clockTime:SetJustifyH("CENTER")
end
if coordshown and not clockshown then
coords:SetJustifyH("CENTER")
coordframe:SetPoint("TOP", Minimap, "BOTTOM", 0, 0 + db.textOffset)
end
if clockshown and coordshown then
TimeManagerClockButton:SetPoint("TOPLEFT", Minimap, "BOTTOMLEFT", 2, 0 + db.textOffset)
clockTime:SetJustifyH("LEFT")
coords:SetJustifyH("RIGHT")
coordframe:SetPoint("TOPRIGHT", Minimap, "BOTTOMRIGHT", 0, 0 + db.textOffset)
end
else
PocketPlot:UnregisterEvent("PLAYER_REGEN_ENABLED")
PocketPlot:UnregisterEvent("PLAYER_REGEN_DISABLED")
if clockshown and not coordshown then
TimeManagerClockButton:SetPoint("BOTTOM", Minimap, "TOP", 2, 0 + db.textOffset)
clockTime:SetJustifyH("CENTER")
end
if coordshown and not clockshown then
coords:SetJustifyH("CENTER")
coordframe:SetPoint("BOTTOM", Minimap, "TOP", 0, 0 + db.textOffset)
end
if clockshown and coordshown then
TimeManagerClockButton:SetPoint("BOTTOMLEFT", Minimap, "TOPLEFT", 0, 0 + db.textOffset)
clockTime:SetJustifyH("LEFT")
coords:SetJustifyH("RIGHT")
coordframe:SetPoint("BOTTOMRIGHT", Minimap, "TOPRIGHT", 0, 0 + db.textOffset)
end
end
end
 
local function SetShape()
Minimap:SetMaskTexture("Interface\\AddOns\\PocketPlot\\media\\"..db.shape)
PocketPlot:SetBackdrop({ bgFile = "Interface\\AddOns\\PocketPlot\\media\\"..db.shape })
if squareMasks[db.shape] then
--so minimap buttons follow the square shape instead of round
GetMinimapShape = function() return "SQUARE" end
elseif roundMasks[db.shape] then
GetMinimapShape = function() return "ROUND" end
local throttle, coordx, coordy = 0
local function UpdateCoords(self, elapsed)
throttle = throttle + elapsed
if throttle >= .3 then
coordx,coordy = GetPlayerMapPosition("player")
if coordx then
coords:SetFormattedText("%.1f/%.1f", coordx*100, coordy*100)
else
coords:SetText("--/--")
end
throttle = 0
end
end
 
local function SetPosition(frame)
if mover and mover:IsShown() then
local r,_,a,x,y = mover:GetPoint()
db[frame] = {["r"]=r, ["p"]="UIParent",["a"]=a,["x"]=x,["y"]=y}
PocketPlot.CombatHide = function()
if db.combatHide then
f:RegisterEvent("PLAYER_REGEN_ENABLED")
f:RegisterEvent("PLAYER_REGEN_DISABLED")
else
f:UnregisterEvent("PLAYER_REGEN_ENABLED")
f:UnregisterEvent("PLAYER_REGEN_DISABLED")
end
_G[frame]:ClearAllPoints()
_G[frame]:SetPoint(db[frame].r, _G[db[frame].p], db[frame].a, db[frame].x, db[frame].y)
if not _G["PP_old"..frame] then
_G["PP_old"..frame] = _G[frame].SetPoint
_G[frame].SetPoint = function(self, a,b,c,d,e, ...)
local a,b,c,d,e = db[frame].r, _G[db[frame].p], db[frame].a, db[frame].x, db[frame].y
return _G["PP_old"..frame](self, a,b,c,d,e, ...)
end
end
end
 
local function MoveFrames(frame)
if not mover then
mover = CreateFrame("Frame", nil, UIParent)
mover:SetBackdrop({bgFile ="Interface\\Buttons\\WHITE8x8",})
mover:SetBackdropColor(.2,.2,.9,.6)
mover:SetMovable(1)
mover:SetFrameStrata("HIGH")
mover:Hide()
moverText = mover:CreateFontString(nil, "OVERLAY")
moverText:SetFont("Fonts\\ARIALN.ttf", 15, "OUTLINE")
moverText:SetParent(mover)
moverText:SetPoint("CENTER")
mover:SetScript("OnMouseDown", function() mover:StartMoving() end)
mover:SetScript("OnMouseUp", function() mover:StopMovingOrSizing() SetPosition(movershown) end)
PocketPlot.PetBattleHide = function()
if db.battleHide then
f:RegisterEvent("PET_BATTLE_OPENING_START")
f:RegisterEvent("PET_BATTLE_CLOSE")
else
f:UnregisterEvent("PET_BATTLE_OPENING_START")
f:UnregisterEvent("PET_BATTLE_CLOSE")
end
if frame == "None" then
mover:SetScale(1)
mover:Hide()
mover:EnableMouse(false)
return
if C_PetBattles.IsInBattle() and db.battleHide then
Minimap:Hide()
else
mover:Show()
moverText:SetText(frame)
mover:EnableMouse(true)
mover:SetScale(_G[frame]:GetScale())
mover:ClearAllPoints()
mover:SetAllPoints(frame)
Minimap:Show()
end
end
 
local function MapSetup()
--restore moved frame positions--
for i=1, #frames do
if db[frames[i]] then
SetPosition(frames[i])
end
PocketPlot.MinimapFade = function()
if db.mmAlpha < 1 then
f:RegisterEvent("ZONE_CHANGED_INDOORS")
f:RegisterEvent("ZONE_CHANGED")
f:RegisterEvent("MINIMAP_UPDATE_ZOOM")
else
f:UnregisterEvent("ZONE_CHANGED_INDOORS")
f:UnregisterEvent("ZONE_CHANGED")
f:UnregisterEvent("MINIMAP_UPDATE_ZOOM")
end
if not IsIndoors() then
Minimap:SetAlpha(db.mmAlpha)
end
end
 
--MINIMAP LOCATION AND SIZE
Minimap:SetScale(db.scale) --this says that the minimap is set to 90% scale
local function MapSetup()
Minimap:SetScale(db.scale)
Minimap:SetFrameStrata(db.strata)
Minimap:SetFrameLevel(db.level)
if db.mmAlpha < 1 and IsIndoors() then
wasIndoors = true
else
--keep alpha of 1 while indoors - if mmAlpha is < 1, it will update when going outdoors
Minimap:SetAlpha(db.mmAlpha)
end
 
--ZONE TEXT
 
--ZONE TEXT
MinimapZoneTextButton:SetParent("Minimap")
MinimapZoneTextButton:ClearAllPoints()
MinimapZoneTextButton:SetPoint("TOP", Minimap, "TOP", 0, -1 + db.zoneTextOffset) --where the zone text is located
MinimapZoneTextButton:SetFrameLevel(5)
MinimapZoneTextButton:SetFrameLevel(db.level + 2)
MinimapZoneText:ClearAllPoints()
MinimapZoneText:SetPoint("CENTER")
MinimapZoneText:SetFont(LSM:Fetch("font", db.lsmfont), db.zoneSize, db.fontFlag) --font and font size for zone text
if not db.zoneText then
MinimapZoneTextButton:Hide()
end
 
--MINIMAP ICONS/BLIPS
if db.blips == "default" then
Minimap:SetBlipTexture("Interface\\Minimap\\OBJECTICONSATLAS")
else
Minimap:SetBlipTexture("Interface\\AddOns\\PocketPlot\\media\\"..db.blips)
end
 
--MAKE THE MINIMAP SQUARE WITH A THIN BORDER
 
--BORDER/SIZE
MinimapBorder:Hide()
SetShape()
PocketPlot:SetFrameLevel(1)
PocketPlot:SetPoint("CENTER", Minimap, "CENTER")
local dims = Minimap:GetWidth()
PocketPlot:SetHeight(dims + db.insets)
PocketPlot:SetWidth(dims + db.insets)
 
--MAKE THE MINIMAP ZOOM WITH MOUSEWHEEL
PocketPlot.SetShape()
bg:SetFrameLevel(db.level - 1)
bg:SetPoint("CENTER", Minimap, "CENTER")
local size = Minimap:GetWidth() + db.insets
bg:SetHeight(size)
bg:SetWidth(size)
 
--ZOOM WITH MOUSEWHEEL
MinimapZoomIn:Hide()
MinimapZoomOut:Hide()
Minimap:EnableMouseWheel(true)
282,89 → 167,43
Minimap_ZoomOut()
end
end)
 
--CLOCK FRAME
if not IsAddOnLoaded("Blizzard_TimeManager") then
LoadAddOn("Blizzard_TimeManager")
end
clockFrame, clockTime = TimeManagerClockButton:GetRegions()
clockFrame:Hide()
clockTime:SetFont(LSM:Fetch("font", db.lsmfont), db.clockSize, db.fontFlag)
 
--CLOCK
clockBG, clockTime = TimeManagerClockButton:GetRegions()
clockBG:Hide()
clockTime:SetAllPoints(TimeManagerClockButton)
if not db.clock then --toggle the clock, since CVar is removed in 4.0
if not db.clock then
TimeManagerClockButton:Hide()
end
 
--CALENDAR BUTTON/FRAME
GameTimeFrame:SetAlpha(0) --calendar button (old day/night indicator) --Set alpha to 0 so that it's still hidden, but we'll see the ? flash for new invites
GameTimeFrame:EnableMouse(false) --so that we don't get the tooltip/click behavior still
GameTimeCalendarInvitesTexture:SetParent("Minimap") --the ? texture
--right click to open the calendar (but do it without pinging the map)
local oldOnClick = Minimap:GetScript("OnMouseUp")
Minimap:SetScript("OnMouseUp", function(self, click)
if click == "RightButton" then
if db.hideTracking and IsShiftKeyDown() then
MiniMapTrackingButton:Click()
else
ToggleCalendar()
end
else
oldOnClick(self)
end
end)
 
--TRACKING ICON/MENU
--MiniMapTrackingButton:SetAlpha(0)
MiniMapTrackingButtonBorder:SetAlpha(0)
MiniMapTrackingBackground:Hide()
MiniMapTracking:ClearAllPoints()
MiniMapTracking:SetPoint("BOTTOMLEFT", Minimap, "BOTTOMLEFT", -4, -5) --where the tracking icon/menu is located
MiniMapTracking:SetScale(.9)
MiniMapTrackingIcon:SetTexCoord(0.07,0.93,0.07,0.93)
if db.hideTracking then
MiniMapTracking:Hide()
end
 
--BATTLEGROUND AND LFG QUEUE ICON
--BATTLEGROUND AND LFG QUEUE ICON
QueueStatusMinimapButtonBorder:Hide()
QueueStatusMinimapButton:ClearAllPoints()
QueueStatusMinimapButton:SetPoint("BOTTOMLEFT", Minimap, "BOTTOMLEFT", 27, -4) --where the queue icon is located
--QueueStatusFrame:SetClampedToScreen(true)
 
--NEW MAIL ICON
QueueStatusMinimapButton:SetPoint("BOTTOMLEFT", Minimap, "BOTTOMLEFT", 27, -4)
 
--NEW MAIL ICON
MiniMapMailBorder:Hide()
MiniMapMailFrame:ClearAllPoints()
MiniMapMailFrame:SetPoint("BOTTOMRIGHT", Minimap, "BOTTOMRIGHT", 4, -5) --where the mail icon is located
MiniMapMailFrame:SetPoint("BOTTOMRIGHT", Minimap, "BOTTOMRIGHT", 4, -5)
MiniMapMailIcon:SetTexture("Interface\\Minimap\\Tracking\\Mailbox.blp")
 
--VOICE CHAT ICON
 
--VOICE CHAT ICON
MiniMapVoiceChatFrameBorder:Hide()
MiniMapVoiceChatFrameBackground:Hide()
MiniMapVoiceChatFrame:ClearAllPoints()
MiniMapVoiceChatFrame:SetPoint("BOTTOMRIGHT", Minimap, "BOTTOMRIGHT", -25, -5)
 
--MISC. THINGS TO HIDE
MiniMapWorldMapButton:Hide() --default keybinding for world map is M
MinimapNorthTag:SetAlpha(0) --Hide() wasn't working, but SetAlpha() is...
MinimapBorderTop:Hide()
 
CombatHide() --Check to see if we should hide the minimap in combat
 
--hide icons and zone text til mouseover
--Minimap:SetScript("OnEnter", function() if db.mouseover then ShowOnMouseover() end end)
--Minimap:SetScript("OnLeave", function() if db.mouseover then HideOnMouseOut() end end)
 
MinimapCluster:EnableMouse(false) --so you can still click the game world/turn in the upper right corner
 
--COORDINATES
coords:SetFont(LSM:Fetch("font",db.lsmfont), db.coordSize, db.fontFlag)
--thanks, Elviswind, for shadow code to match clock
--COORDINATES
coordframe = CreateFrame("Frame", nil, Minimap)
PocketPlot.coordframe = coordframe
coordframe:SetHeight(28)
coordframe:SetWidth(100)
coordframe:EnableMouse(true)
coords = coordframe:CreateFontString(nil, "OVERLAY")
coords:SetParent(coordframe)
coords:SetShadowOffset(1,-1)
coords:SetShadowColor(0,0,0,1)
coords:SetAllPoints(coordframe)
if not db.coords then
coordframe:Hide()
end
coordframe:SetScript("OnEnter", function(self)
GameTooltip:SetOwner(self, "ANCHOR_LEFT")
GameTooltip:AddLine("Location Functions", 1,1,1)
375,710 → 214,89
coordframe:SetScript("OnLeave", function() GameTooltip:Hide() end)
coordframe:SetScript("OnMouseUp", function()
if IsShiftKeyDown() then
ChatFrame1EditBox:Show()
ChatFrame1EditBox:SetFocus()
ChatFrame1EditBox:Insert("["..coords:GetText().."]")
else
ToggleFrame(WorldMapFrame)
end
end)
local throttle = 0
local coordx, coordy
coordframe:SetScript("OnUpdate", function(self, elapsed)
throttle = throttle + elapsed
if throttle >= .3 then
coordx,coordy = GetPlayerMapPosition("player")
if coordx then
coords:SetFormattedText("%.1f/%.1f", coordx*100, coordy*100)
coordframe:Hide() --prevent OnUpdate from running until we're ready
SetMapToCurrentZone() --force update for GetPlayerMapPosition()
coordframe:SetScript("OnUpdate", UpdateCoords)
 
--CALENDAR BUTTON
GameTimeFrame:SetAlpha(0) --Set alpha to 0 so that it's still hidden, but we'll see the ? flash for new invites
GameTimeFrame:EnableMouse(false)
GameTimeCalendarInvitesTexture:SetParent("Minimap")
 
--TRACKING ICON/MENU --hidden, opens with shift-right click
MiniMapTracking:ClearAllPoints()
MiniMapTracking:SetPoint("CENTER", Minimap, "CENTER")
MiniMapTracking:Hide()
 
--CLICKS ON MINIMAP
local oldOnClick = Minimap:GetScript("OnMouseUp")
Minimap:SetScript("OnMouseUp", function(self, click)
if click == "RightButton" then
if IsShiftKeyDown() then
MiniMapTrackingButton:Click()
else
coords:SetText("--/--")
GameTimeFrame_OnClick(GameTimeFrame)
end
throttle = 0
else
oldOnClick(self)
end
end)
 
--COLOR BORDER AND CLOCK/COORDS BY CLASS IF ENABLED
ClassColors()
end
 
local function CoordPosition()
local clockshown = db.clock
local coordshown = db.coords
TimeManagerClockButton:ClearAllPoints()
coordframe:ClearAllPoints()
if not db.top then
if clockshown and not coordshown then
TimeManagerClockButton:SetPoint("TOP", Minimap, "BOTTOM", 0, 0 + db.textOffset)
clockTime:SetJustifyH("CENTER")
end
if coordshown and not clockshown then
coords:SetJustifyH("CENTER")
coordframe:SetPoint("TOP", Minimap, "BOTTOM", 0, 0 + db.textOffset)
end
if clockshown and coordshown then
TimeManagerClockButton:SetPoint("TOPLEFT", Minimap, "BOTTOMLEFT", 2, 0 + db.textOffset)
clockTime:SetJustifyH("LEFT")
coords:SetJustifyH("RIGHT")
coordframe:SetPoint("TOPRIGHT", Minimap, "BOTTOMRIGHT", 0, 0 + db.textOffset)
end
else
if clockshown and not coordshown then
TimeManagerClockButton:SetPoint("BOTTOM", Minimap, "TOP", 2, 0 + db.textOffset)
clockTime:SetJustifyH("CENTER")
end
if coordshown and not clockshown then
coords:SetJustifyH("CENTER")
coordframe:SetPoint("BOTTOM", Minimap, "TOP", 0, 0 + db.textOffset)
end
if clockshown and coordshown then
TimeManagerClockButton:SetPoint("BOTTOMLEFT", Minimap, "TOPLEFT", 0, 0 + db.textOffset)
clockTime:SetJustifyH("LEFT")
coords:SetJustifyH("RIGHT")
coordframe:SetPoint("BOTTOMRIGHT", Minimap, "TOPRIGHT", 0, 0 + db.textOffset)
end
--FONTS & COLORS
PocketPlot.SetFonts()
PocketPlot.ClassColors()
 
--FINISHING TOUCHES
MiniMapWorldMapButton:Hide()
MinimapNorthTag:SetAlpha(0) --using SetAlpha because it reappears when toggling rotate minimap setting
MinimapBorderTop:Hide()
MinimapCluster:EnableMouse(false)
if db.coords then
coordframe:Show()
end
end
 
local function SetUpDB()
if PocketPlotPCDB.charSpec then
--set defaults if new charSpec DB
for k,v in pairs(defaults) do
if type(PocketPlotPCDB[k]) == "nil" then
PocketPlotPCDB[k] = v
end
end
db = PocketPlotPCDB
else
db = PocketPlotDB
end
end
 
 
options = {
name = "PocketPlot Options",
type = "group",
args = {
header0 = {
name = "General options",
type = "header",
order = 0,
},
shape = {
name = "Minimap Shape",
desc = "Set the shape of the minimap.",
type = "select",
values = allshapes,
get = function()
for k, v in pairs(allshapes) do
if db.shape == v then
return k
end
end
end,
set = function(_,key)
db.shape = allshapes[key]
SetShape()
ClassColors()
end,
order = 1,
},
blips = {
name = "Tracking Blips",
desc = "Set the style of tracking blips (POI) on the minimap.",
type = "select",
values = blips,
get = function()
for k, v in pairs(blips) do
if db.blips == v then
return k
end
end
end,
set = function(_,key)
db.blips = blips[key]
if db.blips == "default" then
Minimap:SetBlipTexture("Interface\\Minimap\\OBJECTICONS")
else
Minimap:SetBlipTexture("Interface\\AddOns\\PocketPlot\\media\\"..db.blips)
end
end,
order = 2,
},
scale = {
name = "Minimap Scale",
desc = "Set the scale of the minimap.",
type = "range",
min = .25,
max = 2,
step = .05,
get = function() return db.scale end,
set = function(_,value)
db.scale = value
Minimap:SetScale(value)
end,
order = 3,
},
mmAlpha = {
name = "Minimap Alpha",
desc = "Set the transparency of the minimap when outdoors. Does not take effect when indoors.",
type = "range",
min = 0.05,
max = 1,
step = .05,
get = function() return db.mmAlpha end,
set = function(_,value)
db.mmAlpha = value
if not IsIndoors() then
Minimap:SetAlpha(value)
else
wasIndoors = true
end
if db.mmAlpha < 1 then
PocketPlot:RegisterEvent("ZONE_CHANGED_INDOORS")
PocketPlot:RegisterEvent("ZONE_CHANGED")
else
PocketPlot:RegisterEvent("ZONE_CHANGED_INDOORS")
PocketPlot:RegisterEvent("ZONE_CHANGED")
end
end,
order = 4,
},
strata = {
name = "Minimap Strata",
desc = "Set the strata of the minimap and how it layers with other elements in your interface.",
type = "select",
values = stratae,
get = function()
for k, v in pairs(stratae) do
if db.strata == v then
return k
end
end
end,
set = function(_,key)
db.strata = stratae[key]
Minimap:SetFrameStrata(db.strata)
end,
order = 5,
},
level = {
name = "Strata Level",
desc = "Nudge the minimap up and down different levels on its frame strata.",
type = "range",
min = 1,
max = 10,
step = 1,
get = function() return db.level end,
set = function(_,value)
db.level = value
Minimap:SetFrameLevel(db.level)
end,
order = 6,
},
combHide = {
name = "Hide in Combat",
desc = "Hide the minimap when in combat.",
type = "toggle",
get = function() return db.combHide end,
set = function()
db.combHide = not db.combHide
CombatHide()
end,
order = 7,
},
header1 = {
name = "Border options",
type = "header",
order = 8,
},
border = {
name = "Border Color",
desc = "Select a color for the minimap's border.",
type = "color",
disabled = function() return db.classbg end,
-- hasAlpha = true,
get = function() return db.bg.r, db.bg.g, db.bg.b end,
set = function(_,r,g,b)
db.bg.r,db.bg.g,db.bg.b = r,g,b
ClassColors()
end,
order = 9,
},
classbg = {
name = "Class colored border",
desc = "Color the minimap border by your class.",
type = "toggle",
get = function() return db.classbg end,
set = function()
db.classbg = not db.classbg
ClassColors()
end,
order = 10,
},
insets = {
name = "Border size",
desc = "Set the width of the border around the minimap.",
type = "range",
min = .5,
max = 10,
step = .5,
get = function() return db.insets end,
set = function(_,value)
db.insets = value
local dims = Minimap:GetWidth()
PocketPlot:SetHeight(dims + value)
PocketPlot:SetWidth(dims + value)
end,
order = 11,
},
alpha = {
name = "Border Alpha",
desc = "Set the alpha for the minimap border.",
type = "range",
min = 0,
max = 1,
step = .05,
get = function() return db.alpha end,
set = function(_,alpha)
db.alpha = alpha
ClassColors()
end,
order = 12,
},
header2 = {
name = "Text options",
type = "header",
order = 13,
},
font = {
name = "Font",
desc = "Select a font to use.",
type = "select",
dialogControl = "LSM30_Font",
values = fonts,
get = function()
return db.lsmfont
end,
set = function(_,font)
db.lsmfont = font
clockTime:SetFont(LSM:Fetch("font", db.lsmfont), db.clockSize, db.fontFlag)
MinimapZoneText:SetFont(LSM:Fetch("font", db.lsmfont), db.zoneSize, db.fontFlag)
coords:SetFont(LSM:Fetch("font",db.lsmfont), db.coordSize, db.fontFlag)
end,
order = 14,
},
fontFlag = {
name = "Font Flag",
desc = "Set how to alter the displayed font.",
type = "select",
values = fontFlags,
get = function()
for k, v in pairs(fontFlags) do
if db.fontFlag == v then
return k
end
end
end,
set = function(_,key)
db.fontFlag = fontFlags[key]
clockTime:SetFont(LSM:Fetch("font", db.lsmfont), db.clockSize, db.fontFlag)
MinimapZoneText:SetFont(LSM:Fetch("font", db.lsmfont), db.zoneSize, db.fontFlag)
coords:SetFont(LSM:Fetch("font",db.lsmfont), db.coordSize, db.fontFlag)
end,
order = 15,
},
zonesize = {
name = "Zone Text Size",
desc = "Change the font size of the Zone Text.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.zoneSize end,
set = function(_,size)
db.zoneSize = size
MinimapZoneText:SetFont(LSM:Fetch("font",db.lsmfont), db.zoneSize, db.fontFlag)
end,
order = 16,
},
clocksize = {
name = "Clock Text Size",
desc = "Change the font size of the clock.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.clockSize end,
set = function(_,size)
db.clockSize = size
clockTime:SetFont(LSM:Fetch("font",db.lsmfont), db.clockSize, db.fontFlag)
end,
order = 17,
},
coordsize = {
name = "Coords Text Size",
desc = "Change the font size of the coordinates.",
type = "range",
min = 6,
max = 24,
step = 1,
get = function() return db.coordSize end,
set = function(_,size)
db.coordSize = size
coords:SetFont(LSM:Fetch("font",db.lsmfont), db.coordSize, db.fontFlag)
end,
order = 18,
},
classfont = {
name = "Class colored text",
desc = "Color the clock and coordinates by your class.",
type = "toggle",
get = function() return db.classfont end,
set = function()
db.classfont = not db.classfont
ClassColors()
end,
order = 19,
},
coords = {
name = "Display coords",
desc = "Toggle showing the coordinates display.",
type = "toggle",
get = function() return db.coords end,
set = function()
db.coords = not db.coords
if db.coords then
coordframe:Show()
else
coordframe:Hide()
end
CoordPosition()
end,
order = 20,
},
clock = {
name = "Display clock",
desc = "Toggle showing the clock.",
type = "toggle",
get = function() return db.clock end,
set = function()
db.clock = not db.clock
if db.clock then
TimeManagerClockButton:Show()
else
TimeManagerClockButton:Hide()
end
CoordPosition()
end,
order = 21,
},
zoneText = {
name = "Display zone text",
desc = "Toggle showing the zone text.",
type = "toggle",
get = function() return db.zoneText end,
set = function()
db.zoneText = not db.zoneText
if db.zoneText then
MinimapZoneTextButton:Show()
else
MinimapZoneTextButton:Hide()
end
end,
order = 22,
},
top = {
name = "Clock/coords on top",
desc = "Toggle showing the clock and coordinates above or below the map.",
type = "toggle",
get = function() return db.top end,
set = function()
db.top = not db.top
CoordPosition()
end,
order = 23,
},
textOffset = {
name = "Clock/Coord Offset",
desc = "Vertical offset for the clock and coordinates.",
type = "range",
min = -50,
max = 50,
step = 1,
get = function() return db.textOffset end,
set = function(_,offset)
db.textOffset = offset
CoordPosition()
end,
order = 23.5,
},
zoneTextOffset = {
name = "Zone Text Offset",
desc = "Vertical offset for the zone text.",
type = "range",
min = -50,
max = 50,
step = 1,
get = function() return db.zoneTextOffset end,
set = function(_,offset)
db.zoneTextOffset = offset
MinimapZoneTextButton:ClearAllPoints()
MinimapZoneTextButton:SetPoint("TOP", Minimap, "TOP", 0, -1 + db.zoneTextOffset)
end,
order = 23.75,
},
header3 = {
name = "Frame Locations",
type = "header",
order = 24,
},
movers = {
name = "Enable mover for...",
desc = "Shows an anchor to move the selected frame.",
type = "select",
values = frames,
get = function()
if movershown then
for k,v in pairs(frames) do
if v == movershown then
return k
end
end
else
return 1 --key for "None" in frames table
end
end,
set = function(_,frame)
movershown = frames[frame]
MoveFrames(movershown)
end,
order = 25,
},
reset = {
name = "Restore Positions",
desc = "Clicking this will restore all frames to their default positions.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
func = function()
for i=1, #frames do
db[frames[i]] = nil
end
ReloadUI()
end,
order = 26,
},
hideTracking = {
name = "Hide Tracking Button",
desc = "Hides the minimap tracking button. Open the menu by using Shift-Right-Click on the minimap.",
type = "toggle",
get = function() return db.hideTracking end,
set = function()
db.hideTracking = not db.hideTracking
if db.hideTracking then
MiniMapTracking:Hide()
else
MiniMapTracking:Show()
end
end,
order = 26.3,
},
div3 = {
name = " ",
type = "description",
order = 26.4,
},
nudgehelp = {
name = "Nudge the selected mover...",
type = "description",
order = 26.5,
},
nudgeL = {
name = "Left",
desc = "Nudge the frame 1px to the left.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
if not db[movershown] then
SetPosition(movershown)
end
local frame = _G[movershown]
db[movershown].x = db[movershown].x - 1
frame:ClearAllPoints()
frame:SetPoint(db[movershown].r, db[movershown].p, db[movershown].a, db[movershown].x, db[movershown].y)
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end,
order = 27,
},
nudgeR = {
name = "Right",
desc = "Nudge the frame 1px to the right.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
if not db[movershown] then
SetPosition(movershown)
end
local frame = _G[movershown]
db[movershown].x = db[movershown].x + 1
frame:ClearAllPoints()
frame:SetPoint(db[movershown].r, db[movershown].p, db[movershown].a, db[movershown].x, db[movershown].y)
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end,
order = 28,
},
nudgeU = {
name = "Up",
desc = "Nudge the frame 1px towards the top of the screen.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
if not db[movershown] then
SetPosition(movershown)
end
local frame = _G[movershown]
db[movershown].y = db[movershown].y + 1
frame:ClearAllPoints()
frame:SetPoint(db[movershown].r, db[movershown].p, db[movershown].a, db[movershown].x, db[movershown].y)
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end,
order = 29,
},
nudgeD = {
name = "Down",
desc = "Nudge the frame 1px towards the bottom of the screen.",
type = "execute",
width = "half",
disabled = function() return movershown == "None" or movershown == nil end,
func = function()
if not db[movershown] then
SetPosition(movershown)
end
local frame = _G[movershown]
db[movershown].y = db[movershown].y - 1
frame:ClearAllPoints()
frame:SetPoint(db[movershown].r, db[movershown].p, db[movershown].a, db[movershown].x, db[movershown].y)
mover:ClearAllPoints()
mover:SetAllPoints(frame)
end,
order = 30,
},
div4 = {
name = " ",
type = "description",
order = 31,
},
header4 = {
name = "Profile",
type = "header",
order = 32,
},
charSpec = {
name = "Character specific settings",
desc = "Have this character use their own profile. If checked, any changes made will not affect other characters.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "toggle",
width = "full",
confirm = true,
get = function() return PocketPlotPCDB.charSpec end,
set = function()
PocketPlotPCDB.charSpec = not PocketPlotPCDB.charSpec
ReloadUI()
end,
order = 33,
},
copyProfile = {
name = "Copy from Default",
desc = "Copy all settings from the default, global profile to this character's profile. This will not effect other characters' specific profiles.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
disabled = function() return not PocketPlotPCDB.charSpec end,
func = function()
PocketPlotPCDB = PocketPlotDB
PocketPlotPCDB.charSpec = true
ReloadUI()
end,
order = 34,
},
resetProfile = {
name = "Profile Reset",
desc = "Reset this profile back to the out-of-the-box settings. If you reset the character specific profile, the global profile will be untouched, and vice versa. This will not effect other character specific profiles.\n\n|c00E30016WARNING:|r Your UI will be reloaded in the process!",
type = "execute",
confirm = true,
func = function()
if PocketPlotPCDB.charSpec then
PocketPlotPCDB = {charSpec = true}
else
PocketPlotDB = {}
end
ReloadUI()
end,
order = 35,
},
},
}
 
 
local function PlayerLogin()
PocketPlotDB = PocketPlotDB or {}
PocketPlotPCDB = PocketPlotPCDB or {}
if PocketPlotPCDB.charSpec == nil then
PocketPlotPCDB.charSpec = false
end
for k,v in pairs(defaults) do
if type(PocketPlotDB[k]) == "nil" then
PocketPlotDB[k] = v
end
end
SetUpDB()
db = PocketPlot.db
 
LSM:Register("font", "Negotiate Free", "Interface\\AddOns\\PocketPlot\\media\\negotiate_free.ttf")
 
classColor = CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[class] or RAID_CLASS_COLORS[class]
 
if CUSTOM_CLASS_COLORS then
CUSTOM_CLASS_COLORS:RegisterCallback(ClassColors)
CUSTOM_CLASS_COLORS:RegisterCallback(PocketPlot.ClassColors)
end
 
LibStub("AceConfig-3.0"):RegisterOptionsTable("PocketPlot", options)
PocketPlot.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("PocketPlot", "PocketPlot")
SlashCmdList["POCKETPLOT"] = function()
InterfaceOptionsFrame_OpenToCategory("PocketPlot")
InterfaceOptionsFrame_OpenToCategory("PocketPlot")
end
SLASH_POCKETPLOT1 = "/pocketplot"
SLASH_POCKETPLOT2 = "/pp"
 
MapSetup()
CoordPosition()
PocketPlot.CoordPosition()
PocketPlot.CombatHide()
PocketPlot.PetBattleHide()
PocketPlot.MinimapFade()
 
if db.mmAlpha < 1 then
PocketPlot:RegisterEvent("ZONE_CHANGED_INDOORS")
PocketPlot:RegisterEvent("ZONE_CHANGED")
end
 
PlayerLogin = nil
end
 
--this is here instead of in the above function because Grid would throw some dumb error that shouldn't have been occuring, imo
LSM:Register("font", "Negotiate Free", "Interface\\AddOns\\PocketPlot\\media\\negotiate_free.ttf")
 
 
PocketPlot:RegisterEvent("PLAYER_LOGIN")
PocketPlot:SetScript("OnEvent", function(self,event)
f:RegisterEvent("PLAYER_LOGIN")
f:SetScript("OnEvent", function(self, event)
if event == "PLAYER_LOGIN" then
PlayerLogin()
elseif event == "ZONE_CHANGED_INDOORS" then
Minimap:SetAlpha(1)
Minimap:SetZoom(1)
Minimap:SetZoom(0)
wasIndoors = true
else --"ZONE_CHANGED"
if wasIndoors then
if not IsIndoors() then
Minimap:SetAlpha(db.mmAlpha)
wasIndoors = false
end
elseif event == "PLAYER_REGEN_DISABLED" or event == "PET_BATTLE_OPENING_START" then
Minimap:Hide()
elseif event == "PLAYER_REGEN_ENABLED" or event == "PET_BATTLE_CLOSE" then
Minimap:Show()
elseif event == "ZONE_CHANGED_INDOORS" or event == "MINIMAP_UPDATE_ZOOM" or event == "ZONE_CHANGED" then
if IsIndoors() then
Minimap:SetAlpha(1)
Minimap:SetZoom(1)
Minimap:SetZoom(0)
else
Minimap:SetAlpha(db.mmAlpha)
end
end
end)
trunk/PocketPlot/PocketPlot.toc
1,9 → 1,8
## Interface: 70100
## Interface: 70200
## Title: PocketPlot
## Author: Seerah
## Notes: Minimap customization
## Version: 2.18.4
## X-Category: Minimap
## Version: 3.0.0
## OptionalDeps: Ace3, LibSharedMedia-3.0, AceGUI-3.0-SharedMediaWidgets
## SavedVariables: PocketPlotDB
## SavedVariablesPerCharacter: PocketPlotPCDB
15,4 → 14,5
libs\LibSharedMedia-3.0\lib.xml
Libs\AceGUI-3.0-SharedMediaWidgets\widget.xml
 
pocketplot.lua
\ No newline at end of file +pocketplot.lua +pocketplot_options.lua \ No newline at end of file
trunk/PocketPlot/libs/CallbackHandler-1.0/CallbackHandler-1.0.xml
1,4 → 1,4
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="CallbackHandler-1.0.lua"/>
</Ui>
\ No newline at end of file +
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua
5,8 → 5,6
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
local IsLegion = select(4, GetBuildInfo()) >= 70000
 
-- Lua APIs
local pairs = pairs
 
148,11 → 146,7
local texture = frame:CreateTexture(nil, "BACKGROUND")
texture:SetWidth(16)
texture:SetHeight(16)
if IsLegion then
texture:SetColorTexture(1, 1, 1)
else
texture:SetTexture(1, 1, 1)
end
texture:SetColorTexture(1, 1, 1)
texture:SetPoint("CENTER", colorSwatch)
texture:Show()
 
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIWidget-InteractiveLabel.lua
1,7 → 1,7
--[[-----------------------------------------------------------------------------
InteractiveLabel Widget
-------------------------------------------------------------------------------]]
local Type, Version = "InteractiveLabel", 20
local Type, Version = "InteractiveLabel", 21
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIWidget-Label.lua
2,7 → 2,7
Label Widget
Displays text and optionally an icon.
-------------------------------------------------------------------------------]]
local Type, Version = "Label", 23
local Type, Version = "Label", 24
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
78,6 → 78,8
self:SetImageSize(16, 16)
self:SetColor()
self:SetFontObject()
self:SetJustifyH("LEFT")
self:SetJustifyV("TOP")
 
-- reset the flag
self.resizing = nil
134,6 → 136,14
self.image:SetHeight(height)
UpdateImageAnchor(self)
end,
 
["SetJustifyH"] = function(self, justifyH)
self.label:SetJustifyH(justifyH)
end,
 
["SetJustifyV"] = function(self, justifyV)
self.label:SetJustifyV(justifyV)
end,
}
 
--[[-----------------------------------------------------------------------------
144,9 → 154,6
frame:Hide()
 
local label = frame:CreateFontString(nil, "BACKGROUND", "GameFontHighlightSmall")
label:SetJustifyH("LEFT")
label:SetJustifyV("TOP")
 
local image = frame:CreateTexture(nil, "BACKGROUND")
 
-- create widget
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua
1,7 → 1,7
--[[-----------------------------------------------------------------------------
Frame Container
-------------------------------------------------------------------------------]]
local Type, Version = "Frame", 24
local Type, Version = "Frame", 25
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
25,6 → 25,10
frame.obj:Hide()
end
 
local function Frame_OnShow(frame)
frame.obj:Fire("OnShow")
end
 
local function Frame_OnClose(frame)
frame.obj:Fire("OnClose")
end
186,6 → 190,7
frame:SetBackdropColor(0, 0, 0, 1)
frame:SetMinResize(400, 200)
frame:SetToplevel(true)
frame:SetScript("OnShow", Frame_OnShow)
frame:SetScript("OnHide", Frame_OnClose)
frame:SetScript("OnMouseDown", Frame_OnMouseDown)
 
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIContainer-Window.lua
21,8 → 21,12
]]
do
local Type = "Window"
local Version = 4
local Version = 5
 
local function frameOnShow(this)
this.obj:Fire("OnShow")
end
 
local function frameOnClose(this)
this.obj:Fire("OnClose")
end
180,6 → 184,7
frame:SetFrameStrata("FULLSCREEN_DIALOG")
frame:SetScript("OnMouseDown", frameOnMouseDown)
 
frame:SetScript("OnShow",frameOnShow)
frame:SetScript("OnHide",frameOnClose)
frame:SetMinResize(240,240)
frame:SetToplevel(true)
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIContainer-ScrollFrame.lua
6,8 → 6,6
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
local IsLegion = select(4, GetBuildInfo()) >= 70000
 
-- Lua APIs
local pairs, assert, type = pairs, assert, type
local min, max, floor, abs = math.min, math.max, math.floor, math.abs
178,11 → 176,7
 
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND")
scrollbg:SetAllPoints(scrollbar)
if IsLegion then
scrollbg:SetColorTexture(0, 0, 0, 0.4)
else
scrollbg:SetTexture(0, 0, 0, 0.4)
end
scrollbg:SetColorTexture(0, 0, 0, 0.4)
 
--Container Support
local content = CreateFrame("Frame", nil, scrollframe)
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua
1,9 → 1,7
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1137 2016-05-15 10:57:36Z nevcairiel $ ]]--
--[[ $Id: AceGUIWidget-DropDown-Items.lua 1153 2016-11-20 09:57:15Z nevcairiel $ ]]--
 
local AceGUI = LibStub("AceGUI-3.0")
 
local IsLegion = select(4, GetBuildInfo()) >= 70000
 
-- Lua APIs
local select, assert = select, assert
 
457,11 → 455,7
 
local line = self.frame:CreateTexture(nil, "OVERLAY")
line:SetHeight(1)
if IsLegion then
line:SetColorTexture(.5, .5, .5)
else
line:SetTexture(.5, .5, .5)
end
line:SetColorTexture(.5, .5, .5)
line:SetPoint("LEFT", self.frame, "LEFT", 10, 0)
line:SetPoint("RIGHT", self.frame, "RIGHT", -10, 0)
 
trunk/PocketPlot/libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua
6,8 → 6,6
local AceGUI = LibStub and LibStub("AceGUI-3.0", true)
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end
 
local IsLegion = select(4, GetBuildInfo()) >= 70000
 
-- Lua APIs
local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type
local math_min, math_max, floor = math.min, math.max, floor
672,13 → 670,8
 
local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND")
scrollbg:SetAllPoints(scrollbar)
scrollbg:SetColorTexture(0,0,0,0.4)
 
if IsLegion then
scrollbg:SetColorTexture(0,0,0,0.4)
else
scrollbg:SetTexture(0,0,0,0.4)
end
 
local border = CreateFrame("Frame",nil,frame)
border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT")
border:SetPoint("BOTTOMRIGHT")
trunk/PocketPlot/libs/AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.xml
1,4 → 1,4
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="AceConfigRegistry-3.0.lua"/>
</Ui>
\ No newline at end of file +
trunk/PocketPlot/libs/AceConfig-3.0/AceConfig-3.0.xml
5,4 → 5,4
<Include file="AceConfigDialog-3.0\AceConfigDialog-3.0.xml"/>
<!--<Include file="AceConfigDropdown-3.0\AceConfigDropdown-3.0.xml"/>-->
<Script file="AceConfig-3.0.lua"/>
</Ui>
\ No newline at end of file +
trunk/PocketPlot/libs/AceConfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.xml
1,4 → 1,4
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="AceConfigDialog-3.0.lua"/>
</Ui>
\ No newline at end of file +
trunk/PocketPlot/libs/AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.xml
1,4 → 1,4
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="AceConfigCmd-3.0.lua"/>
</Ui>
\ No newline at end of file +
trunk/PocketPlot Property changes : Modified: svn:ignore - PPblips.png PPblips2.png + PPblips.png PPblips2.png pocketplot-old.lua