/// <inheritdoc/> protected override void UpdateViewsHolder(FileSystemEntryViewsHolder newOrRecycled) { // Initialize the views from the associated model IHierarchyNodeModel model = _Params.FlattenedVisibleHierarchy[newOrRecycled.ItemIndex]; newOrRecycled.UpdateViews(model); }
void UpdateHeaderViews(IHierarchyNodeViewsHolder header, IHierarchyNodeModel model) { int prevDepth = model.Depth; if (_HeaderFixedPadding) { model.Depth = 1; } header.UpdateViews(model); if (_HeaderFixedPadding) { model.Depth = prevDepth; } }
public void UpdateViews(IHierarchyNodeModel model) { FileSystemEntryModel modelCasted = model as FileSystemEntryModel; titleText.text = modelCasted.Title; bool isDir = modelCasted.IsDirectory(); _FoldoutButton.interactable = isDir; _DirectoryIconImage.gameObject.SetActive(isDir); _FileIconImage.gameObject.SetActive(!isDir); foldoutArrowImage.gameObject.SetActive(isDir); if (isDir) { foldoutArrowImage.rectTransform.localRotation = Quaternion.Euler(0, 0, modelCasted.Expanded ? -90 : 0); } _RootLayoutGroup.padding.left = 25 * modelCasted.Depth; // the higher the depth, the higher the padding }
void ManageHeader(IHierarchyNodeViewsHolder header, IHierarchyNodeViewsHolder firstVH, IHierarchyNodeViewsHolder secondVH) { var firstAsAbstractVH = firstVH as AbstractViewsHolder; int itemIndex = firstVH.ItemIndex; var firstVisibleItemModel = _Params.FlattenedVisibleHierarchy[itemIndex]; var parentDirOfFirstVisibleItem = firstVisibleItemModel.Parent; if (firstVisibleItemModel.IsDirectory() && firstVisibleItemModel.Expanded) { if (_CurrentHeaderDirModel == null || _CurrentHeaderDirModel != firstVisibleItemModel) { _CurrentHeaderDirModel = firstVisibleItemModel; UpdateHeaderViews(header, _CurrentHeaderDirModel); } float amountBeforeViewport = -_HierarchyOSA.GetItemRealInsetFromParentStart(firstAsAbstractVH.root); //Debug.Log(amountBeforeViewport); bool beforeViewport = amountBeforeViewport > 0; if (beforeViewport) { ActivateVH(header); UpdateHeaderViews(header, _CurrentHeaderDirModel); SetHeaderInset(header, 0f); } else { DeactivateVH(header); } } else { //Debug.Log(firstVisibleItemModel.title + ", " + firstVisibleItemModel.IsDirectory + ", " + firstVisibleItemModel.depth + ", parent= " + (parentDirOfFirstVisibleItem == null ? "null" : parentDirOfFirstVisibleItem.title + ", d " + parentDirOfFirstVisibleItem.depth)); if (parentDirOfFirstVisibleItem == null || parentDirOfFirstVisibleItem.Depth == 0) { DeactivateVH(header); return; } ActivateVH(header); if (_CurrentHeaderDirModel != parentDirOfFirstVisibleItem) { _CurrentHeaderDirModel = parentDirOfFirstVisibleItem; UpdateHeaderViews(header, parentDirOfFirstVisibleItem); } SetHeaderInset(header, 0f); } var secondAsAbstractVH = secondVH as AbstractViewsHolder; int secondItemIndex = secondVH.ItemIndex; var secondVisibleItemModel = _Params.FlattenedVisibleHierarchy[secondItemIndex]; if (secondVisibleItemModel.IsDirectory()) { bool secondIsSameDepth = secondVisibleItemModel.Depth == _CurrentHeaderDirModel.Depth; if (!secondIsSameDepth) { if (!secondVisibleItemModel.Expanded) { return; } if (secondVisibleItemModel.Parent != _CurrentHeaderDirModel) { bool secondIsSmallerDepth = secondVisibleItemModel.Depth < _CurrentHeaderDirModel.Depth; if (!secondIsSmallerDepth) { return; } } } float secondItemInset = _HierarchyOSA.GetItemRealInsetFromParentStart(secondAsAbstractVH.root); if (secondItemInset < 0) // wait for positions to be fixed { return; } var layoutInfo = _HierarchyOSA.GetLayoutInfoReadonly(); var headerAsAbstractVH = header as AbstractViewsHolder; var size = headerAsAbstractVH.root.rect.size[layoutInfo.hor0_vert1]; var insetMax0 = Mathf.Min(0f, (float)(secondItemInset /*- layoutInfo.spacing*/ - size)); SetHeaderInset(header, insetMax0); } }