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
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
|