< Summary

Class:UIPageSelector
Assembly:AvatarEditorHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/UIPageSelector.cs
Covered lines:0
Uncovered lines:61
Coverable lines:61
Total lines:149
Line coverage:0% (0 of 61)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:10
Method coverage:0% (0 of 10)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UIPageSelector()0%2100%
Awake()0%2100%
OnNextButtonDown()0%2100%
OnPreviousButtonDown()0%6200%
SelectPage(...)0%2100%
Setup(...)0%30500%
EnsureButtons()0%42600%
ShouldShowButton(...)0%20400%
UpdateButtonsStatus(...)0%12300%
UpdateToggleStatus()0%12300%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/AvatarEditorHUD/Scripts/UIPageSelector.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.UI;
 5
 6public class UIPageSelector : MonoBehaviour
 7{
 8    public event Action<int> OnValueChanged;
 9
 10    [SerializeField] private Button previousButton;
 11    [SerializeField] private Button nextButton;
 12    [SerializeField] private UIPageButton pageButtonPrefab;
 13    [SerializeField] private RectTransform pageButtonsParent;
 14    [SerializeField] private RectTransform rectTransform;
 15    [SerializeField] private bool limitedPages = false;
 16    [SerializeField] private int maxVisiblePages;
 017    private List<UIPageButton> buttons = new List<UIPageButton>();
 18    private int totalPages;
 19    private int currentPage;
 20
 21    private void Awake()
 22    {
 023        previousButton.onClick.AddListener(OnPreviousButtonDown);
 024        nextButton.onClick.AddListener(OnNextButtonDown);
 25
 026        gameObject.SetActive(false);
 027    }
 28
 29    private void OnNextButtonDown()
 30    {
 031        currentPage = (currentPage + 1 ) % totalPages;
 032        UpdateButtonsStatus();
 033    }
 34
 35    private void OnPreviousButtonDown()
 36    {
 037        if (currentPage - 1 < 0)
 38        {
 039            currentPage = totalPages - 1;
 40        }
 41        else
 42        {
 043            currentPage = (currentPage - 1 ) % totalPages;
 44        }
 45
 046        UpdateButtonsStatus();
 047    }
 48
 49    public void SelectPage(int pageNumber)
 50    {
 051        currentPage = pageNumber;
 052        UpdateButtonsStatus();
 053    }
 54
 55    public void Setup(int maxTotalPages, bool forceRebuild = false)
 56    {
 057        if (maxTotalPages == this.totalPages && !forceRebuild)
 58        {
 059            return;
 60        }
 61
 062        this.totalPages = maxTotalPages;
 63
 064        currentPage = Mathf.Clamp(currentPage, 0, maxTotalPages-1);
 65
 066        if (maxTotalPages <= 1)
 67        {
 068            gameObject.SetActive(false);
 069            OnValueChanged?.Invoke(0);
 070            return;
 71        }
 72
 073        gameObject.SetActive(true);
 74
 075        EnsureButtons();
 076        UpdateButtonsStatus(false);
 77
 078        LayoutRebuilder.ForceRebuildLayoutImmediate(pageButtonsParent);
 079        LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
 080    }
 81
 82    private void EnsureButtons()
 83    {
 084        if (buttons.Count != totalPages)
 85        {
 086            var diff = totalPages - buttons.Count;
 87
 088            if (diff > 0)
 89            {
 090                for (int i = 0; i < diff; i++)
 91                {
 092                    var instance = Instantiate(pageButtonPrefab, pageButtonsParent);
 093                    buttons.Add(instance);
 94                }
 95            }
 96        }
 97
 098        for (int i = 0; i < buttons.Count; i++)
 99        {
 0100            UIPageButton uiPageButton = buttons[i];
 101
 0102            if (i >= totalPages)
 103            {
 0104                uiPageButton.gameObject.SetActive(false);
 105
 0106                continue;
 107            }
 108
 0109            uiPageButton.Initialize(i);
 0110            uiPageButton.gameObject.SetActive(true);
 0111            uiPageButton.OnPageClicked -= SelectPage;
 0112            uiPageButton.OnPageClicked += SelectPage;
 113        }
 0114    }
 115
 116    private bool ShouldShowButton(int buttonIndex)
 117    {
 0118        if (buttonIndex >= totalPages)
 0119            return false;
 120
 0121        if (currentPage+1 <= maxVisiblePages / 2)
 122        {
 0123            return buttonIndex < maxVisiblePages;
 124        }
 125        else
 126        {
 0127            return buttonIndex < currentPage+1 + (maxVisiblePages / 2) && buttonIndex+1 > currentPage - (maxVisiblePages
 128        }
 129    }
 130
 131    private void UpdateButtonsStatus(bool notifyEvent = true)
 132    {
 0133        UpdateToggleStatus();
 0134        if (notifyEvent)
 0135            OnValueChanged?.Invoke(currentPage);
 0136    }
 137
 138    private void UpdateToggleStatus()
 139    {
 0140        for (int i = 0; i < buttons.Count; i++)
 141        {
 0142            var currentButton = buttons[i];
 0143            if (limitedPages)
 0144                currentButton.gameObject.SetActive(ShouldShowButton(i));
 0145            currentButton.Toggle(i == currentPage);
 146        }
 0147    }
 148
 149}