You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
6.7 KiB
245 lines
6.7 KiB
|
3 years ago
|
|
||
|
|
-- module independent variables --
|
||
|
|
----------------------------------
|
||
|
|
local addon, ns = ...
|
||
|
|
local C, L, I = ns.LC.color, ns.L, ns.I
|
||
|
|
|
||
|
|
|
||
|
|
-- module own local variables and local cached functions --
|
||
|
|
-----------------------------------------------------------
|
||
|
|
local name = "Notes" -- L["Notes"] L["ModDesc-Notes"]
|
||
|
|
local ttName,ttColumns,tt,module = name.."TT",2;
|
||
|
|
local delIndex,editor,createTooltip,note_edit
|
||
|
|
local titleLimit,textLimit = 32,10000;
|
||
|
|
|
||
|
|
|
||
|
|
-- register icon names and default files --
|
||
|
|
-------------------------------------------
|
||
|
|
I[name] = {iconfile="Interface\\Addons\\"..addon.."\\media\\INV_Misc_PaperBundle04a", coords={0.05,0.95,0.05,0.95}}; --IconName::Notes--
|
||
|
|
I[name..'_alliance'] = {iconfile="Interface\\Addons\\"..addon.."\\media\\INV_Misc_PaperBundle04c", coords={0.05,0.95,0.05,0.95}}; --IconName::Notes_alliance--
|
||
|
|
I[name..'_horde'] = {iconfile="Interface\\Addons\\"..addon.."\\media\\INV_Misc_PaperBundle04b", coords={0.05,0.95,0.05,0.95}}; --IconName::Notes_horde--
|
||
|
|
|
||
|
|
|
||
|
|
-- some local functions --
|
||
|
|
--------------------------
|
||
|
|
local function updateBroker()
|
||
|
|
local icon,obj = I[name],ns.LDB:GetDataObjectByName(module.ldbName);
|
||
|
|
local faction = UnitFactionGroup("player"):lower();
|
||
|
|
if faction~="neutral" then
|
||
|
|
icon = I[name..'_'..faction];
|
||
|
|
end
|
||
|
|
if icon then
|
||
|
|
obj.icon = icon.iconfile;
|
||
|
|
obj.iconCoords = icon.coords;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function note_save(self)
|
||
|
|
if self~=editor then
|
||
|
|
InputBoxInstructions_OnTextChanged(self==editor.title and editor.title or editor.text);
|
||
|
|
end
|
||
|
|
|
||
|
|
local title = editor.title:GetText():trim();
|
||
|
|
local text = editor.text:GetText():trim();
|
||
|
|
local titleCount,textCount = strlen(title),strlen(text);
|
||
|
|
|
||
|
|
editor.titleCount:SetFormattedText("%d / %d",titleCount,32);
|
||
|
|
editor.textCount:SetFormattedText("%s / %s",ns.FormatLargeNumber(name,textCount),ns.FormatLargeNumber(name,10000));
|
||
|
|
|
||
|
|
if textCount==0 then
|
||
|
|
return; -- no text, no changes :)
|
||
|
|
end
|
||
|
|
|
||
|
|
if editor.index then
|
||
|
|
ns.data[name][editor.index] = {title,text};
|
||
|
|
else
|
||
|
|
tinsert(ns.data[name],{title,text});
|
||
|
|
editor.index = #ns.data[name];
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- local function updateBroker() end
|
||
|
|
|
||
|
|
local function initEditor()
|
||
|
|
editor = BrokerEverythingNotesEditor;
|
||
|
|
|
||
|
|
(editor.TitleText or editor.TitleContainer.TitleText):SetText(("%s - %s"):format(L["Notes"],C("gray",addon)));
|
||
|
|
editor.title.Instructions:SetText(L["Title (optional)"]);
|
||
|
|
editor.text.Instructions:SetText(L["Input your note here..."]);
|
||
|
|
|
||
|
|
editor.title:SetMaxLetters(titleLimit);
|
||
|
|
editor.text:SetMaxLetters(textLimit);
|
||
|
|
|
||
|
|
editor.titleCount:SetText("0 / "..titleLimit);
|
||
|
|
editor.textCount:SetText("0 / "..ns.FormatLargeNumber(name,textLimit));
|
||
|
|
|
||
|
|
editor:SetScript("OnHide",note_save);
|
||
|
|
editor.title:SetScript("OnTextChanged",note_save);
|
||
|
|
editor.text:SetScript("OnTextChanged",note_save);
|
||
|
|
end
|
||
|
|
|
||
|
|
function note_edit(self,index)
|
||
|
|
local title,text = "","";
|
||
|
|
if index then
|
||
|
|
title = ns.data[name][index][1];
|
||
|
|
text = ns.data[name][index][2];
|
||
|
|
end
|
||
|
|
if not editor then
|
||
|
|
initEditor();
|
||
|
|
end
|
||
|
|
editor.index = index or false;
|
||
|
|
editor.title:SetText(title);
|
||
|
|
editor.text:SetText(text);
|
||
|
|
editor:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
local function note_del(self,index)
|
||
|
|
local index = index or self.note_index;
|
||
|
|
if not index then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
if delIndex==index then
|
||
|
|
tremove(ns.data[name],index);
|
||
|
|
delIndex = nil;
|
||
|
|
else
|
||
|
|
delIndex = index;
|
||
|
|
end
|
||
|
|
createTooltip(tt);
|
||
|
|
end
|
||
|
|
|
||
|
|
local function note_options(self,index,button)
|
||
|
|
if button=="LeftButton" then
|
||
|
|
note_edit(self,index);
|
||
|
|
elseif button=="RightButton" then
|
||
|
|
note_del(self,index);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function note_show(self,index)
|
||
|
|
GameTooltip:SetOwner(tt,"ANCHOR_NONE");
|
||
|
|
GameTooltip:SetPoint(ns.GetTipAnchor(tt,"horizontal"));
|
||
|
|
GameTooltip:SetText(strlen(ns.data[name][index][1])>0 and ns.data[name][index][1] or COMMUNITIES_ROSTER_COLUMN_TITLE_NOTE);
|
||
|
|
local text = ns.data[name][index][2];
|
||
|
|
if not text:match("\n") then
|
||
|
|
text = ns.strWrap(text,64);
|
||
|
|
end
|
||
|
|
GameTooltip:AddLine(text,1,1,1);
|
||
|
|
GameTooltip:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
function createTooltip(tt)
|
||
|
|
if not (tt and tt.key and tt.key==ttName) then return end -- don't override other LibQTip tooltips...
|
||
|
|
|
||
|
|
if tt.lines~=nil then tt:Clear(); end
|
||
|
|
tt:AddHeader(C("dkyellow",L[name]));
|
||
|
|
tt:AddSeparator();
|
||
|
|
for i=1, #ns.data[name] do
|
||
|
|
local str = ns.data[name][i][1];
|
||
|
|
if strlen(str)==0 then
|
||
|
|
str = strsplit("\n",ns.data[name][i][2]);
|
||
|
|
str = ns.strCut(str,32);
|
||
|
|
end
|
||
|
|
local l=tt:AddLine(str);
|
||
|
|
if delIndex==i then
|
||
|
|
tt:SetCell(l,2,C("orange","("..L["really?"]..")"));
|
||
|
|
end
|
||
|
|
tt:SetLineScript(l,"OnMouseUp",note_options,i);
|
||
|
|
tt:SetLineScript(l,"OnEnter",note_show,i);
|
||
|
|
tt:SetLineScript(l,"OnLeave",GameTooltip_Hide);
|
||
|
|
end
|
||
|
|
if #ns.data[name]==0 then
|
||
|
|
local l=tt:AddLine();
|
||
|
|
tt:SetCell(l,1,C("gray",L["No entries found"]),nil,"LEFT",0);
|
||
|
|
end
|
||
|
|
|
||
|
|
tt:AddSeparator(4,0,0,0,0);
|
||
|
|
local l=tt:AddLine();
|
||
|
|
tt:SetCell(l,1,C("ltgray",L["Add new note"]),nil,"CENTER",0);
|
||
|
|
tt:SetLineScript(l,"OnMouseUp",note_edit);
|
||
|
|
|
||
|
|
if (ns.profile.GeneralOptions.showHints) then
|
||
|
|
tt:AddSeparator(4,0,0,0,0);
|
||
|
|
ns.AddSpannedLine(tt,C("ltblue",L["MouseBtnL"]).." || "..C("green",L["Edit note"]));
|
||
|
|
ns.AddSpannedLine(tt,C("ltblue",L["MouseBtnR"]).." || "..C("green",L["Delete note"]));
|
||
|
|
ns.ClickOpts.ttAddHints(tt,name);
|
||
|
|
end
|
||
|
|
ns.roundupTooltip(tt);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
-- module functions and variables --
|
||
|
|
------------------------------------
|
||
|
|
module = {
|
||
|
|
events = {
|
||
|
|
"PLAYER_LOGIN"
|
||
|
|
},
|
||
|
|
config_defaults = {
|
||
|
|
enabled = false,
|
||
|
|
},
|
||
|
|
clickOptionsRename = {
|
||
|
|
["newnote"] = "1_new_note",
|
||
|
|
["menu"] = "9_open_menu"
|
||
|
|
},
|
||
|
|
clickOptions = {
|
||
|
|
["newnote"] = {"Add new note","module","newNote"},
|
||
|
|
["menu"] = "OptionMenu"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ns.client_version>=5 then
|
||
|
|
tinsert(module.events,"NEUTRAL_FACTION_SELECT_RESULT");
|
||
|
|
end
|
||
|
|
|
||
|
|
ns.ClickOpts.addDefaults(module,{
|
||
|
|
newnote = "__NONE",
|
||
|
|
menu = "_RIGHT"
|
||
|
|
});
|
||
|
|
|
||
|
|
function module.newNote()
|
||
|
|
note_edit({},nil);
|
||
|
|
end
|
||
|
|
|
||
|
|
function module.options()
|
||
|
|
return {
|
||
|
|
broker = nil,
|
||
|
|
tooltip = nil,
|
||
|
|
misc = {
|
||
|
|
shortNumbers=true
|
||
|
|
},
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
function module.init()
|
||
|
|
if ns.data[name]==nil then
|
||
|
|
ns.data[name] = {};
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function module.onevent(self,event,arg1,...)
|
||
|
|
if event=="BE_UPDATE_CFG" and arg1 and arg1:find("^ClickOpt") then
|
||
|
|
ns.ClickOpts.update(name);
|
||
|
|
else
|
||
|
|
updateBroker();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
-- function module.optionspanel(panel) end
|
||
|
|
-- function module.onmousewheel(self,direction) end
|
||
|
|
-- function module.ontooltip(self) end
|
||
|
|
|
||
|
|
function module.onenter(self)
|
||
|
|
if (ns.tooltipChkOnShowModifier(false)) then return; end
|
||
|
|
tt = ns.acquireTooltip({ttName,ttColumns, "LEFT","RIGHT"},{false},{self});
|
||
|
|
delIndex = nil;
|
||
|
|
createTooltip(tt);
|
||
|
|
end
|
||
|
|
|
||
|
|
-- function module.onleave(self) end
|
||
|
|
-- function module.onclick(self,button) end
|
||
|
|
-- function module.ondblclick(self,button) end
|
||
|
|
|
||
|
|
|
||
|
|
-- final module registration --
|
||
|
|
-------------------------------
|
||
|
|
ns.modules[name] = module;
|