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.

104 lines
3.2 KiB

local WIT, core = ...
local AceGUI = LibStub("AceGUI-3.0")
local LibBase64 = LibStub("LibBase64-1.0")
local AceSerializer = LibStub("AceSerializer-3.0")
local GridColumns = core.GridColumns
function GridColumns.RoutesColumn()
local self = GridColumns.GridColumn('Routes')
self.Description = core.GetString('RoutesDescription')
self.Sortable = false
if not StaticPopupDialogs["WIT_Confirm_Import_Route"] then
StaticPopupDialogs["WIT_Confirm_Import_Route"] = {
text = core.GetString("ImportRouteMessage"),
button1 = "Import",
button2 = "Cancel",
OnAccept = function (self, data)
core.RoutesHelper.ImportRoute(data, self.editBox:GetText())
ReloadUI()
end,
hasEditBox = true,
timeout = 0,
whileDead = true,
hideOnEscape = true,
exclusive = true,
enterClicksFirstButton = true,
preferredIndex = STATICPOPUP_NUMDIALOGS
}
end
function self.Value(data)
return data.Routes and core.RoutesHelper.IsRoutesAvailable()
end
function self.GetRowText(row)
return self.Value(row.Data) and ("|cFF00A2E8" .. core.GetString("ImportRoute")) or ''
end
local baseIsVisible = self.IsVisible
function self.IsVisible(rows)
if not baseIsVisible or not core.RoutesHelper.IsRoutesAvailable() then return false end
for _, row in pairs(rows) do
if row.Data.Routes then
return true
end
end
return false
end
local function showConfirmationDialog(routeName)
return StaticPopup_Show("WIT_Confirm_Import_Route", routeName)
end
function self.GetCell(row)
local container = AceGUI:Create("SimpleGroup")
local cell = AceGUI:Create("InteractiveLabel")
local value = self.Value(row.Data)
cell:SetText(value and self.GetRowText(row) or '')
cell:SetWidth(cell.label:GetStringWidth() + 5)
cell:SetUserData("routes", row.Data.Routes)
if value then
cell:SetCallback("OnClick", function(item)
local route = nil
if row.Data.Routes.MapId or type(row.Data.Routes) == "string" then
route = row.Data.Routes
else
route = row.Data.Routes[1]
end
if type(route) == "string" then
local result, data = AceSerializer:Deserialize(LibBase64.Decode(route))
if result and data and data.RouteZone and data.RouteKey and data.RouteName and data.RouteData then
route = data
else
route = nil
end
end
if not route then return end
local routeName = route.RouteName or core.GetString(route.Name)
local dialog = showConfirmationDialog(routeName)
if dialog then
dialog.data = route
dialog.editBox:SetText(routeName)
end
end)
end
container:AddChild(cell)
return container
end
return self
end