vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Declard color codes for console messages
local RED     = "|cffff0000";
local GREEN   = "|cff00ff00";
local BLUE    = "|cff0000ff";
local MAGENTA = "|cffff00ff";
local YELLOW  = "|cffffff00";
local CYAN    = "|cff00ffff";
local WHITE   = "|cffffffff";
local ORANGE  = "|cffffba00";

TITAN_ZM_ID =  "ZeppelinMaster";
TITAN_ZM_COUNT_FORMAT = "%d";
TITAN_ZM_MENU_TEXT = "ZeppelinMaster v1.87";
TITAN_ZM_BUTTON_LABEL =  "Hello Menu Counter: ";
TITAN_ZM_TOOLTIP = "ZeppelinMaster";
TITAN_ZM_FREQUENCY = 1;                         
TITAN_ZM_ARTWORK = "Interface\\AddOns\\TitanZeppelinMaster\\Artwork\\";

activeTransitName = "";
activeSelect = -1;
activeTransit = -1;

-----------------------------------
-- local variables
-----------------------------------

local dropdownvalues = {};
local dropdownindexes = {};

local firstTooltip = true;

ZM_tempText = "";
ZM_tempTextCount = 0;

function TitanPanelZeppelinMasterButton_OnLoad()
        
        -- Make sure ZeppelinMaster loads first
        LoadAddOn("ZeppelinMaster");
        
        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("ZONE_CHANGED_NEW_AREA");    
        
        this.registry = { 
                id = TITAN_ZM_ID,
                category = "Information",
                menuText = TITAN_ZM_MENU_TEXT,          
                buttonTextFunction = "TitanPanelZeppelinMasterButton_GetButtonText", 
                tooltipTitle = TITAN_ZM_TOOLTIP,
                tooltipTextFunction = "TitanPanelZeppelinMasterButton_GetTooltipText", 
                frequency = TITAN_ZM_FREQUENCY, 
                icon = TITAN_ZM_ARTWORK.."Zeppelinmaster",      
                iconWidth = 16,         
                savedVariables = {
                        OptZoneGUI = 1,
                        OptFaction = 1,
                        OptZone = 1,
                        OptAlias = 1,
                        ShowLabelText = 1,
                        ShowIcon = 1,
                }
        };
        
        Pre_TitanToggleVar = TitanToggleVar;
        TitanToggleVar = ZM_TitanToggleVar;
        
        --TitanToggleVar(id, var)
end

-- Hook toggle button
function ZM_TitanToggleVar(id, var) 
                --local button, id = TitanUtils_GetButton(id, true);
                --DEFAULT_CHAT_FRAME:AddMessage(var);
                --DEFAULT_CHAT_FRAME:AddMessage(id);
                
                if (id == TITAN_ZM_ID) then
                                TitanPanelRightClickMenu_PrepareZeppelinMasterMenu();
                                TitanPanelRightClickMenu_Close();
                end
                
                return Pre_TitanToggleVar(id, var);
end

function TitanPanelZeppelinMasterButton_OnEvent ( event ) 
        
                if (event == "VARIABLES_LOADED") then
                                
                else
                                --DEFAULT_CHAT_FRAME:AddMessage(event);
                                TitanPanelRightClickMenu_PrepareZeppelinMasterMenu();
                                TitanPanelRightClickMenu_Close();
                end

end

        
function TitanPanelZeppelinMasterButton_GetButtonText(id)
        local button, id = TitanUtils_GetButton(id, true);
        local lowestName;
        local lowestTime = 500;
        local lowestTimeStr;
        
        if (ZM_tempTextCount > 0) then
                        ZM_tempTextCount = ZM_tempTextCount -1;                 
                        return ZM_tempText;
        end                             
        
        if ((activeTransit ~= -1) and (known_times[activeTransit] ~= nil)) then
                        local transit = activeTransit;
                        local cycle = ZSM_CalcTripCycle(transit);
                        local coord_data = ZSM_GetZepCoords(transit, cycle);                                    
                        
                        for index, data in zsm_data[transit..'_plats'] do
                                        --ZSM_CalcTripCycleTime(transit,cycle)                                                          
                                        --DEFAULT_CHAT_FRAME:AddMessage(data['name']..":"..ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1));                                                                                                                                                              
                                        local arrival_time = 0;
                                        if (ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1) > (cycle*zsm_data[transit..'_time'])) then
                                                        arrival_time = ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1) - (cycle*zsm_data[transit..'_time']);
                                                        --DEFAULT_CHAT_FRAME:AddMessage("Arrival Time of "..data['name']..": "..arrival_time .." sec.");                                                                                
                                        else
                                                        arrival_time = zsm_data[transit..'_time'] - (cycle*zsm_data[transit..'_time']);
                                                        arrival_time = arrival_time + ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1);
                                                        --DEFAULT_CHAT_FRAME:AddMessage("Arrival Time of "..data['name']..": "..arrival_time .." sec.");
                                        end 
                                        --DEFAULT_CHAT_FRAME:AddMessage(GetRealZoneText());
                                                                                                        
                                        local platname;
                                        if (ZSM_Data['Opts']['CityAlias']) then
                                                        platname = data['alias'];
                                        else
                                                        platname = data['name'];
                                        end                                                                                                                             
                                        getglobal("ZSMFramePlat"..(index+1).."Name"):SetText(platname);                                                         
                                        
                                        local coord_data = ZSM_GetZepCoords(transit, cycle);
                                        local depart_time = ZSM_CalcTripCycleTime(transit,cycle) - (cycle*zsm_data[transit..'_time']) - data['adj'];
                                        
                                        local formated_depart_time = "";
                                        if (depart_time > 59) then
                                                        local time_min = format("%0.0f",math.floor(depart_time/60));
                                                        local time_sec = format("%0.0f",depart_time-(math.floor(depart_time/60)*60));
                                                        formated_depart_time = time_min.."m "..time_sec.."s";
                                        else
                                                        formated_depart_time = format("%0.0f",depart_time).."s";
                                        end                             

                                        local formated_arrival_time = "";
                                        if (arrival_time > 59) then
                                                        local time_min = format("%0.0f",math.floor(arrival_time/60));
                                                        local time_sec = format("%0.0f",arrival_time-(math.floor(arrival_time/60)*60));
                                                        formated_arrival_time = time_min.."m "..time_sec.."s";
                                        else
                                                        formated_arrival_time = format("%0.0f",arrival_time).."s";
                                        end                                                                                                                     
                                        
                                        if ((data['x'] == tonumber(coord_data[1])) and (data['y'] == tonumber(coord_data[2])) and (depart_time > 0)) then                                       
                                                        local color;
                                                        if (depart_time > 30) then
                                                                        color = YELLOW;
                                                        else
                                                                        color = RED;
                                                        end
                                                        --getglobal("ZSMFramePlat"..(index+1).."ArrivalDepature"):SetText(color.."Dep: ".. formated_depart_time);
                                                        TitanPanelZeppelinMasterButton.registry.icon = TITAN_ZM_ARTWORK.."Loading";
                                                        
                                                        local constr = data['ebv'].. color .. " ".. formated_depart_time;
                                                        return constr;
                                        else 
                                                        --local color = GREEN;                                                                          
                                                        --getglobal("ZSMFramePlat"..(index+1).."ArrivalDepature"):SetText(color.."Arr: ".. formated_arrival_time);
                                                        --DEFAULT_CHAT_FRAME:AddMessage(arrival_time);
                                                        if (arrival_time < lowestTime) then
                                                                        lowestTime = arrival_time;
                                                                        lowestName = data['ebv'];
                                                                        lowestTimeStr = formated_arrival_time;
                                                        end
                                                        
                                                        TitanPanelZeppelinMasterButton.registry.icon = TITAN_ZM_ARTWORK.."Transit";
                                        end                                                                                                                                     
                        end             
        elseif ((activeTransit ~= -1) and (known_times[activeTransit] == nil)) then                                     
                        local transit = activeTransit;                  
                        
                        TitanPanelZeppelinMasterButton.registry.icon = TITAN_ZM_ARTWORK.."Zeppelinmaster";
                        
                        return "N/A";
        elseif (activeTransit == -1) then
                        TitanPanelZeppelinMasterButton.registry.icon = TITAN_ZM_ARTWORK.."Zeppelinmaster";
                        return "--";
        end                     
        
        -- Display Departure Time
        local constr = lowestName.. GREEN.. " " .. lowestTimeStr;
        return constr;
        
        --local countText = format(TITAN_ZM_COUNT_FORMAT, button.count);
        --return TITAN_ZM_BUTTON_LABEL, TitanUtils_GetHighlightText(countText), "test";
end

function TitanPanelZeppelinMasterButton_GetTooltipText()

        if (firstTooltip) then
                        firstTooltip = false;
                        TitanPanelRightClickMenu_PrepareZeppelinMasterMenu();
        end
        --local countText = format(TITAN_ZM_COUNT_FORMAT, this.count);
        --return TITAN_ZM_TOOLTIP_COUNT.."\t"..TitanUtils_GetHighlightText(countText);  
        local tooltiptext = "";
        local lowestName;
        local lowestTime = 500;
        local lowestTimeStr;    
                
        if ((activeTransit ~= -1) and (known_times[activeTransit] ~= nil)) then
                        local transit = activeTransit;
                        local cycle = ZSM_CalcTripCycle(transit);
                        local coord_data = ZSM_GetZepCoords(transit, cycle);                                    
                        
                        tooltiptext = tooltiptext..activeTransitName.."\n\n";
                        
                        for index, data in zsm_data[transit..'_plats'] do
                                        --ZSM_CalcTripCycleTime(transit,cycle)                                                          
                                        --DEFAULT_CHAT_FRAME:AddMessage(data['name']..":"..ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1));                                                                                                                                                              
                                        local arrival_time = 0;
                                        if (ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1) > (cycle*zsm_data[transit..'_time'])) then
                                                        arrival_time = ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1) - (cycle*zsm_data[transit..'_time']);
                                                        --DEFAULT_CHAT_FRAME:AddMessage("Arrival Time of "..data['name']..": "..arrival_time .." sec.");                                                                                
                                        else
                                                        arrival_time = zsm_data[transit..'_time'] - (cycle*zsm_data[transit..'_time']);
                                                        arrival_time = arrival_time + ZSM_CalcTripCycleTimeByIndex(transit,data['index']-1);
                                                        --DEFAULT_CHAT_FRAME:AddMessage("Arrival Time of "..data['name']..": "..arrival_time .." sec.");
                                        end 
                                        --DEFAULT_CHAT_FRAME:AddMessage(GetRealZoneText());
                                                                                                        
                                        local platname;
                                        if (ZSM_Data['Opts']['CityAlias']) then
                                                        platname = data['alias'];
                                        else
                                                        platname = data['name'];
                                        end                                                                                                                             
                                        getglobal("ZSMFramePlat"..(index+1).."Name"):SetText(platname);                                                         
                                        
                                        local coord_data = ZSM_GetZepCoords(transit, cycle);
                                        local depart_time = ZSM_CalcTripCycleTime(transit,cycle) - (cycle*zsm_data[transit..'_time']) - data['adj'];
                                        
                                        local formated_depart_time = "";
                                        if (depart_time > 59) then
                                                        local time_min = format("%0.0f",math.floor(depart_time/60));
                                                        local time_sec = format("%0.0f",depart_time-(math.floor(depart_time/60)*60));
                                                        formated_depart_time = time_min.."m, "..time_sec.."s";
                                        else
                                                        formated_depart_time = format("%0.0f",depart_time).."s";
                                        end                             

                                        local formated_arrival_time = "";
                                        if (arrival_time > 59) then
                                                        local time_min = format("%0.0f",math.floor(arrival_time/60));
                                                        local time_sec = format("%0.0f",arrival_time-(math.floor(arrival_time/60)*60));
                                                        formated_arrival_time = time_min.."m, "..time_sec.."s";
                                        else
                                                        formated_arrival_time = format("%0.0f",arrival_time).."s";
                                        end                                                                                                                     
                                        
                                        if ((data['x'] == tonumber(coord_data[1])) and (data['y'] == tonumber(coord_data[2])) and (depart_time > 0)) then                                       
                                                        local color;
                                                        if (depart_time > 30) then
                                                                        color = YELLOW;
                                                        else
                                                                        color = RED;
                                                        end
                                                        --getglobal("ZSMFramePlat"..(index+1).."ArrivalDepature"):SetText(color.."Dep: ".. formated_depart_time);
                                                        
                                                        --color .. " ".. formated_depart_time;
                                                        --return constr;
                                                        tooltiptext = tooltiptext..platname.."\n";
                                                        tooltiptext = tooltiptext..color.."Departure: ".. " ".. formated_depart_time.."\n\n";
                                        else 
                                                        --local color = GREEN;                                                                          
                                                        --getglobal("ZSMFramePlat"..(index+1).."ArrivalDepature"):SetText(color.."Arr: ".. formated_arrival_time);
                                                        --DEFAULT_CHAT_FRAME:AddMessage(arrival_time);
                                                        
                                                        tooltiptext = tooltiptext..platname.."\n";                                                      
                                                        tooltiptext = tooltiptext..GREEN.."Arrival: ".. formated_arrival_time.."\n\n";

                                        end                                                                                                                                     
                        end             
        elseif ((activeTransit ~= -1) and (known_times[activeTransit] == nil)) then                                     
                        local transit = activeTransit;
                        
                        tooltiptext = tooltiptext..activeTransitName.."\n\n";
                        
                        for index, data in zsm_data[transit..'_plats'] do
                                        
                                        local platname;
                                        if (ZSM_Data['Opts']['CityAlias']) then
                                                        platname = data['alias'];
                                        else
                                                        platname = data['name'];
                                        end
                                
                                        --getglobal("ZSMFramePlat"..(index+1).."Name"):SetText(platname);
                                        --getglobal("ZSMFramePlat"..(index+1).."ArrivalDepature"):SetText("-- N/A --");                                 
                                        

                                        tooltiptext = tooltiptext..platname.."\n";
                                        tooltiptext = tooltiptext.."Not Available\n\n";
                                        
                                        
                        end
        elseif (activeTransit == -1) then
                        --for index = 1, 2 do
                        --              getglobal("ZSMFramePlat"..(index).."Name"):SetText(ZSM_STR_NONESELECT);
                        --              getglobal("ZSMFramePlat"..(index).."ArrivalDepature"):SetText("-- N/A --");                             
                        --end
                        tooltiptext = tooltiptext.."No Transit Selected\n";             
        end             
        return tooltiptext;     
end

function TitanPanelRightClickMenu_PrepareZeppelinMasterMenu()
        
        if (TitanPanelZeppelinMasterButtonRightClickMenu) then
                        UIDropDownMenu_ClearAll(TitanPanelZeppelinMasterButtonRightClickMenu);
                        --DEFAULT_CHAT_FRAME:AddMessage("Resetting");
        end
        --DEFAULT_CHAT_FRAME:AddMessage("Resetting");
        --UIDropDownMenu_Initialize(TitanPanelZeppelinMasterRightClickMenu, nil);
        
        --TitanPanelRightClickMenu_AddToggleIcon(TITAN_ZM_ID);
        
        local OptFaction = TitanGetVar(TITAN_ZM_ID, "OptFaction");
        local OptZone = TitanGetVar(TITAN_ZM_ID, "OptZone");
        local OptAlias = TitanGetVar(TITAN_ZM_ID, "OptAlias");  

        dropdownvalues = {};
        dropdownindexes = {};
         
        -- Menu title
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_ZM_ID].menuText);  
        TitanPanelRightClickMenu_AddSpacer();   
        
        -- TitanPanelRightClickMenu_AddCommand() adds an entry in the menu which triggers a function when clicked
        -- 1st parameter is the menu text
        -- 2st parameter can be retrieved by "this.value" in the triggered function. It's like passing parameters to the function.
        -- 3st parameter is the triggered function name
        --TitanPanelRightClickMenu_AddCommand(TITAN_ZM_MENU_RESET_COUNT, TITAN_ZM_ID, "TitanPanelZeppelinMasterButton_ResetCount");     
        
        TitanPanelRightClickMenu_AddCommand(RED.."Select None", -1, "TitanPanelZeppelinMasterButton_SetTransport");                             
        
        local count = 1;
        for index, data in zsm_data['transports'] do
                        
                        local tmplabel = data['label']; 
                        dropdownindexes[tmplabel] = index;
                        
                        local textdesc; 
                        if (OptAlias) then
                                        textdesc = zsm_data['transports'][index]['namealias'];
                        else
                                        textdesc = zsm_data['transports'][index]['name'];
                        end
                        
                        local addtrans = false;
                        if (OptFaction) then
                                        local faction = UnitFactionGroup("player");
                                        if ((zsm_data['transports'][index]['faction'] == faction) or (zsm_data['transports'][index]['faction'] == "Nuetral")) then
                                                        addtrans = true;
                                        end                             
                        else
                                        addtrans = true;
                        end
                        
                        if (OptZone and (addtrans)) then
                                        local zonestr = string.lower(zsm_data['transports'][index]['name']);
                                        local czonestr = string.lower(GetRealZoneText());
                                        if (not string.find(zonestr, czonestr)) then
                                                        addtrans = false;
                                        end     
                        end
                        
                        if ((addtrans) and (zsm_data['transports'][index]['faction'] ~= -1)) then                                       
                                        table.insert(dropdownvalues, zsm_data['transports'][index]['label']);           
                                        
                                        label = zsm_data['transports'][index]['label'];
                                        
                                        if (known_times[label] ~= nil) then
                                                        TitanPanelRightClickMenu_AddCommand(GREEN.. textdesc, count, "TitanPanelZeppelinMasterButton_SetTransport");                                                                                                    
                                        else
                                                        TitanPanelRightClickMenu_AddCommand(textdesc, count, "TitanPanelZeppelinMasterButton_SetTransport");                                                                                                    
                                        end
                                        
                                        count = count + 1;
                        end
        end

        -- A blank line in the menu
        TitanPanelRightClickMenu_AddSpacer();   
                
        TitanPanelRightClickMenu_AddToggleVar(ZSM_STR_OPT_FACTION, TITAN_ZM_ID, "OptFaction");
        TitanPanelRightClickMenu_AddToggleVar(ZSM_STR_OPT_ZONE, TITAN_ZM_ID, "OptZone");
        TitanPanelRightClickMenu_AddToggleVar(ZSM_STR_OPT_ALIAS, TITAN_ZM_ID, "OptAlias");
        
        TitanPanelRightClickMenu_AddSpacer();   
        
        --TitanPanelRightClickMenu_AddCommand(data['name'], TITAN_ZM_ID, "TitanPanelZeppelinMasterButton_ResetCount");
        
        -- Generic function to toggle label text
        --TitanPanelRightClickMenu_AddToggleLabelText(TITAN_ZM_ID);

        -- Generic function to hide the plugin
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_ZM_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end

function TitanPanelZeppelinMasterButton_OnClick( event )
                if (event == "LeftButton") then
                        
                                if (table.getn(dropdownvalues) == 0) then
                                                activeSelect = -1;
                                                activeTransit = -1;
                                                return;
                                elseif (activeSelect == -1) then
                                                activeSelect = 1;
                                else
                                                activeSelect = activeSelect+1;
                                end                             
                                
                                if (activeSelect > table.getn(dropdownvalues)) then
                                                activeSelect = 1;
                                                activeTransit = dropdownvalues[activeSelect];                                                                                                                                                                                           
                                else
                                                activeTransit = dropdownvalues[activeSelect];                                                                                           
                                end     
                                
                                local OptAlias = TitanGetVar(TITAN_ZM_ID, "OptAlias");
                                if (OptAlias) then
                                                activeTransitName = zsm_data['transports'][dropdownindexes[activeTransit]]['namealias'];
                                else
                                                activeTransitName = zsm_data['transports'][dropdownindexes[activeTransit]]['name'];
                                end             
                                
                                local color;
                                if (known_times[activeTransit] ~= nil) then
                                                color = GREEN;
                                else
                                                color = RED;
                                end
                                
                                -- Set tempory button text so you know which one is currently selected
                                ZM_tempText = color..activeTransitName;
                                ZM_tempTextCount = 2;
                                TitanPanelButton_SetButtonText(TITAN_ZM_ID);
                                
                                if (known_times[activeTransit] == nil) then
                                                ZSM_TransportRequestData(activeTransit);
                                end                                                                             
                end             
end

function TitanPanelZeppelinMasterButton_SetTransport(id)
                --DEFAULT_CHAT_FRAME:AddMessage("blah:");
                --DEFAULT_CHAT_FRAME:AddMessage(dropdownindexes[activeTransit]);
                                
                if (this.value == -1) then
                                activeSelect = -1;
                                activeTransit = -1;
                                activeTransitName = "None Selected";
                else 
                                activeSelect = this.value;
                                activeTransit = dropdownvalues[this.value];
                                
                                local OptAlias = TitanGetVar(TITAN_ZM_ID, "OptAlias");
                                if (OptAlias) then
                                                activeTransitName = zsm_data['transports'][dropdownindexes[activeTransit]]['namealias'];
                                else
                                                activeTransitName = zsm_data['transports'][dropdownindexes[activeTransit]]['name'];
                                end             
                                
                                if (known_times[activeTransit] == nil) then
                                                ZSM_TransportRequestData(activeTransit);
                                end             
                
                                ZM_tempText = activeTransitName;
                                ZM_tempTextCount = 2;           
                end
                        
end