-- Temporary Configuration Variable local myReputation_TmpInWorld = false; local myReputation_TmpInit = false; local myReputation_TmpOptions = { }; ---------------------------------------------------------------------- -- OnFoo ---------------------------------------------------------------------- function myReputation_OptionsOnLoad(this) this:RegisterEvent("PLAYER_ENTERING_WORLD"); this.name = MYREP_NAME; this.refresh = myReputation_OptionsRefresh; this.okay = myReputation_OptionsOkay; InterfaceOptions_AddCategory(this); myReputation_OptionsPanelTitle:SetText(format(MYREP_MSG_FORMAT,MYREP_NAME,MYREP_VERSION)); end function myReputation_OptionsOnEvent(event, arg1) if (event == "PLAYER_ENTERING_WORLD") then if (myReputation_Config.Debug == true) then myReputation_ChatMsg('OnEvent'); end myReputation_TmpInWorld = true; end end function myReputation_OptionsOnShow() -- Copy the values to the temporary options if (myReputation_TmpInWorld == true) then myReputation_TmpInit = true; myReputation_TmpOptions.Info = myReputation_Explode(myReputation_Config.Info, ','); myReputation_TmpOptions.Tooltip = myReputation_Explode(myReputation_Config.Tooltip, ','); myReputation_OptionsPanelFrame:SetValue(myReputation_Config.Frame); end if (myReputation_Config.Debug == true) then myReputation_ChatMsg('OnShow'); myReputation_DisplayStatus(); myReputation_ChatMsg(format( MYREP_MSG_FORMAT, 'tmpInfo', myReputation_TableImplode(myReputation_TmpOptions.Info, ',') )); myReputation_ChatMsg(format( MYREP_MSG_FORMAT, 'tmpTooltip', myReputation_TableImplode(myReputation_TmpOptions.Tooltip, ',') )); end end function myReputation_OptionsOnHide() if (myReputation_Config.Debug == true) then myReputation_ChatMsg('OnHide'); myReputation_DisplayStatus(); myReputation_ChatMsg(format( MYREP_MSG_FORMAT, 'tmpInfo', myReputation_TableImplode(myReputation_TmpOptions.Info, ',') )); myReputation_ChatMsg(format( MYREP_MSG_FORMAT, 'tmpTooltip', myReputation_TableImplode(myReputation_TmpOptions.Tooltip, ',') )); end end ---------------------------------------------------------------------- -- Config Functions ---------------------------------------------------------------------- function myReputation_OptionsInitSlider(slider, low, high, step) local lowText = getglobal(slider:GetName().."Low"); local highText = getglobal(slider:GetName().."High"); lowText:SetText(low); highText:SetText(high); slider:SetMinMaxValues(low, high); slider:SetValueStep(step); end function myReputation_OptionsUpdateSlider(slider, text) local val = math.floor(slider:GetValue()); getglobal(slider:GetName().."Text"):SetText("|cffffd200"..text.." ("..val..")"); end function myReputation_OptionsChangeText(option) local parent = option:GetParent():GetParent(); local name = string.gsub( option:GetName(), parent:GetName(), '' ); local bar, setting = myReputation_Strip(name, "_"); local status = (option:GetChecked() and true) or false; -- Only change the temporary options if (status) then myReputation_TableAddVal( myReputation_TmpOptions[bar], setting ); else myReputation_TableRemoveVal( myReputation_TmpOptions[bar], setting ); end if (myReputation_Config.Debug == true) then myReputation_ChatMsg(format( MYREP_MSG_FORMAT, 'tmp'..bar, myReputation_TableImplode(myReputation_TmpOptions[bar], ',') )); end end ---------------------------------------------------------------------- -- Other Functions ---------------------------------------------------------------------- function myReputation_Strip(text, delimiter) if text then local a, b = strfind(text, delimiter); if a then return strsub(text, 1, a - 1), strsub(text, b + 1); else return text, ''; end end end function myReputation_Explode(text, delimiter) local result = { }; if (type(text) == 'string' and text ~= '' and text ~= nil) then local from = 1; local delim_from, delim_to = string.find(text, delimiter, from); while delim_from do table.insert(result, string.sub(text, from , delim_from - 1)); from = delim_to + 1; delim_from, delim_to = string.find(text, delimiter, from); end if (string.sub(text, from) ~= '') then table.insert(result, string.sub(text, from)); end end return result; end function myReputation_TableImplode(t, delimiter) local text = ''; if (type(t) == 'table') then text = table.concat(t, delimiter); end return text; end function myReputation_TableSearchVal(t, val) local found = false; if (t == nil) then t = { }; end for i,v in ipairs(t) do if (v == val) then found = i; end end return found; end function myReputation_TableAddVal(t, val) if (t == nil) then t = { }; end local found = myReputation_TableSearchVal(t, val); if (found == false) then if (myReputation_Config.Debug == true) then myReputation_ChatMsg('add '..val); end table.insert(t, val); end end function myReputation_TableReplacePos(t, pos, val) if (t == nil) then t = { }; end local found = myReputation_TableSearchVal(t, val); if (found == false) then if (myReputation_Config.Debug == true) then myReputation_ChatMsg('replace '..pos..' '..val); end if (pos > 0) then table.insert(t, tonumber(pos), val); end end end function myReputation_TableMoveVal(t, val) myReputation_TableRemoveVal(t, val); myReputation_TableAddVal(t, val); end function myReputation_TableRemoveVal(t, val) if (t == nil) then t = { }; end local found = myReputation_TableSearchVal(t, val); if (found ~= false) then if (myReputation_Config.Debug == true) then myReputation_ChatMsg('remove '..val); end table.remove(t, found); end end ---------------------------------------------------------------------- -- Panel Functions ---------------------------------------------------------------------- function myReputation_OptionsRefresh(self) local name = self:GetName(); local info = myReputation_Explode(myReputation_Config.Info, ','); local tooltip = myReputation_Explode(myReputation_Config.Tooltip, ','); getglobal(name..'Enabled'):SetChecked(myReputation_Config.Enabled == true); getglobal(name..'Splash'):SetChecked(myReputation_Config.Splash == true); getglobal(name..'Blizz'):SetChecked(myReputation_Config.Blizz == true); getglobal(name..'More'):SetChecked(myReputation_Config.More == true); getglobal(name..'Frame'):SetValue(myReputation_Config.Frame); getglobal(name..'Info_Text'):SetChecked( myReputation_TableSearchVal(info, 'Text') ~= false ); getglobal(name..'Info_Percent'):SetChecked( myReputation_TableSearchVal(info, 'Percent') ~= false ); getglobal(name..'Info_Absolute'):SetChecked( myReputation_TableSearchVal(info, 'Absolute') ~= false ); getglobal(name..'Info_Difference'):SetChecked( myReputation_TableSearchVal(info, 'Difference') ~= false ); getglobal(name..'Tooltip_Text'):SetChecked( myReputation_TableSearchVal(tooltip, 'Text') ~= false ); getglobal(name..'Tooltip_Percent'):SetChecked( myReputation_TableSearchVal(tooltip, 'Percent') ~= false ); getglobal(name..'Tooltip_Absolute'):SetChecked( myReputation_TableSearchVal(tooltip, 'Absolute') ~= false ); getglobal(name..'Tooltip_Difference'):SetChecked( myReputation_TableSearchVal(tooltip, 'Difference') ~= false ); end function myReputation_OptionsOkay(self) -- Fired for all options not only of this addon if (myReputation_Config.Debug == true) then myReputation_ChatMsg('Okay clicked'); end if (myReputation_TmpInWorld == true and myReputation_TmpInit == true) then local name = self:GetName(); myReputation_Toggle((getglobal(name..'Enabled'):GetChecked() and true) or false); myReputation_Config.Splash = ((getglobal(name..'Splash'):GetChecked() and true) or false); myReputation_Config.Blizz = ((getglobal(name..'Blizz'):GetChecked() and true) or false); myReputation_Config.More = ((getglobal(name..'More'):GetChecked() and true) or false); local frame = getglobal(name..'Frame'):GetValue(); if (myReputation_Config.Frame ~= frame and frame > 0) then myReputation_ChatMsg(frame); myReputation_ChatFrame_Change(0, frame); end -- Save the temporary options local option, status; local info = { }; for i,v in ipairs(myReputation_TmpOptions.Info) do if (myReputation_Config.Debug == true) then myReputation_ChatMsg(name..'Info_'..v); end option = getglobal(name..'Info_'..v); status = (option:GetChecked() and true) or false; if (status) then myReputation_TableReplacePos(info, i, v); end end myReputation_Config.Info = myReputation_TableImplode(info, ','); local tooltip = { }; for i,v in ipairs(myReputation_TmpOptions.Tooltip) do if (myReputation_Config.Debug == true) then myReputation_ChatMsg(name..'Tooltip_'..v); end option = getglobal(name..'Tooltip_'..v); status = (option:GetChecked() and true) or false; if (status) then myReputation_TableReplacePos(tooltip, i, v); end end myReputation_Config.Tooltip = myReputation_TableImplode(tooltip, ','); end end