spinbox.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. // Copyright 2018 visualfc. All rights reserved.
  2. package tk
  3. import "fmt"
  4. // spinbox
  5. type SpinBox struct {
  6. BaseWidget
  7. command *Command
  8. xscrollcommand *CommandEx
  9. }
  10. func NewSpinBox(parent Widget, attributes ...*WidgetAttr) *SpinBox {
  11. theme := checkInitUseTheme(attributes)
  12. iid := makeNamedWidgetId(parent, "atk_spinbox")
  13. info := CreateWidgetInfo(iid, WidgetTypeSpinBox, theme, attributes)
  14. if info == nil {
  15. return nil
  16. }
  17. w := &SpinBox{}
  18. w.id = iid
  19. w.info = info
  20. RegisterWidget(w)
  21. return w
  22. }
  23. func (w *SpinBox) Attach(id string) error {
  24. info, err := CheckWidgetInfo(id, WidgetTypeSpinBox)
  25. if err != nil {
  26. return err
  27. }
  28. w.id = id
  29. w.info = info
  30. RegisterWidget(w)
  31. return nil
  32. }
  33. func (w *SpinBox) SetTakeFocus(takefocus bool) error {
  34. return eval(fmt.Sprintf("%v configure -takefocus {%v}", w.id, boolToInt(takefocus)))
  35. }
  36. func (w *SpinBox) IsTakeFocus() bool {
  37. r, _ := evalAsBool(fmt.Sprintf("%v cget -takefocus", w.id))
  38. return r
  39. }
  40. func (w *SpinBox) SetFrom(from float64) error {
  41. return eval(fmt.Sprintf("%v configure -from {%v}", w.id, from))
  42. }
  43. func (w *SpinBox) From() float64 {
  44. r, _ := evalAsFloat64(fmt.Sprintf("%v cget -from", w.id))
  45. return r
  46. }
  47. func (w *SpinBox) SetTo(to float64) error {
  48. return eval(fmt.Sprintf("%v configure -to {%v}", w.id, to))
  49. }
  50. func (w *SpinBox) To() float64 {
  51. r, _ := evalAsFloat64(fmt.Sprintf("%v cget -to", w.id))
  52. return r
  53. }
  54. func (w *SpinBox) SetIncrement(increment float64) error {
  55. return eval(fmt.Sprintf("%v configure -increment {%v}", w.id, increment))
  56. }
  57. func (w *SpinBox) Increment() float64 {
  58. r, _ := evalAsFloat64(fmt.Sprintf("%v cget -increment", w.id))
  59. return r
  60. }
  61. func (w *SpinBox) SetWrap(wrap bool) error {
  62. return eval(fmt.Sprintf("%v configure -wrap {%v}", w.id, boolToInt(wrap)))
  63. }
  64. func (w *SpinBox) IsWrap() bool {
  65. r, _ := evalAsBool(fmt.Sprintf("%v cget -wrap", w.id))
  66. return r
  67. }
  68. func (w *SpinBox) SetTextValues(values []string) error {
  69. setObjTextList("atk_tmp_textlist", values)
  70. return eval(fmt.Sprintf("%v configure -values $atk_tmp_textlist", w.id))
  71. }
  72. func (w *SpinBox) TextValues() []string {
  73. r, _ := evalAsStringList(fmt.Sprintf("%v cget -values", w.id))
  74. return r
  75. }
  76. func (w *SpinBox) OnCommand(fn func()) error {
  77. if fn == nil {
  78. return ErrInvalid
  79. }
  80. if w.command == nil {
  81. w.command = &Command{}
  82. bindCommand(w.id, "command", w.command.Invoke)
  83. }
  84. w.command.Bind(fn)
  85. return nil
  86. }
  87. func (w *SpinBox) OnXScrollEx(fn func([]string) error) error {
  88. if fn == nil {
  89. return ErrInvalid
  90. }
  91. if w.xscrollcommand == nil {
  92. w.xscrollcommand = &CommandEx{}
  93. bindCommandEx(w.id, "xscrollcommand", w.xscrollcommand.Invoke)
  94. }
  95. w.xscrollcommand.Bind(fn)
  96. return nil
  97. }
  98. func (w *SpinBox) OnEditReturn(fn func()) error {
  99. if fn == nil {
  100. return ErrInvalid
  101. }
  102. w.BindEvent("<Return>", func(e *Event) {
  103. fn()
  104. })
  105. return nil
  106. }
  107. func (w *SpinBox) Entry() *Entry {
  108. return &Entry{w.BaseWidget, nil}
  109. }
  110. func (w *SpinBox) SetRange(from, to float64) error {
  111. return eval(fmt.Sprintf("%v configure -from {%v} -to {%v}", w.id, from, to))
  112. }
  113. func (w *SpinBox) Range() (float64, float64) {
  114. return w.From(), w.To()
  115. }
  116. func (w *SpinBox) Value() float64 {
  117. r, _ := evalAsFloat64(fmt.Sprintf("%v get", w.id))
  118. return r
  119. }
  120. func (w *SpinBox) SetValue(value float64) error {
  121. return eval(fmt.Sprintf("%v set %v", w.id, value))
  122. }
  123. func (w *SpinBox) SetTextValue(value string) error {
  124. return eval(fmt.Sprintf("%v set %v", w.id, value))
  125. }
  126. func (w *SpinBox) TextValue() string {
  127. r, _ := evalAsString(fmt.Sprintf("%v get", w.id))
  128. return r
  129. }
  130. func SpinBoxAttrTakeFocus(takefocus bool) *WidgetAttr {
  131. return &WidgetAttr{"takefocus", boolToInt(takefocus)}
  132. }
  133. func SpinBoxAttrFrom(from float64) *WidgetAttr {
  134. return &WidgetAttr{"from", from}
  135. }
  136. func SpinBoxAttrTo(to float64) *WidgetAttr {
  137. return &WidgetAttr{"to", to}
  138. }
  139. func SpinBoxAttrIncrement(increment float64) *WidgetAttr {
  140. return &WidgetAttr{"increment", increment}
  141. }
  142. func SpinBoxAttrWrap(wrap bool) *WidgetAttr {
  143. return &WidgetAttr{"wrap", boolToInt(wrap)}
  144. }
  145. func SpinBoxAttrTextValues(values []string) *WidgetAttr {
  146. return &WidgetAttr{"values", values}
  147. }