From fa511405ad708f8af09556c77e6d04e40b149b56 Mon Sep 17 00:00:00 2001 From: Marco Gavelli Date: Sat, 11 May 2024 23:32:01 +0200 Subject: [PATCH] Add terminal model --- src/Files.App/Data/Models/TerminalModel.cs | 21 +++++++++++++++++++ src/Files.App/UserControls/StatusBar.xaml | 11 +++++----- src/Files.App/UserControls/StatusBar.xaml.cs | 2 +- src/Files.App/ViewModels/MainPageViewModel.cs | 17 +++++++-------- 4 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 src/Files.App/Data/Models/TerminalModel.cs diff --git a/src/Files.App/Data/Models/TerminalModel.cs b/src/Files.App/Data/Models/TerminalModel.cs new file mode 100644 index 000000000000..7171e299d25e --- /dev/null +++ b/src/Files.App/Data/Models/TerminalModel.cs @@ -0,0 +1,21 @@ +using Microsoft.UI.Xaml.Controls; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Files.App.Data.Models +{ + public class TerminalModel : IDisposable + { + public string Id { get; init; } + public string Name { get; init; } + public Control Control { get; init; } + + public void Dispose() + { + (Control as IDisposable)?.Dispose(); + } + } +} diff --git a/src/Files.App/UserControls/StatusBar.xaml b/src/Files.App/UserControls/StatusBar.xaml index 1e3cdbf719ef..37d5a58d2b77 100644 --- a/src/Files.App/UserControls/StatusBar.xaml +++ b/src/Files.App/UserControls/StatusBar.xaml @@ -6,6 +6,7 @@ xmlns:converters="using:Files.App.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:data="using:Files.App.Data.Items" + xmlns:datamodels="using:Files.App.Data.Models" xmlns:helpers="using:Files.App.Helpers" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:usercontrols="using:Files.App.UserControls" @@ -490,11 +491,11 @@ Padding="4" Background="{ThemeResource CardBackgroundFillColorDefaultBrush}" IsItemClickEnabled="True" - ItemsSource="{x:Bind MainPageViewModel.TerminalNames, Mode=OneWay}" + ItemsSource="{x:Bind MainPageViewModel.Terminals, Mode=OneWay}" SelectedIndex="{x:Bind MainPageViewModel.SelectedTerminal, Mode=TwoWay}" SelectionMode="Single"> - + @@ -502,15 +503,15 @@ diff --git a/src/Files.App/UserControls/StatusBar.xaml.cs b/src/Files.App/UserControls/StatusBar.xaml.cs index 162382fca4df..36b3a0a867a8 100644 --- a/src/Files.App/UserControls/StatusBar.xaml.cs +++ b/src/Files.App/UserControls/StatusBar.xaml.cs @@ -81,7 +81,7 @@ private async void DeleteBranch_Click(object sender, RoutedEventArgs e) await DirectoryPropertiesViewModel.ExecuteDeleteBranch(((BranchItem)((Button)sender).DataContext).Name); } - private void Button_Click(object sender, RoutedEventArgs e) + private void TerminalCloseButton_Click(object sender, RoutedEventArgs e) { MainPageViewModel.TerminalCloseCommand.Execute(((Button)sender).Tag.ToString()); } diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index 26466f007108..1b325197c52f 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -94,13 +94,14 @@ public MainPageViewModel() { if (Terminals.IsEmpty()) IsTerminalViewOpen = true; - Terminals.Add(new TerminalView(e ?? TerminalSelectedProfile) + Terminals.Add(new TerminalModel() { - Tag = $"Terminal {Terminals.Count}" + Name = (e ?? TerminalSelectedProfile).Name, + Id = Guid.NewGuid().ToString(), + Control = new TerminalView(e ?? TerminalSelectedProfile) }); OnPropertyChanged(nameof(SelectedTerminal)); OnPropertyChanged(nameof(ActiveTerminal)); - OnPropertyChanged(nameof(TerminalNames)); }); TerminalToggleCommand = new RelayCommand(() => { @@ -122,14 +123,13 @@ public MainPageViewModel() }); TerminalCloseCommand = new RelayCommand((name) => { - var terminal = Terminals.First(x => x.Tag.ToString() == name); - (terminal as IDisposable)?.Dispose(); + var terminal = Terminals.First(x => x.Id == name); + terminal.Dispose(); Terminals.Remove(terminal); SelectedTerminal = int.Min(SelectedTerminal, Terminals.Count - 1); if (Terminals.IsEmpty()) IsTerminalViewOpen = false; OnPropertyChanged(nameof(ActiveTerminal)); - OnPropertyChanged(nameof(TerminalNames)); }); TerminalSelectedProfile = TerminalProfiles[0]; GeneralSettingsService.PropertyChanged += GeneralSettingsService_PropertyChanged; @@ -345,10 +345,9 @@ public bool IsTerminalViewOpen set => SetProperty(ref _isTerminalViewOpen, value); } - public Control? ActiveTerminal => SelectedTerminal >= 0 && SelectedTerminal < Terminals.Count ? Terminals[SelectedTerminal] : null; + public Control? ActiveTerminal => SelectedTerminal >= 0 && SelectedTerminal < Terminals.Count ? Terminals[SelectedTerminal].Control : null; - public List Terminals { get; } = new(); - public List TerminalNames => Terminals.Select(x => x.Tag.ToString()!).ToList(); + public ObservableCollection Terminals { get; } = new(); private int _selectedTerminal; public int SelectedTerminal