interfaces.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2012 The Walk Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. // +build windows
  5. package declarative
  6. import (
  7. "github.com/lxn/walk"
  8. )
  9. func tr(source string, context ...string) string {
  10. if translation := walk.TranslationFunc(); translation != nil {
  11. return translation(source, context...)
  12. }
  13. return source
  14. }
  15. type Property interface{}
  16. type bindData struct {
  17. expression string
  18. validator Validator
  19. }
  20. func Bind(expression string, validators ...Validator) Property {
  21. bd := bindData{expression: expression}
  22. switch len(validators) {
  23. case 0:
  24. // nop
  25. case 1:
  26. bd.validator = validators[0]
  27. default:
  28. bd.validator = dMultiValidator{validators}
  29. }
  30. return bd
  31. }
  32. type Layout interface {
  33. Create() (walk.Layout, error)
  34. }
  35. type Widget interface {
  36. Create(builder *Builder) error
  37. WidgetInfo() (name string, disabled, hidden bool, font *Font, toolTipText string, minSize, maxSize Size, stretchFactor, row, rowSpan, column, columnSpan int, alwaysConsumeSpace bool, contextMenuItems []MenuItem, OnKeyDown walk.KeyEventHandler, OnKeyPress walk.KeyEventHandler, OnKeyUp walk.KeyEventHandler, OnMouseDown walk.MouseEventHandler, OnMouseMove walk.MouseEventHandler, OnMouseUp walk.MouseEventHandler, OnSizeChanged walk.EventHandler)
  38. }
  39. type Container interface {
  40. ContainerInfo() (DataBinder, Layout, []Widget)
  41. }
  42. type MenuItem interface {
  43. createAction(builder *Builder, menu *walk.Menu) (*walk.Action, error)
  44. }
  45. type Validator interface {
  46. Create() (walk.Validator, error)
  47. }
  48. type ErrorPresenter interface {
  49. Create() (walk.ErrorPresenter, error)
  50. }
  51. type ErrorPresenterRef struct {
  52. ErrorPresenter *walk.ErrorPresenter
  53. }
  54. func (epr ErrorPresenterRef) Create() (walk.ErrorPresenter, error) {
  55. if epr.ErrorPresenter != nil {
  56. return *epr.ErrorPresenter, nil
  57. }
  58. return nil, nil
  59. }
  60. type topLevelWindowInfo struct {
  61. Name string
  62. Disabled bool
  63. Hidden bool
  64. Font Font
  65. ToolTipText string
  66. MinSize Size
  67. MaxSize Size
  68. ContextMenuItems []MenuItem
  69. OnKeyDown walk.KeyEventHandler
  70. OnKeyPress walk.KeyEventHandler
  71. OnKeyUp walk.KeyEventHandler
  72. OnMouseDown walk.MouseEventHandler
  73. OnMouseMove walk.MouseEventHandler
  74. OnMouseUp walk.MouseEventHandler
  75. OnSizeChanged walk.EventHandler
  76. DataBinder DataBinder
  77. Layout Layout
  78. Children []Widget
  79. }
  80. func (topLevelWindowInfo) Create(builder *Builder) error {
  81. return nil
  82. }
  83. func (i topLevelWindowInfo) WidgetInfo() (name string, disabled, hidden bool, font *Font, ToolTipText string, minSize, maxSize Size, stretchFactor, row, rowSpan, column, columnSpan int, alwaysConsumeSpace bool, contextMenuItems []MenuItem, OnKeyDown walk.KeyEventHandler, OnKeyPress walk.KeyEventHandler, OnKeyUp walk.KeyEventHandler, OnMouseDown walk.MouseEventHandler, OnMouseMove walk.MouseEventHandler, OnMouseUp walk.MouseEventHandler, OnSizeChanged walk.EventHandler) {
  84. return i.Name, i.Disabled, i.Hidden, &i.Font, i.ToolTipText, i.MinSize, i.MaxSize, 0, 0, 0, 0, 0, false, i.ContextMenuItems, i.OnKeyDown, i.OnKeyPress, i.OnKeyUp, i.OnMouseDown, i.OnMouseMove, i.OnMouseUp, i.OnSizeChanged
  85. }
  86. func (i topLevelWindowInfo) ContainerInfo() (DataBinder, Layout, []Widget) {
  87. return i.DataBinder, i.Layout, i.Children
  88. }