place.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // Copyright 2018 visualfc. All rights reserved.
  2. package tk
  3. import (
  4. "fmt"
  5. "strings"
  6. )
  7. func PlaceAttrAnchor(anchor Anchor) *LayoutAttr {
  8. v := anchor.String()
  9. if v == "" {
  10. return nil
  11. }
  12. return &LayoutAttr{"anchor", v}
  13. }
  14. func PlaceAttrBorderMode(mode BorderMode) *LayoutAttr {
  15. v := mode.String()
  16. if v == "" {
  17. return nil
  18. }
  19. return &LayoutAttr{"bordermode", v}
  20. }
  21. func PlaceAttrWidth(size int) *LayoutAttr {
  22. return &LayoutAttr{"width", size}
  23. }
  24. func PlaceAttrHeight(size int) *LayoutAttr {
  25. return &LayoutAttr{"height", size}
  26. }
  27. func PlaceAttrRelWidth(size float64) *LayoutAttr {
  28. return &LayoutAttr{"relwidth", size}
  29. }
  30. func PlaceAttrRelHeight(size float64) *LayoutAttr {
  31. return &LayoutAttr{"relheight", size}
  32. }
  33. func PlaceAttrX(location int) *LayoutAttr {
  34. return &LayoutAttr{"x", location}
  35. }
  36. func PlaceAttrY(location int) *LayoutAttr {
  37. return &LayoutAttr{"y", location}
  38. }
  39. func PlaceAttrRelX(location float64) *LayoutAttr {
  40. return &LayoutAttr{"relx", location}
  41. }
  42. func PlaceAttrRelY(location float64) *LayoutAttr {
  43. return &LayoutAttr{"rely", location}
  44. }
  45. func PlaceAttrInMaster(w Widget) *LayoutAttr {
  46. if !IsValidWidget(w) {
  47. return nil
  48. }
  49. return &LayoutAttr{"in", w.Id()}
  50. }
  51. var (
  52. placeAttrKeys = []string{
  53. "anchor",
  54. "bordermode",
  55. "x", "y",
  56. "relx", "rely",
  57. "width", "height",
  58. "relwidth", "relheight",
  59. "in",
  60. }
  61. )
  62. func Place(widget Widget, attributes ...*LayoutAttr) error {
  63. if !IsValidWidget(widget) {
  64. return ErrInvalid
  65. }
  66. var attrList []string
  67. for _, attr := range attributes {
  68. if attr == nil || !isValidKey(attr.key, placeAttrKeys) {
  69. continue
  70. }
  71. attrList = append(attrList, fmt.Sprintf("-%v {%v}", attr.key, attr.value))
  72. }
  73. script := fmt.Sprintf("place %v", widget.Id())
  74. if len(attrList) > 0 {
  75. script += " " + strings.Join(attrList, " ")
  76. }
  77. return eval(script)
  78. }
  79. func PlaceRemove(widget Widget) error {
  80. if !IsValidWidget(widget) {
  81. return ErrInvalid
  82. }
  83. widget = checkLayoutWidget(widget)
  84. return eval("place forget " + widget.Id())
  85. }