a4blank@11
|
1
|
a4blank@11
|
2 NameDialog = class()
|
a4blank@11
|
3 local L = LibStub("AceLocale-3.0"):GetLocale("RaidTargetTactics")
|
a4blank@11
|
4
|
a4blank@11
|
5 function NameDialog:init(names)
|
a4blank@11
|
6 self.invalidNames = names
|
a4blank@11
|
7 self.callback = function() end
|
a4blank@11
|
8 end
|
a4blank@11
|
9
|
a4blank@11
|
10 function NameDialog:InitDialog()
|
a4blank@11
|
11 local this = self
|
a4blank@11
|
12
|
a4blank@11
|
13 self.nameBox = CreateFrame("Frame", nil, UIParent)
|
a4blank@11
|
14 self.nameBox:SetWidth(240)
|
a4blank@11
|
15 self.nameBox:SetHeight(50)
|
a4blank@11
|
16 local backdrop = {
|
a4blank@11
|
17 -- path to the background texture
|
a4blank@11
|
18 bgFile = "Interface\\FrameGeneral\\UI-Background-Marble",
|
a4blank@11
|
19 -- path to the border texture
|
a4blank@11
|
20 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",
|
a4blank@11
|
21 -- true to repeat the background texture to fill the frame, false to scale it
|
a4blank@11
|
22 tile = true,
|
a4blank@11
|
23 -- size (width or height) of the square repeating background tiles (in pixels)
|
a4blank@11
|
24 tileSize = 256,
|
a4blank@11
|
25 -- thickness of edge segments and square size of edge corners (in pixels)
|
a4blank@11
|
26 edgeSize = 32,
|
a4blank@11
|
27 -- distance from the edges of the frame to those of the background texture (in pixels)
|
a4blank@11
|
28 insets = {
|
a4blank@11
|
29 left = 11,
|
a4blank@11
|
30 right = 12,
|
a4blank@11
|
31 top = 12,
|
a4blank@11
|
32 bottom = 11
|
a4blank@11
|
33 }
|
a4blank@11
|
34 }
|
a4blank@11
|
35 self.nameBox:SetBackdrop(backdrop)
|
a4blank@11
|
36 self.nameBox:SetFrameStrata("DIALOG")
|
a4blank@11
|
37 self.nameBox:SetPoint("CENTER")
|
a4blank@11
|
38
|
a4blank@11
|
39 self.nameLabel = self.nameBox:CreateFontString()
|
a4blank@11
|
40 self.nameLabel:SetFontObject(GameFontHighlight)
|
a4blank@11
|
41 self.nameLabel:SetPoint("LEFT", 20, 0)
|
a4blank@11
|
42 self.nameLabel:SetText(L.Name .. ":")
|
a4blank@11
|
43 self.nameLabel:SetTextColor(YELLOW_FONT_COLOR.r, YELLOW_FONT_COLOR.g, YELLOW_FONT_COLOR.b)
|
a4blank@11
|
44 self.nameLabel:Show()
|
a4blank@11
|
45
|
a4blank@11
|
46 self.nameField = CreateFrame("EditBox", "__RTT_ASKNAME", self.nameBox, "InputBoxTemplate")
|
a4blank@11
|
47 self.nameField:SetAutoFocus(false)
|
a4blank@11
|
48 self.nameField:SetFontObject(ChatFontNormal)
|
a4blank@11
|
49 self.nameField:SetWidth(100)
|
a4blank@11
|
50 self.nameField:SetHeight(20)
|
a4blank@11
|
51 self.nameField:SetPoint("LEFT", 60, 0)
|
a4blank@11
|
52 self.nameField:SetTextInsets(0, 0, 3, 3)
|
a4blank@11
|
53 self.nameField:SetScript("OnEscapePressed", function() this:Hide() end)
|
a4blank@11
|
54 self.nameField:SetScript("OnTextChanged", function() this:OnChange() end)
|
a4blank@11
|
55 self.nameField:SetScript("OnEnterPressed", function() this:OnEnter() end)
|
a4blank@11
|
56
|
a4blank@11
|
57 -- add button
|
a4blank@11
|
58 self.okButton = CreateFrame("Button", nil, self.nameBox, "OptionsButtonTemplate")
|
a4blank@11
|
59 self.okButton:SetText("OK")
|
a4blank@11
|
60 self.okButton:Disable()
|
a4blank@11
|
61 self.okButton:SetWidth(50)
|
a4blank@11
|
62 self.okButton:SetPoint("left", 170, 0)
|
a4blank@11
|
63 self.okButton:Show()
|
a4blank@11
|
64 self.okButton:SetScript("OnClick", function() this:OnEnter() end)
|
a4blank@11
|
65
|
a4blank@11
|
66 self.nameBox:Hide()
|
a4blank@11
|
67 end
|
a4blank@11
|
68
|
a4blank@11
|
69 function NameDialog:SetInvalidNames(names)
|
a4blank@11
|
70 self.invalidNames = names
|
a4blank@11
|
71 end
|
a4blank@11
|
72
|
a4blank@11
|
73 function NameDialog:Show()
|
a4blank@11
|
74 self.nameBox:Show()
|
a4blank@11
|
75 self.nameField:SetText("")
|
a4blank@11
|
76 self.nameField:SetFocus()
|
a4blank@11
|
77 end
|
a4blank@11
|
78
|
a4blank@11
|
79 function NameDialog:Hide()
|
a4blank@11
|
80 self.nameBox:Hide()
|
a4blank@11
|
81 end
|
a4blank@11
|
82
|
a4blank@11
|
83 function NameDialog:GetName()
|
a4blank@11
|
84 return strtrim(self.nameField:GetText())
|
a4blank@11
|
85 end
|
a4blank@11
|
86
|
a4blank@11
|
87 function NameDialog:IsValidName()
|
a4blank@11
|
88 local name = self:GetName()
|
a4blank@11
|
89 if #name > 0 then
|
a4blank@11
|
90 for _, taken in ipairs(self.invalidNames) do
|
a4blank@11
|
91 if name == taken then
|
a4blank@11
|
92 return false
|
a4blank@11
|
93 end
|
a4blank@11
|
94 end
|
a4blank@11
|
95 return true
|
a4blank@11
|
96 end
|
a4blank@11
|
97 return false
|
a4blank@11
|
98 end
|
a4blank@11
|
99
|
a4blank@11
|
100 function NameDialog:OnChange()
|
a4blank@11
|
101 if self:IsValidName() then
|
a4blank@11
|
102 self.okButton:Enable()
|
a4blank@11
|
103 else
|
a4blank@11
|
104 self.okButton:Disable()
|
a4blank@11
|
105 end
|
a4blank@11
|
106 end
|
a4blank@11
|
107
|
a4blank@11
|
108 function NameDialog:OnEnter()
|
a4blank@11
|
109 if not self:IsValidName() then
|
a4blank@11
|
110 return
|
a4blank@11
|
111 end
|
a4blank@11
|
112 local name = self:GetName()
|
a4blank@11
|
113 self:Hide()
|
a4blank@11
|
114 self.callback(name)
|
a4blank@11
|
115 end
|
a4blank@11
|
116
|
a4blank@11
|
117 function NameDialog:OnNameChosen(func)
|
a4blank@11
|
118 self.callback = func
|
a4blank@11
|
119 end
|
a4blank@11
|
120
|