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