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); }
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; }
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; }