initial commit
This commit is contained in:
Executable
+241
@@ -0,0 +1,241 @@
|
||||
-- Do graph stuff
|
||||
-- This should be a separate addon someday
|
||||
|
||||
GraphHandler = {};
|
||||
GraphHandler.Legend = {};
|
||||
|
||||
GraphHandler.Legend.OnEnter = function()
|
||||
if( this.item or this.tooltop ) then
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
|
||||
if (this.item and this.item ~= "") then
|
||||
GameTooltip:SetHyperlink("item:"..this.item);
|
||||
elseif (this.tooltip) then
|
||||
GameTooltip:SetText(this.tooltip);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
GraphHandler.Legend.OnLeave = function()
|
||||
if( this.item or this.tooltop ) then
|
||||
this.updateToolTip = nil;
|
||||
GameTooltip:Hide();
|
||||
end
|
||||
end
|
||||
|
||||
GraphHandler.Legend.OnClick = function(button)
|
||||
if ( button == "LeftButton" ) then
|
||||
if( IsShiftKeyDown() and this.item ) then
|
||||
GraphHandler.Legend.ChatLink(this.item, this.name, this.color);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
GraphHandler.Legend.ChatLink = FishingBuddy.ChatLink;
|
||||
|
||||
GraphHandler.BAR = "BAR";
|
||||
GraphHandler.LEGEND = "LEGEND";
|
||||
GraphHandler.LINE = "LINE";
|
||||
GraphHandler.LABEL = "LABEL";
|
||||
GraphHandler.TEXT = "TEXT";
|
||||
|
||||
GraphHandler.InitElements = function()
|
||||
if ( not this.elements ) then
|
||||
this.elements = {};
|
||||
this.elements[GraphHandler.BAR] = {};
|
||||
this.elements[GraphHandler.LINE] = {};
|
||||
this.elements[GraphHandler.LEGEND] = {};
|
||||
this.elements[GraphHandler.LABEL] = {};
|
||||
this.elements[GraphHandler.TEXT] = {};
|
||||
end
|
||||
end
|
||||
|
||||
local function SetColorBar(bar, base, x, y, width, height, r, g, b)
|
||||
local name;
|
||||
if ( type(bar) == "STRING" ) then
|
||||
name = bar;
|
||||
bar = getglobal(name);
|
||||
elseif ( bar ) then
|
||||
name = bar:GetName();
|
||||
end
|
||||
if ( bar ) then
|
||||
if ( not r ) then
|
||||
r = 1.0;
|
||||
g = 1.0;
|
||||
b = 1.0;
|
||||
end
|
||||
if ( base ) then
|
||||
local tex = getglobal(name.."Texture");
|
||||
if ( x and y ) then
|
||||
bar:ClearAllPoints();
|
||||
bar:SetPoint("BOTTOMLEFT", base, "BOTTOMLEFT", x, y);
|
||||
end
|
||||
if ( width ) then
|
||||
bar:SetWidth(width);
|
||||
end
|
||||
if ( height ) then
|
||||
bar:SetHeight(height);
|
||||
end
|
||||
tex:SetVertexColor(r, g, b);
|
||||
bar:Show();
|
||||
else
|
||||
bar:Hide();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Registration functions
|
||||
|
||||
GraphHandler.Register = function(kind, what)
|
||||
local frame = this;
|
||||
local lastframe = nil;
|
||||
for idx=1,5 do
|
||||
frame = frame:GetParent();
|
||||
if ( frame == lastframe ) then
|
||||
break;
|
||||
end
|
||||
if ( frame and frame.elements ) then
|
||||
if ( not frame.elements[kind] ) then
|
||||
frame.elements[kind] = {};
|
||||
end
|
||||
tinsert(frame.elements[kind], what);
|
||||
break;
|
||||
end
|
||||
lastframe = frame;
|
||||
end
|
||||
end
|
||||
|
||||
GraphHandler.PlotData = function(frame, data, offset, skip, r, g, b)
|
||||
local limit = table.getn(data);
|
||||
local start = 1;
|
||||
if ( data[0] ) then
|
||||
start = 0;
|
||||
limit = limit - 1;
|
||||
end
|
||||
|
||||
local bdx=offset+1;
|
||||
local bwid = frame.barWidth;
|
||||
local bspc = frame.barSpacing;
|
||||
local maxval = frame.maxVal;
|
||||
local xoff = offset*bspc;
|
||||
local yoff = 0;
|
||||
local graphHeight = frame:GetHeight();
|
||||
for idx=start,limit,1 do
|
||||
local bar = frame.elements[GraphHandler.BAR][bdx];
|
||||
bdx = bdx + skip + 1;
|
||||
if ( bar ) then
|
||||
if ( (maxval > 0) and (data[idx] > 0) ) then
|
||||
local height = (data[idx]*graphHeight)/maxval;
|
||||
SetColorBar(bar, frame, xoff, 0, bwid, height, r, g, b);
|
||||
else
|
||||
bar:Hide();
|
||||
end
|
||||
end
|
||||
xoff = xoff + bwid + skip*bspc;
|
||||
end
|
||||
return xoff - skip*bspc;
|
||||
end
|
||||
|
||||
GraphHandler.PlotLegend = function(frame, ldx, name, item, texture, r, g, b)
|
||||
local legend = frame.elements[GraphHandler.LEGEND][ldx];
|
||||
if ( legend ) then
|
||||
local name = legend:GetName();
|
||||
local icon = getglobal(name.."Icon");
|
||||
local tex = getglobal(name.."IconTexture");
|
||||
local color = getglobal(name.."Color");
|
||||
-- SetColorBar(color, legend, nil, nil, nil, nil, r, g, b);
|
||||
SetColorBar(color, legend, 0, 1, 10, 16, r, g, b);
|
||||
icon:Show();
|
||||
tex:SetTexture(texture);
|
||||
tex:Show();
|
||||
legend:SetPoint("TOPRIGHT", frame, "TOPRIGHT", 0, -(ldx-1)*21);
|
||||
legend.item = item;
|
||||
legend.name = name;
|
||||
legend:Show();
|
||||
end
|
||||
end
|
||||
|
||||
GraphHandler.PlotGrid = function(frame, label, texth, width, textv, height)
|
||||
local ldx=1;
|
||||
local tdx=1;
|
||||
if ( not width ) then
|
||||
width = frame:GetWidth();
|
||||
end
|
||||
if ( not height ) then
|
||||
height = frame:GetHeight();
|
||||
end
|
||||
if ( label ) then
|
||||
local button = frame.elements[GraphHandler.TEXT][tdx];
|
||||
if ( button ) then
|
||||
local text = getglobal(button:GetName().."T");
|
||||
text:SetText(label);
|
||||
text:SetPoint("BOTTOM", frame, "BOTTOM", 0, -28);
|
||||
text:SetVertexColor(1.0, 1.0, 1.0);
|
||||
text:Show();
|
||||
tdx = tdx + 1;
|
||||
end
|
||||
end
|
||||
if ( texth ) then
|
||||
local linesh = 0;
|
||||
for _,_ in texth do
|
||||
linesh = linesh + 1;
|
||||
end
|
||||
local offset = height/(linesh-1);
|
||||
for label,tick in texth do
|
||||
local line = frame.elements[GraphHandler.LINE][ldx];
|
||||
if ( line ) then
|
||||
ldx = ldx + 1;
|
||||
line:SetHeight(1);
|
||||
line:SetWidth(width);
|
||||
line:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, tick*offset);
|
||||
line:SetAlpha(0.5);
|
||||
line:Show();
|
||||
local button = frame.elements[GraphHandler.TEXT][tdx];
|
||||
if ( button ) then
|
||||
local text = getglobal(button:GetName().."T");
|
||||
if ( type(label) ~= "string" ) then
|
||||
label = string.format("%3d", label);
|
||||
end
|
||||
text:SetText(label);
|
||||
text:SetPoint("LEFT", line, "LEFT", -(text:GetWidth()+4), 0);
|
||||
tdx = tdx + 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if ( textv ) then
|
||||
local linesv = 0;
|
||||
for _,_ in textv do
|
||||
linesv = linesv + 1;
|
||||
end
|
||||
local offset = frame.barSpacing + frame.barWidth;
|
||||
for label,tick in textv do
|
||||
local line = frame.elements[GraphHandler.LINE][ldx];
|
||||
if ( line ) then
|
||||
local xpos = tick*offset;
|
||||
ldx = ldx + 1;
|
||||
line:SetHeight(height);
|
||||
line:SetWidth(1);
|
||||
line:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", xpos, 0);
|
||||
line:SetAlpha(0.5);
|
||||
line:Show();
|
||||
local button = frame.elements[GraphHandler.TEXT][tdx];
|
||||
if ( button ) then
|
||||
local text = getglobal(button:GetName().."T");
|
||||
if ( type(label) ~= "string" ) then
|
||||
label = string.format("%3d", label);
|
||||
end
|
||||
text:SetText(label);
|
||||
local wid = text:GetWidth();
|
||||
if ( xpos < wid ) then
|
||||
text:SetPoint("TOPLEFT", line, "BOTTOMLEFT", 0, -4);
|
||||
elseif ( xpos > (width - wid) ) then
|
||||
text:SetPoint("TOPRIGHT", line, "BOTTOMRIGHT", 0, -4);
|
||||
else
|
||||
text:SetPoint("TOP", line, "BOTTOM", 0, -4);
|
||||
end
|
||||
tdx = tdx + 1;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user