Files
2026-06-10 21:57:56 +02:00

249 lines
14 KiB
XML

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Firefox Add-on Manager"
Height="680" Width="920"
WindowStartupLocation="CenterScreen"
ResizeMode="CanMinimize">
<Window.Resources>
<!-- Farben -->
<SolidColorBrush x:Key="OrangeBrush" Color="#FF6414"/>
<SolidColorBrush x:Key="BlueBrush" Color="#466EB4"/>
<SolidColorBrush x:Key="GreenBrush" Color="#007850"/>
<SolidColorBrush x:Key="DarkRedBrush" Color="#B40000"/>
<SolidColorBrush x:Key="BgBrush" Color="#F5F5FA"/>
<!-- Basis-Button-Style -->
<Style x:Key="ActionButton" TargetType="Button">
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontSize" Value="13"/>
<Setter Property="Padding" Value="14,6"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}"
CornerRadius="4"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.85"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.4"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Status-Farb-Konverter via DataTrigger in ListBox -->
<Style x:Key="PolicyRowStyle" TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Padding" Value="0"/>
</Style>
</Window.Resources>
<Grid Background="{StaticResource BgBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="65"/>
<RowDefinition Height="*"/>
<RowDefinition Height="28"/>
</Grid.RowDefinitions>
<!-- Banner -->
<Border Grid.Row="0" Background="{StaticResource OrangeBrush}">
<StackPanel Margin="15,8,0,0">
<TextBlock Text="Firefox Add-on Manager"
FontSize="20" FontWeight="Bold"
Foreground="White" FontFamily="Segoe UI"/>
<TextBlock Text="{Binding AdminLabel}"
FontSize="10" Foreground="#CCFFFFFF" FontFamily="Segoe UI"/>
</StackPanel>
</Border>
<!-- Tabs -->
<TabControl Grid.Row="1" Margin="8,8,8,4"
FontFamily="Segoe UI" FontSize="12">
<!-- ===== TAB 1: Bereitstellung ===== -->
<TabItem Header="Maschinenweite Bereitstellung">
<Grid Margin="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Intune-Hinweis -->
<Border Grid.Row="0" Background="#FFF0C8" BorderBrush="#FFC060"
BorderThickness="1" CornerRadius="4" Padding="8,5" Margin="0,0,0,8"
Visibility="{Binding IsIntune, Converter={x:Static BooleanToVisibilityConverter.Default}}">
<TextBlock TextWrapping="Wrap" FontSize="11" Foreground="#C05000"
Text="Intune erkannt: JSON-String in Intune-Policy loescht Unterkeys beim naechsten Sync. Deploy-Skript via Intune als System-Skript deployen."/>
</Border>
<!-- Add-on Liste -->
<GroupBox Grid.Row="1" Header="Add-ons auswaehlen (Checkbox = fuer Deployment markieren)">
<DataGrid Name="AddonGrid"
ItemsSource="{Binding Deploy.Addons}"
AutoGenerateColumns="False"
CanUserAddRows="False"
GridLinesVisibility="Horizontal"
HeadersVisibility="Column"
FontFamily="Segoe UI" FontSize="12"
RowHeight="26">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="" Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" Width="35"/>
<DataGridTextColumn Header="Add-on" Binding="{Binding Name}" Width="170" IsReadOnly="True"/>
<DataGridTextColumn Header="Beschreibung" Binding="{Binding Description}" Width="200" IsReadOnly="True"/>
<DataGridTextColumn Header="Add-on ID" Binding="{Binding Id}" Width="220" IsReadOnly="True"/>
<DataGridTextColumn Header="Interne URL" Binding="{Binding InstallUrl}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<!-- Status -->
<TextBlock Grid.Row="2" Text="{Binding Deploy.StatusMessage}"
Foreground="#444" FontSize="11" Margin="2,4"/>
<!-- Buttons -->
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,6,0,0">
<Button Content="Jetzt deployen (Registry)"
Background="{StaticResource OrangeBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Deploy.DeployCommand}"
Margin="0,0,8,0"/>
<Button Content="PowerShell-Skript exportieren"
Background="{StaticResource BlueBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Deploy.ExportScriptCommand}"
Margin="0,0,8,0"/>
<Button Content="Alle auswaehlen"
Background="#888"
Style="{StaticResource ActionButton}"
Margin="0,0,8,0"
Click="SelectAll_Click"/>
<Button Content="Keine"
Background="#888"
Style="{StaticResource ActionButton}"
Click="SelectNone_Click"/>
</StackPanel>
</Grid>
</TabItem>
<!-- ===== TAB 2: Diagnose ===== -->
<TabItem Header="Diagnose / Intune">
<Grid Margin="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Intune-Status Banner -->
<Border Grid.Row="0" CornerRadius="4" Padding="8,5" Margin="0,0,0,8">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Background" Value="#CCFFCC"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsIntune}" Value="True">
<Setter Property="Background" Value="#FFF0C8"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="{Binding Diagnostic.StatusMessage}" FontSize="11" TextWrapping="Wrap"/>
</Border>
<!-- Policy Check Liste -->
<GroupBox Grid.Row="1" Header="Policy-Konflikt-Pruefung">
<DataGrid Name="PolicyGrid"
ItemsSource="{Binding Diagnostic.PolicyChecks}"
SelectedItem="{Binding Diagnostic.SelectedCheck}"
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
GridLinesVisibility="Horizontal"
HeadersVisibility="Column"
FontFamily="Segoe UI" FontSize="11"
RowHeight="24">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="FEHLER">
<Setter Property="Background" Value="#FFD2D2"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="WARN">
<Setter Property="Background" Value="#FFF5CC"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="OK">
<Setter Property="Background" Value="#D2FFD2"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="INFO">
<Setter Property="Background" Value="#E8F0FF"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Status" Binding="{Binding Status}" Width="65" FontWeight="Bold"/>
<DataGridTextColumn Header="Policy" Binding="{Binding Policy}" Width="240"/>
<DataGridTextColumn Header="Aktueller Wert" Binding="{Binding CurrentValue}" Width="160"/>
<DataGridTextColumn Header="Auswirkung / Loesung" Binding="{Binding Solution}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</GroupBox>
<!-- Status -->
<TextBlock Grid.Row="2" Text="{Binding Diagnostic.StatusMessage}"
Foreground="#444" FontSize="11" Margin="2,4"/>
<!-- Buttons -->
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,6,0,0">
<Button Content="Policy-Check ausfuehren"
Background="{StaticResource DarkRedBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Diagnostic.RunCheckCommand}"
Margin="0,0,8,0"/>
<Button Content="Markierten Fehler beheben"
Background="#B46000"
Style="{StaticResource ActionButton}"
Command="{Binding Diagnostic.FixSelectedCommand}"
Margin="0,0,8,0"/>
<Button Content="Alle Fehler beheben"
Background="{StaticResource DarkRedBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Diagnostic.FixAllErrorsCommand}"
Margin="0,0,8,0"/>
<Button Content="about:policies oeffnen"
Background="{StaticResource OrangeBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Diagnostic.OpenAboutPoliciesCommand}"
Margin="0,0,8,0"/>
<Button Content="REG-Datei einlesen"
Background="{StaticResource BlueBrush}"
Style="{StaticResource ActionButton}"
Command="{Binding Diagnostic.ImportRegCommand}"/>
</StackPanel>
</Grid>
</TabItem>
</TabControl>
<!-- Statusleiste -->
<Border Grid.Row="2" Background="#E0E0E8" BorderBrush="#CCCCCC" BorderThickness="0,1,0,0">
<TextBlock Text="{Binding StatusBar}"
VerticalAlignment="Center" Margin="8,0"
FontSize="10" Foreground="#444" FontFamily="Consolas"/>
</Border>
</Grid>
</Window>