|
1 | 1 | using System; |
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.ComponentModel; |
3 | 4 | using System.Diagnostics; |
4 | 5 | using System.IO; |
| 6 | +using System.Linq; |
5 | 7 | using System.Windows.Forms; |
6 | 8 | using ASCompletion; |
7 | 9 | using ASCompletion.Completion; |
|
16 | 18 | using ProjectManager.Projects; |
17 | 19 | using QuickNavigate.Forms; |
18 | 20 | using QuickNavigate.Helpers; |
| 21 | +using ScintillaNet; |
19 | 22 |
|
20 | 23 | namespace QuickNavigate |
21 | 24 | { |
@@ -119,6 +122,13 @@ public void HandleEvent(object sender, NotifyEvent e, HandlingPriority priority) |
119 | 122 | #endregion |
120 | 123 | } |
121 | 124 | break; |
| 125 | + case EventType.Keys: |
| 126 | + var ke = e as KeyEvent; |
| 127 | + if (ke.Value == PluginBase.MainForm.GetShortcutItemKeys(ShortcutId.GotoPreviousMember)) |
| 128 | + GotoPreviousMember(); |
| 129 | + else if (ke.Value == PluginBase.MainForm.GetShortcutItemKeys(ShortcutId.GotoNextMember)) |
| 130 | + GotoNextMember(); |
| 131 | + break; |
122 | 132 | } |
123 | 133 | } |
124 | 134 |
|
@@ -151,7 +161,7 @@ void LoadSettings() |
151 | 161 | /// </summary> |
152 | 162 | void AddEventHandlers() |
153 | 163 | { |
154 | | - EventManager.AddEventHandler(this, EventType.UIStarted | EventType.FileSwitch | EventType.Command); |
| 164 | + EventManager.AddEventHandler(this, EventType.UIStarted | EventType.FileSwitch | EventType.Command | EventType.Keys); |
155 | 165 | QuickContextMenuItem.SetDocumentClassMenuItem.Click += OnSetDocumentClassMenuClick; |
156 | 166 | QuickContextMenuItem.GotoPositionOrLineMenuItem.Click += OnGotoPositionOrLineMenuClick; |
157 | 167 | QuickContextMenuItem.ShowInQuickOutlineMenuItem.Click += OnShowInQuickOutlineMenuClick; |
@@ -186,6 +196,8 @@ void CreateMenuItems() |
186 | 196 | item = new ToolStripMenuItem("Recent Projects", PluginBase.MainForm.FindImage("274"), ShowRecentProjets); |
187 | 197 | PluginBase.MainForm.RegisterShortcutItem(ShortcutId.RecentProjects, item); |
188 | 198 | menu.DropDownItems.Add(item); |
| 199 | + PluginBase.MainForm.RegisterShortcutItem(ShortcutId.GotoNextMember, Keys.None); |
| 200 | + PluginBase.MainForm.RegisterShortcutItem(ShortcutId.GotoPreviousMember, Keys.None); |
189 | 201 | } |
190 | 202 |
|
191 | 203 | /// <summary> |
@@ -344,11 +356,43 @@ static void ShowInFileExplorer([NotNull] Form sender, [NotNull] MemberModel mode |
344 | 356 | })); |
345 | 357 | } |
346 | 358 |
|
| 359 | + static void GotoPreviousMember() |
| 360 | + { |
| 361 | + var members = GetCurrentFileMembers(); |
| 362 | + if (members.Count == 0) return; |
| 363 | + members.Reverse(); |
| 364 | + var line = ASContext.Context.CurrentLine; |
| 365 | + var target = members.FirstOrDefault(member => member.LineFrom < line); |
| 366 | + if (target != null) FormHelper.Navigate(target); |
| 367 | + } |
| 368 | + |
| 369 | + static void GotoNextMember() |
| 370 | + { |
| 371 | + var members = GetCurrentFileMembers(); |
| 372 | + if (members.Count == 0) return; |
| 373 | + var line = ASContext.Context.CurrentLine; |
| 374 | + var target = members.FirstOrDefault(member => member.LineFrom > line); |
| 375 | + if (target != null) FormHelper.Navigate(target); |
| 376 | + } |
| 377 | + |
| 378 | + [NotNull, ItemNotNull] |
| 379 | + static List<MemberModel> GetCurrentFileMembers() |
| 380 | + { |
| 381 | + var file = ASContext.Context.CurrentModel; |
| 382 | + var result = new List<MemberModel>(file.Members.Items); |
| 383 | + foreach (var it in file.Classes) |
| 384 | + { |
| 385 | + result.Add(it); |
| 386 | + result.AddRange(it.Members.Items); |
| 387 | + } |
| 388 | + return result; |
| 389 | + } |
| 390 | + |
347 | 391 | #endregion |
348 | 392 |
|
349 | 393 | static void SetDocumentClass([NotNull] MemberModel model) |
350 | 394 | { |
351 | | - var project = (Project) PluginBase.CurrentProject; |
| 395 | + var project = (Project)PluginBase.CurrentProject; |
352 | 396 | project.SetDocumentClass(model.InFile.FileName, true); |
353 | 397 | project.Save(); |
354 | 398 | var ui = FormHelper.GetProjectManagerPluginUI(); |
|
0 commit comments