annotate text_tabs.lua @ 65:69fd720f853e

Add display_bcast_from option.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Fri, 27 Apr 2012 09:12:45 +0000
parents 99ab21f0755f
children 43913e02a1ef
rev   line source
farmbuyer@1 1 local addon = select(2,...)
farmbuyer@1 2
farmbuyer@1 3 --[[ Generator:
farmbuyer@1 4 boolean FUNC (ttype, loot, last_printed, generated, cache)
farmbuyer@1 5 in TTYPE: the registered text type as passed to register_text_generator
farmbuyer@1 6 in LOOT: pointer to g_loot table
farmbuyer@1 7 in LAST_PRINTED: index into loot most recently formatted by this routine
farmbuyer@1 8 in GENERATED.TTYPE: (string) FIFO buffer for text created by this routine;
farmbuyer@1 9 other parts of the GUI copy and nil out this string. Do not change
farmbuyer@1 10 this string, only examine it if needed. If the generator is called
farmbuyer@1 11 more than once between GUI updates, text will build up here.
farmbuyer@1 12 in/out GENERATED.TTYPE_pos: if non-nil, this is the saved cursor position in
farmbuyer@1 13 the text window (so that it stays where the user last left it).
farmbuyer@1 14 Move it if you're doing something strange with the displayed text.
farmbuyer@47 15 tmp GENERATED.loc_TTYPE_*: Fields with this pattern free to use as needed.
farmbuyer@1 16 out CACHE: Empty output table. Accumulate generated lines here, one entry
farmbuyer@1 17 per visible line. Do not terminate with a newline unless you want
farmbuyer@1 18 an extra blank line there.
farmbuyer@1 19
farmbuyer@1 20 Preconditions:
farmbuyer@1 21 + LAST_PRINTED < #LOOT
farmbuyer@1 22 + all "display-relevant" information for the main Loot tab has been filled
farmbuyer@1 23 out (e.g., LOOT[i].cols[3] might have extra text, etc)
farmbuyer@1 24 + LOOT.TTYPE is a non-nil string containing all text in the text box (and
farmbuyer@1 25 if the user has edited the text box, this string will be updated). Do not
farmbuyer@1 26 change this, but like GENERATED.TTYPE it is available for examination.
farmbuyer@1 27
farmbuyer@1 28 Return true if text was created, false if nothing was done.
farmbuyer@1 29 ]]
farmbuyer@1 30
farmbuyer@1 31 --[[ Optional special widgets:
farmbuyer@1 32 FUNC (ttype, editbox, container, mkbutton)
farmbuyer@1 33 TTYPE: see above
farmbuyer@1 34 EDITBOX: the MultiLineEditBox widget
farmbuyer@1 35 CONTAINER: widget container (already has 'Regenerate' button in it)
farmbuyer@1 36 MKBUTTON: function to create more AceGUI widgets, as follows:
farmbuyer@1 37
farmbuyer@65 38 mkbutton ("WidgetType", 'display key', "Text On Widget", "mouseover text")
farmbuyer@65 39 mkbutton ( [Button] 'display key', "Text On Widget", "mouseover text")
farmbuyer@65 40 mkbutton ( [Button] [text] "Text On Widget", "mouseover text")
farmbuyer@1 41
farmbuyer@65 42 The 'display key' parameter will almost certainly be specified as nil for
farmbuyer@65 43 these functions.
farmbuyer@1 44 ]]
farmbuyer@1 45
farmbuyer@1 46 local forum_warned_heroic
farmbuyer@1 47 local warning_text
farmbuyer@1 48 do
farmbuyer@1 49 local red = '|cffff0505'
farmbuyer@11 50 local green = ITEM_QUALITY_COLORS[ITEM_QUALITY_UNCOMMON].hex
farmbuyer@1 51 warning_text = ([[%sWARNING:|r Heroic items sharing the same name as normal items often display incorrectly on forums that use the item name as the identifier. Recommend you change the %sItem markup|r dropdown in the right-hand side to %s"[item] by ID"|r and regenerate this loot.]]):format(red, green, green)
farmbuyer@1 52 end
farmbuyer@1 53
farmbuyer@1 54 local function forum (_, loot, last_printed, generated, cache)
farmbuyer@1 55 local fmt = OuroLootSV_opts.forum[OuroLootSV_opts.forum_current] or ""
farmbuyer@1 56 -- if it's capable of handling heroic items, consider them warned already
farmbuyer@1 57 forum_warned_heroic = forum_warned_heroic or fmt:find'%$I'
farmbuyer@1 58
farmbuyer@1 59 for i = last_printed+1, #loot do
farmbuyer@1 60 local e = loot[i]
farmbuyer@1 61
farmbuyer@1 62 if e.kind == 'loot' then
farmbuyer@1 63 -- Assuming nobody names a toon "offspec" or "gvault"
farmbuyer@65 64 -- 16Apr2011: armory finds 20 Gvaults and 77 Offspecs... hulk smash.
farmbuyer@1 65 local disp = e.disposition or e.person
farmbuyer@1 66 if disp == 'offspec' then
farmbuyer@1 67 disp = e.person .. " " .. 'offspec'
farmbuyer@1 68 elseif disp == 'gvault' then
farmbuyer@1 69 --disp = "guild vault (".. e.person .. ")"
farmbuyer@1 70 disp = "guild vault"
farmbuyer@1 71 end
farmbuyer@1 72 if e.extratext_byhand then
farmbuyer@1 73 disp = disp .. " -- " .. e.extratext
farmbuyer@1 74 end
farmbuyer@1 75 if e.is_heroic and not forum_warned_heroic then
farmbuyer@1 76 forum_warned_heroic = true
farmbuyer@1 77 addon:Print(warning_text)
farmbuyer@1 78 end
farmbuyer@1 79 local t = fmt:gsub('%$I', e.id)
farmbuyer@1 80 :gsub('%$N', e.itemname)
farmbuyer@1 81 :gsub('%$X', e.count or "")
farmbuyer@1 82 :gsub('%$T', disp)
farmbuyer@1 83 cache[#cache+1] = t
farmbuyer@1 84
farmbuyer@1 85 elseif e.kind == 'boss' and e.reason == 'kill' then
farmbuyer@65 86 -- The first boss in an instance gets an instance tag, others
farmbuyer@65 87 -- get a blank line
farmbuyer@1 88 if generated.last_instance == e.instance then
farmbuyer@1 89 cache[#cache+1] = ""
farmbuyer@1 90 else
farmbuyer@1 91 cache[#cache+1] = "\n[b]" .. e.instance .. "[/b]"
farmbuyer@1 92 generated.last_instance = e.instance
farmbuyer@1 93 end
farmbuyer@55 94 cache[#cache+1] = "[i]" .. e.bossname .. "[/i]"
farmbuyer@1 95
farmbuyer@1 96 elseif e.kind == 'time' then
farmbuyer@1 97 cache[#cache+1] = "[b]" .. e.startday.text .. "[/b]"
farmbuyer@1 98
farmbuyer@1 99 end
farmbuyer@1 100 end
farmbuyer@61 101 return #cache > 0
farmbuyer@1 102 end
farmbuyer@1 103
farmbuyer@1 104 local function forum_specials (_,_, container, mkbutton)
farmbuyer@1 105 local map,current = {}
farmbuyer@1 106 for label,format in pairs(OuroLootSV_opts.forum) do
farmbuyer@1 107 table.insert(map,label)
farmbuyer@1 108 if label == OuroLootSV_opts.forum_current then
farmbuyer@1 109 current = #map
farmbuyer@1 110 end
farmbuyer@1 111 end
farmbuyer@1 112
farmbuyer@1 113 local dd, editbox
farmbuyer@1 114 dd = mkbutton("Dropdown", nil, "",
farmbuyer@1 115 [[Chose specific formatting of loot items. See Help tab for more. Regenerate to take effect.]])
farmbuyer@1 116 dd:SetFullWidth(true)
farmbuyer@1 117 dd:SetLabel("Item markup")
farmbuyer@1 118 dd:SetList(map)
farmbuyer@1 119 dd:SetValue(current)
farmbuyer@1 120 dd:SetCallback("OnValueChanged", function(_dd,event,choice)
farmbuyer@1 121 OuroLootSV_opts.forum_current = map[choice]
farmbuyer@1 122 forum_warned_heroic = nil
farmbuyer@1 123 editbox:SetDisabled(map[choice] ~= "Custom...")
farmbuyer@1 124 end)
farmbuyer@1 125 container:AddChild(dd)
farmbuyer@1 126
farmbuyer@1 127 editbox = mkbutton("EditBox", nil, OuroLootSV_opts.forum["Custom..."],
farmbuyer@1 128 [[Format described in Help tab (Generated Text -> Forum Markup).]])
farmbuyer@1 129 editbox:SetFullWidth(true)
farmbuyer@1 130 editbox:SetLabel("Custom:")
farmbuyer@1 131 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
farmbuyer@1 132 OuroLootSV_opts.forum["Custom..."] = value
farmbuyer@1 133 _e.editbox:ClearFocus()
farmbuyer@1 134 end)
farmbuyer@1 135 editbox:SetDisabled(OuroLootSV_opts.forum_current ~= "Custom...")
farmbuyer@1 136 container:AddChild(editbox)
farmbuyer@1 137 end
farmbuyer@1 138
farmbuyer@1 139 addon:register_text_generator ("forum", [[Forum Markup]], [[BBcode ready for Ouroboros forums]], forum, forum_specials)
farmbuyer@1 140
farmbuyer@1 141
farmbuyer@56 142 local ingroups, outgroups = {}, {}
farmbuyer@56 143 local function do_attendance (raidertable, max_group_number)
farmbuyer@56 144 local tins, wipe, tsort, tconcat =
farmbuyer@56 145 table.insert, table.wipe, table.sort, table.concat
farmbuyer@56 146
farmbuyer@56 147 -- Assumption: everybody is packed into the first N groups.
farmbuyer@56 148 if raidertable then for name,info in pairs(raidertable) do
farmbuyer@56 149 if info.online ~= 3 then -- 3 == left the raid
farmbuyer@56 150 if info.subgroup <= max_group_number then
farmbuyer@56 151 tins (ingroups, name)
farmbuyer@56 152 else
farmbuyer@56 153 tins (outgroups, name)
farmbuyer@56 154 end
farmbuyer@56 155 end
farmbuyer@56 156 end end
farmbuyer@56 157 if #ingroups > 0 then
farmbuyer@56 158 tsort(ingroups)
farmbuyer@56 159 else
farmbuyer@56 160 ingroups[1] = [[Nobody recorded as inside the instance.]]
farmbuyer@56 161 end
farmbuyer@56 162 if #outgroups > 0 then
farmbuyer@56 163 tsort(outgroups)
farmbuyer@56 164 else
farmbuyer@56 165 outgroups[1] = [[Nobody recorded as outside the instance.]]
farmbuyer@56 166 end
farmbuyer@56 167 local i,o = tconcat(ingroups,", "), tconcat(outgroups,", ")
farmbuyer@56 168 wipe(ingroups)
farmbuyer@56 169 wipe(outgroups)
farmbuyer@56 170 return i,o
farmbuyer@56 171 end
farmbuyer@56 172
farmbuyer@1 173 local function att (_, loot, last_printed, _, cache)
farmbuyer@1 174 for i = last_printed+1, #loot do
farmbuyer@1 175 local e = loot[i]
farmbuyer@1 176
farmbuyer@1 177 if e.kind == 'boss' and e.reason == 'kill' then
farmbuyer@56 178 -- This could, concievably, be different on a per-boss basis
farmbuyer@56 179 -- (e.g., "we're dropping to 10-man for the PvP boss")
farmbuyer@56 180 local i,o = do_attendance (e.raidersnap, e.maxsize / MEMBERS_PER_RAID_GROUP)
farmbuyer@56 181
farmbuyer@65 182 cache[#cache+1] = ("\n%s -- %s\n{+} %s\n{-} %s\n"):
farmbuyer@65 183 format(e.instance, e.bossname, i, o)
farmbuyer@1 184
farmbuyer@1 185 elseif e.kind == 'time' then
farmbuyer@1 186 cache[#cache+1] = e.startday.text
farmbuyer@1 187
farmbuyer@1 188 end
farmbuyer@1 189 end
farmbuyer@61 190 return #cache > 0
farmbuyer@1 191 end
farmbuyer@1 192
farmbuyer@1 193 local function att_specials (_, editbox, container, mkbutton)
farmbuyer@1 194 local w = mkbutton("Take Attendance",
farmbuyer@1 195 [[Take attendance now (will continue to take attendance on each boss kill).]])
farmbuyer@1 196 w:SetFullWidth(true)
farmbuyer@1 197 w:SetCallback("OnClick", function(_w)
farmbuyer@61 198 local ss,max,instance = addon:snapshot_raid (--[[inraid=]]true)
farmbuyer@61 199 local i,o = do_attendance (ss, max / MEMBERS_PER_RAID_GROUP)
farmbuyer@1 200 local h, m = GetGameTime()
farmbuyer@56 201
farmbuyer@61 202 local additional = ("Attendance for %s at %.2d:%.2d:\n{+} %s\n{-} %s"):
farmbuyer@61 203 format(instance, h, m, i, o)
farmbuyer@1 204 editbox:SetText(editbox:GetText() .. '\n' .. additional)
farmbuyer@1 205 end)
farmbuyer@1 206 container:AddChild(w)
farmbuyer@1 207 end
farmbuyer@1 208
farmbuyer@1 209 addon:register_text_generator ("attend", [[Attendance]], [[Attendance list for each kill]], att, att_specials)
farmbuyer@1 210
farmbuyer@1 211 -- vim:noet