WoWInterface SVN QuestGuru

[/] [trunk/] [QuestGuru_Tracker/] [QGT_Achievements.lua] - Rev 65

Compare with Previous | Blame | View Log

QGT_WatchAchievements = {};
QGT_WatchAchievementLines = 0;
QGT_AchievementTimer = {};

--QuestGuru_Echo("At set AWU false initial QGT_AchievementWatch_Update()", false)
QGT_AWUpdating = false;

WATCHFRAME_MAXACHIEVEMENTS = 9999;

function QGT_SetAchievementWatchBorder(enabled)
        if (enabled) then
                QGT_AchievementWatchFrame:SetBackdrop({
                        bgFile="Interface\\Characterframe\\UI-Party-Background",
                        edgeFile="Interface\\Tooltips\\UI-Tooltip-Border",
                        tile=1, tileSize=16, edgeSize=16,
                        insets={left=4, right=4, top=4, bottom=4}
                });
        else
                QGT_AchievementWatchFrame:SetBackdrop({
                        bgFile="Interface\\Characterframe\\UI-Party-Background",
                        tile=1, tileSize=16,
                        insets={left=4, right=4, top=4, bottom=4}
                });
        end
        QGT_AchievementWatchFrame:SetBackdropColor(0,0,0,QGT_Settings.Alpha);
end

do
        local temp, i;

        QGT_AchievementWatchFrame = CreateFrame("FRAME", "QGT_AchievementWatchFrame", UIParent);
        QGT_AchievementWatchFrame:Hide();
        QGT_AchievementWatchFrame:EnableMouse(1);
        QGT_AchievementWatchFrame:EnableMouseWheel(1);
        QGT_AchievementWatchFrame:SetMovable(1);
        QGT_AchievementWatchFrame:SetResizable(0);
        QGT_AchievementWatchFrame:SetToplevel(1);
        QGT_AchievementWatchFrame:SetFrameStrata("LOW");
        QGT_AchievementWatchFrame:SetClampedToScreen(true);
        QGT_AchievementWatchFrame:SetWidth(256);
        QGT_AchievementWatchFrame:SetHeight(20);
        QGT_AchievementWatchFrame:SetPoint("TOPRIGHT", MinimapCluster, "BOTTOMRIGHT", 0, 10);
        QGT_AchievementWatchFrame:SetHitRectInsets(-16, 0, 0, 0);

        QGT_SetAchievementWatchBorder(true);

        QGT_AchievementWatchFrame:RegisterForDrag("LeftButton");
        QGT_AchievementWatchFrame:SetScript("OnDragStart",
                function ()
                        if (not QGT_Settings.Pin) then
                                QGT_AchievementWatchFrame:StartMoving();
                                QGT_AchievementWatchFrame.isMoving = true;
                        end
                end);
        QGT_AchievementWatchFrame:SetScript("OnDragStop",
                function ()
                        QGT_AchievementWatchFrame:StopMovingOrSizing();
                        QGT_AchievementWatchFrame.isMoving = false;
                        QGT_Settings.AchievementWatch.Left = QGT_AchievementWatchFrame:GetLeft();
                        QGT_Settings.AchievementWatch.Top = QGT_AchievementWatchFrame:GetTop();
                        QGT_Settings.AchievementWatch.Bottom = QGT_AchievementWatchFrame:GetBottom();
                        QGT_AchievementWatchFrameSlider:ClearAllPoints();
                        if (((QGT_Settings.AchievementWatch.Left + 256) * QGT_Settings.Scale) > (UIParent:GetWidth() - 16)) then
                                QGT_AchievementWatchFrameSlider:SetPoint("TOPLEFT", -14, -16);
                        else    
                                QGT_AchievementWatchFrameSlider:SetPoint("TOPRIGHT", 14, -16);
                        end
                end);
        QGT_AchievementWatchFrame:SetScript("OnEnter",
                function (self)
                        QGT_AchievementWatchFrameSlider:SetScript("OnMouseUp", nil);
                        QGT_ShowAchievementTrackerSlider(self, true);
                end);
        QGT_AchievementWatchFrame:SetScript("OnLeave",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, false);
                end);
        QGT_AchievementWatchFrame:SetScript("OnMouseWheel",
                function (self, delta)
                        local min, max = QGT_AchievementWatchFrameSlider:GetMinMaxValues();
                        local currVal = QGT_AchievementWatchFrameSlider:GetValue();

                        currVal = currVal - delta;
                        if (currVal < min) then currVal = min; end
                        if (currVal > max) then currVal = max; end
                        QGT_AchievementWatchFrameSlider:SetValue(currVal);
                end);
        QGT_AchievementWatchFrame:SetScript("OnShow",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, false);
                end);
        QGT_AchievementWatchFrame:RegisterEvent("ACHIEVEMENT_EARNED");
        QGT_AchievementWatchFrame:RegisterEvent("VARIABLES_LOADED");
        QGT_AchievementWatchFrame:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE");
        QGT_AchievementWatchFrame:SetScript("OnEvent",
                function (self, event, achievementID, ...)
                        if (event == "ACHIEVEMENT_EARNED") then
                                RemoveTrackedAchievement(achievementID);
                        elseif (event == "TRACKED_ACHIEVEMENT_UPDATE") then
                                local criteriaID, elapsed, duration = ...;
 
                                if ( not elapsed or not duration ) then
                                        -- Don't do anything
                                elseif ( elapsed >= duration ) then
                                        QGT_AchievementTimer[achievementID] = nil;
                                else
                                        QGT_AchievementTimer[achievementID] = {};
                                        QGT_AchievementTimer[achievementID].startTime = GetTime() - elapsed;
                                        QGT_AchievementTimer[achievementID].duration = duration;
                                end
                        elseif (event == "VARIABLES_LOADED") then
                                QGT_SetAchievements();
                        end
                end);
        QGT_AchievementWatchFrame:SetScript("OnUpdate",
                function (self, elapsed)
                        QGT_AchievementWatch_OnUpdate(elapsed);
                end);

        temp = QGT_AchievementWatchFrame:CreateTexture("QGT_AchievementWatchFrameBackground", "ARTWORK");
        temp:SetHeight(18);
        temp:SetPoint("TOPRIGHT", -4, -4);
        temp:SetPoint("TOPLEFT", 4, -4);
        temp:SetTexture(1, 1, 1);
        temp:SetGradientAlpha("VERTICAL", 0, 0, 0, 0, 0.3, 0.3, 0.3, 1);

        temp = QGT_AchievementWatchFrame:CreateFontString("QGT_AchievementWatchName", "ARTWORK", "GameFontNormal");
        temp:SetPoint("TOPLEFT", 8, -6);
        temp:SetJustifyH("LEFT");
        temp:SetWidth(0);
        temp:SetHeight(12);
        temp:SetText("QuestGuru "..QG_TRACKER_ACHIEVE);

        temp = QGT_AchievementWatchFrame:CreateFontString("QGT_AchievementWatchNum", "ARTWORK", "GameFontNormal");
        temp:SetPoint("LEFT", QGT_AchievementWatchName, "RIGHT", 12, 0);
        temp:SetJustifyH("CENTER");
        temp:SetWidth(0);
        temp:SetHeight(12);
        temp:SetText("");

        QGT_AchievementWatchFrameOptions = CreateFrame("BUTTON", "QGT_AchievementWatchFrameOptions", QGT_AchievementWatchFrame, "QGT_QuestWatchMiniButtonTemplate");
        QGT_AchievementWatchFrameOptions:SetText("O");
        QGT_AchievementWatchFrameOptions:SetPoint("TOPRIGHT", -5, -4);
        QGT_AchievementWatchFrameOptions:SetScript("OnClick",
                function ()
                        InterfaceOptionsFrame_OpenToCategory("QG Tracker");
                end);
        QGT_AchievementWatchFrameOptions:SetScript("OnEnter",
                function (self)
                        QGT_AchievementWatchFrameSlider:SetScript("OnMouseUp", nil);
                        QGT_ShowAchievementTrackerSlider(self, true);
                        GameTooltip:SetOwner(self, "ANCHOR_LEFT");
                        GameTooltip:SetText(QG_TRACKER_OPTIONS, nil,nil, nil, nil, 1);
                end);
        QGT_AchievementWatchFrameOptions:SetScript("OnLeave",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, false);
                        GameTooltip:Hide();
                end);

        QGT_AchievementWatchFrameMinimize = CreateFrame("BUTTON", "QGT_AchievementWatchFrameMinimize", QGT_AchievementWatchFrame, "QGT_QuestWatchMiniButtonTemplate");
        QGT_AchievementWatchFrameMinimize:SetText("-");
        QGT_AchievementWatchFrameMinimize:SetPoint("RIGHT", QGT_AchievementWatchFrameOptions, "LEFT", 0, 0);
        QGT_AchievementWatchFrameMinimize:RegisterForClicks("LeftButtonUp", "RightButtonUp");
        QGT_AchievementWatchFrameMinimize:SetScript("OnClick",
                function (self, button, down)
                        if (button == "LeftButton") then
                                if (QGT_Settings.AchievementWatch.AutoMinimize) then
                                        QGT_ShowAchievementTrackerSlider(self, false);
                                        QGT_Settings.AchievementWatch.Minimized = true;
                                else
                                        QGT_ShowAchievementTrackerSlider(self, QGT_Settings.AchievementWatch.Minimized);
                                        QGT_Settings.AchievementWatch.Minimized = not QGT_Settings.AchievementWatch.Minimized;
                                end
                                QGT_Settings.AchievementWatch.AutoMinimize = false;
                                WatchFrame_Update();
                                GameTooltip:Hide();
                        elseif (button == "RightButton") then
                                QGT_Settings.AchievementWatch.AutoMinimize = not QGT_Settings.AchievementWatch.AutoMinimize;
                                WatchFrame_Update();
                        end
                end);
        QGT_AchievementWatchFrameMinimize:SetScript("OnEnter",
                function (self)
                    QGT_AchievementWatchFrameSlider:SetScript("OnMouseUp", nil);
                    QGT_ShowAchievementTrackerSlider(self, true);
                        GameTooltip:SetOwner(self, "ANCHOR_LEFT");
                        if (QGT_Settings.AchievementWatch.Minimized) then
                                GameTooltip:SetText(QG_TRACKER_SHOW, nil,nil, nil, nil, 1);
                        else
                                GameTooltip:SetText(QG_TRACKER_MINIMIZE, nil,nil, nil, nil, 1);
                        end
                end);
        QGT_AchievementWatchFrameMinimize:SetScript("OnLeave",
                function ()
                        QGT_ShowAchievementTrackerSlider(self, false);
                        GameTooltip:Hide();
                end);

        QGT_AchievementWatchFrameToggle = CreateFrame("BUTTON", "QGT_AchievementWatchFrameToggle", QGT_AchievementWatchFrame, "QGT_QuestWatchMiniButtonTemplate");
        QGT_AchievementWatchFrameToggle:SetText(QG_TRACKER_Q);
        QGT_AchievementWatchFrameToggle:SetPoint("RIGHT", QGT_AchievementWatchFrameMinimize, "LEFT", 0, 0);
        QGT_AchievementWatchFrameToggle:RegisterForClicks("LeftButtonUp", "RightButtonUp");
        QGT_AchievementWatchFrameToggle:SetScript("OnClick",
                function (self, button, down)
                        if (button == "LeftButton") then
                                QGT_Settings.LastTracker = "Q";
                                QGT_Settings.BothTrackers = false;
                                QGT_Settings.QuestWatch.Top = QGT_Settings.AchievementWatch.Top;
                                QGT_Settings.QuestWatch.Bottom = QGT_Settings.AchievementWatch.Bottom;
                                QGT_Settings.QuestWatch.Left = QGT_Settings.AchievementWatch.Left;
                                QGT_Settings.QuestWatch.Minimized = QGT_Settings.AchievementWatch.Minimized;
                                QGT_Settings.QuestWatch.AutoMinimize = QGT_Settings.AchievementWatch.AutoMinimize;
                                WatchFrame_Update();
                                GameTooltip:Hide();
                        elseif (button == "RightButton") then
                                QGT_Settings.LastTracker = "A";
                                QGT_Settings.BothTrackers = not QGT_Settings.BothTrackers;
                                WatchFrame_Update();
                        end
                end);
        QGT_AchievementWatchFrameToggle:SetScript("OnEnter",
                function (self)
                        QGT_AchievementWatchFrameSlider:SetScript("OnMouseUp", nil);
                        QGT_ShowAchievementTrackerSlider(self, true);
                        GameTooltip:SetOwner(self, "ANCHOR_LEFT");
                        GameTooltip:SetText(QG_TRACKER_TOGGLE, nil,nil, nil, nil, 1);
                end);
        QGT_AchievementWatchFrameToggle:SetScript("OnLeave",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, false);
                        GameTooltip:Hide();
                end);

        QGT_AchievementWatchFrameSlider = CreateFrame("Slider", "QGT_AchievementWatchFrameSlider", QGT_AchievementWatchFrame, "OptionsSliderTemplate");
        QGT_AchievementWatchFrameSlider:SetWidth(16);
        QGT_AchievementWatchFrameSlider:SetHeight(200);
        QGT_AchievementWatchFrameSliderText:SetText("");
        QGT_AchievementWatchFrameSliderHigh:SetText("");
        QGT_AchievementWatchFrameSliderLow:SetText("");
        QGT_AchievementWatchFrameSlider:SetOrientation("VERTICAL");
        QGT_AchievementWatchFrameSlider:SetPoint("TOPLEFT", QGT_AchievementWatchFrame, "TOPLEFT", -14, -16);
        QGT_AchievementWatchFrameSlider:SetMinMaxValues(0,0);
        QGT_AchievementWatchFrameSlider:SetValueStep(1);
        QGT_AchievementWatchFrameSlider:SetValue(0);
        QGT_AchievementWatchFrameSlider:Hide();
        QGT_AchievementWatchFrameSlider:SetScript("OnEnter",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, true);
                end);
        QGT_AchievementWatchFrameSlider:SetScript("OnLeave",
                function (self)
                        QGT_ShowAchievementTrackerSlider(self, false);
                end);
        QGT_AchievementWatchFrameSlider:SetScript("OnValueChanged",
                function ()
                        WatchFrame_Update();
                end);
        
        for i=1, 40 do
                temp = CreateFrame("Button", "QGT_AchievementWatchLine"..i, QGT_AchievementWatchFrame, "QGT_AchievementWatchButtonTemplate");
                temp.statusBar = _G["QGT_AchievementWatchLine"..i.. "StatusBar"]
                temp:SetPoint("TOPLEFT", QGT_AchievementWatchFrame, 8, -22);
                temp:SetHeight(13);
                temp:SetWidth(240);
                temp:RegisterForClicks("LeftButtonUp");
                temp:SetScript("OnEnter",
                        function (self)
                                _G[self:GetName().."Highlight"]:SetAlpha(0.5);
                                _G[self:GetName().."Highlight"]:Show();
                                if (self.achievementID) then
                                        GameTooltip:SetOwner(self);
                                        GameTooltip:SetHyperlink(GetAchievementLink(self.achievementID));
                                        GameTooltip:Show()
                                        local tW = GameTooltip:GetWidth();
                                        if (QGT_Settings.AchievementWatch.Left < tW) then
                                                GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
                                                GameTooltip:SetHyperlink(GetAchievementLink(self.achievementID));
                                                GameTooltip:Show()
                                        else
                                                GameTooltip:SetOwner(self, "ANCHOR_LEFT");
                                                GameTooltip:SetHyperlink(GetAchievementLink(self.achievementID));
                                                GameTooltip:Show()
                                        end
                                end
                                QGT_ShowAchievementTrackerSlider(self, true);
                        end);
                temp:SetScript("OnLeave",
                        function (self)
                                _G[self:GetName().."Highlight"]:Hide();
                                GameTooltip:Hide();
                                QGT_ShowAchievementTrackerSlider(self, false);
                        end);
                temp:SetScript("OnClick",
                        function (self, button, down)
                                if (self.achievementID) then
                                        if (IsShiftKeyDown()) then
                                                local activeWindow = ChatEdit_GetActiveWindow();
                                                if (activeWindow) then
                                                        activeWindow:Insert(GetAchievementLink(self.achievementID));
                                                else
                                                        RemoveTrackedAchievement(self.achievementID);
                                                end
                                        else
                                                AchievementFrame_LoadUI();
                                                AchievementFrame:Show();
                                                AchievementFrame_SelectAchievement(self.achievementID);
                                        end
                                end
                        end);
        end

        QGT_AchievementWatchFrameTooltip = CreateFrame("GameTooltip", "QGT_AchievementWatchFrameTooltip", QGT_AchievementWatchFrame, "GameTooltipTemplate");
        QGT_AchievementWatchFrameTooltip:Hide();
        QGT_AchievementWatchFrameTooltip:SetFrameStrata("TOOLTIP");
end

function QGT_ShowAchievementTrackerSlider(self, flag)
        if (QGT_Settings and QGT_Settings.AchievementWatch and (QGT_Settings.AchievementWatch.AutoMinimize==true) and not IsMouseButtonDown("LeftButton")) then
                QGT_Settings.AchievementWatch.Minimized = not flag;
        end

        local watchLines = 30;
        if (QGT_Settings and QGT_Settings.Lines) then
                watchLines = QGT_Settings.Lines;
        end
        if ((flag == true) and (QGT_WatchAchievementLines > watchLines) and not QGT_Settings.AchievementWatch.Minimized) then
                QGT_AchievementWatchFrameSlider:Show();
        else
                if (IsMouseButtonDown("LeftButton")) then
                        self:SetScript("OnMouseUp",
                                function (self)
                                        QGT_ShowAchievementTrackerSlider(self, false);
                                        self:SetScript("OnMouseUp", nil);
                                end);
                else
                        QGT_AchievementWatchFrameSlider:Hide();
                end
        end
end

function QGT_SetAchievementTrackerMouse(enableFlag)
        QGT_AchievementWatchFrame:EnableMouse(enableFlag);
        for i=1, 40 do
                _G["QGT_AchievementWatchLine"..i]:EnableMouse(enableFlag);
        end
end

-- QuestWatch functions
function QGT_AchievementWatch_Update()
--QuestGuru_Echo("Entered QGT_AchievementWatch_Update()", false)
        local achieveCount=0;
        local i, j;
        
--QuestGuru_Echo("At AWU test Before QGT_AchievementWatch_Update()", false)
        if (QGT_AWUpdating == true) then return; end
--QuestGuru_Echo("At AWU test After QGT_AchievementWatch_Update()", false)
        QGT_AWUpdating = true;

--QuestGuru_Echo("At 1 QGT_AchievementWatch_Update()", false)
        
        table.sort(QGT_WatchAchievements, function(a, b) return (a < b); end);
        for i, j in pairs(QGT_WatchAchievements) do
                achieveCount = achieveCount + 1;
        end

        QGT_AchievementWatchNum:SetText(achieveCount);

--QuestGuru_Echo(format("QGT_Settings.AchievementWatch.AutoMinimize: %s", tostring(QGT_Settings.AchievementWatch.AutoMinimize)), true)

        if (QGT_Settings.AchievementWatch.AutoMinimize) then
                QGT_AchievementWatchFrameMinimize:SetText("*");
        else
                QGT_AchievementWatchFrameMinimize:SetText("-");
        end

        local numEntries, numQuests = GetNumQuestLogEntries();
        local questCount=0;
        
        for i=1, numEntries do
                if (IsQuestWatched(i)) then questCount = questCount + 1; end
        end

        if (questCount == 0) then
                QGT_AchievementWatchFrameToggle:Hide();
        else
                QGT_AchievementWatchFrameToggle:Show();
                if (QGT_Settings.BothTrackers) then
                        QGT_AchievementWatchFrameToggle:SetText("*");
                else
                        QGT_AchievementWatchFrameToggle:SetText(QG_TRACKER_Q);
                end
        end
        
        if (achieveCount == 0 and questCount == 0) then
                QGT_AchievementWatchFrame:Hide();
--QuestGuru_Echo("At set AWU false A=0 Q=0 QGT_AchievementWatch_Update()", false)
                QGT_AWUpdating = false;
                return;
        elseif (achieveCount == 0 and questCount > 0) then
                if (QGT_Settings.BothTrackers) then
                        QGT_AchievementWatchFrame:Hide();
                else
                        QGT_AchievementWatchFrameToggle:Click();
                end
--QuestGuru_Echo("At set AWU false A=0 Q>0 QGT_AchievementWatch_Update()", false)
                QGT_AWUpdating = false;
                return;
        else
                QGT_AchievementWatchFrame:Show();
        end

        if (QGT_Settings.AchievementWatch.Left == nil) then
                QGT_Settings.AchievementWatch.Left = MinimapCluster:GetLeft();
        end
        if (QGT_Settings.AchievementWatch.Top == nil) then
                QGT_Settings.AchievementWatch.Top = MinimapCluster:GetBottom()+10;
        end
        if (QGT_Settings.AchievementWatch.Bottom == nil) then
                QGT_Settings.AchievementWatch.Bottom = 60;
        end

        if (QGT_Settings.ClickThrough) then
                QGT_SetAchievementTrackerMouse(0);
        else
                QGT_SetAchievementTrackerMouse(1);
        end
        
        if (QGT_Settings.Pin) then
                QGT_AchievementWatchFrame:SetMovable(0);
        else
                QGT_AchievementWatchFrame:SetMovable(1);
        end

--QuestGuru_Echo("At 2 QGT_AchievementWatch_Update()", false)

        local _;
        local self = QGT_AchievementWatchFrame;

        local numTrackedAchievements = achieveCount;
 
        local maxWidth = 0;
        local heightUsed = 0;
        local heightNeeded = 0;
 
        local achievementID;
        local achievementName, completed, description, icon;
 
        local line;
        local currLine = 0;
        local achievementTitle;
        local previousLine;
        local nextXOffset = 0;
        local linkButton;
 
        local numCriteria, criteriaDisplayed;
        local criteriaString, criteriaType, criteriaCompleted, quantity, totalQuantity, name, flags, assetID, quantityString, criteriaID, achievementCategory;
        
        local achieveLine = {};
        achieveLine[currLine] = {};
        
        for i = 1, 40 do
    --QuestGuru_Echo(format("/qgt %s", tostring(SlashText)), true)
    --QGT_Chat has been removed.
    --QGT_Chat("i was nil", i, nil)
                local aLine = _G["QGT_AchievementWatchLine"..i];
    --QGT_Chat("i was nil with aLine", i, aLine)
                --local aLineIcon = _G["QGT_AchievementWatchLine"..i.."Icon"];
    --QGT_Chat("i was nil with aLineIcon", i, aLineIcon)
                aLine.text:SetText("");
                aLine.text:SetTextColor(1.0, 1.0, 1.0);
                aLine.statusBar:Hide();
                aLine.achievementID = nil;
                --aLineIcon:SetTexture("");
        end

        if (QGT_Settings.AchievementWatch.Minimized) then
                if (QGT_Settings.AchievementWatch.AutoMinimize) then
                        QGT_AchievementWatchFrameMinimize:SetText("*");
                else
                        QGT_AchievementWatchFrameMinimize:SetText("+");
                end
                QGT_AchievementWatchFrame:SetHeight(26);
        
                for i = 1, 40 do
      --QGT_Chat("i was nil", i, nil)
                        local aLine = _G["QGT_AchievementWatchLine"..i];
                        --local aLineIcon = _G["QGT_AchievementWatchLine"..i.."Icon"];
                        --aLineIcon:Hide();
                        aLine:Hide();
                end

                if (QGT_Settings.AchievementWatch.Left == nil) then
                        QGT_Settings.AchievementWatch.Left = MinimapCluster:GetLeft();
                end
                if (QGT_Settings.AchievementWatch.Top == nil) then
                        QGT_Settings.AchievementWatch.Top = MinimapCluster:GetBottom()+10;
                end
                if (QGT_Settings.AchievementWatch.Bottom == nil) then
                        QGT_Settings.AchievementWatch.Bottom = 60;
                end
                if (not QGT_AchievementWatchFrame.isMoving) then
                        QGT_AchievementWatchFrame:ClearAllPoints();
                        if (QGT_Settings.Anchor == "TOP") then
                                QGT_AchievementWatchFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QGT_Settings.AchievementWatch.Left, QGT_Settings.AchievementWatch.Top);
                        elseif (QGT_Settings.Anchor == "BOTTOM") then
                                QGT_AchievementWatchFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", QGT_Settings.AchievementWatch.Left, QGT_Settings.AchievementWatch.Bottom);
                        end
                end
--QuestGuru_Echo("At set AWU false end of if QGT_Settings.AchievementWatch.Minimized QGT_AchievementWatch_Update()", false)
                QGT_AWUpdating = false;
                return;
        end

--QuestGuru_Echo(format("At 2.5 QGT_AchievementWatch_Update(), currLine=%s", tostring(currLine) ), false)
-- currLine should be zero here

        for k, v in pairs(QGT_WatchAchievements) do
                achievementID = k;
                achievementCategory = GetAchievementCategory(achievementID);
                if ( (not displayOnlyArena) or achievementCategory == WATCHFRAME_ACHIEVEMENT_ARENA_CATEGORY ) then
                        _, achievementName, _, completed, _, _, _, description, _, icon = GetAchievementInfo(achievementID);
                        if (achievementName == nil) then
                                RemoveTrackedAchievement(achievementID);
                        else
                                currLine = currLine + 1;
                                achieveLine[currLine] = {};
                                achieveLine[currLine].Icon = icon;
                                achieveLine[currLine].text = achievementName;
                                achieveLine[currLine].achievementID = achievementID;
                                if ( completed ) then
                                        achieveLine[currLine].TextColor = { r=NORMAL_FONT_COLOR.r, g=NORMAL_FONT_COLOR.g, b=NORMAL_FONT_COLOR.b };
                                else    
                                        achieveLine[currLine].TextColor = { r=0.75, g=0.61, b=0 };
                                end
                                numCriteria = GetAchievementNumCriteria(achievementID);
                                if ( numCriteria > 0 ) then
                                        criteriaDisplayed = 0;
                                        for j = 1, numCriteria do
                                                criteriaString, criteriaType, criteriaCompleted, quantity, totalQuantity, name, flags, assetID, quantityString, criteriaID = GetAchievementCriteriaInfo(achievementID, j);
                                                if ( not criteriaCompleted ) then
              if ( bit.band(flags, EVALUATION_TREE_FLAG_PROGRESS_BAR) == EVALUATION_TREE_FLAG_PROGRESS_BAR ) then
--MoP                                   if ( bit.band(flags, ACHIEVEMENT_CRITERIA_PROGRESS_BAR) == ACHIEVEMENT_CRITERIA_PROGRESS_BAR ) then
                                                                currLine = currLine + 1;
                                                                achieveLine[currLine] = {};
                                                                achieveLine[currLine].totalQuantity = totalQuantity;
                                                                achieveLine[currLine].quantity = quantity;
                                                                achieveLine[currLine].quantityString = quantityString;
                                                        else
                                                                currLine = currLine + 1;
                                                                achieveLine[currLine] = {};
                                                                achieveLine[currLine].text = " - " .. criteriaString;
                                                                achieveLine[currLine].TextColor = { r=0.8, g=0.8, b=0.8 };
                                                        end
                                                end
                                        end
                                else
                                        currLine = currLine + 1;
                                        achieveLine[currLine] = {};
                                        achieveLine[currLine].text = " - "..description;
                                        achieveLine[currLine].TextColor = { r=0.8, g=0.8, b=0.8 };
                                end
                        end
                end
        end
        
        local watchLines = 30;
        if (QGT_Settings and QGT_Settings and QGT_Settings.Lines) then
                watchLines = QGT_Settings.Lines;
        end
        if (currLine > watchLines) then
                QGT_AchievementWatchFrameSlider:SetMinMaxValues(0, currLine - watchLines);
        else
                QGT_AchievementWatchFrameSlider:SetMinMaxValues(0, 0);
        end
        
        QGT_WatchAchievementLines = currLine;

        --local sliderVal = QGT_AchievementWatchFrameSlider:GetValue();
        --Urgh!  Blizz is returning fractional values despite SetValueStep(1) setting.
        local sliderMin, sliderMax = QGT_AchievementWatchFrameSlider:GetMinMaxValues();
        local sliderVal = math.min(math.floor(QGT_AchievementWatchFrameSlider:GetValue()+0.5), sliderMax);
        local iconWidth, yOffset;
        local titles = 0;
        local statusBars = 0;
        local yOffset = 0;
        local xOffset = 0;

--QuestGuru_Echo(format("At 3 QGT_AchievementWatch_Update(), currLine=%s", tostring(currLine) ), false)

        for i= 1, currLine do
                j = i - sliderVal;
                if (j > watchLines) then
                        j = j - 1;
                        break;
                end
                if (i > sliderVal) then

                        local aLine = _G["QGT_AchievementWatchLine"..j];
                        local aLineText = _G["QGT_AchievementWatchLine"..j.."NormalText"];
                        --local aLineIcon = _G["QGT_AchievementWatchLine"..j.."Icon"];
                        local aLineTimer = _G["QGT_AchievementWatchLine"..j.."Timer"];
                        
                        if (achieveLine[i].Icon) then
                                --aLineIcon:SetTexture(achieveLine[i].Icon);
                                --aLineIcon:Show();
                                iconWidth = 16;
                                xOffset = 16;
                                if (j > 1) then yOffset = yOffset + 6; end
                        else
                                iconWidth = 0;
                                xOffset = 0;
                        end
                        aLine.achievementID = achieveLine[i].achievementID;
                        if (achieveLine[i].totalQuantity) then --statusBar
                                aLine:SetText("");
                                aLine.statusBar:Show();
                                aLine.statusBar:GetStatusBarTexture():SetVertexColor(0,0.6,0,1);
                                aLine.statusBar:SetMinMaxValues(0, achieveLine[i].totalQuantity);
                                aLine.statusBar:SetValue(achieveLine[i].quantity);
                                aLine.statusBar.text:SetText(achieveLine[i].quantityString);
                                yOffset = yOffset + 4;
                                iconWidth = -16;
                        else
                                aLine:SetText(achieveLine[i].text);
                                aLineText:SetTextColor(achieveLine[i].TextColor.r,achieveLine[i].TextColor.g,achieveLine[i].TextColor.b);
                        end
                        if (QGT_AchievementTimer[achieveLine[i].achievementID]) then
                                aLine:SetScript("OnUpdate",
                                        function (self)
                                                if (QGT_AchievementTimer[achieveLine[i].achievementID] == nil) then
                                                        self:SetScript("OnUpdate", nil);
                                                        return;
                                                end
                                                local timeLeft = math.floor(QGT_AchievementTimer[self.achievementID].startTime + QGT_AchievementTimer[self.achievementID].duration - GetTime());
                                                local aLineTimer = _G[self:GetName().."Timer"];
                                                if (timeLeft <= 0) then timeLeft = 0; end
                                                aLineTimer:SetText(SecondsToTime(timeLeft));
                                                local tempWidth = aLineTimer:GetWidth() + 8;
                                                _G[self:GetName().."NormalText"]:SetWidth(240 - tempWidth - 16);
                                        end);
                        else
                                aLineTimer:SetText("");
                                aLine:SetScript("OnUpdate", nil);
                        end
                        aLine:SetWidth(240 - iconWidth);
                        aLineText:SetWidth(240 - iconWidth);
                        aLine:SetPoint("TOPLEFT", QGT_AchievementWatchFrame, 8 + xOffset, (-yOffset - 22 - ((j-1) * 13)));
                        aLine:Show();
                end
        end

--QuestGuru_Echo(format("At 4 QGT_AchievementWatch_Update(), j=%s", tostring(j) ), false)
        
        for i = j + 1, 40 do
                local aLine = _G["QGT_AchievementWatchLine"..i];
                --local aLineIcon = _G["QGT_AchievementWatchLine"..i.."Icon"];
                --aLineIcon:Hide();
                aLine:Hide();
        end

--QuestGuru_Echo("At 5 QGT_AchievementWatch_Update()", false)

        QGT_AchievementWatchFrame:Show();
        local tempHeight = 30 + (j * 13) + yOffset;
        QGT_AchievementWatchFrame:SetHeight(tempHeight);
        QGT_AchievementWatchFrameSlider:SetHeight(tempHeight - 16);
        QGT_AchievementWatchFrame:SetWidth(256);
        if (not QGT_AchievementWatchFrame.isMoving) then
                QGT_AchievementWatchFrame:ClearAllPoints();
                if (QGT_Settings.Anchor == "TOP") then
                        QGT_AchievementWatchFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QGT_Settings.AchievementWatch.Left, QGT_Settings.AchievementWatch.Top);
                        QGT_Settings.AchievementWatch.Bottom = QGT_AchievementWatchFrame:GetBottom();
                elseif (QGT_Settings.Anchor == "BOTTOM") then
                        QGT_AchievementWatchFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", QGT_Settings.AchievementWatch.Left, QGT_Settings.AchievementWatch.Bottom);
                        QGT_Settings.AchievementWatch.Top = QGT_AchievementWatchFrame:GetTop();
                end
        end
        QGT_AchievementWatchFrameSlider:ClearAllPoints();
        if (((QGT_Settings.AchievementWatch.Left + 256) * QGT_Settings.Scale) > (UIParent:GetWidth() - 16)) then
                QGT_AchievementWatchFrameSlider:SetPoint("TOPLEFT", -14, -16);
        else
                QGT_AchievementWatchFrameSlider:SetPoint("TOPRIGHT", 14, -16);
        end
--QuestGuru_Echo("At set AWU false end QGT_AchievementWatch_Update()", false)
        QGT_AWUpdating = false;
end

function AchievementButton_ToggleTracking(id)
        if ( IsTrackedAchievement(id) ) then
                RemoveTrackedAchievement(id);
                AchievementFrameAchievements_ForceUpdate();
                WatchFrame_Update();
                return;
        end
 
        local _, _, _, completed = GetAchievementInfo(id)
        if ( completed ) then
                UIErrorsFrame:AddMessage(ERR_ACHIEVEMENT_WATCH_COMPLETED, 1.0, 0.1, 0.1, 1.0);
                return;
        end
 
        AddTrackedAchievement(id);
        AchievementFrameAchievements_ForceUpdate();
        WatchFrame_Update();
 
        return true;
end

function QGT_RemoveTrackedAchievement(id)
        QGT_WatchAchievements[id] = nil;
        table.sort(QGT_WatchAchievements, function(a, b) return (a < b); end);

        WatchFrame_Update();
end
hooksecurefunc("RemoveTrackedAchievement", QGT_RemoveTrackedAchievement);

function QGT_AddTrackedAchievement(id)
        QGT_WatchAchievements[id] = true;
        table.sort(QGT_WatchAchievements, function(a, b) return (a < b); end);

        WatchFrame_Update();
end
hooksecurefunc("AddTrackedAchievement", QGT_AddTrackedAchievement);

--function IsTrackedAchievement(id)
--      if (QGT_WatchAchievements[id] == true) then
--              return true;
--      else
--              return false;
--      end
--end

function QGT_SetAchievements()
        local k, v;
        
        QGT_WatchAchievements = {};
        local trackedAchivements = {GetTrackedAchievements()};

        for k, v in pairs(trackedAchivements) do
                QGT_AddTrackedAchievement(v);
        end
end

function QGT_AchievementWatch_OnUpdate(elapsed)
-- Do nothing for now
end

Compare with Previous | Blame