TimeTravel
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
using FileTime.Core.Components;
|
||||
using MvvmGen;
|
||||
using System;
|
||||
using MvvmGen;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using FileTime.App.Core.Tab;
|
||||
using System.Threading.Tasks;
|
||||
using FileTime.Core.Models;
|
||||
|
||||
namespace FileTime.Avalonia.Application
|
||||
{
|
||||
@@ -11,7 +13,7 @@ namespace FileTime.Avalonia.Application
|
||||
public partial class AppState
|
||||
{
|
||||
[Property]
|
||||
private ObservableCollection<TabContainer> _tabs = new ObservableCollection<TabContainer>();
|
||||
private ObservableCollection<TabContainer> _tabs = new();
|
||||
|
||||
[Property]
|
||||
private TabContainer _selectedTab;
|
||||
@@ -24,7 +26,66 @@ namespace FileTime.Avalonia.Application
|
||||
|
||||
partial void OnInitialize()
|
||||
{
|
||||
_tabs.CollectionChanged += (o, e) => SelectedTab ??= Tabs.Count > 0 ? Tabs[0] : null;
|
||||
_tabs.CollectionChanged += TabsChanged;
|
||||
}
|
||||
|
||||
private void TabsChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
SelectedTab ??= Tabs.Count > 0 ? Tabs[0] : null;
|
||||
|
||||
List<TabContainer> itemsAdded = new();
|
||||
List<TabContainer> itemsRemoved = new();
|
||||
if (e.NewItems != null && e.OldItems != null)
|
||||
{
|
||||
itemsAdded.AddRange(e.NewItems.Cast<TabContainer>().Except(e.OldItems.Cast<TabContainer>()));
|
||||
itemsRemoved.AddRange(e.OldItems.Cast<TabContainer>().Except(e.NewItems.Cast<TabContainer>()));
|
||||
}
|
||||
else if (e.NewItems != null)
|
||||
{
|
||||
itemsAdded.AddRange(e.NewItems.Cast<TabContainer>());
|
||||
}
|
||||
else if (e.OldItems != null)
|
||||
{
|
||||
itemsRemoved.AddRange(e.OldItems.Cast<TabContainer>());
|
||||
}
|
||||
|
||||
foreach (var item in itemsAdded)
|
||||
{
|
||||
item.TabState.ItemMarked.Add(TabItemMarked);
|
||||
item.TabState.ItemUnmarked.Add(TabItemUnmarked);
|
||||
}
|
||||
|
||||
foreach (var item in itemsRemoved)
|
||||
{
|
||||
item.TabState.ItemMarked.Remove(TabItemMarked);
|
||||
item.TabState.ItemUnmarked.Remove(TabItemUnmarked);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task TabItemMarked(TabState tabState, AbsolutePath item)
|
||||
{
|
||||
var tabContainer = Tabs.FirstOrDefault(t => t.TabState == tabState);
|
||||
if (tabContainer != null)
|
||||
{
|
||||
var item2 = (await tabContainer.CurrentLocation.GetItems()).FirstOrDefault(i => i.Item.FullName == item.Path);
|
||||
if (item2 != null)
|
||||
{
|
||||
item2.IsMarked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task TabItemUnmarked(TabState tabState, AbsolutePath item)
|
||||
{
|
||||
var tabContainer = Tabs.FirstOrDefault(t => t.TabState == tabState);
|
||||
if (tabContainer != null)
|
||||
{
|
||||
var item2 = (await tabContainer.CurrentLocation.GetItems()).FirstOrDefault(i => i.Item.FullName == item.Path);
|
||||
if (item2 != null)
|
||||
{
|
||||
item2.IsMarked = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user