Skip to content

Commit 1f965d8

Browse files
ferrariofilippoyaira2
authored andcommitted
Feature: Add a setting to change the default IDE
1 parent 3078b19 commit 1f965d8

File tree

12 files changed

+326
-186
lines changed

12 files changed

+326
-186
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// Copyright (c) Files Community
2+
// Licensed under the MIT License.
3+
4+
namespace Files.App.Actions
5+
{
6+
internal sealed class OpenInIDEAction : ObservableObject, IAction
7+
{
8+
private readonly IDevToolsSettingsService _devToolsSettingsService;
9+
10+
private readonly IContentPageContext _context;
11+
12+
public string Label
13+
=> string.Format(
14+
"OpenInIDE".GetLocalizedResource(),
15+
_devToolsSettingsService.FriendlyIDEName);
16+
17+
public string Description
18+
=> string.Format(
19+
"OpenInIDEDescription".GetLocalizedResource(),
20+
_devToolsSettingsService.FriendlyIDEName);
21+
22+
public bool IsExecutable =>
23+
_context.Folder is not null &&
24+
!string.IsNullOrWhiteSpace(_devToolsSettingsService.IDEPath);
25+
26+
public OpenInIDEAction()
27+
{
28+
_devToolsSettingsService = Ioc.Default.GetRequiredService<IDevToolsSettingsService>();
29+
_context = Ioc.Default.GetRequiredService<IContentPageContext>();
30+
_context.PropertyChanged += Context_PropertyChanged;
31+
_devToolsSettingsService.PropertyChanged += DevSettings_PropertyChanged;
32+
}
33+
34+
public Task ExecuteAsync(object? parameter = null)
35+
{
36+
return Win32Helper.RunPowershellCommandAsync(
37+
$"& \'{_devToolsSettingsService.IDEPath}\' \'{_context.ShellPage?.ShellViewModel.WorkingDirectory}\'",
38+
PowerShellExecutionOptions.Hidden
39+
);
40+
}
41+
42+
private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
43+
{
44+
if (e.PropertyName == nameof(IContentPageContext.Folder))
45+
OnPropertyChanged(nameof(IsExecutable));
46+
}
47+
48+
private void DevSettings_PropertyChanged(object? sender, PropertyChangedEventArgs e)
49+
{
50+
if (e.PropertyName == nameof(IDevToolsSettingsService.IDEPath))
51+
OnPropertyChanged(nameof(IsExecutable));
52+
}
53+
}
54+
}

src/Files.App/Actions/Open/OpenInVSCodeAction.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Copyright (c) Files Community
2+
// Licensed under the MIT License.
3+
4+
namespace Files.App.Actions
5+
{
6+
internal sealed class OpenRepoInIDEAction : ObservableObject, IAction
7+
{
8+
private readonly IDevToolsSettingsService _devToolsSettingsService;
9+
10+
private readonly IContentPageContext _context;
11+
12+
public string Label
13+
=> string.Format("OpenRepoInIDE".GetLocalizedResource(), _devToolsSettingsService.FriendlyIDEName);
14+
15+
public string Description
16+
=> string.Format("OpenRepoInIDEDescription".GetLocalizedResource(), _devToolsSettingsService.FriendlyIDEName);
17+
18+
public bool IsExecutable =>
19+
_context.Folder is not null &&
20+
_context.ShellPage!.InstanceViewModel.IsGitRepository &&
21+
!string.IsNullOrWhiteSpace(_devToolsSettingsService.IDEPath);
22+
23+
public OpenRepoInIDEAction()
24+
{
25+
_context = Ioc.Default.GetRequiredService<IContentPageContext>();
26+
_devToolsSettingsService = Ioc.Default.GetRequiredService<IDevToolsSettingsService>();
27+
_context.PropertyChanged += Context_PropertyChanged;
28+
_devToolsSettingsService.PropertyChanged += DevSettings_PropertyChanged;
29+
}
30+
31+
public Task ExecuteAsync(object? parameter = null)
32+
{
33+
return Win32Helper.RunPowershellCommandAsync(
34+
$"& \'{_devToolsSettingsService.IDEPath}\' \'{_context.ShellPage!.InstanceViewModel.GitRepositoryPath}\'",
35+
PowerShellExecutionOptions.Hidden
36+
);
37+
}
38+
39+
private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
40+
{
41+
if (e.PropertyName == nameof(IContentPageContext.Folder))
42+
OnPropertyChanged(nameof(IsExecutable));
43+
}
44+
45+
private void DevSettings_PropertyChanged(object? sender, PropertyChangedEventArgs e)
46+
{
47+
if (e.PropertyName == nameof(IDevToolsSettingsService.IDEPath))
48+
OnPropertyChanged(nameof(IsExecutable));
49+
}
50+
}
51+
}

src/Files.App/Actions/Open/OpenRepoInVSCodeAction.cs

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/Files.App/Data/Commands/Manager/CommandCodes.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public enum CommandCodes
112112
RotateRight,
113113

114114
// Open
115-
OpenInVSCode,
116-
OpenRepoInVSCode,
115+
OpenInIDE,
116+
OpenRepoInIDE,
117117
OpenProperties,
118118
OpenReleaseNotes,
119119
OpenClassicProperties,

src/Files.App/Data/Commands/Manager/CommandManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ public IRichCommand this[HotKey hotKey]
113113
public IRichCommand OpenItem => commands[CommandCodes.OpenItem];
114114
public IRichCommand OpenItemWithApplicationPicker => commands[CommandCodes.OpenItemWithApplicationPicker];
115115
public IRichCommand OpenParentFolder => commands[CommandCodes.OpenParentFolder];
116-
public IRichCommand OpenInVSCode => commands[CommandCodes.OpenInVSCode];
117-
public IRichCommand OpenRepoInVSCode => commands[CommandCodes.OpenRepoInVSCode];
116+
public IRichCommand OpenInVSCode => commands[CommandCodes.OpenInIDE];
117+
public IRichCommand OpenRepoInVSCode => commands[CommandCodes.OpenRepoInIDE];
118118
public IRichCommand OpenProperties => commands[CommandCodes.OpenProperties];
119119
public IRichCommand OpenReleaseNotes => commands[CommandCodes.OpenReleaseNotes];
120120
public IRichCommand OpenClassicProperties => commands[CommandCodes.OpenClassicProperties];
@@ -317,8 +317,8 @@ public IEnumerator<IRichCommand> GetEnumerator() =>
317317
[CommandCodes.OpenItem] = new OpenItemAction(),
318318
[CommandCodes.OpenItemWithApplicationPicker] = new OpenItemWithApplicationPickerAction(),
319319
[CommandCodes.OpenParentFolder] = new OpenParentFolderAction(),
320-
[CommandCodes.OpenInVSCode] = new OpenInVSCodeAction(),
321-
[CommandCodes.OpenRepoInVSCode] = new OpenRepoInVSCodeAction(),
320+
[CommandCodes.OpenInIDE] = new OpenInIDEAction(),
321+
[CommandCodes.OpenRepoInIDE] = new OpenRepoInIDEAction(),
322322
[CommandCodes.OpenProperties] = new OpenPropertiesAction(),
323323
[CommandCodes.OpenReleaseNotes] = new OpenReleaseNotesAction(),
324324
[CommandCodes.OpenClassicProperties] = new OpenClassicPropertiesAction(),
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
// Copyright (c) Files Community
22
// Licensed under the MIT License.
33

4-
using Microsoft.UI.Xaml;
5-
using Microsoft.UI.Xaml.Media;
6-
74
namespace Files.App.Data.Contracts
85
{
96
public interface IDevToolsSettingsService : IBaseSettingsService, INotifyPropertyChanged
@@ -12,5 +9,15 @@ public interface IDevToolsSettingsService : IBaseSettingsService, INotifyPropert
129
/// Gets or sets a value when the Open in IDE button should be displayed on the status bar.
1310
/// </summary>
1411
OpenInIDEOption OpenInIDEOption { get; set; }
12+
13+
/// <summary>
14+
/// Gets or sets the path of the chosen IDE.
15+
/// </summary>
16+
string IDEPath { get; set; }
17+
18+
/// <summary>
19+
/// Gets or sets the friendly name of the chosen IDE.
20+
/// </summary>
21+
string FriendlyIDEName { get; set; }
1522
}
1623
}

src/Files.App/Helpers/Environment/SoftwareHelpers.cs

Lines changed: 0 additions & 80 deletions
This file was deleted.

src/Files.App/Services/Settings/DevToolsSettingsService.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,20 @@ public OpenInIDEOption OpenInIDEOption
1818
set => Set(value);
1919
}
2020

21+
/// <inheritdoc/>
22+
public string IDEPath
23+
{
24+
get => Get("") ?? "";
25+
set => Set(value);
26+
}
27+
28+
/// <inheritdoc/>
29+
public string FriendlyIDEName
30+
{
31+
get => Get("") ?? "";
32+
set => Set(value);
33+
}
34+
2135
protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e)
2236
{
2337
base.RaiseOnSettingChangedEvent(sender, e);

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3214,17 +3214,17 @@
32143214
<data name="CannotReachGitHubError" xml:space="preserve">
32153215
<value>Files cannot access GitHub right now.</value>
32163216
</data>
3217-
<data name="OpenInVSCode" xml:space="preserve">
3218-
<value>Open folder in VS Code</value>
3217+
<data name="OpenInIDE" xml:space="preserve">
3218+
<value>Open folder in {0}</value>
32193219
</data>
3220-
<data name="OpenInVSCodeDescription" xml:space="preserve">
3221-
<value>Open the current directory in Visual Studio Code</value>
3220+
<data name="OpenInIDEDescription" xml:space="preserve">
3221+
<value>Open the current directory in {0}</value>
32223222
</data>
3223-
<data name="OpenRepoInVSCode" xml:space="preserve">
3224-
<value>Open repo in VS Code</value>
3223+
<data name="OpenRepoInIDE" xml:space="preserve">
3224+
<value>Open repo in {0}</value>
32253225
</data>
3226-
<data name="OpenRepoInVSCodeDescription" xml:space="preserve">
3227-
<value>Open the root of the Git repo in Visual Studio Code</value>
3226+
<data name="OpenRepoInIDEDescription" xml:space="preserve">
3227+
<value>Open the root of the Git repo in {0}</value>
32283228
</data>
32293229
<data name="CopyCode" xml:space="preserve">
32303230
<value>Copy code</value>
@@ -4043,4 +4043,13 @@
40434043
<value>Add to shelf</value>
40444044
<comment>Tooltip that displays when dragging items to the Shelf Pane</comment>
40454045
</data>
4046+
<data name="DefaultIDE" xml:space="preserve">
4047+
<value>Default IDE</value>
4048+
</data>
4049+
<data name="IDEPathOrAlias" xml:space="preserve">
4050+
<value>IDE path or alias</value>
4051+
</data>
4052+
<data name="IDEPathExample" xml:space="preserve">
4053+
<value>e.g. "code" or "C:\...\code.exe"</value>
4054+
</data>
40464055
</root>

0 commit comments

Comments
 (0)