Skip to content

Commit 7bdbcb2

Browse files
committed
feat: Option to set double-click to switch to the editor #139
1 parent 5235692 commit 7bdbcb2

File tree

6 files changed

+63
-9
lines changed

6 files changed

+63
-9
lines changed

CodeNav.Shared/Controls/ItemDataTemplate.xaml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
</ResourceDictionary.MergedDictionaries>
99

1010
<DataTemplate DataType="{x:Type models:CodeItem}">
11-
<Button Command="{Binding Path=ClickItemCommand}" CommandParameter="{Binding StartLinePosition}"
12-
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
11+
<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
1312
ContextMenu="{StaticResource ItemContextMenu}"
1413
BorderThickness="0"
1514
HorizontalContentAlignment="Stretch"
@@ -19,6 +18,16 @@
1918
Margin="-3"
2019
Opacity="{Binding Opacity}">
2120

21+
<Button.InputBindings>
22+
<MouseBinding
23+
Gesture="LeftClick"
24+
Command="{Binding Path=ClickItemCommand}"
25+
CommandParameter="{Binding StartLinePosition}" />
26+
<MouseBinding
27+
Gesture="LeftDoubleClick"
28+
Command="{Binding Path=EditLineCommand}" />
29+
</Button.InputBindings>
30+
2231
<Grid>
2332
<Grid.ColumnDefinitions>
2433
<ColumnDefinition Width="Auto" />

CodeNav.Shared/Helpers/DocumentHelper.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using System.Linq;
1616
using System.Threading.Tasks;
1717
using System.Windows.Controls;
18+
using System.Windows.Forms;
1819
using Task = System.Threading.Tasks.Task;
1920

2021
namespace CodeNav.Helpers
@@ -128,6 +129,39 @@ public static async Task ScrollToLine(LinePosition? linePosition, string filePat
128129
}
129130
}
130131

132+
public static async Task EditLine(LinePosition? linePosition, string filePath = "")
133+
{
134+
if (linePosition == null)
135+
{
136+
return;
137+
}
138+
139+
try
140+
{
141+
var documentView = await VS.Documents.GetActiveDocumentViewAsync();
142+
143+
if (documentView?.FilePath != filePath)
144+
{
145+
documentView = await VS.Documents.OpenInPreviewTabAsync(filePath);
146+
}
147+
148+
if (documentView?.TextBuffer == null ||
149+
documentView?.TextView == null)
150+
{
151+
return;
152+
}
153+
154+
var line = documentView.TextView.TextSnapshot.GetLineFromLineNumber(linePosition.Value.Line);
155+
var point = new SnapshotPoint(line.Snapshot, line.Start.Position + linePosition.Value.Character);
156+
157+
documentView.TextView.Caret.MoveTo(point);
158+
}
159+
catch (Exception)
160+
{
161+
// Ignore
162+
}
163+
}
164+
131165
public static async Task SelectLines(TextSpan textSpan)
132166
{
133167
try

CodeNav.Shared/Mappers/BaseMapper.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ public static LinePosition GetStartLinePosition(SyntaxToken identifier) =>
9191
public static int GetStartLine(SyntaxToken identifier) =>
9292
GetStartLinePosition(identifier).Line + 1;
9393

94+
public static LinePosition GetStartLinePosition(SyntaxNode source, SyntaxTokenList modifiers) =>
95+
source.SyntaxTree.GetLineSpan(modifiers.Span).StartLinePosition;
96+
97+
public static int GetStartLine(SyntaxNode source, SyntaxTokenList modifiers) =>
98+
GetStartLinePosition(source, modifiers).Line + 1;
99+
94100
private static CodeItemAccessEnum MapAccess(SyntaxTokenList modifiers, SyntaxNode source)
95101
{
96102
if (modifiers.Any(m => m.RawKind == (int)SyntaxKind.SealedKeyword ||

CodeNav.Shared/Mappers/MethodMapper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public static class MethodMapper
7070
item.Id = IdMapper.MapId(item.FullName, parameterList);
7171
item.Kind = kind;
7272
item.Moniker = IconMapper.MapMoniker(item.Kind, item.Access);
73-
item.StartLine = BaseMapper.GetStartLine(identifier);
74-
item.StartLinePosition = BaseMapper.GetStartLinePosition(identifier);
73+
item.StartLine = BaseMapper.GetStartLine(node, modifiers);
74+
item.StartLinePosition = BaseMapper.GetStartLinePosition(node, modifiers);
7575

7676
if (TriviaSummaryMapper.HasSummary(node) && SettingsHelper.UseXMLComments)
7777
{

CodeNav.Shared/Models/CodeItem.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
using System.Runtime.Serialization;
1515
using Task = System.Threading.Tasks.Task;
1616
using Microsoft.VisualStudio.Shell;
17-
using System.Threading;
1817

1918
namespace CodeNav.Models
2019
{
@@ -230,6 +229,13 @@ private async Task ClickItemAsync()
230229
public ICommand SelectInCodeCommand => new DelegateCommand(SelectInCode);
231230
public void SelectInCode(object args) => DocumentHelper.SelectLines(Span).FireAndForget();
232231

232+
public ICommand EditLineCommand => new DelegateCommand(EditLine);
233+
public void EditLine(object args)
234+
{
235+
IsDoubleClicked = true;
236+
DocumentHelper.EditLine(StartLinePosition, FilePath).FireAndForget();
237+
}
238+
233239
public ICommand CopyNameCommand => new DelegateCommand(CopyName);
234240
public void CopyName(object args) => Clipboard.SetText(Name);
235241

CodeNav.Shared/Styles/PlusMinusExpanderStyles.xaml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,13 @@
8888
BorderThickness="0"
8989
Margin="4,0,0,0">
9090
<Button.InputBindings>
91-
92-
<MouseBinding
93-
Gesture="LeftDoubleClick"
94-
Command="{Binding Path=ToggleIsExpandedCommand}" />
9591
<MouseBinding
9692
Gesture="LeftClick"
9793
Command="{Binding Path=ClickItemCommand}"
9894
CommandParameter="{Binding StartLinePosition}" />
95+
<MouseBinding
96+
Gesture="LeftDoubleClick"
97+
Command="{Binding Path=ToggleIsExpandedCommand}" />
9998
</Button.InputBindings>
10099
</Button>
101100
</Border>

0 commit comments

Comments
 (0)