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