Files
SharpIDE/src/SharpIDE.Photino/Layout/MainLayout.razor
2025-08-01 00:58:18 +10:00

67 lines
2.3 KiB
Plaintext

@using SharpIDE.Application.Features.Build
@using SharpIDE.Application.Features.SolutionDiscovery
@using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence
@inherits LayoutComponentBase
@inject IDialogService DialogService
@inject BuildService BuildService
<MudLayout>
<MudAppBar Dense="true">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" Edge="Edge.Start" OnClick="@((e) => DrawerToggle())" />
<MudButtonGroup OverrideStyles="false">
<MudButton Variant="Variant.Filled" Size="Size.Small" Color="Color.Primary" OnClick="@BuildSolution">Build</MudButton>
<MudButton Variant="Variant.Outlined" Size="Size.Small" Color="Color.Primary">Rebuild</MudButton>
<MudButton Variant="Variant.Outlined" Size="Size.Small" Color="Color.Primary">Clean</MudButton>
</MudButtonGroup>
</MudAppBar>
<MudDrawer @bind-Open="@_drawerOpen" Width="400px" ClipMode="DrawerClipMode.Always">
@if (_solutionFilePath is not null)
{
<SolutionExplorer @bind-SelectedFile="@_selectedFile" SolutionModel="@_solutionModel" SolutionFilePath="@_solutionFilePath"/>
}
@* <NavMenu/> *@
</MudDrawer>
<MudMainContent>
<MudContainer MaxWidth="MaxWidth.False" Class="mt-2">
@* @Body *@
@if (_solutionFilePath is not null)
{
<CodeViewer SelectedFile="@_selectedFile" />
}
</MudContainer>
</MudMainContent>
</MudLayout>
@code {
bool _drawerOpen = true;
void DrawerToggle()
{
_drawerOpen = !_drawerOpen;
}
private string? _solutionFilePath;
private SharpIdeSolutionModel? _solutionModel;
private SharpIdeFile? _selectedFile;
protected override async Task OnInitializedAsync()
{
var dialogRef = await DialogService.ShowAsync<SolutionPickerDialog>("Open Solution", new DialogOptions { FullWidth = true, MaxWidth = MaxWidth.Medium, BackdropClick = false });
var result = await dialogRef.Result;
if (result is null) throw new InvalidOperationException("Dialog result is null");
if (result.Canceled) throw new OperationCanceledException("Dialog was canceled");
var solutionFilePath = (string)result.Data!;
_solutionFilePath = solutionFilePath;
//await BuildService.BuildSolutionAsync(_solutionFilePath);
var solutionModel = await VsPersistenceMapper.GetSolutionModel(_solutionFilePath);
_solutionModel = solutionModel;
}
private async Task BuildSolution()
{
await BuildService.BuildSolutionAsync(_solutionFilePath!);
}
}