/// <summary> /// Updates GUI for the directory bar. Should be called whenever the active folder changes. /// </summary> private void RefreshDirectoryBar() { if (folderListLayout != null) { folderListLayout.Destroy(); folderListLayout = null; } folderListLayout = folderBarLayout.AddLayoutX(); string[] folders = null; string[] fullPaths = null; if (IsSearchActive) { folders = new[] {searchQuery}; fullPaths = new[] { searchQuery }; } else { string currentDir = Path.Combine("Resources", CurrentFolder); folders = currentDir.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); fullPaths = new string[folders.Length]; for (int i = 0; i < folders.Length; i++) { if (i == 0) fullPaths[i] = ""; else fullPaths[i] = Path.Combine(fullPaths[i - 1], folders[i]); } } int availableWidth = folderBarLayout.Bounds.width - FOLDER_BUTTON_WIDTH * 2; int numFolders = 0; for (int i = folders.Length - 1; i >= 0; i--) { GUIButton folderButton = new GUIButton(folders[i]); if (!IsSearchActive) { string fullPath = fullPaths[i]; folderButton.OnClick += () => OnFolderButtonClicked(fullPath); } GUIButton separator = new GUIButton("/", GUIOption.FixedWidth(FOLDER_SEPARATOR_WIDTH)); folderListLayout.InsertElement(0, separator); folderListLayout.InsertElement(0, folderButton); numFolders++; Rect2I folderListBounds = folderListLayout.Bounds; if (folderListBounds.width > availableWidth) { if (numFolders > 2) { separator.Destroy(); folderButton.Destroy(); break; } } } }