Forge
csharpdeeb25a2
1using Avalonia;
2using Avalonia.Controls;
3using Avalonia.Input;
4using CascadeIDE.Services;
5
6namespace CascadeIDE.Views;
7
8public partial class MainWindow
9{
10 private static void LogHighlight(string message)
11 {
12 try
13 {
14 var baseDir = AppContext.BaseDirectory;
15 var logDir = Path.Combine(baseDir, ".cascade-ide");
16 Directory.CreateDirectory(logDir);
17 var logPath = Path.Combine(logDir, "editor-highlight-log.txt");
18 var line = $"[{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss.fff} UTC] {message}{Environment.NewLine}";
19 lock (HighlightLogLock)
20 {
21 File.AppendAllText(logPath, line);
22 }
23 }
24 catch
25 {
26 // Never crash UI because of debug logging.
27 }
28 }
29
30 /// <summary>Подсветить эффективный контрол (по имени или под курсором). Оверлей скрывается через 3 с.</summary>
31 private string ShowHighlightForControl(string? name)
32 {
33 Control? control;
34 if (!string.IsNullOrWhiteSpace(name))
35 {
36 control = UiControlAppearance.FindControlByNameAcrossAllWindows(this, name.Trim());
37 if (control is null)
38 return $"Control not found: {name}.";
39 }
40 else
41 {
42 control = UiAgentHighlight.FindControlUnderCursorAnyWindow(this);
43 if (control is null)
44 return "No control under cursor. Specify name from ide_get_ui_layout.";
45 }
46
47 return UiAgentHighlight.ShowForControl(control);
48 }
49
50 private async void OnDocumentTabPointerPressed(object? sender, PointerPressedEventArgs e)
51 {
52 if (sender is not Button button || button.DataContext is not ViewModels.OpenDocumentViewModel doc)
53 return;
54 if (!e.GetCurrentPoint(button).Properties.IsLeftButtonPressed)
55 return;
56
57 var data = new DataTransfer();
58 data.Add(DataTransferItem.Create(DataFormat.Text, doc.FilePath));
59 await DragDrop.DoDragDropAsync(e, data, DragDropEffects.Move);
60 }
61
62 private void OnGroupTabsDragOver(object? sender, DragEventArgs e)
63 {
64 e.DragEffects = e.DataTransfer.Contains(DataFormat.Text) ? DragDropEffects.Move : DragDropEffects.None;
65 e.Handled = true;
66 }
67
68 private void OnGroup1TabsDrop(object? sender, DragEventArgs e) => MoveDroppedDocumentToGroup(e, 1);
69 private void OnGroup2TabsDrop(object? sender, DragEventArgs e) => MoveDroppedDocumentToGroup(e, 2);
70 private void OnGroup3TabsDrop(object? sender, DragEventArgs e) => MoveDroppedDocumentToGroup(e, 3);
71
72 private void MoveDroppedDocumentToGroup(DragEventArgs e, int group)
73 {
74 if (DataContext is not ViewModels.MainWindowViewModel vm)
75 return;
76 var path = e.DataTransfer.TryGetText();
77 if (string.IsNullOrWhiteSpace(path))
78 return;
79
80 switch (group)
81 {
82 case 2:
83 if (vm.MoveDocumentToGroup2Command.CanExecute(path))
84 vm.MoveDocumentToGroup2Command.Execute(path);
85 break;
86 case 3:
87 if (vm.MoveDocumentToGroup3Command.CanExecute(path))
88 vm.MoveDocumentToGroup3Command.Execute(path);
89 break;
90 default:
91 if (vm.MoveDocumentToGroup1Command.CanExecute(path))
92 vm.MoveDocumentToGroup1Command.Execute(path);
93 break;
94 }
95 }
96}
97
View only · write via MCP/CIDE