LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

SliderElement

Description
Draggable viewport slider element. If #hasButtons is true or not present, this element requires 2 ButtonElement instances as the first children, which provide another way to scroll in addition to clicking the bar or dragging the handle. Used layers: "image" for a background image, "sliderImage" for a slider handle background image. Implicit callback: onSliderValueChanged(element, newValue) is called on all children and the target data element when the slider value changes, if those elements have the method defined.
Parent
GuiElement
XML Configuration Parameters
GuiElement#directionstring [optional] Slider orientation, defaults to "x". Valid values: "x" for horizontal, "y" for vertical.
GuiElement#hasButtonsbool [optional] If false, will not look for buttons in child elements of this slider.
GuiElement#minValuefloat [optional] Minimum slider value when at the top or left, defaults to 0.
GuiElement#maxValuefloat [optional] Maximum slider value when at the bottom or right, defaults to 100.
GuiElement#currentValuefloat [optional] Initial slider value, defaults to 0. Should be set to fall within the range defined by #minValue and #maxValue.
GuiElement#stepSizefloat [optional] Step size which all newly set values will be rounded to, defaults to 1.
GuiElement#sliderOffsetstring [optional] Pixel offset of slider handle in slider direction in reference resolution from the slider's origin. Format: "[offset]px"
GuiElement#sliderSizestring Pixel size of slider handle in reference resolution. Format: "[width]px [height]px"
GuiElement#dataElementIdstring [optional] Element ID of target data element which receives slider state update callback onSliderValueChanged(element, newValue) with this element and the new value as arguments.
GuiElement#dataElementNamestring [optional] Element name-based variant of #dataElementId for cases where IDs are not available (e.g. cloning pages). Use sparingly, because the #name attribute is not guaranteed to be unique and can lead to conflicts.
GuiElement#textElementIdstring [optional] Element ID of target text element whose text gets set to the current slider value on change.
GuiElement#onClickcallback [optional] onClick(currentValue) Called when this element is clicked. Receives the current slider value.
GuiElement#onChangedcallback [optional] onChanged(currentValue) Called when the slider value changes. Receives the current slider value.

Functions

addElement

Description
Automatically recognize slider buttons
Definition
addElement()
Code
288function SliderElement:addElement(element)
289 SliderElement:superClass().addElement(self, element)
290
291 if self.hasButtons then
292 if table.getn(self.elements) == 1 then
293 -- up button
294 self.upButtonElement = element
295 element.target = self
296
297 if self.direction == SliderElement.DIRECTION_Y then
298 element:setCallback("onClickCallback", "onScrollDown")
299 else
300 element:setCallback("onClickCallback", "onScrollUp")
301 end
302
303 self:setDisabled(self.disabled)
304 elseif table.getn(self.elements) == 2 then
305 -- down button
306 self.downButtonElement = element
307 element.target = self
308
309 if self.direction == SliderElement.DIRECTION_Y then
310 element:setCallback("onClickCallback", "onScrollUp")
311 else
312 element:setCallback("onClickCallback", "onScrollDown")
313 end
314
315 self:setDisabled(self.disabled)
316 end
317 end
318end

applyScreenAlignment

Description
Definition
applyScreenAlignment()
Code
242function SliderElement:applyScreenAlignment()
243 self:applySliderAspectScale()
244
245 SliderElement:superClass().applyScreenAlignment(self)
246end

applySliderAspectScale

Description
Definition
applySliderAspectScale()
Code
224function SliderElement:applySliderAspectScale()
225 local xScale, yScale = self:getAspectScale()
226 self.sliderSize[1] = self.sliderSize[1] * xScale
227
228 self.sliderOffset = self.sliderOffset * yScale
229 self.sliderSize[2] = self.sliderSize[2] * yScale
230
231 self.startSize[1] = self.startSize[1] * xScale
232 self.midSize[1] = self.midSize[1] * xScale
233 self.endSize[1] = self.endSize[1] * xScale
234
235 self.startSize[2] = self.startSize[2] * yScale
236 self.midSize[2] = self.midSize[2] * yScale
237 self.endSize[2] = self.endSize[2] * yScale
238end

callOnChanged

Description
Definition
callOnChanged()
Code
571function SliderElement:callOnChanged()
572 self:raiseCallback("onChangedCallback", self.currentValue)
573end

canReceiveFocus

Description
Determine if this SliderElement can receive focus.
Definition
canReceiveFocus()
Code
651function SliderElement:canReceiveFocus()
652 return self.handleFocus
653end

copyAttributes

Description
Definition
copyAttributes()
Code
188function SliderElement:copyAttributes(src)
189 SliderElement:superClass().copyAttributes(self, src)
190
191 GuiOverlay.copyOverlay(self.overlay, src.overlay)
192 GuiOverlay.copyOverlay(self.sliderOverlay, src.sliderOverlay)
193 GuiOverlay.copyOverlay(self.startOverlay, src.startOverlay)
194 GuiOverlay.copyOverlay(self.endOverlay, src.endOverlay)
195
196 self.direction = src.direction
197 self.hasButtons = src.hasButtons
198 self.minValue = src.minValue
199 self.maxValue = src.maxValue
200 self.currentValue = src.currentValue
201 self.stepSize = src.stepSize
202 self.sliderOffset = src.sliderOffset
203 self.sliderSize = table.copy(src.sliderSize)
204 self.isThreePartBitmap = src.isThreePartBitmap
205 self.hideParentWhenEmpty = src.hideParentWhenEmpty
206 self.useStepRounding = src.useStepRounding
207
208 self.startSize = table.copy(src.startSize)
209 self.midSize = table.copy(src.midSize)
210 self.endSize = table.copy(src.endSize)
211
212 self.dataElementId = src.dataElementId
213 self.dataElementName = src.dataElementName
214 self.textElementId = src.textElementId
215
216 self.onClickCallback = src.onClickCallback
217 self.onChangedCallback = src.onChangedCallback
218
219 GuiMixin.cloneMixin(PlaySampleMixin, src, self)
220end

delete

Description
Definition
delete()
Code
89function SliderElement:delete()
90 GuiOverlay.deleteOverlay(self.endOverlay)
91 GuiOverlay.deleteOverlay(self.startOverlay)
92 GuiOverlay.deleteOverlay(self.sliderOverlay)
93 GuiOverlay.deleteOverlay(self.overlay)
94
95 SliderElement:superClass().delete(self)
96end

draw

Description
Definition
draw()
Code
589function SliderElement:draw(clipX1, clipY1, clipX2, clipY2)
590 local state = GuiOverlay.STATE_NORMAL
591 if self.disabled then
592 state = GuiOverlay.STATE_DISABLED
593 end
594
595 GuiOverlay.renderOverlay(self.overlay, self.absPosition[1], self.absPosition[2], self.size[1], self.size[2], state, clipX1, clipY1, clipX2, clipY2)
596
597 if self.isSliderVisible and self.needsSlider then
598 if self.isThreePartBitmap then
599 local x, y = self.sliderPosition[1], self.sliderPosition[2]
600 if self.direction == SliderElement.DIRECTION_X then
601 GuiOverlay.renderOverlay(self.startOverlay, x, y, self.startSize[1], self.sliderSize[2], state, clipX1, clipY1, clipX2, clipY2)
602 GuiOverlay.renderOverlay(self.sliderOverlay, x + self.startSize[1], y, self.sliderSize[1] - self.startSize[1] - self.endSize[1], self.sliderSize[2], state, clipX1, clipY1, clipX2, clipY2)
603 GuiOverlay.renderOverlay(self.endOverlay, x + self.sliderSize[1] - self.endSize[1], y, self.endSize[1], self.sliderSize[2], state, clipX1, clipY1, clipX2, clipY2)
604 else
605 GuiOverlay.renderOverlay(self.startOverlay, x, y + self.sliderSize[2] - self.startSize[2], self.sliderSize[1], self.startSize[2], state, clipX1, clipY1, clipX2, clipY2)
606 GuiOverlay.renderOverlay(self.sliderOverlay, x, y + self.endSize[2], self.sliderSize[1], self.sliderSize[2] - self.startSize[2] - self.endSize[2], state, clipX1, clipY1, clipX2, clipY2)
607 GuiOverlay.renderOverlay(self.endOverlay, x, y, self.sliderSize[1], self.endSize[2], state, clipX1, clipY1, clipX2, clipY2)
608 end
609 else
610 GuiOverlay.renderOverlay(self.sliderOverlay, self.sliderPosition[1], self.sliderPosition[2], self.sliderSize[1], self.sliderSize[2], state, clipX1, clipY1, clipX2, clipY2)
611 end
612 end
613
614 SliderElement:superClass().draw(self, clipX1, clipY1, clipX2, clipY2)
615end

getMaxValue

Description
Set maximum slider value.
Definition
getMaxValue()
Code
430function SliderElement:getMaxValue()
431 return self.maxValue
432end

getMinValue

Description
Get minimum slider value
Definition
getMinValue()
Code
424function SliderElement:getMinValue()
425 return self.minValue
426end

getValue

Description
Get current slider value
Definition
getValue()
Code
436function SliderElement:getValue()
437 return self.currentValue
438end

keyEvent

Description
Definition
keyEvent()
Code
577function SliderElement:keyEvent(unicode, sym, modifier, isDown, eventUsed)
578 if self:getIsActive() then
579 if SliderElement:superClass().keyEvent(self, unicode, sym, modifier, isDown, eventUsed) then
580 return true
581 end
582 end
583
584 return false
585end

loadFromXML

Description
Definition
loadFromXML()
Code
100function SliderElement:loadFromXML(xmlFile, key)
101 SliderElement:superClass().loadFromXML(self, xmlFile, key)
102
103 GuiOverlay.loadOverlay(self, self.overlay, "image", self.imageSize, nil, xmlFile, key)
104 GuiOverlay.loadOverlay(self, self.sliderOverlay, "sliderImage", self.imageSize, nil, xmlFile, key)
105 GuiOverlay.loadOverlay(self, self.startOverlay, "startImage", self.imageSize, nil, xmlFile, key)
106 GuiOverlay.loadOverlay(self, self.endOverlay, "endImage", self.imageSize, nil, xmlFile, key)
107
108 local direction = getXMLString(xmlFile, key.."#direction")
109 if direction ~= nil then
110 if direction == "y" then
111 self.direction = SliderElement.DIRECTION_Y
112 elseif direction == "x" then
113 self.direction = SliderElement.DIRECTION_X
114 end
115 end
116
117 self:addCallback(xmlFile, key.."#onClick", "onClickCallback")
118 self:addCallback(xmlFile, key.."#onChanged", "onChangedCallback")
119
120 self.hasButtons = Utils.getNoNil(getXMLBool(xmlFile, key.."#hasButtons"), self.hasButtons)
121 self.minValue = Utils.getNoNil(getXMLFloat(xmlFile, key.."#minValue"), self.minValue)
122 self.maxValue = Utils.getNoNil(getXMLFloat(xmlFile, key.."#maxValue"), self.maxValue)
123 self.currentValue = Utils.getNoNil(getXMLFloat(xmlFile, key.."#currentValue"), self.currentValue)
124 self.stepSize = Utils.getNoNil(getXMLFloat(xmlFile, key.."#stepSize"), self.stepSize)
125 self.isThreePartBitmap = Utils.getNoNil(getXMLBool(xmlFile, key.."#isThreePartBitmap"), self.isThreePartBitmap)
126 self.hideParentWhenEmpty = Utils.getNoNil(getXMLBool(xmlFile, key.."#hideParentWhenEmpty"), self.hideParentWhenEmpty)
127 self.useStepRounding = Utils.getNoNil(getXMLBool(xmlFile, key.."#useStepRounding"), self.useStepRounding)
128
129 self.sliderOffset = unpack(GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#sliderOffset"), {self.outputSize[2]}, {self.sliderOffset}))
130 self.sliderSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#sliderSize"), self.outputSize, self.sliderSize)
131
132 self.startSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#startImageSize"), self.outputSize, self.startSize)
133 self.midSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#midImageSize"), self.outputSize, self.midSize)
134 self.endSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#endImageSize"), self.outputSize, self.endSize)
135
136 self.dataElementId = getXMLString(xmlFile, key.."#dataElementId")
137 self.dataElementName = getXMLString(xmlFile, key.."#dataElementName")
138 self.textElementId = getXMLString(xmlFile, key.."#textElementId")
139
140 GuiOverlay.createOverlay(self.overlay)
141 GuiOverlay.createOverlay(self.sliderOverlay)
142 GuiOverlay.createOverlay(self.startOverlay)
143 GuiOverlay.createOverlay(self.endOverlay)
144end

loadProfile

Description
Definition
loadProfile()
Code
148function SliderElement:loadProfile(profile, applyProfile)
149 SliderElement:superClass().loadProfile(self, profile, applyProfile)
150
151 GuiOverlay.loadOverlay(self, self.overlay, "image", self.imageSize, profile, nil, nil)
152 GuiOverlay.loadOverlay(self, self.sliderOverlay, "sliderImage", self.imageSize, profile, nil, nil)
153 GuiOverlay.loadOverlay(self, self.startOverlay, "startImage", self.imageSize, profile, nil, nil)
154 GuiOverlay.loadOverlay(self, self.endOverlay, "endImage", self.imageSize, profile, nil, nil)
155
156 local direction = profile:getValue("direction")
157 if direction ~= nil then
158 if direction == "y" then
159 self.direction = SliderElement.DIRECTION_Y
160 elseif direction == "x" then
161 self.direction = SliderElement.DIRECTION_X
162 end
163 end
164
165 self.hasButtons = profile:getBool("hasButtons", self.hasButtons)
166 self.minValue = profile:getNumber("minValue", self.minValue)
167 self.maxValue = profile:getNumber("maxValue", self.maxValue)
168 self.currentValue = profile:getNumber("currentValue", self.currentValue)
169 self.stepSize = profile:getNumber("stepSize", self.stepSize)
170 self.isThreePartBitmap = profile:getBool("isThreePartBitmap", self.isThreePartBitmap)
171 self.hideParentWhenEmpty = profile:getBool("hideParentWhenEmpty", self.hideParentWhenEmpty)
172 self.useStepRounding = profile:getBool("useStepRounding", self.useStepRounding)
173
174 self.sliderOffset = unpack(GuiUtils.getNormalizedValues(profile:getValue("sliderOffset"), {self.outputSize[2]}, {self.sliderOffset}))
175 self.sliderSize = GuiUtils.getNormalizedValues(profile:getValue("sliderSize"), self.outputSize, self.sliderSize)
176
177 self.startSize = GuiUtils.getNormalizedValues(profile:getValue("startImageSize"), self.outputSize, self.startSize)
178 self.midSize = GuiUtils.getNormalizedValues(profile:getValue("midImageSize"), self.outputSize, self.midSize)
179 self.endSize = GuiUtils.getNormalizedValues(profile:getValue("endImageSize"), self.outputSize, self.endSize)
180
181 if applyProfile then
182 self:applySliderAspectScale()
183 end
184end

mouseEvent

Description
Definition
mouseEvent()
Code
481function SliderElement:mouseEvent(posX, posY, isDown, isUp, button, eventUsed)
482 if self:getIsActive() then
483 if SliderElement:superClass().mouseEvent(self, posX, posY, isDown, isUp, button, eventUsed) then
484 eventUsed = true
485 end
486
487 if self.mouseDown and isUp and button == Input.MOUSE_BUTTON_LEFT then
488 eventUsed = true
489 self.clickedOnSlider = false
490 self.mouseDown = false
491
492 self:raiseCallback("onClickCallback", self.currentValue)
493 end
494
495 if not eventUsed and (GuiUtils.checkOverlayOverlap(posX, posY, self.absPosition[1], self.absPosition[2], self.absSize[1], self.absSize[2]) or GuiUtils.checkOverlayOverlap(posX, posY, self.sliderPosition[1], self.sliderPosition[2], self.sliderSize[1], self.sliderSize[2])) then
496 eventUsed = true
497 if Input.isMouseButtonPressed(Input.MOUSE_BUTTON_WHEEL_UP) then
498 self:setValue(self.currentValue - self.stepSize, nil, false)
499 end
500
501 if Input.isMouseButtonPressed(Input.MOUSE_BUTTON_WHEEL_DOWN) then
502 self:setValue(self.currentValue + self.stepSize, nil, false)
503 end
504
505 if isDown and button == Input.MOUSE_BUTTON_LEFT then
506 if not self.mouseDown and GuiUtils.checkOverlayOverlap(posX, posY, self.sliderPosition[1], self.sliderPosition[2], self.sliderSize[1], self.sliderSize[2]) then
507 self.clickedOnSlider = true
508 self.lastMousePosX = posX
509 self.lastMousePosY = posY
510 self.lastSliderPosX = self.sliderPosition[1]
511 self.lastSliderPosY = self.sliderPosition[2]
512 end
513 self.mouseDown = true
514 end
515 end
516
517 if self.mouseDown then
518 eventUsed = true
519 -- calculate slider value according to current mouse position
520 local newValue
521 local mousePos = posX
522 if self.direction == SliderElement.DIRECTION_Y then
523 mousePos = posY
524 if self.clickedOnSlider then
525 local deltaY = posY - self.lastMousePosY
526 mousePos = self.lastSliderPosY + deltaY
527 newValue = self.minValue + (1-((mousePos - self.minAbsSliderPos) / (self.maxAbsSliderPos - self.minAbsSliderPos))) * (self.maxValue - self.minValue)
528 else
529 if mousePos > self.sliderPosition[2]+self.sliderSize[2] then
530 mousePos = mousePos - self.sliderSize[2]
531 end
532 newValue = self.minValue + (1-((mousePos - self.minAbsSliderPos) / (self.maxAbsSliderPos - self.minAbsSliderPos))) * (self.maxValue - self.minValue)
533 end
534 else
535 if self.clickedOnSlider then
536 local deltaX = posX - self.lastMousePosX
537 mousePos = self.lastSliderPosX + deltaX
538 else
539 if mousePos > self.sliderPosition[1]+self.sliderSize[1] then
540 mousePos = mousePos - self.sliderSize[1]
541 end
542 end
543
544 newValue = self.minValue + ((mousePos - self.minAbsSliderPos) / (self.maxAbsSliderPos - self.minAbsSliderPos)) * (self.maxValue - self.minValue)
545 end
546 self:setValue(newValue, nil, true)
547 end
548 end
549
550 return eventUsed
551end

new

Description
Definition
new()
Code
42function SliderElement.new(target, custom_mt)
43 local self = GuiElement.new(target, custom_mt or SliderElement_mt)
44 self:include(PlaySampleMixin) -- add sound playing
45
46 self.mouseDown = false
47
48 self.minValue = 0
49 self.maxValue = 100
50 self.currentValue = 0
51 self.sliderValue = 0
52 self.stepSize = 1.0
53 self.direction = SliderElement.DIRECTION_X
54
55 self.hasButtons = true
56 self.isThreePartBitmap = false
57
58 self.overlay = {}
59 self.sliderOverlay = {}
60 self.startOverlay = {}
61 self.endOverlay = {}
62
63 self.startSize = {0, 0}
64 self.midSize = {0, 0}
65 self.endSize = {0, 0}
66 self.sliderOffset = -0.012
67 self.sliderSize = {1,1}
68 self.sliderPosition = {0,0}
69 self.adjustSliderSize = true
70
71 self.textElement = nil
72 self.dataElementId = nil
73 self.textElementId = nil
74
75 self.minAbsSliderPos = 0.08
76 self.maxAbsSliderPos = 0.92
77
78 self.isSliderVisible = true
79 self.needsSlider = true
80 self.useStepRounding = false
81
82 self.hideParentWhenEmpty = false
83
84 return self
85end

onBindUpdate

Description
Definition
onBindUpdate()
Code
705function SliderElement:onBindUpdate(element)
706 if element:isa(ListElement) then
707 local list = element
708
709 local numItems = list:getItemCount()
710 local numVisibleItems = list:getVisibleItemCount()
711
712 self.useStepRounding = true
713
714 self:setMinValue(1)
715 self:setMaxValue(math.ceil(numItems - numVisibleItems) / list:getItemFactor() + 1)
716 self:setSliderSize(numVisibleItems, numItems)
717 self:setValue(math.max(list.firstVisibleItem, 1), true, true)
718 self.needsSlider = numItems > numVisibleItems
719 elseif element:isa(ScrollingLayoutElement) then
720 self:setMinValue(1)
721
722 self.useStepRounding = true
723
724 if element:getNeedsScrolling() then
725 self:setMaxValue(element.contentSize / element.absSize[2] * 20)
726 self:setSliderSize(element.absSize[2], element.contentSize)
727 self.needsSlider = true
728 else
729 self:setMaxValue(1)
730 self:setSliderSize(10, 100)
731 self.needsSlider = false
732 end
733 -- self:setValue(element.firstVisibleY element.contentSize)
734 elseif element:isa(SmoothListElement) then
735 -- round values on pixel level to avoid floating point issues
736 local base = element.lengthAxis == 1 and g_screenWidth or g_screenHeight
737 local contentSize = MathUtil.round(element.contentSize * base)
738 local scrollViewOffsetDelta = MathUtil.round(element.scrollViewOffsetDelta * base)
739 local size = MathUtil.round(element.absSize[element.lengthAxis] * base)
740
741 local numStepsTotal = math.ceil(contentSize / scrollViewOffsetDelta)
742 local numStepsVisible = math.floor(size / scrollViewOffsetDelta)
743 local scrollSteps = math.max(numStepsTotal - numStepsVisible, 0)
744
745 self:setMinValue(1)
746 self:setMaxValue(scrollSteps + 1)
747
748 local viewSize = element.absSize[element.lengthAxis]
749 self:setSliderSize(viewSize, element.contentSize)
750 self.needsSlider = element.contentSize > viewSize
751
752 self:setValue(element:getViewOffsetPercentage() * (self.maxValue - self.minValue) + self.minValue, true, true)
753 end
754
755 if self.hideParentWhenEmpty then
756 self.parent:setVisible(self.needsSlider)
757 end
758end

onFocusActivate

Description
Definition
onFocusActivate()
Code
667function SliderElement:onFocusActivate()
668 self:raiseCallback("onClickCallback", self.currentValue)
669end

onFocusEnter

Description
Definition
onFocusEnter()
Code
662function SliderElement:onFocusEnter()
663end

onFocusLeave

Description
Definition
onFocusLeave()
Code
657function SliderElement:onFocusLeave()
658end

onGuiSetupFinished

Description
Definition
onGuiSetupFinished()
Code
256function SliderElement:onGuiSetupFinished()
257 SliderElement:superClass().onGuiSetupFinished(self)
258
259 if self.textElementId ~= nil then
260 if self.target[self.textElementId] ~= nil then
261 self.textElement = self.target[self.textElementId]
262 else
263 print("Warning: TextElementId '"..self.textElementId.."' not found for '"..self.target.name.."'!")
264 end
265 end
266
267 if self.dataElementId ~= nil then
268 if self.target[self.dataElementId] ~= nil then
269 local dataElement = self.target[self.dataElementId]
270 self:setDataElement(dataElement)
271 else
272 print("Warning: DataElementId '"..self.dataElementId.."' not found for '"..self.target.name.."'!")
273 end
274 elseif self.dataElementName ~= nil and self.parent then
275 local findDataElement = function(element) return element.name and element.name == self.dataElementName end
276 local dataElement = self.parent:getFirstDescendant(findDataElement)
277
278 if dataElement then
279 self:setDataElement(dataElement)
280 else
281 print("Warning: DataElementName '"..self.dataElementName.."' not found as descendant of '"..tostring(self.parent).."'!")
282 end
283 end
284end

onScrollDown

Description
Definition
onScrollDown()
Code
679function SliderElement:onScrollDown()
680 self:setValue(self.currentValue - self.stepSize, nil, false)
681end

onScrollUp

Description
Definition
onScrollUp()
Code
673function SliderElement:onScrollUp()
674 self:setValue(self.currentValue + self.stepSize, nil, false)
675end

setAlpha

Description
Definition
setAlpha()
Code
469function SliderElement:setAlpha(alpha)
470 SliderElement:superClass().setAlpha(self, alpha)
471 if self.overlay ~= nil then
472 self.overlay.alpha = self.alpha
473 end
474 if self.sliderOverlay ~= nil then
475 self.sliderOverlay.alpha = self.alpha
476 end
477end

setDataElement

Description
Definition
setDataElement()
Code
322function SliderElement:setDataElement(element, doNotUpdate)
323 if self.dataElement ~= nil then
324 self.dataElement.sliderElement = nil
325 self.dataElement = nil
326 end
327
328 if element ~= nil then
329 element.sliderElement = self
330 self.dataElement = element
331
332 if doNotUpdate == nil or doNotUpdate then
333 self:onBindUpdate(element, false)
334 end
335 end
336end

setMaxValue

Description
Set maximum slider value. Used to calculate the bar size.
Definition
setMaxValue()
Code
413function SliderElement:setMaxValue(maxValue)
414 self.maxValue = math.max(maxValue, 1)
415 if self.maxValue < self.currentValue then
416 self:setValue(self.maxValue, nil, true)
417 end
418
419 self:updateSliderPosition()
420end

setMinValue

Description
Set minimum slider value. Used to calculate the bar size.
Definition
setMinValue()
Code
402function SliderElement:setMinValue(minValue)
403 self.minValue = math.max(minValue, 1)
404 if self.minValue > self.currentValue then
405 self:setValue(self.minValue, nil, true)
406 end
407
408 self:updateSliderPosition()
409end

setSize

Description
Definition
setSize()
Code
449function SliderElement:setSize(x,y)
450 SliderElement:superClass().setSize(self, x,y)
451 self:updateSliderLimits()
452end

setSliderSize

Description
Definition
setSliderSize()
Code
685function SliderElement:setSliderSize(visibleItems, maxItems)
686 if self.adjustSliderSize then
687 local axis = 1
688 if self.direction == SliderElement.DIRECTION_Y then
689 axis = 2
690 end
691
692 self.sliderSize[axis] = self.size[axis] * (visibleItems / maxItems)
693 if self.isThreePartBitmap then
694 self.sliderSize[axis] = math.max(self.sliderSize[axis], self.startSize[axis] + self.endSize[axis], self.absSize[axis] * 0.025)
695 else
696 self.sliderSize[axis] = math.max(self.sliderSize[axis], self.absSize[axis] * 0.05)
697 end
698
699 self:updateSliderLimits()
700 end
701end

setSliderVisible

Description
Definition
setSliderVisible()
Code
250function SliderElement:setSliderVisible(visible)
251 self.isSliderVisible = visible
252end

setValue

Description
Set current slider value
Definition
setValue()
Code
340function SliderElement:setValue(newValue, doNotUpdateDataElement, immediateMode)
341 self.sliderValue = math.min(math.max(newValue, self.minValue), self.maxValue)
342 self:updateSliderPosition()
343
344 if self.useStepRounding then
345 local rem = (newValue-self.minValue) % self.stepSize
346
347 -- round to the next step
348 if rem >= self.stepSize - rem then
349 newValue = newValue + self.stepSize - rem
350 else
351 newValue = newValue - rem
352 end
353
354 newValue = math.min(math.max(newValue, self.minValue), self.maxValue)
355 end
356
357 -- round to 5 decimal places
358 local numDecimalPlaces = 5
359 local mult = 10^numDecimalPlaces
360 newValue = math.floor(newValue * mult + 0.5) / mult
361
362 if newValue ~= self.currentValue then
363 self.currentValue = newValue
364 if self.textElement ~= nil then
365 self.textElement:setText(self.currentValue)
366 end
367
368 self:callOnChanged()
369 for _, element in pairs(self.elements) do
370 if element.onSliderValueChanged ~= nil then
371 element:onSliderValueChanged(self, newValue, immediateMode)
372 end
373 end
374
375 if self.dataElement ~= nil and (doNotUpdateDataElement == nil or not doNotUpdateDataElement) then
376 self.dataElement:onSliderValueChanged(self, newValue, immediateMode)
377 end
378
379 -- Disable buttons if needed
380 self:updateSliderButtons()
381
382 return true
383 end
384
385 return false
386end

updateAbsolutePosition

Description
Definition
updateAbsolutePosition()
Code
442function SliderElement:updateAbsolutePosition()
443 SliderElement:superClass().updateAbsolutePosition(self)
444 self:updateSliderLimits()
445end

updateSliderButtons

Description
Update the disabled-ness of the slider buttons depending on current state
Definition
updateSliderButtons()
Code
390function SliderElement:updateSliderButtons()
391 if self.upButtonElement ~= nil then
392 self.upButtonElement:setDisabled(self.disabled or self.currentValue == self.maxValue)
393 end
394
395 if self.downButtonElement ~= nil then
396 self.downButtonElement:setDisabled(self.disabled or self.currentValue == self.minValue)
397 end
398end

updateSliderLimits

Description
Definition
updateSliderLimits()
Code
456function SliderElement:updateSliderLimits()
457 local axis = 1
458 if self.direction == SliderElement.DIRECTION_Y then
459 axis = 2
460 end
461
462 self.minAbsSliderPos = self.absPosition[axis]
463 self.maxAbsSliderPos = self.absPosition[axis] + self.size[axis] - self.sliderSize[axis]
464 self:updateSliderPosition()
465end

updateSliderPosition

Description
Definition
updateSliderPosition()
Code
555function SliderElement:updateSliderPosition()
556 local state = (self.sliderValue - self.minValue) / (self.maxValue - self.minValue)
557
558 if self.direction == SliderElement.DIRECTION_Y then
559 self.sliderPosition[1] = self.absPosition[1] + self.sliderOffset
560 self.sliderPosition[2] = MathUtil.lerp(self.minAbsSliderPos, self.maxAbsSliderPos, 1-state)
561 else
562 self.sliderPosition[1] = MathUtil.lerp(self.minAbsSliderPos, self.maxAbsSliderPos, state)
563 self.sliderPosition[2] = self.absPosition[2] + self.sliderOffset
564 end
565
566 self:updateSliderButtons()
567end