示例#1
0
 private int EntryIndexForGO(ExplorerPanelItem item)
 {
     for (int i = 0; i < entries.Count; i++)
     {
         if (entries[i].explorerPanelItem == item)
         {
             return(i);
         }
     }
     Assert.IsTrue(true, "Should not be able to get here");
     return(-1);
 }
示例#2
0
    private void FillItems()
    {
        for (int i = 0; i < entries.Count; i++)
        {
            ExplorerPanelItem explorerPanelItem = null;
            if (inactiveExplorerPanelItems.Count > 0)
            {
                explorerPanelItem = inactiveExplorerPanelItems.Dequeue();
                explorerPanelItem.gameObject.SetActive(true);
            }

            if (explorerPanelItem == null)
            {
                explorerPanelItem = Instantiate(filenameIconItemPrefab).GetComponent <ExplorerPanelItem>();

                var it = explorerPanelItem;

                it.button.onClick.AddListener(() => OnItemClick(explorerPanelItem));
            }

            bool isFile  = entries[i].entryType == EntryType.File;
            bool isDrive = entries[i].entryType == EntryType.Drive;

            explorerPanelItem.transform.SetParent(directoryContent.content, false);
            explorerPanelItem.transform.SetAsLastSibling();

            var item = explorerPanelItem.GetComponent <ExplorerPanelItem>();
            item.background.color = normalColor;
            item.filename.text    = entries[i].name;
            item.date.text        = isDrive ? "" : entries[i].date.ToString("dd/MM/yyyy");
            item.fileType.text    = isFile ? PrettyPrintFileType(entries[i].extension) : "";
            item.fileSize.text    = isFile ? PrettyPrintFileSize(entries[i].size) : "";
            //TODO(Simon): Get resolution
            item.fileResolution.text = "";
            item.icon.texture        = entries[i].sprite.texture;
            item.explorerPanel       = this;
            item.SetHeight(zoom);

            var texture = item.icon.texture;
            var newSize = MathHelper.ScaleRatio(new Vector2(texture.width, texture.height), item.iconHolder.rect.size);

            item.icon.rectTransform.sizeDelta = newSize;

            entries[i].explorerPanelItem = explorerPanelItem;
        }

        imageLoadsInProgress = StartCoroutine(LoadFileThumbnail(entries));

        Canvas.ForceUpdateCanvases();
        //NOTE(Simon): scroll to top
        directoryContent.verticalNormalizedPosition = 1;
    }
示例#3
0
    public void OnItemClick(ExplorerPanelItem item)
    {
        int index = EntryIndexForGO(item);
        var entry = entries[index];

        bool controlHeld = Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl);
        bool shiftHeld   = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.LeftShift);
        bool doubleclick = lastClickIndex == index && (Time.unscaledTime - lastClickTime) < 0.5f;

        bool resetDoubleClick = false;

        if (doubleclick)
        {
            if (entry.entryType == EntryType.File && selectionMode == SelectionMode.File)
            {
                Answer();
            }
            else if (entry.entryType == EntryType.Directory)
            {
                OnDirectoryClick(entry.fullPath);
            }
            else if (entry.entryType == EntryType.Drive)
            {
                OnDriveClick(entry.fullPath);
            }

            resetDoubleClick = true;
        }
        else if (multiSelect && controlHeld)
        {
            if (selectedFiles.Contains(entry))
            {
                entry.explorerPanelItem.GetComponent <Image>().color = normalColor;
                selectedFiles.Remove(entry);
            }
            else
            {
                entry.explorerPanelItem.GetComponent <Image>().color = selectedColor;
                selectedFiles.Add(entry);
            }
        }
        else if (multiSelect && shiftHeld)
        {
            int minIndex = Mathf.Min(lastClickIndex, index);
            int maxIndex = Mathf.Max(lastClickIndex, index);
            int count    = maxIndex - minIndex + 1;
            foreach (var file in selectedFiles)
            {
                file.explorerPanelItem.GetComponent <Image>().color = normalColor;
            }
            selectedFiles.Clear();
            selectedFiles.AddRange(entries.GetRange(minIndex, count));
            foreach (var file in selectedFiles)
            {
                file.explorerPanelItem.GetComponent <Image>().color = selectedColor;
            }
        }
        //NOTE(Simon): Plain single click
        else
        {
            foreach (var e in entries)
            {
                e.explorerPanelItem.GetComponent <Image>().color = normalColor;
            }

            selectedFiles.Clear();

            entry.explorerPanelItem.GetComponent <Image>().color = selectedColor;

            if (entry.entryType == EntryType.File && selectionMode == SelectionMode.File ||
                entry.entryType == EntryType.Directory && selectionMode == SelectionMode.Directory)
            {
                selectedFiles.Add(entry);
            }
        }

        var fileNames = new StringBuilder();
        int i         = 0;

        while (i < selectedFiles.Count && fileNames.Length + selectedFiles[i].name.Length < 16382)
        {
            var file = selectedFiles[i];
            fileNames.Append("\"");
            fileNames.Append(file.name);
            fileNames.Append("\" ");
            i++;
        }

        filenameField.SetTextWithoutNotify(fileNames.ToString());

        lastClickTime  = resetDoubleClick ? 0 : Time.unscaledTime;
        lastClickIndex = resetDoubleClick ? -1 : index;
    }