local BSYC = select(2, ...) --grab the addon namespace local Professions = BSYC:NewModule("Professions") local L = LibStub("AceLocale-3.0"):GetLocale("BagSync", true) local AceGUI = LibStub("AceGUI-3.0") function Professions:OnEnable() --lets create our widgets local ProfessionsFrame = AceGUI:Create("Window") Professions.frame = ProfessionsFrame Professions.parentFrame = ProfessionsFrame.frame ProfessionsFrame:SetTitle("BagSync - "..L.Professions) ProfessionsFrame:SetHeight(500) ProfessionsFrame:SetWidth(380) ProfessionsFrame:EnableResize(false) local information = AceGUI:Create("Label") information:SetText(L.ProfessionInformation) information:SetFont(BSYC:GetFontType(), 12, THICKOUTLINE) information:SetColor(1, 165/255, 0) information:SetFullWidth(true) ProfessionsFrame:AddChild(information) local scrollframe = AceGUI:Create("ScrollFrame"); scrollframe:SetFullWidth(true) scrollframe:SetLayout("Flow") Professions.scrollframe = scrollframe ProfessionsFrame:AddChild(scrollframe) hooksecurefunc(ProfessionsFrame, "Show" ,function() self:DisplayList() end) ProfessionsFrame:Hide() end function Professions:AddEntry(entry, isHeader) local highlightColor = {1, 0, 0} local label = AceGUI:Create("BagSyncInteractiveLabel") label.userdata.color = {1, 1, 1} label:SetHeaderHighlight("Interface\\QuestFrame\\UI-QuestTitleHighlight") label:ToggleHeaderHighlight(false) if isHeader then label:SetText(entry.player) label:SetFont(BSYC:GetFontType(), 14, THICKOUTLINE) label:SetFullWidth(true) label:SetColor(unpack(label.userdata.color)) label:ApplyJustifyH("CENTER") label.userdata.isHeader = true label.userdata.hasRecipes = false label:ToggleHeaderHighlight(true) else local labelText = entry.name..format(" |cFFFFFFFF(%s)|r", entry.level) label:SetText(labelText) label:SetFont(BSYC:GetFontType(), 14, THICKOUTLINE) label:SetFullWidth(true) if entry.recipes then label.userdata.color = {153/255,204/255,51/255} --primary profession color it green label.userdata.hasRecipes = true else label.userdata.color = {102/255,153/255,1} --gathering profession color it blue label.userdata.hasRecipes = false end label:SetColor(unpack(label.userdata.color)) label:ApplyJustifyH("LEFT") label.userdata.isHeader = false end label:SetCallback( "OnClick", function (widget, sometable, button) if "LeftButton" == button and label.userdata.hasRecipes then BSYC:GetModule("Recipes"):ViewRecipes(entry.name, entry.level, entry.recipes) end end) label:SetCallback( "OnEnter", function (widget, sometable) label:SetColor(unpack(highlightColor)) GameTooltip:SetOwner(label.frame, "ANCHOR_BOTTOMRIGHT") if not label.userdata.isHeader then if label.userdata.hasRecipes then GameTooltip:AddLine(L.ProfessionHasRecipes) else GameTooltip:AddLine(L.ProfessionHasNoRecipes) end GameTooltip:Show() end end) label:SetCallback( "OnLeave", function (widget, sometable) label:SetColor(unpack(label.userdata.color)) GameTooltip:Hide() end) self.scrollframe:AddChild(label) end function Professions:DisplayList() local professionsTable = {} local count = 0 self.scrollframe:ReleaseChildren() --clear out the scrollframe local xDB = BSYC:FilterDB(1) --dbSelect 1 --loop through our characters --k = player, v = stored data for player for k, v in pairs(xDB) do local tmp = {} local yName, yRealm = strsplit("^", k) local playerName = BSYC:GetRealmTags(yName, yRealm) for q, r in pairs(v) do table.insert(tmp, { player=playerName, name=r.name, level=r.level, recipes=r.recipes } ) count = count + 1 end --add to master table table.insert(professionsTable, { player=playerName, info=tmp } ) end --show or hide the scrolling frame depending on count if count > 0 then table.sort(professionsTable, function(a,b) return (a.player < b.player) end) for i=1, #professionsTable do self:AddEntry(professionsTable[i], true) --add header for z=1, #professionsTable[i].info do self:AddEntry(professionsTable[i].info[z], false) end end self.scrollframe.frame:Show() else self.scrollframe.frame:Hide() end end