Ejemplo n.º 1
0
        private void EditCurrentSelection()
        {
            if (listBox.SelectedItem == null)
            {
                return;
            }
            if (m_data.ReadOnly)
            {
                return;
            }
            EditableListItem <string> currentSelection = (EditableListItem <string>)listBox.SelectedItem;
            int index  = listBox.SelectedIndex;
            var result = PopupEditors.EditString(m_helper.ControlDefinition.GetString("editprompt"), currentSelection.Value);

            if (result.Cancelled)
            {
                return;
            }
            if (result.Result == currentSelection.Value)
            {
                return;
            }
            if (!ValidateInput(result.Result))
            {
                return;
            }

            PrepareForEditing();
            m_list.Update(index, result.Result);
        }
Ejemplo n.º 2
0
    private void SetDraggingItem(EditableListItem item)
    {
        if (draggingItem == item)
        {
            return;
        }

        if (draggingItem != null)
        {
            draggingItem.SetDraggingFeedback(false);
            foreach (Transform component in ui.dragItemHint)
            {
                Object.Destroy(component.gameObject);
            }
        }

        draggingItem = item;
        if (draggingItem != null)
        {
            ui.dragItemHint.gameObject.SetActive(true);
            int index = listItems.IndexOf(draggingItem);
            draggingItem.SetDraggingFeedback(true);
            RectTransform content = Object.Instantiate(draggingItem.GetContentContainer(), ui.dragItemHint);
            Object.Destroy(content.GetComponent <EditableListItem>());
        }
        else
        {
            ui.dragItemHint.gameObject.SetActive(false);
            ui.dragTargetHint.gameObject.SetActive(false);
        }
    }
Ejemplo n.º 3
0
    public void Refresh()
    {
        SetDraggingItem(null);

        for (int i = 0; i < Mathf.Min(adapter.GetCount(), listItems.Count); i++)
        {
            adapter.Populate(i, contents[listItems[i]]);
        }

        for (int i = listItems.Count; i < adapter.GetCount(); i++)
        {
            EditableListItem newItem = CreateListItem();

            C content = adapter.Inflate(newItem.GetContentContainer());
            contents[newItem] = content;
            adapter.Populate(i, content);

            newItem.transform.SetSiblingIndex(i);
            listItems.Insert(i, newItem);
        }

        for (int i = listItems.Count - 1; i >= 0 && i >= adapter.GetCount(); i--)
        {
            EditableListItem item = listItems[i];
            listItems.RemoveAt(i);
            contents.Remove(item);
            item.RequestDestroy();
        }
    }
Ejemplo n.º 4
0
    public void Update()
    {
        if (draggingItem != null)
        {
            int     draggingItemIndex = listItems.IndexOf(draggingItem);
            Vector2 screenPosition    = RectTransformUtility.WorldToScreenPoint(null, Input.mousePosition);

            Vector2 dragItemPosition;
            RectTransformUtility.ScreenPointToLocalPointInRectangle(
                ui.container, screenPosition, null, out dragItemPosition);
            ui.dragItemHint.anchoredPosition = dragItemPosition;

            ui.dragTargetHint.gameObject.SetActive(false);
            Vector2 rectPosition;

            int selectedIndex = -1;
            for (int i = 0; i < listItems.Count; i++)
            {
                EditableListItem item = listItems[i];

                RectTransform container = item.GetContainer();
                RectTransformUtility.ScreenPointToLocalPointInRectangle(
                    container, screenPosition, null, out rectPosition);

                // Current mouse target is above this item?
                if (rectPosition.y >= 0)
                {
                    ui.dragTargetHint.gameObject.SetActive(true);
                    ui.dragTargetHint.anchoredPosition = new Vector2(
                        ui.dragTargetHint.anchoredPosition.x,
                        container.anchoredPosition.y + ui.listContainer.spacing / 2.0f + container.rect.height / 2.0f);
                    selectedIndex = (i <= draggingItemIndex ? i : i - 1);
                    break;
                }

                // Current mouse target is below this item?
                else if (rectPosition.y < 0 &&
                         (rectPosition.y > -container.rect.height / 2.0f || i == listItems.Count - 1))
                {
                    ui.dragTargetHint.gameObject.SetActive(true);
                    ui.dragTargetHint.anchoredPosition = new Vector2(
                        ui.dragTargetHint.anchoredPosition.x,
                        container.anchoredPosition.y - ui.listContainer.spacing / 2.0f - container.rect.height / 2.0f);
                    selectedIndex = (i < draggingItemIndex ? i + 1 : i);
                    break;
                }
            }

            if (Input.GetMouseButtonUp(0))
            {
                EditableListItem item = draggingItem;
                SetDraggingItem(null);
                if (selectedIndex == -1 || draggingItemIndex == selectedIndex)
                {
                    return;
                }
                onRequestMoveItem?.Invoke(draggingItemIndex, selectedIndex);
            }
        }
    }
Ejemplo n.º 5
0
    private EditableListItem CreateListItem()
    {
        EditableListItem newItem = Object.Instantiate(ui.itemPrefab, ui.listContainer.transform);

        newItem.onRequestDelete += (item) =>
        {
            onRequestDeleteItem?.Invoke(listItems.IndexOf(item));
        };
        newItem.onDrag += (item) =>
        {
            if (draggingItem == null && listItems.Count > 1)
            {
                SetDraggingItem(item);
            }
        };
        newItem.gameObject.SetActive(true);
        return(newItem);
    }