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.
226 lines
7.4 KiB
226 lines
7.4 KiB
-- Dialog.lua: the ShowDialog() and support functions
|
|
|
|
local _,L = ...
|
|
local rematch = Rematch
|
|
local dialog = RematchDialog
|
|
|
|
dialog.context = {} -- wiped when a dialog is shown, used by SetContext(var,value) and GetContext(var)
|
|
|
|
-- list of widgets reused. custom ones should use dialog:RegisterWidget("name")
|
|
dialog.widgets = { "Pet", "Warning", "EditBox", "Slot", "TeamTabIconPicker", "Text",
|
|
"Team", "OldTeam", "SaveAs", "Preferences", "CheckButton", "Share", "TabPicker",
|
|
"ConflictRadios", "Send", "ShareIncludes", "CollectionReport", "ScaleSlider",
|
|
"ScriptFilter", "MultiLine", "SmallText",
|
|
}
|
|
|
|
rematch:InitModule(function()
|
|
rematch.Dialog = dialog
|
|
local petButton = dialog.Pet.Pet
|
|
petButton.noPickup = true -- don't allow pickup or right-click or dialog pet
|
|
petButton:SetScript("OnEnter",function(self) rematch:ShowPetCard(self,self.petID) end)
|
|
petButton:SetScript("OnLeave",function(self) rematch:HidePetCard(true) end)
|
|
petButton:SetScript("OnClick",function(self,button) rematch.PetListButtonOnClick(self,button) end)
|
|
dialog.TabPicker.Label:SetText(L["Tab:"])
|
|
rematch:ConvertTitlebarCloseButton(dialog.CloseButton)
|
|
end)
|
|
|
|
-- dialogName: a string to reference the dialog (rematch:IsDialogOpen("SaveDialog"))
|
|
-- width: any but recommend 300 for minimum (that fits third button)
|
|
-- height: any
|
|
-- title: string to display in titlebar of dialog
|
|
-- prompt: string to display in a "separate" inset at bottom of dialog (bottom y is 52 when this used)
|
|
-- acceptText: text to put in the second button to do whatever dialog is meant to do
|
|
-- acceptFunc: function to run when accept button is clicked
|
|
-- cancelText: text to put in the bottomright button to dismiss the dialog and cancel its action
|
|
-- cancelFunc: function to run when cancel button clicked or dialog dismissed/hidden
|
|
-- otherText: text to put in the bottomleft button for some other action (default name for renaming)
|
|
-- otherFunc: function to do when other button is clicked (note this doesn't prevent cancelFunc!)
|
|
|
|
function rematch:ShowDialog(dialogName,width,height,title,prompt,acceptText,acceptFunc,cancelText,cancelFunc,otherText,otherFunc)
|
|
dialog:ResetAll()
|
|
rematch:HideWidgets()
|
|
rematch:HideNotes()
|
|
-- set stuff passed as parameters
|
|
dialog.name = dialogName
|
|
dialog:SetSize(width or 300,height or 320)
|
|
dialog.Title:SetText(title)
|
|
dialog.Prompt:SetShown(prompt and true)
|
|
dialog.Prompt.Text:SetText(prompt or "")
|
|
dialog.Accept:SetShown(acceptText and true)
|
|
dialog.Accept:SetText(acceptText or "")
|
|
dialog.acceptFunc = acceptFunc
|
|
dialog.Cancel:SetText(cancelText)
|
|
dialog.cancelFunc = cancelFunc
|
|
dialog.Other:SetShown(otherText and true)
|
|
dialog.Other:SetText(otherText or "")
|
|
dialog.otherFunc = otherFunc
|
|
|
|
dialog:Show()
|
|
dialog.dialogName = dialogName
|
|
|
|
return dialog
|
|
end
|
|
|
|
function rematch:HideDialog()
|
|
dialog:Hide()
|
|
end
|
|
|
|
function dialog:OnHide()
|
|
rematch.timeUIChanged = GetTime()
|
|
if dialog.cancelFunc then
|
|
dialog.cancelFunc()
|
|
end
|
|
end
|
|
|
|
-- click of the Accept button at bottom of dialog
|
|
function dialog:AcceptOnClick()
|
|
if dialog.Accept:IsEnabled() then
|
|
dialog.cancelFunc = nil -- don't run the cancelFunc if accept clicked
|
|
dialog:Hide()
|
|
if dialog.acceptFunc then
|
|
dialog.acceptFunc()
|
|
end
|
|
end
|
|
end
|
|
|
|
function dialog:OtherOnClick()
|
|
if dialog.Other:IsEnabled() and dialog.otherFunc then
|
|
dialog.otherFunc()
|
|
end
|
|
end
|
|
|
|
-- returns true if name (ie "SaveAs") is visible; or any dialog if name not given
|
|
function rematch:IsDialogOpen(name)
|
|
if name then
|
|
return dialog:IsVisible() and dialog.dialogName==name
|
|
else
|
|
return dialog:IsVisible()
|
|
end
|
|
end
|
|
|
|
-- hides/unanchors/wipes/resets widgets and script handlers for a clean slate
|
|
function dialog:ResetAll()
|
|
wipe(dialog.context)
|
|
for _,widget in ipairs(dialog.widgets) do
|
|
dialog[widget]:Hide()
|
|
dialog[widget]:ClearAllPoints()
|
|
end
|
|
dialog.acceptFunc = nil
|
|
dialog.otherFunc = nil
|
|
dialog.EditBox:SetWidth(220)
|
|
dialog.EditBox:SetScript("OnTextChanged",dialog.EditBoxOnTextChanged)
|
|
dialog.EditBox:SetText("")
|
|
dialog.EditBox:SetScript("OnEnterPressed",dialog.EditBoxOnEnterPressed)
|
|
dialog.EditBox:SetScript("OnEscapePressed",dialog.EditBoxOnEscapePressed)
|
|
dialog.Accept:SetEnabled(true)
|
|
dialog.Other:SetEnabled(true)
|
|
dialog.Text:SetText("")
|
|
dialog.Text:SetFontObject(GameFontNormal)
|
|
dialog.Text:SetJustifyH("CENTER")
|
|
dialog.CheckButton.text:SetText("")
|
|
dialog.CheckButton.text:SetFontObject(GameFontNormal)
|
|
dialog.CheckButton:SetScript("OnClick",nil)
|
|
dialog.CheckButton:SetChecked(false)
|
|
dialog.CheckButton.tooltipTitle = nil
|
|
dialog.CheckButton.tooltipBody = nil
|
|
dialog.MultiLine.EditBox:SetScript("OnTextChanged",nil)
|
|
dialog.MultiLine.EditBox:SetText("")
|
|
dialog.MultiLine.EditBox:SetScript("OnEscapePressed",dialog.EditBoxOnEscapePressed)
|
|
dialog.MultiLine.EditBox:SetScript("OnEditFocusGained",nil)
|
|
end
|
|
|
|
function dialog:RegisterWidget(name)
|
|
tinsert(dialog.widgets,name)
|
|
end
|
|
|
|
function dialog:OnKeyDown(key)
|
|
if key==GetBindingKey("TOGGLEGAMEMENU") then
|
|
if rematch:IsDialogOpen("ScriptFilterDialog") and dialog.ScriptFilter.referenceOpen then
|
|
dialog.ScriptFilter:HideReference() -- if script filter open, hide reference
|
|
else
|
|
dialog:Hide() -- otherwise hide menu but don't pass ESC along
|
|
end
|
|
self:SetPropagateKeyboardInput(false)
|
|
else -- ESC not hit, send it along
|
|
self:SetPropagateKeyboardInput(true)
|
|
end
|
|
end
|
|
|
|
-- default behavior of EditBox: disable Accept if it's empty
|
|
function dialog:EditBoxOnTextChanged()
|
|
dialog.Accept:SetEnabled(self:GetText():trim():len()>0)
|
|
end
|
|
|
|
function dialog:EditBoxOnEnterPressed()
|
|
if dialog.Accept:IsEnabled() then
|
|
dialog.Accept:Click()
|
|
end
|
|
end
|
|
|
|
function dialog:EditBoxOnEscapePressed()
|
|
dialog:Hide()
|
|
end
|
|
|
|
function dialog:SetContext(var,value)
|
|
dialog.context[var] = value
|
|
return value
|
|
end
|
|
|
|
function dialog:GetContext(var)
|
|
return dialog.context[var]
|
|
end
|
|
|
|
function dialog:FillTeam(frame,team)
|
|
local saved = RematchSaved
|
|
for i=1,3 do
|
|
rematch:FillPetSlot(frame.Pets[i],team[i][1])
|
|
if frame.Pets[i].Missing then
|
|
frame.Pets[i].Missing:Hide()
|
|
end
|
|
for j=1,3 do
|
|
local button = frame.Pets[i].Abilities[j]
|
|
local abilityID = team[i][j+1]
|
|
if abilityID and abilityID~=0 then
|
|
button.abilityID = abilityID
|
|
button.Icon:SetTexture((select(3,C_PetBattles.GetAbilityInfoByID(abilityID))))
|
|
button.Icon:SetTexCoord(0.075,0.925,0.075,0.925)
|
|
else
|
|
button.abilityID = nil
|
|
button.Icon:SetTexture("Interface\\Buttons\\UI-EmptySlot-Disabled")
|
|
button.Icon:SetTexCoord(0.21875,0.765625,0.21875,0.765625)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- sets dialog.Text to test, sizes to cx,cy dimensions and anchors it to ...
|
|
function dialog:ShowText(text,cx,cy,...)
|
|
dialog.Text:SetSize(cx,cy)
|
|
dialog.Text:SetText(text)
|
|
dialog.Text:SetPoint(...)
|
|
dialog.Text:Show()
|
|
end
|
|
|
|
|
|
function dialog:UpdateTabPicker()
|
|
local index = rematch.TeamTabs:GetSelectedTab()
|
|
local settings = RematchSettings
|
|
dialog.TabPicker.Text:SetText(settings.TeamGroups[index][1])
|
|
dialog.TabPicker.Icon:SetTexture(settings.TeamGroups[index][2])
|
|
local team = rematch:GetSideline()
|
|
if team then
|
|
team.tab = index>1 and index or nil
|
|
end
|
|
end
|
|
|
|
function dialog.TabPicker:OnClick()
|
|
rematch:ToggleMenu("TabPick","TOPRIGHT",self,"BOTTOMRIGHT",0,2)
|
|
end
|
|
|
|
function dialog:CancelOnClick()
|
|
if rematch:IsDialogOpen("ScriptFilterDialog") and dialog.ScriptFilter.referenceOpen then
|
|
dialog.ScriptFilter:HideReference()
|
|
else
|
|
dialog:Hide()
|
|
end
|
|
end
|
|
|