Right sidebar nav: Library / Reports / Documentation tabs (WebView2)
The body of the launcher is now a 2-column layout: - Left : swappable content area - Right (200px) : sidebar with 3 nav buttons + active-state highlighting Three pages, all under the same window chrome / footer: 1. **Library** (default) — the existing main view (featured version, other versions list, floating "Vérifier les MAJ" button, copyright). 2. **Reports** — embedded WebView2 navigated to a configurable URL. Default http://localhost/ProserveReport/ which matches the local stats tool installed on each customer machine alongside XAMPP. 3. **Documentation** — WebView2 with a configurable URL, falls back to a placeholder explaining where to set it if empty. Implementation - LocalConfig gains ReportUrl + DocumentationUrl (string). - MainViewModel gains LauncherPage enum + CurrentPage state with Navigate{Library,Report,Documentation}Command. ReportUri / DocumentationUri parse the strings to Uri for WebView2.Source. - Theme.xaml: NavButton style (transparent, left-aligned, hover darken, active state highlighted via Tag bool + accent left-border). - InverseBoolToVisibilityConverter added (true → Collapsed) for the documentation placeholder fallback. - Microsoft.Web.WebView2 NuGet (1.0.2792.45). Runtime is pre-installed on Win11 and auto-pushed via Windows Update on Win10. If absent, WebView2 surfaces an error which the user sees inline. - Settings → Avancés → Serveur extended with the two URL fields. - Strings.cs: NavLibrary / NavReport / NavDocumentation, SettingsReportUrl / SettingsDocsUrl, DocsPlaceholder, WebViewLoadError. Sidebar localized in 5 languages. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
xmlns:vm="clr-namespace:PSLauncher.App.ViewModels"
|
||||
xmlns:loc="clr-namespace:PSLauncher.Core.Localization;assembly=PSLauncher.Core"
|
||||
xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"
|
||||
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
|
||||
Title="PROSERVE Launcher"
|
||||
Icon="pack://application:,,,/Resources/favicon.ico"
|
||||
Background="Black"
|
||||
@@ -315,8 +316,23 @@
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<!-- Body : Grid pour pouvoir superposer le bouton flottant "Vérifier les MAJ" -->
|
||||
<!--
|
||||
Body : grid 2 colonnes — content area swap-pable à gauche, sidebar de
|
||||
navigation fixe à droite. Le content area lui-même est un Grid qui
|
||||
superpose plusieurs blocs (Library / Report / Documentation) gérés
|
||||
par leur Visibility liée à CurrentPage.
|
||||
-->
|
||||
<Grid Grid.Row="1">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="200" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- ============== Content area (col 0, swap par CurrentPage) ============== -->
|
||||
<Grid Grid.Column="0">
|
||||
|
||||
<!-- ====================== LIBRARY PAGE ====================== -->
|
||||
<Grid Visibility="{Binding IsLibrary, Converter={StaticResource BoolToVisibility}}">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="32,28">
|
||||
|
||||
@@ -547,6 +563,67 @@
|
||||
FontSize="11"
|
||||
Foreground="White" />
|
||||
</Border>
|
||||
</Grid>
|
||||
<!-- ====================== END LIBRARY PAGE ====================== -->
|
||||
|
||||
<!-- ====================== REPORT PAGE (WebView2) ====================== -->
|
||||
<Grid Background="{StaticResource Brush.Bg.Window}"
|
||||
Visibility="{Binding IsReport, Converter={StaticResource BoolToVisibility}}">
|
||||
<wv2:WebView2 x:Name="ReportWebView"
|
||||
Source="{Binding ReportUri, Mode=OneWay}" />
|
||||
</Grid>
|
||||
|
||||
<!-- ====================== DOCUMENTATION PAGE ====================== -->
|
||||
<Grid Background="{StaticResource Brush.Bg.Window}"
|
||||
Visibility="{Binding IsDocumentation, Converter={StaticResource BoolToVisibility}}">
|
||||
<!-- WebView2 si une URL est configurée, sinon un placeholder explicatif -->
|
||||
<wv2:WebView2 x:Name="DocsWebView"
|
||||
Source="{Binding DocumentationUri, Mode=OneWay}"
|
||||
Visibility="{Binding HasDocumentationUrl, Converter={StaticResource BoolToVisibility}}" />
|
||||
<TextBlock Text="{x:Static loc:Strings.DocsPlaceholder}"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource Brush.Text.Secondary}"
|
||||
FontSize="14" TextAlignment="Center" TextWrapping="Wrap"
|
||||
MaxWidth="500"
|
||||
Visibility="{Binding HasDocumentationUrl, Converter={StaticResource InverseBoolToVisibility}}" />
|
||||
</Grid>
|
||||
|
||||
</Grid>
|
||||
<!-- ============== END Content area ============== -->
|
||||
|
||||
<!-- ============== Right sidebar : nav buttons ============== -->
|
||||
<Border Grid.Column="1"
|
||||
Background="#0A0A0E"
|
||||
BorderBrush="{StaticResource Brush.Border}"
|
||||
BorderThickness="1,0,0,0">
|
||||
<StackPanel Orientation="Vertical" Margin="0,16,0,0">
|
||||
<!-- Style des boutons définis dans Theme.xaml (NavButton) -->
|
||||
<Button Style="{StaticResource NavButton}"
|
||||
Command="{Binding NavigateLibraryCommand}"
|
||||
Tag="{Binding IsLibrary}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="📚" FontSize="16" Margin="0,0,12,0" VerticalAlignment="Center" />
|
||||
<TextBlock Text="{x:Static loc:Strings.NavLibrary}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Style="{StaticResource NavButton}"
|
||||
Command="{Binding NavigateReportCommand}"
|
||||
Tag="{Binding IsReport}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="📊" FontSize="16" Margin="0,0,12,0" VerticalAlignment="Center" />
|
||||
<TextBlock Text="{x:Static loc:Strings.NavReport}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Style="{StaticResource NavButton}"
|
||||
Command="{Binding NavigateDocumentationCommand}"
|
||||
Tag="{Binding IsDocumentation}">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock Text="📖" FontSize="16" Margin="0,0,12,0" VerticalAlignment="Center" />
|
||||
<TextBlock Text="{x:Static loc:Strings.NavDocumentation}" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<!-- Footer : visible uniquement quand busy / status à afficher.
|
||||
|
||||
Reference in New Issue
Block a user