Mercurial > wow > itemauditor
comparison Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @ 0:169f5211fc7f
First public revision.
At this point ItemAuditor watches mail for auctions sold or purchased, watches for buy/sell (money and 1 item type change) and conversions/tradeskills. Milling isn't working yet because there is too much time between the first event and the last event.
| author | Asa Ayers <Asa.Ayers@Gmail.com> |
|---|---|
| date | Thu, 20 May 2010 19:22:19 -0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:169f5211fc7f |
|---|---|
| 1 local AceGUI = LibStub("AceGUI-3.0") | |
| 2 | |
| 3 -- Lua APIs | |
| 4 local min, max, floor = math.min, math.max, math.floor | |
| 5 local tonumber = tonumber | |
| 6 | |
| 7 -- WoW APIs | |
| 8 local CreateFrame, UIParent = CreateFrame, UIParent | |
| 9 | |
| 10 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded | |
| 11 -- List them here for Mikk's FindGlobals script | |
| 12 -- GLOBALS: GameFontHighlightSmall | |
| 13 | |
| 14 -------------------------- | |
| 15 -- Slider -- | |
| 16 -------------------------- | |
| 17 do | |
| 18 local Type = "Slider" | |
| 19 local Version = 9 | |
| 20 | |
| 21 local function OnAcquire(self) | |
| 22 self:SetWidth(200) | |
| 23 self:SetHeight(44) | |
| 24 self:SetDisabled(false) | |
| 25 self:SetIsPercent(nil) | |
| 26 self:SetSliderValues(0,100,1) | |
| 27 self:SetValue(0) | |
| 28 end | |
| 29 | |
| 30 local function OnRelease(self) | |
| 31 self.frame:ClearAllPoints() | |
| 32 self.frame:Hide() | |
| 33 self.slider:EnableMouseWheel(false) | |
| 34 self:SetDisabled(false) | |
| 35 end | |
| 36 | |
| 37 local function Control_OnEnter(this) | |
| 38 this.obj:Fire("OnEnter") | |
| 39 end | |
| 40 | |
| 41 local function Control_OnLeave(this) | |
| 42 this.obj:Fire("OnLeave") | |
| 43 end | |
| 44 | |
| 45 local function UpdateText(self) | |
| 46 local value = self.value or 0 | |
| 47 if self.ispercent then | |
| 48 self.editbox:SetText(("%s%%"):format(floor(value*1000+0.5)/10)) | |
| 49 else | |
| 50 self.editbox:SetText(floor(value*100+0.5)/100) | |
| 51 end | |
| 52 end | |
| 53 | |
| 54 local function UpdateLabels(self) | |
| 55 local min, max = (self.min or 0), (self.max or 100) | |
| 56 if self.ispercent then | |
| 57 self.lowtext:SetFormattedText("%s%%",(min * 100)) | |
| 58 self.hightext:SetFormattedText("%s%%",(max * 100)) | |
| 59 else | |
| 60 self.lowtext:SetText(min) | |
| 61 self.hightext:SetText(max) | |
| 62 end | |
| 63 end | |
| 64 | |
| 65 local function Slider_OnValueChanged(this) | |
| 66 local self = this.obj | |
| 67 if not this.setup then | |
| 68 local newvalue | |
| 69 newvalue = this:GetValue() | |
| 70 if newvalue ~= self.value and not self.disabled then | |
| 71 self.value = newvalue | |
| 72 self:Fire("OnValueChanged", newvalue) | |
| 73 end | |
| 74 if self.value then | |
| 75 local value = self.value | |
| 76 UpdateText(self) | |
| 77 end | |
| 78 end | |
| 79 end | |
| 80 | |
| 81 local function Slider_OnMouseUp(this) | |
| 82 local self = this.obj | |
| 83 self:Fire("OnMouseUp",this:GetValue()) | |
| 84 end | |
| 85 | |
| 86 local function Slider_OnMouseWheel(this, v) | |
| 87 local self = this.obj | |
| 88 if not self.disabled then | |
| 89 local value = self.value | |
| 90 if v > 0 then | |
| 91 value = min(value + (self.step or 1),self.max) | |
| 92 else | |
| 93 value = max(value - (self.step or 1), self.min) | |
| 94 end | |
| 95 self.slider:SetValue(value) | |
| 96 end | |
| 97 end | |
| 98 | |
| 99 local function SetDisabled(self, disabled) | |
| 100 self.disabled = disabled | |
| 101 if disabled then | |
| 102 self.slider:EnableMouse(false) | |
| 103 self.label:SetTextColor(.5,.5,.5) | |
| 104 self.hightext:SetTextColor(.5,.5,.5) | |
| 105 self.lowtext:SetTextColor(.5,.5,.5) | |
| 106 --self.valuetext:SetTextColor(.5,.5,.5) | |
| 107 self.editbox:SetTextColor(.5,.5,.5) | |
| 108 self.editbox:EnableMouse(false) | |
| 109 self.editbox:ClearFocus() | |
| 110 else | |
| 111 self.slider:EnableMouse(true) | |
| 112 self.label:SetTextColor(1,.82,0) | |
| 113 self.hightext:SetTextColor(1,1,1) | |
| 114 self.lowtext:SetTextColor(1,1,1) | |
| 115 --self.valuetext:SetTextColor(1,1,1) | |
| 116 self.editbox:SetTextColor(1,1,1) | |
| 117 self.editbox:EnableMouse(true) | |
| 118 end | |
| 119 end | |
| 120 | |
| 121 local function SetValue(self, value) | |
| 122 self.slider.setup = true | |
| 123 self.slider:SetValue(value) | |
| 124 self.value = value | |
| 125 UpdateText(self) | |
| 126 self.slider.setup = nil | |
| 127 end | |
| 128 | |
| 129 local function SetLabel(self, text) | |
| 130 self.label:SetText(text) | |
| 131 end | |
| 132 | |
| 133 local function SetSliderValues(self, min, max, step) | |
| 134 local frame = self.slider | |
| 135 frame.setup = true | |
| 136 self.min = min | |
| 137 self.max = max | |
| 138 self.step = step | |
| 139 frame:SetMinMaxValues(min or 0,max or 100) | |
| 140 UpdateLabels(self) | |
| 141 frame:SetValueStep(step or 1) | |
| 142 if self.value then | |
| 143 frame:SetValue(self.value) | |
| 144 end | |
| 145 frame.setup = nil | |
| 146 end | |
| 147 | |
| 148 local function EditBox_OnEscapePressed(this) | |
| 149 this:ClearFocus() | |
| 150 end | |
| 151 | |
| 152 local function EditBox_OnEnterPressed(this) | |
| 153 local self = this.obj | |
| 154 local value = this:GetText() | |
| 155 if self.ispercent then | |
| 156 value = value:gsub('%%','') | |
| 157 value = tonumber(value) / 100 | |
| 158 else | |
| 159 value = tonumber(value) | |
| 160 end | |
| 161 | |
| 162 if value then | |
| 163 self:Fire("OnMouseUp",value) | |
| 164 end | |
| 165 end | |
| 166 | |
| 167 local function EditBox_OnEnter(this) | |
| 168 this:SetBackdropBorderColor(0.5,0.5,0.5,1) | |
| 169 end | |
| 170 | |
| 171 local function EditBox_OnLeave(this) | |
| 172 this:SetBackdropBorderColor(0.3,0.3,0.3,0.8) | |
| 173 end | |
| 174 | |
| 175 local function SetIsPercent(self, value) | |
| 176 self.ispercent = value | |
| 177 UpdateLabels(self) | |
| 178 UpdateText(self) | |
| 179 end | |
| 180 | |
| 181 local function FrameOnMouseDown(this) | |
| 182 this.obj.slider:EnableMouseWheel(true) | |
| 183 AceGUI:ClearFocus() | |
| 184 end | |
| 185 | |
| 186 local SliderBackdrop = { | |
| 187 bgFile = "Interface\\Buttons\\UI-SliderBar-Background", | |
| 188 edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", | |
| 189 tile = true, tileSize = 8, edgeSize = 8, | |
| 190 insets = { left = 3, right = 3, top = 6, bottom = 6 } | |
| 191 } | |
| 192 | |
| 193 local ManualBackdrop = { | |
| 194 bgFile = "Interface\\ChatFrame\\ChatFrameBackground", | |
| 195 edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", | |
| 196 tile = true, edgeSize = 1, tileSize = 5, | |
| 197 } | |
| 198 | |
| 199 local function Constructor() | |
| 200 local frame = CreateFrame("Frame",nil,UIParent) | |
| 201 local self = {} | |
| 202 self.type = Type | |
| 203 | |
| 204 self.OnRelease = OnRelease | |
| 205 self.OnAcquire = OnAcquire | |
| 206 | |
| 207 self.frame = frame | |
| 208 frame.obj = self | |
| 209 | |
| 210 self.SetDisabled = SetDisabled | |
| 211 self.SetValue = SetValue | |
| 212 self.SetSliderValues = SetSliderValues | |
| 213 self.SetLabel = SetLabel | |
| 214 self.SetIsPercent = SetIsPercent | |
| 215 | |
| 216 self.alignoffset = 25 | |
| 217 | |
| 218 frame:EnableMouse(true) | |
| 219 frame:SetScript("OnMouseDown",FrameOnMouseDown) | |
| 220 self.slider = CreateFrame("Slider",nil,frame) | |
| 221 local slider = self.slider | |
| 222 slider:SetScript("OnEnter",Control_OnEnter) | |
| 223 slider:SetScript("OnLeave",Control_OnLeave) | |
| 224 slider:SetScript("OnMouseUp", Slider_OnMouseUp) | |
| 225 slider.obj = self | |
| 226 slider:SetOrientation("HORIZONTAL") | |
| 227 slider:SetHeight(15) | |
| 228 slider:SetHitRectInsets(0,0,-10,0) | |
| 229 slider:SetBackdrop(SliderBackdrop) | |
| 230 --slider:EnableMouseWheel(true) | |
| 231 slider:SetScript("OnMouseWheel", Slider_OnMouseWheel) | |
| 232 | |
| 233 local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormal") | |
| 234 label:SetPoint("TOPLEFT",frame,"TOPLEFT",0,0) | |
| 235 label:SetPoint("TOPRIGHT",frame,"TOPRIGHT",0,0) | |
| 236 label:SetJustifyH("CENTER") | |
| 237 label:SetHeight(15) | |
| 238 self.label = label | |
| 239 | |
| 240 self.lowtext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall") | |
| 241 self.lowtext:SetPoint("TOPLEFT",slider,"BOTTOMLEFT",2,3) | |
| 242 | |
| 243 self.hightext = slider:CreateFontString(nil,"ARTWORK","GameFontHighlightSmall") | |
| 244 self.hightext:SetPoint("TOPRIGHT",slider,"BOTTOMRIGHT",-2,3) | |
| 245 | |
| 246 | |
| 247 local editbox = CreateFrame("EditBox",nil,frame) | |
| 248 editbox:SetAutoFocus(false) | |
| 249 editbox:SetFontObject(GameFontHighlightSmall) | |
| 250 editbox:SetPoint("TOP",slider,"BOTTOM",0,0) | |
| 251 editbox:SetHeight(14) | |
| 252 editbox:SetWidth(70) | |
| 253 editbox:SetJustifyH("CENTER") | |
| 254 editbox:EnableMouse(true) | |
| 255 editbox:SetScript("OnEscapePressed",EditBox_OnEscapePressed) | |
| 256 editbox:SetScript("OnEnterPressed",EditBox_OnEnterPressed) | |
| 257 editbox:SetScript("OnEnter",EditBox_OnEnter) | |
| 258 editbox:SetScript("OnLeave",EditBox_OnLeave) | |
| 259 editbox:SetBackdrop(ManualBackdrop) | |
| 260 editbox:SetBackdropColor(0,0,0,0.5) | |
| 261 editbox:SetBackdropBorderColor(0.3,0.3,0.30,0.80) | |
| 262 self.editbox = editbox | |
| 263 editbox.obj = self | |
| 264 | |
| 265 slider:SetThumbTexture("Interface\\Buttons\\UI-SliderBar-Button-Horizontal") | |
| 266 | |
| 267 frame:SetWidth(200) | |
| 268 frame:SetHeight(44) | |
| 269 slider:SetPoint("TOP",label,"BOTTOM",0,0) | |
| 270 slider:SetPoint("LEFT",frame,"LEFT",3,0) | |
| 271 slider:SetPoint("RIGHT",frame,"RIGHT",-3,0) | |
| 272 | |
| 273 | |
| 274 slider:SetValue(self.value or 0) | |
| 275 slider:SetScript("OnValueChanged",Slider_OnValueChanged) | |
| 276 | |
| 277 AceGUI:RegisterAsWidget(self) | |
| 278 return self | |
| 279 end | |
| 280 | |
| 281 AceGUI:RegisterWidgetType(Type,Constructor,Version) | |
| 282 end |
