// Copyright (c) Microsoft Corporation // The Microsoft Corporation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Globalization; using CommunityToolkit.Mvvm.ComponentModel; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Peek.Common.Helpers; using Peek.FilePreviewer.Previewers.Drive.Models; using Windows.Foundation; namespace Peek.FilePreviewer.Controls { [INotifyPropertyChanged] public sealed partial class DriveControl : UserControl { [ObservableProperty] private Rect _spaceBarClip; public static readonly DependencyProperty SourceProperty = DependencyProperty.Register( nameof(Source), typeof(DrivePreviewData), typeof(DriveControl), new PropertyMetadata(null, new PropertyChangedCallback((d, e) => ((DriveControl)d).UpdateSpaceBar()))); public DrivePreviewData? Source { get { return (DrivePreviewData)GetValue(SourceProperty); } set { SetValue(SourceProperty, value); } } public DriveControl() { this.InitializeComponent(); } public string FormatType(string type) { return string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Drive_Type"), type); } public string FormatFileSystem(string fileSystem) { return string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Drive_FileSystem"), fileSystem); } public string FormatCapacity(ulong capacity) { return string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Drive_Capacity"), ReadableStringHelper.BytesToReadableString(capacity, false)); } public string FormatFreeSpace(ulong freeSpace) { return string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Drive_FreeSpace"), ReadableStringHelper.BytesToReadableString(freeSpace, false)); } public string FormatUsedSpace(ulong usedSpace) { return string.Format(CultureInfo.CurrentCulture, ResourceLoaderInstance.ResourceLoader.GetString("Drive_UsedSpace"), ReadableStringHelper.BytesToReadableString(usedSpace, false)); } private void SizeChanged_Handler(object sender, SizeChangedEventArgs e) { UpdateSpaceBar(); } private void UpdateSpaceBar() { if (Source != null && Source.PercentageUsage > 0) { var usedWidth = CapacityBar.ActualWidth * Source!.PercentageUsage; SpaceBarClip = new(0, 0, usedWidth, 16); } else { SpaceBarClip = new(0, 0, 0, 0); } } } }