run panel v1
This commit is contained in:
@@ -50,6 +50,7 @@ public class RunService
|
||||
});
|
||||
|
||||
project.Running = true;
|
||||
project.OpenInRunPanel = true;
|
||||
GlobalEvents.InvokeProjectsRunningChanged();
|
||||
await process.WaitForExitAsync().WaitAsync(project.RunningCancellationTokenSource.Token).ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing);
|
||||
if (project.RunningCancellationTokenSource.IsCancellationRequested)
|
||||
|
||||
@@ -34,4 +34,7 @@ public class SharpIdeProjectModel : ISharpIdeNode
|
||||
public Project MsBuildEvaluationProject => MsBuildEvaluationProjectTask.IsCompletedSuccessfully
|
||||
? MsBuildEvaluationProjectTask.Result
|
||||
: throw new InvalidOperationException("Do not attempt to access the MsBuildEvaluationProject before it has been loaded");
|
||||
|
||||
public bool IsRunnable => MsBuildEvaluationProject.GetPropertyValue("OutputType") is "Exe" or "WinExe";
|
||||
public bool OpenInRunPanel { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,19 +1,66 @@
|
||||
@using SharpIDE.Application.Features.Run
|
||||
@using SharpIDE.Application.Features.Events
|
||||
@using SharpIDE.Application.Features.Run
|
||||
@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence
|
||||
|
||||
@implements IDisposable
|
||||
|
||||
@inject RunService RunService
|
||||
|
||||
<MudStack Style="height: 100%">
|
||||
<MudText>Run</MudText>
|
||||
@foreach(var projects in SolutionModel.AllProjects)
|
||||
{
|
||||
<MudButton OnClick="@(async () => await RunService.RunProject(projects))" Variant="Variant.Filled" Color="Color.Primary" Style="margin: 4px;">
|
||||
<MudText>@projects.Name</MudText>
|
||||
</MudButton>
|
||||
}
|
||||
<style>
|
||||
.lowercase-tab-header {
|
||||
text-transform: none;
|
||||
}
|
||||
</style>
|
||||
@* <MudText>Run</MudText> *@
|
||||
<MudTabs KeepPanelsAlive="true" TabPanelClass="lowercase-tab-header">
|
||||
<ChildContent>
|
||||
@foreach (var tab in OpenTabs)
|
||||
{
|
||||
<MudTabPanel ID="@tab" Text="@tab.Name">
|
||||
Tab content
|
||||
</MudTabPanel>
|
||||
}
|
||||
</ChildContent>
|
||||
<TabPanelHeader>
|
||||
@if (context.ID is SharpIdeProjectModel project)
|
||||
{
|
||||
@if (project.Running)
|
||||
{
|
||||
<MudIcon Icon="@Icons.Material.Filled.Circle" Color="Color.Success"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<MudIconButton Class="ml-2 pa-1" Color="Color.Inherit" Size="Size.Small" Icon="@Icons.Material.Filled.Close" OnClick="@(() => CloseTab(project))"/>
|
||||
}
|
||||
}
|
||||
else throw new InvalidOperationException("Tab ID must be of type SharpIdeProjectModel");
|
||||
</TabPanelHeader>
|
||||
</MudTabs>
|
||||
</MudStack>
|
||||
|
||||
@code {
|
||||
[Parameter, EditorRequired]
|
||||
public SharpIdeSolutionModel SolutionModel { get; set; } = null!;
|
||||
|
||||
private IEnumerable<SharpIdeProjectModel> OpenTabs => SolutionModel.AllProjects.Where(s => s.OpenInRunPanel);
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
var tasks = SolutionModel.AllProjects.Select(p => p.MsBuildEvaluationProjectTask);
|
||||
await Task.WhenAll(tasks);
|
||||
GlobalEvents.ProjectsRunningChanged += OnProjectsRunningChanged;
|
||||
}
|
||||
|
||||
private void CloseTab(SharpIdeProjectModel project)
|
||||
{
|
||||
project.OpenInRunPanel = false;
|
||||
}
|
||||
|
||||
private async Task OnProjectsRunningChanged()
|
||||
{
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
public void Dispose() => GlobalEvents.ProjectsRunningChanged -= OnProjectsRunningChanged;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user