|
@@ -1,4 +1,6 @@
|
|
-using Avalonia;
|
|
|
|
|
|
+using System.ComponentModel;
|
|
|
|
+using System.Windows.Input;
|
|
|
|
+using Avalonia;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Controls.Metadata;
|
|
using Avalonia.Controls.Metadata;
|
|
using Avalonia.Controls.Primitives;
|
|
using Avalonia.Controls.Primitives;
|
|
@@ -12,8 +14,11 @@ namespace PixiEditor.Views.Animations;
|
|
[PseudoClasses(":collapsed")]
|
|
[PseudoClasses(":collapsed")]
|
|
internal class TimelineGroupHeader : TemplatedControl
|
|
internal class TimelineGroupHeader : TemplatedControl
|
|
{
|
|
{
|
|
- public static readonly StyledProperty<CelGroupViewModel> ItemProperty = AvaloniaProperty.Register<TimelineGroupHeader, CelGroupViewModel>(
|
|
|
|
- nameof(Item));
|
|
|
|
|
|
+ public static readonly StyledProperty<ICommand> SelectCommandProperty = AvaloniaProperty.Register<TimelineGroupHeader, ICommand>("SelectCommand");
|
|
|
|
+
|
|
|
|
+ public static readonly StyledProperty<CelGroupViewModel> ItemProperty =
|
|
|
|
+ AvaloniaProperty.Register<TimelineGroupHeader, CelGroupViewModel>(
|
|
|
|
+ nameof(Item));
|
|
|
|
|
|
public CelGroupViewModel Item
|
|
public CelGroupViewModel Item
|
|
{
|
|
{
|
|
@@ -21,6 +26,49 @@ internal class TimelineGroupHeader : TemplatedControl
|
|
set => SetValue(ItemProperty, value);
|
|
set => SetValue(ItemProperty, value);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public ICommand SelectCommand
|
|
|
|
+ {
|
|
|
|
+ get { return (ICommand)GetValue(SelectCommandProperty); }
|
|
|
|
+ set { SetValue(SelectCommandProperty, value); }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static TimelineGroupHeader()
|
|
|
|
+ {
|
|
|
|
+ ItemProperty.Changed.AddClassHandler<TimelineGroupHeader>((x, e) =>
|
|
|
|
+ {
|
|
|
|
+ if (e.OldValue is CelGroupViewModel oldItem)
|
|
|
|
+ {
|
|
|
|
+ oldItem.PropertyChanged -= x.NewItemOnPropertyChanged;
|
|
|
|
+ x.PseudoClasses.Set(":selected", oldItem.IsGroupSelected);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (e.NewValue is CelGroupViewModel newItem)
|
|
|
|
+ {
|
|
|
|
+ newItem.PropertyChanged += x.NewItemOnPropertyChanged;
|
|
|
|
+ x.PseudoClasses.Set(":selected", newItem.IsGroupSelected);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public TimelineGroupHeader()
|
|
|
|
+ {
|
|
|
|
+ PointerPressed += (sender, args) =>
|
|
|
|
+ {
|
|
|
|
+ if (args.Source is Control { DataContext: CelGroupViewModel celGroup })
|
|
|
|
+ {
|
|
|
|
+ SelectCommand?.Execute(celGroup.LayerGuid);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void NewItemOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
|
|
+ {
|
|
|
|
+ if (e.PropertyName == nameof(CelGroupViewModel.IsGroupSelected))
|
|
|
|
+ {
|
|
|
|
+ PseudoClasses.Set(":selected", (sender as CelGroupViewModel).IsGroupSelected);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
|
|
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
|
|
{
|
|
{
|
|
base.OnApplyTemplate(e);
|
|
base.OnApplyTemplate(e);
|