add editor, fix some bugs

WIP
This commit is contained in:
Alex Bezdieniezhnykh
2024-09-10 17:10:54 +03:00
parent b4bedb7520
commit 52371ace3a
16 changed files with 498 additions and 148 deletions
@@ -0,0 +1,50 @@
<DataGrid x:Class="Azaion.Annotator.Controls.AnnotationClasses"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Azaion.Annotator.Controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Background="Black"
RowBackground="#252525"
Foreground="White"
RowHeaderWidth="0"
Padding="2 0 0 0"
AutoGenerateColumns="False"
SelectionMode="Single"
CellStyle="{DynamicResource DataGridCellStyle1}"
IsReadOnly="True"
CanUserResizeRows="False"
CanUserResizeColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn
Width="50"
Header="Клавіша"
CanUserSort="False">
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="#252525"></Setter>
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding Path=ColorBrush}">
<TextBlock Text="{Binding Path=ClassNumber}"></TextBlock>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="*"
Header="Назва"
Binding="{Binding Path=Name}"
CanUserSort="False">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="#252525"></Setter>
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
@@ -0,0 +1,11 @@
using System.Windows.Controls;
namespace Azaion.Annotator.Controls;
public partial class AnnotationClasses : DataGrid
{
public AnnotationClasses()
{
InitializeComponent();
}
}
+38 -23
View File
@@ -13,7 +13,8 @@ namespace Azaion.Annotator.Controls;
public class CanvasEditor : Canvas
{
private Point _lastPos;
public SelectionState SelectionState { get; set; } = SelectionState.None;
private readonly Rectangle _newAnnotationRect;
private Point _newAnnotationStartPos;
@@ -30,6 +31,19 @@ public class CanvasEditor : Canvas
public FormState FormState { get; set; } = null!;
public IMediator Mediator { get; set; } = null!;
public static readonly DependencyProperty GetTimeFuncProp =
DependencyProperty.Register(
nameof(GetTimeFunc),
typeof(Func<TimeSpan>),
typeof(CanvasEditor),
new PropertyMetadata(null));
public Func<TimeSpan> GetTimeFunc
{
get => (Func<TimeSpan>)GetValue(GetTimeFuncProp);
set => SetValue(GetTimeFuncProp, value);
}
private AnnotationClass _currentAnnClass = null!;
public AnnotationClass CurrentAnnClass
{
@@ -84,11 +98,7 @@ public class CanvasEditor : Canvas
Stroke = new SolidColorBrush(Colors.Gray),
Fill = new SolidColorBrush(Color.FromArgb(128, 128, 128, 128)),
};
Loaded += Init;
}
private void Init(object sender, RoutedEventArgs e)
{
KeyDown += (_, args) =>
{
Console.WriteLine($"pressed {args.Key}");
@@ -98,15 +108,21 @@ public class CanvasEditor : Canvas
MouseUp += CanvasMouseUp;
SizeChanged += CanvasResized;
Cursor = Cursors.Cross;
_horizontalLine.X1 = 0;
_horizontalLine.X2 = ActualWidth;
_verticalLine.Y1 = 0;
_verticalLine.Y2 = ActualHeight;
Children.Add(_newAnnotationRect);
Children.Add(_horizontalLine);
Children.Add(_verticalLine);
Children.Add(_classNameHint);
Loaded += Init;
}
private void Init(object sender, RoutedEventArgs e)
{
_horizontalLine.X1 = 0;
_horizontalLine.X2 = ActualWidth;
_verticalLine.Y1 = 0;
_verticalLine.Y2 = ActualHeight;
}
private void CanvasMouseDown(object sender, MouseButtonEventArgs e)
@@ -125,22 +141,22 @@ public class CanvasEditor : Canvas
if (e.LeftButton != MouseButtonState.Pressed)
return;
if (FormState.SelectionState == SelectionState.NewAnnCreating)
if (SelectionState == SelectionState.NewAnnCreating)
NewAnnotationCreatingMove(sender, e);
if (FormState.SelectionState == SelectionState.AnnResizing)
if (SelectionState == SelectionState.AnnResizing)
AnnotationResizeMove(sender, e);
if (FormState.SelectionState == SelectionState.AnnMoving)
if (SelectionState == SelectionState.AnnMoving)
AnnotationPositionMove(sender, e);
}
private void CanvasMouseUp(object sender, MouseButtonEventArgs e)
{
if (FormState.SelectionState == SelectionState.NewAnnCreating)
if (SelectionState == SelectionState.NewAnnCreating)
CreateAnnotation(e.GetPosition(this));
FormState.SelectionState = SelectionState.None;
SelectionState = SelectionState.None;
e.Handled = true;
}
@@ -154,7 +170,7 @@ public class CanvasEditor : Canvas
private void AnnotationResizeStart(object sender, MouseEventArgs e)
{
FormState.SelectionState = SelectionState.AnnResizing;
SelectionState = SelectionState.AnnResizing;
_lastPos = e.GetPosition(this);
_curRec = (Rectangle)sender;
_curAnn = (AnnotationControl)((Grid)_curRec.Parent).Parent;
@@ -163,7 +179,7 @@ public class CanvasEditor : Canvas
private void AnnotationResizeMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.AnnResizing)
if (SelectionState != SelectionState.AnnResizing)
return;
var currentPos = e.GetPosition(this);
@@ -224,13 +240,13 @@ public class CanvasEditor : Canvas
_curAnn.IsSelected = true;
FormState.SelectionState = SelectionState.AnnMoving;
SelectionState = SelectionState.AnnMoving;
e.Handled = true;
}
private void AnnotationPositionMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.AnnMoving)
if (SelectionState != SelectionState.AnnMoving)
return;
var currentPos = e.GetPosition(this);
@@ -255,12 +271,12 @@ public class CanvasEditor : Canvas
SetTop(_newAnnotationRect, _newAnnotationStartPos.Y);
_newAnnotationRect.MouseMove += NewAnnotationCreatingMove;
FormState.SelectionState = SelectionState.NewAnnCreating;
SelectionState = SelectionState.NewAnnCreating;
}
private void NewAnnotationCreatingMove(object sender, MouseEventArgs e)
{
if (FormState.SelectionState != SelectionState.NewAnnCreating)
if (SelectionState != SelectionState.NewAnnCreating)
return;
var currentPos = e.GetPosition(this);
@@ -284,8 +300,7 @@ public class CanvasEditor : Canvas
if (width < MIN_SIZE || height < MIN_SIZE)
return;
var mainWindow = (MainWindow)((Window)((Grid)Parent).Parent).Owner;
var time = TimeSpan.FromMilliseconds(mainWindow.VideoView.MediaPlayer.Time);
var time = GetTimeFunc();
CreateAnnotation(CurrentAnnClass, time, new CanvasLabel
{
Width = width,