diff --git a/SharepointToolbox/App.xaml b/SharepointToolbox/App.xaml index b937526..a78f1da 100644 --- a/SharepointToolbox/App.xaml +++ b/SharepointToolbox/App.xaml @@ -1,8 +1,15 @@ + xmlns:local="clr-namespace:SharepointToolbox" + xmlns:conv="clr-namespace:SharepointToolbox.Views.Converters"> + + + + diff --git a/SharepointToolbox/App.xaml.cs b/SharepointToolbox/App.xaml.cs index 692bbb8..28a16c3 100644 --- a/SharepointToolbox/App.xaml.cs +++ b/SharepointToolbox/App.xaml.cs @@ -88,6 +88,13 @@ public partial class App : Application services.AddTransient(); services.AddTransient(); + // Phase 3: Storage + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + // Phase 2: Permissions services.AddTransient(); services.AddTransient(); diff --git a/SharepointToolbox/MainWindow.xaml b/SharepointToolbox/MainWindow.xaml index 7f01def..f9546a1 100644 --- a/SharepointToolbox/MainWindow.xaml +++ b/SharepointToolbox/MainWindow.xaml @@ -44,8 +44,8 @@ - - + diff --git a/SharepointToolbox/MainWindow.xaml.cs b/SharepointToolbox/MainWindow.xaml.cs index 6e7cc9b..092e2d9 100644 --- a/SharepointToolbox/MainWindow.xaml.cs +++ b/SharepointToolbox/MainWindow.xaml.cs @@ -23,6 +23,9 @@ public partial class MainWindow : Window // Replace Permissions tab placeholder with the DI-resolved PermissionsView PermissionsTabItem.Content = serviceProvider.GetRequiredService(); + // Replace Storage tab placeholder with the DI-resolved StorageView + StorageTabItem.Content = serviceProvider.GetRequiredService(); + // Replace Settings tab placeholder with the DI-resolved SettingsView SettingsTabItem.Content = serviceProvider.GetRequiredService(); diff --git a/SharepointToolbox/Views/Converters/IndentConverter.cs b/SharepointToolbox/Views/Converters/IndentConverter.cs new file mode 100644 index 0000000..ee89a72 --- /dev/null +++ b/SharepointToolbox/Views/Converters/IndentConverter.cs @@ -0,0 +1,47 @@ +using System.Globalization; +using System.Windows; +using System.Windows.Data; + +namespace SharepointToolbox.Views.Converters; + +/// Converts IndentLevel (int) to WPF Thickness for DataGrid indent. +[ValueConversion(typeof(int), typeof(Thickness))] +public class IndentConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + int level = value is int i ? i : 0; + return new Thickness(level * 16, 0, 0, 0); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + => throw new NotImplementedException(); +} + +/// Converts byte count (long) to human-readable size string. +[ValueConversion(typeof(long), typeof(string))] +public class BytesConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + long bytes = value is long l ? l : 0L; + if (bytes >= 1_073_741_824L) return $"{bytes / 1_073_741_824.0:F2} GB"; + if (bytes >= 1_048_576L) return $"{bytes / 1_048_576.0:F2} MB"; + if (bytes >= 1024L) return $"{bytes / 1024.0:F2} KB"; + return $"{bytes} B"; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + => throw new NotImplementedException(); +} + +/// Inverts a bool binding — used to disable controls while an operation is running. +[ValueConversion(typeof(bool), typeof(bool))] +public class InverseBoolConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + => value is bool b && !b; + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + => value is bool b && !b; +} diff --git a/SharepointToolbox/Views/Tabs/StorageView.xaml b/SharepointToolbox/Views/Tabs/StorageView.xaml new file mode 100644 index 0000000..16b5788 --- /dev/null +++ b/SharepointToolbox/Views/Tabs/StorageView.xaml @@ -0,0 +1,104 @@ + + + + + + +