< Summary

Class:UIComponents.Scripts.Components.PageSelectorComponentView
Assembly:UIComponents
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/UIComponents/Scripts/Components/PageSelector/PageSelectorComponentView.cs
Covered lines:48
Uncovered lines:17
Coverable lines:65
Total lines:151
Line coverage:73.8% (48 of 65)
Covered branches:0
Total branches:0
Covered methods:12
Total methods:16
Method coverage:75% (12 of 16)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PageSelectorComponentView()0%110100%
Awake()0%110100%
RefreshControl()0%2100%
Setup(...)0%5.585071.43%
SelectPage(...)0%110100%
OnPreviousButtonDown()0%6200%
OnNextButtonDown()0%2100%
EnsureButtons()0%6.046090%
ShouldShowButton(...)0%4.134080%
UpdateButtonsStatus(...)0%3.143075%
UpdateToggleStatus()0%330100%
OnPageClicked(...)0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/UIComponents/Scripts/Components/PageSelector/PageSelectorComponentView.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6namespace UIComponents.Scripts.Components
 7{
 8    public class PageSelectorComponentView : BaseComponentView
 9    {
 10        public event Action<int> OnValueChanged;
 11
 12        [SerializeField] private Button previousButton;
 13        [SerializeField] private Button nextButton;
 14        [SerializeField] private PageSelectorButtonComponentView pageSelectorButtonPrefab;
 15        [SerializeField] private RectTransform pageButtonsParent;
 16        [SerializeField] private RectTransform rectTransform;
 17        [SerializeField] private bool limitedPages;
 18        [SerializeField] private int maxVisiblePages;
 19
 3720        private readonly List<PageSelectorButtonComponentView> buttons = new ();
 21
 12022        public int TotalPages { get; private set; }
 19923        public int CurrentPage { get; private set; }
 24
 25        public override void Awake()
 26        {
 3527            base.Awake();
 28
 3529            previousButton.onClick.AddListener(OnPreviousButtonDown);
 3530            nextButton.onClick.AddListener(OnNextButtonDown);
 3531            gameObject.SetActive(false);
 3532        }
 33
 034        public override void RefreshControl() { }
 35
 36        public void Setup(int maxTotalPages, bool forceRebuild = false)
 37        {
 338            if (maxTotalPages == this.TotalPages && !forceRebuild) { return; }
 39
 340            this.TotalPages = maxTotalPages;
 41
 342            CurrentPage = Mathf.Clamp(CurrentPage, 0, maxTotalPages - 1);
 43
 344            if (maxTotalPages <= 1)
 45            {
 046                gameObject.SetActive(false);
 047                OnValueChanged?.Invoke(0);
 048                return;
 49            }
 50
 351            gameObject.SetActive(true);
 52
 353            EnsureButtons();
 354            UpdateButtonsStatus(false);
 55
 356            LayoutRebuilder.ForceRebuildLayoutImmediate(pageButtonsParent);
 357            LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
 358        }
 59
 60        public void SelectPage(int pageNumber, bool notifyEvent = true)
 61        {
 362            CurrentPage = pageNumber;
 363            UpdateButtonsStatus(notifyEvent);
 364        }
 65
 66        private void OnPreviousButtonDown()
 67        {
 068            if (CurrentPage - 1 < 0)
 069                CurrentPage = TotalPages - 1;
 70            else
 071                CurrentPage = (CurrentPage - 1) % TotalPages;
 72
 073            UpdateButtonsStatus();
 074        }
 75
 76        private void OnNextButtonDown()
 77        {
 078            CurrentPage = (CurrentPage + 1) % TotalPages;
 079            UpdateButtonsStatus();
 080        }
 81
 82        private void EnsureButtons()
 83        {
 384            if (buttons.Count != TotalPages)
 85            {
 386                int diff = TotalPages - buttons.Count;
 87
 388                if (diff > 0)
 89                {
 7690                    for (var i = 0; i < diff; i++)
 91                    {
 3592                        var instance = Instantiate(pageSelectorButtonPrefab, pageButtonsParent);
 3593                        buttons.Add(instance);
 94                    }
 95                }
 96            }
 97
 7698            for (var i = 0; i < buttons.Count; i++)
 99            {
 35100                PageSelectorButtonComponentView pageSelectorButtonComponentView = buttons[i];
 101
 35102                if (i >= TotalPages)
 103                {
 0104                    pageSelectorButtonComponentView.gameObject.SetActive(false);
 105
 0106                    continue;
 107                }
 108
 35109                pageSelectorButtonComponentView.Initialize(i);
 35110                pageSelectorButtonComponentView.gameObject.SetActive(true);
 35111                pageSelectorButtonComponentView.OnPageClicked -= OnPageClicked;
 35112                pageSelectorButtonComponentView.OnPageClicked += OnPageClicked;
 113            }
 3114        }
 115
 116        private bool ShouldShowButton(int buttonIndex)
 117        {
 70118            if (buttonIndex >= TotalPages)
 0119                return false;
 120
 70121            if (CurrentPage + 1 <= maxVisiblePages / 2)
 39122                return buttonIndex < maxVisiblePages;
 123            else
 31124                return buttonIndex < CurrentPage + 1 + (maxVisiblePages / 2) && buttonIndex + 1 > CurrentPage - (maxVisi
 125        }
 126
 127        private void UpdateButtonsStatus(bool notifyEvent = true)
 128        {
 6129            UpdateToggleStatus();
 130
 6131            if (notifyEvent)
 0132                OnValueChanged?.Invoke(CurrentPage);
 6133        }
 134
 135        private void UpdateToggleStatus()
 136        {
 152137            for (var i = 0; i < buttons.Count; i++)
 138            {
 70139                var currentButton = buttons[i];
 140
 70141                if (limitedPages)
 70142                    currentButton.gameObject.SetActive(ShouldShowButton(i));
 143
 70144                currentButton.Toggle(i == CurrentPage);
 145            }
 6146        }
 147
 148        private void OnPageClicked(int pageNumber) =>
 0149            SelectPage(pageNumber);
 150    }
 151}