a4blank@11: a4blank@11: NameDialog = class() a4blank@11: local L = LibStub("AceLocale-3.0"):GetLocale("RaidTargetTactics") a4blank@11: a4blank@11: function NameDialog:init(names) a4blank@11: self.invalidNames = names a4blank@11: self.callback = function() end a4blank@11: end a4blank@11: a4blank@11: function NameDialog:InitDialog() a4blank@11: local this = self a4blank@11: a4blank@11: self.nameBox = CreateFrame("Frame", nil, UIParent) a4blank@11: self.nameBox:SetWidth(240) a4blank@11: self.nameBox:SetHeight(50) a4blank@11: local backdrop = { a4blank@11: -- path to the background texture a4blank@11: bgFile = "Interface\\FrameGeneral\\UI-Background-Marble", a4blank@11: -- path to the border texture a4blank@11: edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border", a4blank@11: -- true to repeat the background texture to fill the frame, false to scale it a4blank@11: tile = true, a4blank@11: -- size (width or height) of the square repeating background tiles (in pixels) a4blank@11: tileSize = 256, a4blank@11: -- thickness of edge segments and square size of edge corners (in pixels) a4blank@11: edgeSize = 32, a4blank@11: -- distance from the edges of the frame to those of the background texture (in pixels) a4blank@11: insets = { a4blank@11: left = 11, a4blank@11: right = 12, a4blank@11: top = 12, a4blank@11: bottom = 11 a4blank@11: } a4blank@11: } a4blank@11: self.nameBox:SetBackdrop(backdrop) a4blank@11: self.nameBox:SetFrameStrata("DIALOG") a4blank@11: self.nameBox:SetPoint("CENTER") a4blank@11: a4blank@11: self.nameLabel = self.nameBox:CreateFontString() a4blank@11: self.nameLabel:SetFontObject(GameFontHighlight) a4blank@11: self.nameLabel:SetPoint("LEFT", 20, 0) a4blank@11: self.nameLabel:SetText(L.Name .. ":") a4blank@11: self.nameLabel:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b) a4blank@11: self.nameLabel:Show() a4blank@11: a4blank@11: self.nameField = CreateFrame("EditBox", "__RTT_ASKNAME", self.nameBox, "InputBoxTemplate") a4blank@11: self.nameField:SetAutoFocus(false) a4blank@11: self.nameField:SetFontObject(ChatFontNormal) a4blank@11: self.nameField:SetWidth(100) a4blank@11: self.nameField:SetHeight(20) a4blank@11: self.nameField:SetPoint("LEFT", 60, 0) a4blank@11: self.nameField:SetTextInsets(0, 0, 3, 3) a4blank@11: self.nameField:SetScript("OnEscapePressed", function() this:Hide() end) a4blank@11: self.nameField:SetScript("OnTextChanged", function() this:OnChange() end) a4blank@11: self.nameField:SetScript("OnEnterPressed", function() this:OnEnter() end) a4blank@11: a4blank@11: -- add button a4blank@11: self.okButton = CreateFrame("Button", nil, self.nameBox, "OptionsButtonTemplate") a4blank@11: self.okButton:SetText("OK") a4blank@11: self.okButton:Disable() a4blank@11: self.okButton:SetWidth(50) a4blank@11: self.okButton:SetPoint("left", 170, 0) a4blank@11: self.okButton:Show() a4blank@11: self.okButton:SetScript("OnClick", function() this:OnEnter() end) a4blank@11: a4blank@11: self.nameBox:Hide() a4blank@11: end a4blank@11: a4blank@11: function NameDialog:SetInvalidNames(names) a4blank@11: self.invalidNames = names a4blank@11: end a4blank@11: a4blank@11: function NameDialog:Show() a4blank@11: self.nameBox:Show() a4blank@11: self.nameField:SetText("") a4blank@11: self.nameField:SetFocus() a4blank@11: end a4blank@11: a4blank@11: function NameDialog:Hide() a4blank@11: self.nameBox:Hide() a4blank@11: end a4blank@11: a4blank@11: function NameDialog:GetName() a4blank@11: return strtrim(self.nameField:GetText()) a4blank@11: end a4blank@11: a4blank@11: function NameDialog:IsValidName() a4blank@11: local name = self:GetName() a4blank@11: if #name > 0 then a4blank@11: for _, taken in ipairs(self.invalidNames) do a4blank@11: if name == taken then a4blank@11: return false a4blank@11: end a4blank@11: end a4blank@11: return true a4blank@11: end a4blank@11: return false a4blank@11: end a4blank@11: a4blank@11: function NameDialog:OnChange() a4blank@11: if self:IsValidName() then a4blank@11: self.okButton:Enable() a4blank@11: else a4blank@11: self.okButton:Disable() a4blank@11: end a4blank@11: end a4blank@11: a4blank@11: function NameDialog:OnEnter() a4blank@11: if not self:IsValidName() then a4blank@11: return a4blank@11: end a4blank@11: local name = self:GetName() a4blank@11: self:Hide() a4blank@11: self.callback(name) a4blank@11: end a4blank@11: a4blank@11: function NameDialog:OnNameChosen(func) a4blank@11: self.callback = func a4blank@11: end a4blank@11: