//derived classes provide wrappers to this method ( ResetPickerAtValue / date / etc...
    protected void ResetPickerAtIndex(int index)
    {
        _selectedIndex = index;

        int prevNbOfElements = _nbOfVirtualElements;

        UpdateVirtualElementsCount();

        if (prevNbOfElements == 0)
        {
            if (_nbOfVirtualElements > 0)
            {
                EnableWidgets(true);
            }
        }
        else if (_nbOfVirtualElements == 0)
        {
            EnableWidgets(false);
            return;
        }

        UpdateCurrentValue();

        cycler.ResetCycler();

        ResetWidgetsContent();
    }
    protected void ResetAtIndex(int itemCount, int mustSeeElement)
    {
        SetItemsCount(itemCount);

        _leftIndex = mustSeeElement;
        if (_widgets.Length >= _itemCount)
        {
            _leftIndex = 0;
        }
        else if ((_leftIndex + _widgets.Length) > (_itemCount))
        {
            _leftIndex = _itemCount - _widgets.Length;
        }

        //Debug.Log("### ResetAtIndex > _leftIndex: " + _leftIndex + " mustSee: " + mustSeeElement);

        scrollView.draggablePanel.ResetPosition();
        scrollView.ResetCycler(itemCount);
        UpdateWidgets();

        float   lenght      = scrollView.spacing;
        int     layout      = mustSeeElement - _leftIndex;
        Vector3 newPosition = Vector3.zero;

        if (scrollView.draggablePanel.movement == UIScrollView.Movement.Horizontal)
        {
            float x     = scrollView.draggablePanel.panel.baseClipRegion.x;
            float z     = scrollView.draggablePanel.panel.baseClipRegion.z;
            float items = z / lenght;

            //Debug.Log("### ResetAtIndex > x: " + x + " z: " + z + " items: " + items + " lenght: " + lenght + " layout: " + layout);

            if (layout >= (int)items)
            {
                newPosition = new Vector3(-lenght * (Mathf.Clamp((layout - items), 0, float.MaxValue) + 1) - x, 0, 0);
            }
        }
        else if (scrollView.draggablePanel.movement == UIScrollView.Movement.Vertical)
        {
            float w     = scrollView.draggablePanel.panel.baseClipRegion.w;
            float y     = scrollView.draggablePanel.panel.baseClipRegion.y;
            float items = w / lenght;

            if (layout >= (int)items)
            {
                newPosition = new Vector3(0, lenght * (Mathf.Clamp((layout - items), 0, float.MaxValue) + 1) - y + lenght / 2, 0);
            }
        }
        scrollView.draggablePanel.MoveRelative(newPosition);
    }