Thread Tools Display Modes
Prev Previous Post   Next Post Next
05-07-22, 10:52 AM   #1
myrroddin
A Pyroguard Emberseer
 
myrroddin's Avatar
AddOn Author - Click to view addons
Join Date: Oct 2008
Posts: 1,240
First install & not printing to screen/showing frame

I was debugging TSM_StringConverter and found an oddity. If the saved variables are wiped, or the addon is freshly installed, the GUI and chat messages are not displayed. If I /reload my UI and don't change any of settings, the slash commands work.

Further, the slash commands do not work at all during a fresh installation. It is like they aren't being initialized when they are called. The test prints in PEW are not doing anything during the first install either. They work after a /reload.

And I don't know why I am getting this behaviour.
Code:
local title, addon = ...
local L = addon.L
local gui = LibStub("AceGUI-3.0")

local text_store = "" -- store the edit box text
local main_frame

addon.frame = CreateFrame("Frame")
addon.frame:RegisterEvent("PLAYER_LOGIN")
addon.frame:RegisterEvent("PLAYER_ENTERING_WORLD")
addon.frame:SetScript("OnEvent", function(self, event, ...)
    addon[event](self, ...)
end)

local function PrintCommands()
    print(L["/tsmsc slash commands:"])
    print("  " .. HELP_LABEL:lower() .. " " .. L["or ? prints this menu."])
    print("  " .. L["login toggles showing the frame when you first log into WoW."])
    print("  " .. L["reload toggles showing the frame when you reload your UI."])
    print("  " .. L["message toggles displaying this message when you log into WoW."])
    print("  " .. L["Any other entry toggles the frame"])
    print(L["Example: /tsmsc login"])
end

local function ToggleFrame()
    if main_frame and main_frame:IsShown() then return end

    main_frame = main_frame or gui:Create("Frame")
    main_frame:SetTitle(L["TSM String Converter"])
    main_frame:SetStatusText(L["TradeSkillMaster itemID String Fixer"])
    main_frame:SetCallback("OnClose", function(widget)
        text_store = ""
        gui:Release(widget)
    end)
    main_frame:SetLayout("Flow")

    local edit_box = gui:Create("MultiLineEditBox")
    edit_box:SetLabel(L["Insert itemIDs"])
    edit_box:SetRelativeWidth(1.0)
    edit_box:SetNumLines(25)
    edit_box:SetMaxLetters(0) -- no limit to the number of characters entered
    edit_box:DisableButton(true) -- disables the "Okay" button
    edit_box:SetCallback("OnTextChanged", function(widget, event, text)
        edit_box:SetLabel(L["Insert itemIDs"])
        text_store = text
    end)
    main_frame:AddChild(edit_box)

    local button = gui:Create("Button")
    button:SetText(CONVERT)
    button:SetRelativeWidth(1.0)
    button:SetCallback("OnClick", function()
        -- strip out all spaces, just in case
        text_store = text_store:trim()
        text_store = string.gsub(text_store, " ", "")

        -- break text_store entirely, and fix it (credit to krowbar71 on the Wowinterface forums)
        text_store = string.gsub(string.gsub(text_store, "[iI]:", ""), "(%d+)", "i:%1")

        print("|cff32cd32TSMSC: |r" .. DONE_EDITING)

        edit_box:SetText(text_store)
        edit_box:HighlightText()
        edit_box:SetFocus()
        edit_box:SetLabel(DONE_EDITING)
    end)
    main_frame:AddChild(button)
end -- end of ToggleFrame()

-- create and handle slash command
SLASH_TSMSC1 = L["/tsmsc"]
SlashCmdList["TSMSC"] = function(msg, editBox) -- the edit box that originated the command, not the input field for itemIDs
    msg = msg and strtrim(strlower(msg))

    if msg == L["message"] then
        TSMSC_DB.showMessage = not TSMSC_DB.showMessage
        if TSMSC_DB.showMessage then
            print(L["TSMSC: showing help menu during log in."])
        else
            print(L["TSMSC: no help menu during log in."])
        end

    elseif msg == L["login"] then
        TSMSC_DB.login = not TSMSC_DB.login
        if TSMSC_DB.login then
            print(L["TSMSC: will show the frame during log in."])
        else
            print(L["TSMSC: won't show the frame during log in."])
        end

    elseif msg == L["reload"] then
        TSMSC_DB.reload = not TSMSC_DB.reload
        if TSMSC_DB.reload then
            print(L["TSMSC: will show the frame when you relod your UI."])
        else
            print(L["TSMSC: won't show the frame when you reload your UI."])
        end

    elseif msg == HELP_LABEL:lower() or msg == L["?"] then
        PrintCommands()
        
    else
        if main_frame and main_frame:IsShown() then
            text_store = ""
            main_frame:Release()
        else
            ToggleFrame()
        end
    end
end

function addon:PLAYER_LOGIN()
    addon.frame:UnregisterEvent("PLAYER_LOGIN")

    if TSMSC_DB == nil then TSMSC_DB = {} end
    if TSMSC_DB.login == nil then TSMSC_DB.login = true end
    if TSMSC_DB.reload == nil then TSMSC_DB.reload = false end
    if TSMSC_DB.showMessage == nil then TSMSC_DB.showMessage = true end
end

function addon:PLAYER_ENTERING_WORLD(isInitialLogin, isReloadingUI)
    print("Initial login:", isInitialLogin)
    print("UI reload:", isReloadingUI)

    if isInitialLogin then
        if TSMSC_DB.login then
            ToggleFrame()
        end

        if TSMSC_DB.showMessage then
            PrintCommands()
        end
    end

    if isReloadingUI then
        if TSMSC_DB.reload then
            ToggleFrame()
        end
    end
end
  Reply With Quote
 

WoWInterface » Developer Discussions » Lua/XML Help » First install & not printing to screen/showing frame


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off