Skip to content

FolderBrowser

0x5BFA edited this page Feb 9, 2025 · 23 revisions

Definition

This user control contains multiple folder views and displays one of them at a time and manages backward/forward navigation stack. Since this is a browsable view within Files app, this control also inherits IAppBrowsable interface to provide i.e. display path, thumbnail, etc.

public sealed partial class FolderBrowser : UserControl, IAppBrowsable, IDisposable {}

Usage

Display a folder view

// Instantiating with various types of folders
var browser = FolderBrowser() { Folder = new HomeFolder() };
browser =     FolderBrowser() { Folder = new WindowsFolder("Shell:ThisPC") }; // parse-able paths only
browser =     FolderBrowser() { Folder = new TagsFolder(tagId) };

// Add a new tab with a new browser instance
App.GetCurrentWindow().AddNewTab(browser, focus: true);

// Add a new pane with a new browser instance
App.GetCurrentWindow().GetCurrentTab().AddNewPane(browser, focus: true);

Navigate back/forward/up

public record struct FolderBrowserNavigationStack(BitmapImage thumbnail, string displayPath, string parsablePath);

// In FolderBrowser class
public readonly ObservableCollection<FolderBrowserNavigationStack> BackwardNavigationStack { get; }
public readonly ObservableCollection<FolderBrowserNavigationStack> ForwardNavigationStack { get; }
public FolderBrowserNavigationStack CurrentNavigation { get; }
var browser = App.GetCurrentWindow().GetCurrentTab().GetCurrentPane() as FolderBrowser;

if (browser.CanNavigateBack())
    browser.NavigateBack();

if (browser.CanNavigateUp())
    browser.NavigateUp();

Working with views

public FolderBrowser()
{
    // Subscribe events from various views
    DetailsFolderView.Loading += DetailsFolderView_Loading;
    DetailsFolderView.ColumnAdded += DetailsFolderView_ColumnAdded;
    TreeFolderView.Loading += TreeFolderView_Loading;
}

public void DetailsFolderView_Loading(object? sender, DetailsViewLoadingEventArgs e)
{
    if (e.RootFolder is null)
        rerun;

    // Set row data to each storable
    foreach (var child in e.Children)
    {
        var rowData = ...();
        e.Database[child] = rowData;
    }
}

public void DetailsFolderView_ColumnAdded(object? sender, DetailsViewColumnAddedEventArgs e)
{
    if (e.RootFolder is null || e.ColumnAdded is not IDetailsFolderViewColumn newColumn)
        return;

    FolderSettingsHelper.AddNewColumnAt(e.RootFolder, newColumn.Id, newColumn.Index, newColumn.Width);
}

public void TreeFolderView_Loading(object? sender, TreeViewFolderLoadingEventArgs e)
{
    if (e.RootFolder is null)
        rerun;

    // Set bool value if folder should be expanded or not to each folder
    foreach (var folder in e.Folders)
    {
        var expanded = ...();
        e.Database[folder] = expanded;
    }

    e.Handled = true;
}
Controls
  • FolderBrowser
  • DetailsFolderView
  • GridFolderView
  • ListFolderView
  • TilesFolderView
  • ContentFolderView
  • ColumnsFolderView
  • TreeFolderView
  • GalleryFolderView
  • HomeFolderView
  • RectanglurSelectionVisual
  • DataGrid
  • SidebarView
  • Omnibar
  • Toolbar
  • FilePreviewPresenter
  • ColorTags
  • RichTokens
  • TerminalView
API
  • WindowsStorable
  • ArchiveStorable
  • HomeStorable
  • FtpStorable
  • SftpStorable
  • WebDAVStorable
Infrastructure
  • CommandManager
  • MultitaskingManager
  • DialogManager
  • AppSettings
  • OperationServer

Copyright © 2025 0x5BFA. All rights reserved. Do not copy or redistribute modified versions.

Clone this wiki locally