annotate text_tabs.lua @ 51:857aea8ae33d

Also detect LFR happening and load then, before they zone in and potentially get into combat. Detect combat and avoid secure button creation in that case anyhow.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Wed, 01 Feb 2012 02:34:10 +0000
parents 1070a14cfee4
children ac57a4342812
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@1 38 mkbutton ("WidgetType", 'display key', "Text On Widget", "the mouseover display text")
farmbuyer@1 39 mkbutton ( [Button] 'display key', "Text On Widget", "the mouseover display text")
farmbuyer@1 40 mkbutton ( [Button] [text] "Text On Widget", "the mouseover display text")
farmbuyer@1 41
farmbuyer@1 42 The 'display key' parameter will almost certainly be specified as nil for these functions.
farmbuyer@1 43 ]]
farmbuyer@1 44
farmbuyer@1 45 local forum_warned_heroic
farmbuyer@1 46 local warning_text
farmbuyer@1 47 do
farmbuyer@1 48 local red = '|cffff0505'
farmbuyer@11 49 local green = ITEM_QUALITY_COLORS[ITEM_QUALITY_UNCOMMON].hex
farmbuyer@1 50 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 51 end
farmbuyer@1 52
farmbuyer@1 53 local function forum (_, loot, last_printed, generated, cache)
farmbuyer@1 54 local fmt = OuroLootSV_opts.forum[OuroLootSV_opts.forum_current] or ""
farmbuyer@1 55 -- if it's capable of handling heroic items, consider them warned already
farmbuyer@1 56 forum_warned_heroic = forum_warned_heroic or fmt:find'%$I'
farmbuyer@1 57
farmbuyer@1 58 for i = last_printed+1, #loot do
farmbuyer@1 59 local e = loot[i]
farmbuyer@1 60
farmbuyer@1 61 if e.kind == 'loot' then
farmbuyer@1 62 -- Assuming nobody names a toon "offspec" or "gvault"
farmbuyer@1 63 -- 16Apr2011: armory finds 20 Gvaults and 77 Offspecs... hulk smash.
farmbuyer@1 64 local disp = e.disposition or e.person
farmbuyer@1 65 if disp == 'offspec' then
farmbuyer@1 66 disp = e.person .. " " .. 'offspec'
farmbuyer@1 67 elseif disp == 'gvault' then
farmbuyer@1 68 --disp = "guild vault (".. e.person .. ")"
farmbuyer@1 69 disp = "guild vault"
farmbuyer@1 70 end
farmbuyer@1 71 if e.extratext_byhand then
farmbuyer@1 72 disp = disp .. " -- " .. e.extratext
farmbuyer@1 73 end
farmbuyer@1 74 if e.is_heroic and not forum_warned_heroic then
farmbuyer@1 75 forum_warned_heroic = true
farmbuyer@1 76 addon:Print(warning_text)
farmbuyer@1 77 end
farmbuyer@1 78 local t = fmt:gsub('%$I', e.id)
farmbuyer@1 79 :gsub('%$N', e.itemname)
farmbuyer@1 80 :gsub('%$X', e.count or "")
farmbuyer@1 81 :gsub('%$T', disp)
farmbuyer@1 82 cache[#cache+1] = t
farmbuyer@1 83
farmbuyer@1 84 elseif e.kind == 'boss' and e.reason == 'kill' then
farmbuyer@1 85 -- first boss in an instance gets an instance tag, others get a blank line
farmbuyer@1 86 if generated.last_instance == e.instance then
farmbuyer@1 87 cache[#cache+1] = ""
farmbuyer@1 88 else
farmbuyer@1 89 cache[#cache+1] = "\n[b]" .. e.instance .. "[/b]"
farmbuyer@1 90 generated.last_instance = e.instance
farmbuyer@1 91 end
farmbuyer@1 92 cache[#cache+1] = "[i]" .. e.bosskill .. "[/i]"
farmbuyer@1 93
farmbuyer@1 94 elseif e.kind == 'time' then
farmbuyer@1 95 cache[#cache+1] = "[b]" .. e.startday.text .. "[/b]"
farmbuyer@1 96
farmbuyer@1 97 end
farmbuyer@1 98 end
farmbuyer@1 99 return true
farmbuyer@1 100 end
farmbuyer@1 101
farmbuyer@1 102 local function forum_specials (_,_, container, mkbutton)
farmbuyer@1 103 local map,current = {}
farmbuyer@1 104 for label,format in pairs(OuroLootSV_opts.forum) do
farmbuyer@1 105 table.insert(map,label)
farmbuyer@1 106 if label == OuroLootSV_opts.forum_current then
farmbuyer@1 107 current = #map
farmbuyer@1 108 end
farmbuyer@1 109 end
farmbuyer@1 110
farmbuyer@1 111 local dd, editbox
farmbuyer@1 112 dd = mkbutton("Dropdown", nil, "",
farmbuyer@1 113 [[Chose specific formatting of loot items. See Help tab for more. Regenerate to take effect.]])
farmbuyer@1 114 dd:SetFullWidth(true)
farmbuyer@1 115 dd:SetLabel("Item markup")
farmbuyer@1 116 dd:SetList(map)
farmbuyer@1 117 dd:SetValue(current)
farmbuyer@1 118 dd:SetCallback("OnValueChanged", function(_dd,event,choice)
farmbuyer@1 119 OuroLootSV_opts.forum_current = map[choice]
farmbuyer@1 120 forum_warned_heroic = nil
farmbuyer@1 121 editbox:SetDisabled(map[choice] ~= "Custom...")
farmbuyer@1 122 end)
farmbuyer@1 123 container:AddChild(dd)
farmbuyer@1 124
farmbuyer@1 125 editbox = mkbutton("EditBox", nil, OuroLootSV_opts.forum["Custom..."],
farmbuyer@1 126 [[Format described in Help tab (Generated Text -> Forum Markup).]])
farmbuyer@1 127 editbox:SetFullWidth(true)
farmbuyer@1 128 editbox:SetLabel("Custom:")
farmbuyer@1 129 editbox:SetCallback("OnEnterPressed", function(_e,event,value)
farmbuyer@1 130 OuroLootSV_opts.forum["Custom..."] = value
farmbuyer@1 131 _e.editbox:ClearFocus()
farmbuyer@1 132 end)
farmbuyer@1 133 editbox:SetDisabled(OuroLootSV_opts.forum_current ~= "Custom...")
farmbuyer@1 134 container:AddChild(editbox)
farmbuyer@1 135 end
farmbuyer@1 136
farmbuyer@1 137 addon:register_text_generator ("forum", [[Forum Markup]], [[BBcode ready for Ouroboros forums]], forum, forum_specials)
farmbuyer@1 138
farmbuyer@1 139
farmbuyer@1 140 local function att (_, loot, last_printed, _, cache)
farmbuyer@1 141 for i = last_printed+1, #loot do
farmbuyer@1 142 local e = loot[i]
farmbuyer@1 143
farmbuyer@1 144 if e.kind == 'boss' and e.reason == 'kill' then
farmbuyer@1 145 cache[#cache+1] = ("\n%s -- %s\n%s"):format(e.instance, e.bosskill, e.raiderlist or '<none recorded>')
farmbuyer@1 146
farmbuyer@1 147 elseif e.kind == 'time' then
farmbuyer@1 148 cache[#cache+1] = e.startday.text
farmbuyer@1 149
farmbuyer@1 150 end
farmbuyer@1 151 end
farmbuyer@1 152 return true
farmbuyer@1 153 end
farmbuyer@1 154
farmbuyer@1 155 local function att_specials (_, editbox, container, mkbutton)
farmbuyer@1 156 local w = mkbutton("Take Attendance",
farmbuyer@1 157 [[Take attendance now (will continue to take attendance on each boss kill).]])
farmbuyer@1 158 w:SetFullWidth(true)
farmbuyer@1 159 w:SetCallback("OnClick", function(_w)
farmbuyer@1 160 local raiders = {}
farmbuyer@1 161 for i = 1, GetNumRaidMembers() do
farmbuyer@1 162 table.insert(raiders, (GetRaidRosterInfo(i)))
farmbuyer@1 163 end
farmbuyer@1 164 table.sort(raiders)
farmbuyer@1 165 local h, m = GetGameTime()
farmbuyer@16 166 local additional = ("Attendance at %.2d:%.2d:\n%s"):format(h,m,table.concat(raiders, ", "))
farmbuyer@1 167 editbox:SetText(editbox:GetText() .. '\n' .. additional)
farmbuyer@1 168 end)
farmbuyer@1 169 container:AddChild(w)
farmbuyer@1 170 end
farmbuyer@1 171
farmbuyer@1 172 addon:register_text_generator ("attend", [[Attendance]], [[Attendance list for each kill]], att, att_specials)
farmbuyer@1 173
farmbuyer@1 174 -- vim:noet