diff --git a/GraphPage.xaml b/GraphPage.xaml
index 8f96449..a495787 100644
--- a/GraphPage.xaml
+++ b/GraphPage.xaml
@@ -4,23 +4,34 @@
x:Class="NotesDataAnalyst.GraphPage"
Title="GraphPage">
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ FontSize="18"
+ Completed="OnTextEditorCompleted" />
+
diff --git a/GraphPage.xaml.cs b/GraphPage.xaml.cs
index 74ea456..94357f2 100644
--- a/GraphPage.xaml.cs
+++ b/GraphPage.xaml.cs
@@ -11,7 +11,8 @@ namespace NotesDataAnalyst
private readonly List _nodes = new();
private readonly List _connections = new();
private GraphNode _selectedNode;
- private bool _isResizing = false;
+ private bool _isScrollingBlocked = false;
+
public GraphPage()
{
@@ -27,6 +28,41 @@ namespace NotesDataAnalyst
var tapGesture = new TapGestureRecognizer();
tapGesture.Tapped += OnCanvasTapped;
canvasView.GestureRecognizers.Add(tapGesture);
+
+
+ }
+
+ private async void OnEditTextClicked(object sender, EventArgs e)
+ {
+ // Проверяем, выбрана ли нода
+ if (_selectedNode == null)
+ {
+ await DisplayAlert("Ошибка", "Сначала выберите ноду", "OK");
+ return;
+ }
+
+ // Показываем поле для редактирования текста и заполняем его текущим текстом ноды
+ textEditor.IsVisible = true;
+ textEditor.Text = _selectedNode.Text;
+
+ // Ставим фокус на текстовое поле для ввода
+ textEditor.Focus();
+ }
+
+ // Обработчик завершения редактирования текста
+ private void OnTextEditorCompleted(object sender, EventArgs e)
+ {
+ if (_selectedNode != null)
+ {
+ // Обновляем текст ноды с введенным значением
+ _selectedNode.Text = textEditor.Text;
+
+ // Скрываем поле для редактирования текста
+ textEditor.IsVisible = false;
+
+ // Перерисовываем канву для обновления отображения текста
+ canvasView.Invalidate();
+ }
}
private async void OnResizeNodeClicked(object sender, EventArgs e)
@@ -61,16 +97,13 @@ namespace NotesDataAnalyst
}
}
-
private async void OnAddNodeClicked(object sender, EventArgs e)
{
-
var newNode = new GraphNode
{
Text = "Новая нода",
Position = new Point(100, 200),
Size = new Size(100, 50),
-
};
_nodes.Add(newNode);
@@ -98,7 +131,6 @@ namespace NotesDataAnalyst
}
}
-
private void OnCanvasTapped(object sender, TappedEventArgs e)
{
var tapPosition = e.GetPosition((View)sender);
@@ -120,65 +152,35 @@ namespace NotesDataAnalyst
{
if (_selectedNode == null) return;
+ // Начало перетаскивания
if (e.StatusType == GestureStatus.Started)
{
+ // Запоминаем начальную позицию касания и ноды
+ _initialTouchPosition = new Point(e.TotalX, e.TotalY);
_initialNodePosition = _selectedNode.Position;
- _initialTouchPosition = new PointF((float)e.TotalX, (float)e.TotalY);
- _initialNodeSize = _selectedNode.Size;
-
- _isResizing = IsOnResizeHandle(_selectedNode, _initialTouchPosition);
}
+ // Перемещение
else if (e.StatusType == GestureStatus.Running)
{
- var deltaX = (float)e.TotalX - _initialTouchPosition.X;
- var deltaY = (float)e.TotalY - _initialTouchPosition.Y;
+ var deltaX = e.TotalX - _initialTouchPosition.X; // Разница с начальной точкой
+ var deltaY = e.TotalY - _initialTouchPosition.Y;
- if (_isResizing)
- {
- ResizeNode(_selectedNode, deltaX, deltaY);
- }
- else
- {
- _selectedNode.Position = new PointF(
- _initialNodePosition.X + deltaX,
- _initialNodePosition.Y + deltaY
- );
- }
+ // Перемещаем ноду относительно её начальной позиции
+ _selectedNode.Position = new Point(
+ _initialNodePosition.X + deltaX,
+ _initialNodePosition.Y + deltaY
+ );
- canvasView.Invalidate();
+ canvasView.Invalidate(); // Перерисовываем канву
}
+ // Завершение перетаскивания
else if (e.StatusType == GestureStatus.Completed)
{
- _isResizing = false;
+ // Можно добавить логику на завершение перетаскивания, например, включить прокрутку
+ scrollView.IsEnabled = true;
}
}
- private void ResizeNode(GraphNode node, double deltaX, double deltaY)
- {
- const double minSize = 50.0;
-
- if (_isResizing)
- {
- _selectedNode.Size = new Size(
- Math.Max(minSize, _initialNodeSize.Width + deltaX),
- Math.Max(minSize, _initialNodeSize.Height + deltaY)
- );
- }
- }
-
- private bool IsOnResizeHandle(GraphNode node, PointF point)
- {
- const float handleSize = 20f;
-
- var resizeHandleRect = new RectF(
- (float)(node.Position.X + node.Size.Width - handleSize),
- (float)(node.Position.Y + node.Size.Height - handleSize),
- handleSize, handleSize
- );
-
- return resizeHandleRect.Contains(point);
- }
-
private bool IsPointInsideNode(PointF point, GraphNode node)
{
return point.X >= node.Position.X &&