view_link.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // package view_link -- отображение связи между объектами
  2. package view_link
  3. import (
  4. svg "github.com/ajstarks/svgo"
  5. "gitp78su.ipnodns.ru/svi/kern/v3"
  6. "gitp78su.ipnodns.ru/svi/goarch/lev0/alias"
  7. "gitp78su.ipnodns.ru/svi/goarch/lev0/types"
  8. )
  9. // ViewLink -- отображение связи между объектами
  10. type ViewLink struct {
  11. types.IElemLink
  12. }
  13. var (
  14. hassert = kern.GetFnHassert()
  15. )
  16. // NewViewLink -- возвращает новое отображение связи
  17. func NewViewLink(useLink types.IElemLink) *ViewLink {
  18. hassert(useLink != nil, "NewViewLink: useLink is nil")
  19. sf := &ViewLink{
  20. IElemLink: useLink,
  21. }
  22. return sf
  23. }
  24. // Draw -- рисует связь между объектами
  25. func (sf *ViewLink) Draw(canvas *svg.SVG, mapDrawer map[alias.Id]types.IDrawer) {
  26. x, y := sf.Label().Coord().Int()
  27. _x, _y = sf.CoordEnd().Coord()
  28. x1 := int(_x)
  29. y1 := int(_y)
  30. _x, _y = sf.UseLink_.ElemBase_.Label_.Offset_.Offset()
  31. offX := int(_x)
  32. offY := int(_y)
  33. // Линия
  34. canvas.Line(x, y, x1, y1, "stroke:black;stroke-width:1")
  35. strLabel := string(sf.UseLink_.ElemBase_.Label_.Val_)
  36. if strLabel != "" {
  37. canvas.Text(x+offX, y+offY, strLabel, "font-size: 12px; font-family: Courier; fill: black")
  38. }
  39. strTypeLink := string(sf.UseLink_.TypeLink_)
  40. if strTypeLink != "" {
  41. canvas.Text(x+offX, y+offY+12, "<<"+strTypeLink+">>", "font-size: 12px; font-family: Courier; fill: black")
  42. }
  43. if msgErr := sf.UseLink_.ElemBase_.Check(mapDrawer); msgErr != "" { // Проверка на правильность
  44. canvas.Group("Ошибка")
  45. canvas.Title(msgErr)
  46. canvas.Image(x-20+offX, y-20+offY, 16, 16, "/static/img/warning.png")
  47. canvas.Gend() // Group end
  48. }
  49. }
  50. // SrcId -- возвращает источник связи
  51. func (sf *ViewLink) SrcId() alias.Id {
  52. return sf.Src_
  53. }
  54. // DstId -- возвращает получателя связи
  55. func (sf *ViewLink) DstId() alias.Id {
  56. return sf.Dst_
  57. }