newControlsTab creates all Controls widgets and returns the tab.
()
| 611 | |
| 612 | // newControlsTab creates all Controls widgets and returns the tab. |
| 613 | func newControlsTab() (*ctrlWidgets, *tab.Tab, error) { |
| 614 | state := &ctrlState{ |
| 615 | warp: true, |
| 616 | shields: 78, |
| 617 | mode: "SCAN", |
| 618 | alarm: "400", |
| 619 | display: "READY", |
| 620 | } |
| 621 | |
| 622 | // Status text (updated by every control) |
| 623 | statusW, err := text.New(text.WrapAtWords()) |
| 624 | if err != nil { |
| 625 | return nil, nil, err |
| 626 | } |
| 627 | |
| 628 | // Segment display |
| 629 | display, err := segmentdisplay.New( |
| 630 | segmentdisplay.AlignHorizontal(align.HorizontalCenter), |
| 631 | segmentdisplay.AlignVertical(align.VerticalMiddle), |
| 632 | segmentdisplay.MaximizeSegmentHeight(), |
| 633 | ) |
| 634 | if err != nil { |
| 635 | return nil, nil, err |
| 636 | } |
| 637 | |
| 638 | w := &ctrlWidgets{status: statusW, segDisplay: display, state: state} |
| 639 | |
| 640 | writeStatus := func() error { return renderCtrlStatus(statusW, state) } |
| 641 | writeDisplay := func() error { return renderCtrlDisplay(display, state) } |
| 642 | |
| 643 | // Checkbox |
| 644 | warpCheck, err := checkbox.New("Enable Warp Assist", |
| 645 | checkbox.Checked(state.warp), |
| 646 | checkbox.UseIndicatorSet(checkbox.IndicatorSets.Rounded), |
| 647 | checkbox.OnChange(func(checked bool) error { |
| 648 | state.mu.Lock() |
| 649 | state.warp = checked |
| 650 | state.mu.Unlock() |
| 651 | _ = writeDisplay() |
| 652 | return writeStatus() |
| 653 | }), |
| 654 | ) |
| 655 | if err != nil { |
| 656 | return nil, nil, err |
| 657 | } |
| 658 | |
| 659 | // Slider – SegmentedStyle blocks |
| 660 | shieldsSlider, err := slider.New( |
| 661 | slider.Min(0), |
| 662 | slider.Max(100), |
| 663 | slider.Value(state.shields), |
| 664 | slider.Width(28), |
| 665 | slider.SegmentedStyle(), |
| 666 | slider.FillCellOpts(cell.FgColor(cell.ColorNumber(75))), |
| 667 | slider.OnChange(func(v int) error { |
| 668 | state.mu.Lock() |
| 669 | state.shields = v |
| 670 | state.mu.Unlock() |
no test coverage detected