annotate text_tabs.lua @ 54:6d5fcbdc0590

DoTimerEditBoxDropDown widget to ver 5, warn (once) about missing item cache entries in the filter list dropdown.
author Farmbuyer of US-Kilrogg <farmbuyer@gmail.com>
date Sat, 07 Apr 2012 04:59:27 +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