Browse Source

Fixed drag drop on layers and renaming folder

Krzysztof Krysiński 5 months ago
parent
commit
92ca1f9a27

+ 2 - 1
src/PixiEditor/Views/Input/EditableTextBlock.axaml

@@ -8,7 +8,8 @@
              mc:Ignorable="d" x:Name="etb"
              d:DesignHeight="60" d:DesignWidth="100" Focusable="True">
     <Grid>
-        <TextBlock Foreground="{Binding ElementName=etb, Path=Foreground}" PointerPressed="TextBlock_MouseDown"
+        <TextBlock Foreground="{Binding ElementName=etb, Path=Foreground}"
+                   DoubleTapped="OnDoubleTapped"
                    TextTrimming="CharacterEllipsis" Name="textBlock"
                    IsVisible="{Binding Path=TextBlockVisibility, ElementName=etb}"
                    Text="{Binding Path=Text, ElementName=etb, Mode=TwoWay}" />

+ 8 - 11
src/PixiEditor/Views/Input/EditableTextBlock.axaml.cs

@@ -36,7 +36,7 @@ internal partial class EditableTextBlock : UserControl
 
     public static readonly StyledProperty<SolidColorBrush> ForegroundProperty =
         AvaloniaProperty.Register<EditableTextBlock, SolidColorBrush>(
-        nameof(Foreground), new SolidColorBrush(Brushes.White.Color));
+            nameof(Foreground), new SolidColorBrush(Brushes.White.Color));
 
     public SolidColorBrush Foreground
     {
@@ -82,10 +82,10 @@ internal partial class EditableTextBlock : UserControl
 
         Dispatcher.UIThread.Post(
             () =>
-        {
-            textBox.Focus();
-            textBox.SelectAll();
-        }, DispatcherPriority.Input);
+            {
+                textBox.Focus();
+                textBox.SelectAll();
+            }, DispatcherPriority.Input);
     }
 
     public void DisableEditing()
@@ -105,13 +105,10 @@ internal partial class EditableTextBlock : UserControl
         }
     }
 
-    private void TextBlock_MouseDown(object? sender, PointerPressedEventArgs e)
+    private void OnDoubleTapped(object sender, TappedEventArgs e)
     {
-        if (e.ClickCount == 2)
-        {
-            EnableEditing();
-            e.Handled = true;
-        }
+        EnableEditing();
+        e.Handled = true;
     }
 
     private void TextBox_KeyDown(object sender, KeyEventArgs e)

+ 3 - 2
src/PixiEditor/Views/Layers/FolderControl.axaml

@@ -40,9 +40,9 @@
                 <RowDefinition Height="16" />
                 <RowDefinition Height="10" />
             </Grid.RowDefinitions>
-            <Grid DragDrop.AllowDrop="True" Name="TopDropGrid" Grid.Row="0" Grid.ColumnSpan="3"
+            <Grid DragDrop.AllowDrop="True" IsVisible="False" Name="TopDropGrid" Grid.Row="0" Grid.ColumnSpan="3"
                   Background="Transparent" Panel.ZIndex="3" />
-            <Grid IsVisible="True" Margin="20, 0, 0,0" x:Name="middleDropGrid" Grid.Row="1" DragDrop.AllowDrop="True"
+            <Grid IsVisible="False" Margin="20, 0, 0,0" x:Name="middleDropGrid" Grid.Row="1" DragDrop.AllowDrop="True"
                   Panel.ZIndex="2" Background="Transparent" />
             <Grid x:Name="centerGrid" Grid.Row="0" Grid.RowSpan="3" Background="Transparent">
                 <Grid.ColumnDefinitions>
@@ -140,6 +140,7 @@
             <Grid
                 Grid.Row="2"
                 Name="BottomDropGrid"
+                IsVisible="False"
                 DragDrop.AllowDrop="True"
                 Grid.ColumnSpan="2" Background="Transparent" />
         </Grid>

+ 13 - 5
src/PixiEditor/Views/Layers/FolderControl.axaml.cs

@@ -64,6 +64,11 @@ internal partial class FolderControl : UserControl
         middleDropGrid.AddHandler(DragDrop.DragLeaveEvent, Grid_CenterLeave);
         middleDropGrid.AddHandler(DragDrop.DropEvent, Grid_Drop_Center);
         
+        DisableDropPanels();
+    }
+
+    private void DisableDropPanels()
+    {
         TopDropGrid.IsVisible = false;
         middleDropGrid.IsVisible = false;
         BottomDropGrid.IsVisible = false;
@@ -101,30 +106,33 @@ internal partial class FolderControl : UserControl
         LayerControl.RemoveDragEffect(centerGrid);
     }
 
-    private void HandleDrop(IDataObject dataObj, StructureMemberPlacement placement)
+    private bool HandleDrop(IDataObject dataObj, StructureMemberPlacement placement)
     {
+        DisableDropPanels();
         Guid? droppedMemberGuid = LayerControl.ExtractMemberGuid(dataObj);
         if (droppedMemberGuid is null)
-            return;
+            return false;
         Folder.Document.Operations.MoveStructureMember((Guid)droppedMemberGuid, Folder.Id, placement);
+
+        return true;
     }
 
     private void Grid_Drop_Top(object sender, DragEventArgs e)
     {
         LayerControl.RemoveDragEffect((Grid)sender);
-        HandleDrop(e.Data, StructureMemberPlacement.Above);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.Above);
     }
 
     private void Grid_Drop_Center(object sender, DragEventArgs e)
     {
         LayerControl.RemoveDragEffect(centerGrid);
-        HandleDrop(e.Data, StructureMemberPlacement.Inside);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.Inside);
     }
 
     private void Grid_Drop_Bottom(object sender, DragEventArgs e)
     {
         LayerControl.RemoveDragEffect((Grid)sender);
-        HandleDrop(e.Data, StructureMemberPlacement.Below);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.Below);
     }
 
     private void FolderControl_DragEnter(object sender, DragEventArgs e)

+ 8 - 6
src/PixiEditor/Views/Layers/LayerControl.axaml.cs

@@ -149,32 +149,34 @@ internal partial class LayerControl : UserControl
         return null;
     }
 
-    private void HandleDrop(IDataObject dataObj, StructureMemberPlacement placement)
+    private bool HandleDrop(IDataObject dataObj, StructureMemberPlacement placement)
     {
         if (placement == StructureMemberPlacement.Inside)
-            return;
+            return false;
         Guid? droppedMemberGuid = ExtractMemberGuid(dataObj);
         if (droppedMemberGuid is null)
-            return;
+            return false;
         Layer.Document.Operations.MoveStructureMember((Guid)droppedMemberGuid, Layer.Id, placement);
+
+        return true;
     }
 
     private void Grid_Drop_Top(object sender, DragEventArgs e)
     {
         RemoveDragEffect((Grid)sender);
-        HandleDrop(e.Data, StructureMemberPlacement.Above);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.Above);
     }
 
     private void Grid_Drop_Bottom(object sender, DragEventArgs e)
     {
         RemoveDragEffect((Grid)sender);
-        HandleDrop(e.Data, StructureMemberPlacement.Below);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.Below);
     }
 
     private void Grid_Drop_Below(object sender, DragEventArgs e)
     {
         RemoveDragEffect((Grid)sender);
-        HandleDrop(e.Data, StructureMemberPlacement.BelowOutsideFolder);
+        e.Handled = HandleDrop(e.Data, StructureMemberPlacement.BelowOutsideFolder);
     }
 
     private void RenameMenuItem_Click(object sender, RoutedEventArgs e)

+ 1 - 1
src/PixiEditor/Views/Layers/LayersManager.axaml

@@ -21,7 +21,7 @@
     <UserControl.Resources>
         <sys:Double x:Key="OpacityMultiplier">100</sys:Double>
     </UserControl.Resources>
-    <Grid>
+    <Grid DragDrop.AllowDrop="True" Name="RootGrid">
         <Grid.RowDefinitions>
             <RowDefinition Height="58"/>
             <RowDefinition Height="15"/>

+ 1 - 0
src/PixiEditor/Views/Layers/LayersManager.axaml.cs

@@ -33,6 +33,7 @@ internal partial class LayersManager : UserControl
         dropBorder.AddHandler(DragDrop.DragEnterEvent, Grid_DragEnter);
         dropBorder.AddHandler(DragDrop.DragLeaveEvent, Grid_DragLeave);
         dropBorder.AddHandler(DragDrop.DropEvent, Grid_Drop);
+        RootGrid.AddHandler(DragDrop.DropEvent, Grid_Drop);
     }
 
     private void LayerControl_MouseDown(object sender, PointerPressedEventArgs e)