mirror of https://github.com/anoshenko/rui.git
114 lines
3.2 KiB
Go
114 lines
3.2 KiB
Go
package rui
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Constants for [ProgressBar] specific properties and events
|
|
const (
|
|
// ProgressBarMax is the constant for "progress-max" property tag.
|
|
//
|
|
// Used by `ProgressBar`.
|
|
// Maximum value, default is 1.
|
|
//
|
|
// Supported types: `float`, `int`, `string`.
|
|
//
|
|
// Internal type is `float`, other types converted to it during assignment.
|
|
ProgressBarMax PropertyName = "progress-max"
|
|
|
|
// ProgressBarValue is the constant for "progress-value" property tag.
|
|
//
|
|
// Used by `ProgressBar`.
|
|
// Current value, default is 0.
|
|
//
|
|
// Supported types: `float`, `int`, `string`.
|
|
//
|
|
// Internal type is `float`, other types converted to it during assignment.
|
|
ProgressBarValue PropertyName = "progress-value"
|
|
)
|
|
|
|
// ProgressBar represents a ProgressBar view
|
|
type ProgressBar interface {
|
|
View
|
|
}
|
|
|
|
type progressBarData struct {
|
|
viewData
|
|
}
|
|
|
|
// NewProgressBar create new ProgressBar object and return it
|
|
func NewProgressBar(session Session, params Params) ProgressBar {
|
|
view := new(progressBarData)
|
|
view.init(session)
|
|
setInitParams(view, params)
|
|
return view
|
|
}
|
|
|
|
func newProgressBar(session Session) View {
|
|
return new(progressBarData)
|
|
}
|
|
|
|
func (progress *progressBarData) init(session Session) {
|
|
progress.viewData.init(session)
|
|
progress.tag = "ProgressBar"
|
|
progress.normalize = normalizeProgressBarTag
|
|
progress.changed = progress.propertyChanged
|
|
}
|
|
|
|
func normalizeProgressBarTag(tag PropertyName) PropertyName {
|
|
tag = defaultNormalize(tag)
|
|
switch tag {
|
|
case Max, "progress-bar-max", "progressbar-max":
|
|
return ProgressBarMax
|
|
|
|
case Value, "progress-bar-value", "progressbar-value":
|
|
return ProgressBarValue
|
|
}
|
|
return tag
|
|
}
|
|
|
|
func (progress *progressBarData) propertyChanged(tag PropertyName) {
|
|
|
|
switch tag {
|
|
case ProgressBarMax:
|
|
progress.Session().updateProperty(progress.htmlID(), "max",
|
|
strconv.FormatFloat(GetProgressBarMax(progress), 'f', -1, 32))
|
|
|
|
case ProgressBarValue:
|
|
progress.Session().updateProperty(progress.htmlID(), "value",
|
|
strconv.FormatFloat(GetProgressBarValue(progress), 'f', -1, 32))
|
|
|
|
default:
|
|
progress.viewData.propertyChanged(tag)
|
|
}
|
|
}
|
|
|
|
func (progress *progressBarData) htmlTag() string {
|
|
return "progress"
|
|
}
|
|
|
|
func (progress *progressBarData) htmlProperties(self View, buffer *strings.Builder) {
|
|
progress.viewData.htmlProperties(self, buffer)
|
|
|
|
buffer.WriteString(` max="`)
|
|
buffer.WriteString(strconv.FormatFloat(GetProgressBarMax(progress), 'f', -1, 64))
|
|
buffer.WriteByte('"')
|
|
|
|
buffer.WriteString(` value="`)
|
|
buffer.WriteString(strconv.FormatFloat(GetProgressBarValue(progress), 'f', -1, 64))
|
|
buffer.WriteByte('"')
|
|
}
|
|
|
|
// GetProgressBarMax returns the max value of ProgressBar subview.
|
|
// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
|
|
func GetProgressBarMax(view View, subviewID ...string) float64 {
|
|
return floatStyledProperty(view, subviewID, ProgressBarMax, 1)
|
|
}
|
|
|
|
// GetProgressBarValue returns the value of ProgressBar subview.
|
|
// If the second argument (subviewID) is not specified or it is "" then a value from the first argument (view) is returned.
|
|
func GetProgressBarValue(view View, subviewID ...string) float64 {
|
|
return floatStyledProperty(view, subviewID, ProgressBarValue, 0)
|
|
}
|