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.

159 lines
5.5 KiB

4 years ago
local TSM = select(2, ...)
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Shopping") -- loads the localization table
local private = {}
StaticPopupDialogs["TSM_SHOPPING_SAVED_EXPORT_POPUP"] = {
text = L["Press Ctrl-C to copy this saved search."],
button1 = OKAY,
OnShow = function(self)
self.editBox:SetText(private.popupText)
self.editBox:HighlightText()
self.editBox:SetFocus()
self.editBox:SetScript("OnEscapePressed", function() StaticPopup_Hide("TSM_SHOPPING_SAVED_EXPORT_POPUP") end)
self.editBox:SetScript("OnEnterPressed", function() self.button1:Click() end)
end,
hasEditBox = true,
timeout = 0,
hideOnEscape = true,
preferredIndex = 3,
}
StaticPopupDialogs["TSM_SHOPPING_SAVED_IMPORT_POPUP"] = {
text = L["Paste the search you'd like to import into the box below."],
button1 = L["Import"],
button2 = CANCEL,
OnShow = function(self)
self.editBox:SetText("")
self.editBox:HighlightText()
self.editBox:SetFocus()
self.editBox:SetScript("OnEscapePressed", function() StaticPopup_Hide("TSM_SHOPPING_SAVED_IMPORT_POPUP") end)
self.editBox:SetScript("OnEnterPressed", function() self.button1:Click() end)
end,
OnAccept = function(self)
local text = self.editBox:GetText():trim()
if text ~= "" then
tinsert(TSM.db.global.favoriteSearches, text)
TSM:Printf(L["Added '%s' to your favorite searches."], text)
private.UpdateSTData()
end
end,
hasEditBox = true,
timeout = 0,
hideOnEscape = true,
preferredIndex = 3,
}
function private.Create(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:Hide()
frame:SetAllPoints()
frame:SetScript("OnShow", private.UpdateSTData)
private.frame = frame
local stHandlers = {
OnClick = function(st, data, _, button)
if not data or not data.search then return end
if button == "LeftButton" then
if IsShiftKeyDown() then
private.popupText = data.search
TSMAPI:ShowStaticPopupDialog("TSM_SHOPPING_SAVED_EXPORT_POPUP")
else
TSM.Search:StartFilterSearch(data.search)
end
elseif button == "RightButton" then
if st == frame.recentST then
if IsShiftKeyDown() then
for i=#TSM.db.global.previousSearches, 1, -1 do
if TSM.db.global.previousSearches[i] == data.search then
tremove(TSM.db.global.previousSearches, i)
end
end
TSM:Printf(L["Removed '%s' from your recent searches."], data.search)
private.UpdateSTData()
else
tinsert(TSM.db.global.favoriteSearches, data.search)
TSM:Printf(L["Added '%s' to your favorite searches."], data.search)
private.UpdateSTData()
end
elseif st == frame.favoriteST then
tremove(TSM.db.global.favoriteSearches, data.index)
TSM:Printf(L["Removed '%s' from your favorite searches."], data.search)
private.UpdateSTData()
end
end
end,
OnEnter = function(st, data, self)
if not data or not data.search then return end
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:AddLine(data.search, 1, 1, 1, true)
GameTooltip:AddLine("")
local color = TSMAPI.Design:GetInlineColor("link")
if st == frame.recentST then
GameTooltip:AddLine(color..L["Left-Click to run this search."], 1, 1, 1, true)
GameTooltip:AddLine(color..L["Shift-Left-Click to export this search."], 1, 1, 1, true)
GameTooltip:AddLine(color..L["Right-Click to favorite this recent search."], 1, 1, 1, true)
GameTooltip:AddLine(color..L["Shift-Right-Click to remove this recent search."], 1, 1, 1, true)
elseif st == frame.favoriteST then
GameTooltip:AddLine(color..L["Left-Click to run this search."], 1, 1, 1, true)
GameTooltip:AddLine(color..L["Shift-Left-Click to export this search."], 1, 1, 1, true)
GameTooltip:AddLine(color..L["Right-Click to remove from favorite searches."], 1, 1, 1, true)
end
GameTooltip:Show()
end,
OnLeave = function()
GameTooltip:ClearLines()
GameTooltip:Hide()
end
}
local recentSTParent = CreateFrame("Frame", nil, frame)
recentSTParent:SetPoint("TOPLEFT")
recentSTParent:SetPoint("TOPRIGHT")
recentSTParent:SetPoint("BOTTOM", frame, "CENTER", 0, 4)
TSMAPI.Design:SetFrameColor(recentSTParent)
frame.recentST = TSMAPI:CreateScrollingTable(recentSTParent, {{name=L["Recent Searches"], width=1}}, stHandlers, 16)
frame.recentST:DisableSelection(true)
local favoriteSTParent = CreateFrame("Frame", nil, frame)
favoriteSTParent:SetPoint("BOTTOMLEFT", 0, 30)
favoriteSTParent:SetPoint("BOTTOMRIGHT", 0, 30)
favoriteSTParent:SetPoint("TOP", frame, "CENTER", 0, -4)
TSMAPI.Design:SetFrameColor(favoriteSTParent)
frame.favoriteST = TSMAPI:CreateScrollingTable(favoriteSTParent, {{name=L["Favorite Searches"], width=1}}, stHandlers, 16)
frame.favoriteST:DisableSelection(true)
local importBtn = TSMAPI.GUI:CreateButton(frame, 18)
importBtn:SetPoint("BOTTOMLEFT", 2, 2)
importBtn:SetPoint("BOTTOMRIGHT", -2, 2)
importBtn:SetPoint("TOPLEFT", favoriteSTParent, "BOTTOMLEFT", 2, -2)
importBtn:SetText(L["Import Favorite Search"])
importBtn:SetScript("OnClick", function()
TSMAPI:ShowStaticPopupDialog("TSM_SHOPPING_SAVED_IMPORT_POPUP")
end)
return frame
end
local function GetSTData(list)
local stData = {}
for i, search in ipairs(list) do
local row = {
cols = {{value=search}},
search = search,
index = i,
}
tinsert(stData, row)
end
return stData
end
function private.UpdateSTData()
if not private.frame then return end
private.frame.recentST:SetData(GetSTData(TSM.db.global.previousSearches))
private.frame.favoriteST:SetData(GetSTData(TSM.db.global.favoriteSearches))
end
do
TSM:AddSidebarFeature(L["Saved Searches"], private.Create, private.UpdateSTData)
end