selectUpdate updates selection to include this node, using selectmode from mouse event (ExtendContinuous, ExtendOne). Returns true if this node selected.
(mode events.SelectModes)
| 741 | // using selectmode from mouse event (ExtendContinuous, ExtendOne). |
| 742 | // Returns true if this node selected. |
| 743 | func (tr *Tree) selectUpdate(mode events.SelectModes) bool { |
| 744 | if mode == events.NoSelect { |
| 745 | return false |
| 746 | } |
| 747 | sel := false |
| 748 | switch mode { |
| 749 | case events.SelectOne: |
| 750 | if tr.StateIs(states.Selected) { |
| 751 | sl := tr.GetSelectedNodes() |
| 752 | if len(sl) > 1 { |
| 753 | tr.UnselectAll() |
| 754 | tr.Select() |
| 755 | tr.SetFocus() |
| 756 | sel = true |
| 757 | } |
| 758 | } else { |
| 759 | tr.UnselectAll() |
| 760 | tr.Select() |
| 761 | tr.SetFocus() |
| 762 | sel = true |
| 763 | } |
| 764 | case events.ExtendContinuous: |
| 765 | sl := tr.GetSelectedNodes() |
| 766 | if len(sl) == 0 { |
| 767 | tr.Select() |
| 768 | tr.SetFocus() |
| 769 | sel = true |
| 770 | } else { |
| 771 | minIndex := -1 |
| 772 | maxIndex := 0 |
| 773 | sel = true |
| 774 | for _, v := range sl { |
| 775 | vn := v.AsCoreTree() |
| 776 | if minIndex < 0 { |
| 777 | minIndex = vn.viewIndex |
| 778 | } else { |
| 779 | minIndex = min(minIndex, vn.viewIndex) |
| 780 | } |
| 781 | maxIndex = max(maxIndex, vn.viewIndex) |
| 782 | } |
| 783 | cidx := tr.viewIndex |
| 784 | nn := tr |
| 785 | tr.Select() |
| 786 | if tr.viewIndex < minIndex { |
| 787 | for cidx < minIndex { |
| 788 | nn = nn.moveDown(events.SelectQuiet) // just select |
| 789 | cidx = nn.viewIndex |
| 790 | } |
| 791 | } else if tr.viewIndex > maxIndex { |
| 792 | for cidx > maxIndex { |
| 793 | nn = nn.moveUp(events.SelectQuiet) // just select |
| 794 | cidx = nn.viewIndex |
| 795 | } |
| 796 | } |
| 797 | } |
| 798 | case events.ExtendOne: |
| 799 | if tr.StateIs(states.Selected) { |
| 800 | tr.UnselectEvent() |
no test coverage detected