Uitrol 27-09-2026 18:00
This commit is contained in:
@@ -278,8 +278,8 @@
|
||||
@onkeydown="e => ToetsAsync(e, () => TegelOpenenAsync(item))">
|
||||
<div class="rij">
|
||||
<div class="groei">
|
||||
<span class="groot" title="@item.Title">@item.Title</span>
|
||||
<div class="zacht">@Tonen.Categorie(item.Category)</div>
|
||||
<span class="groot">@Tonen.Categorie(item.Category)</span>
|
||||
<div class="zacht" title="@item.Title">@item.Title</div>
|
||||
|
||||
@* stopPropagation, want anders opent een druk op de prullenbak ook meteen
|
||||
het scherm met de inhoud. *@
|
||||
|
||||
@@ -298,9 +298,12 @@
|
||||
<Button x:Name="KnopGelijk" Content="Gelijkzetten aan Gitea" Margin="0,0,10,0"
|
||||
ToolTip="Zet de projectmap exact gelijk aan Gitea (origin/main). Lokale, nog niet gepushte wijzigingen gaan van main af, maar worden eerst veiliggesteld op een reddingsboei-tak."
|
||||
Click="KnopGelijk_Click" />
|
||||
<Button x:Name="KnopRelease" Content="Release maken…"
|
||||
<Button x:Name="KnopRelease" Content="Release maken…" Margin="0,0,10,0"
|
||||
ToolTip="Maakt van de huidige main een releaseversie: branch release/x.y.z en tag vX.Y.Z, en pusht die naar Gitea."
|
||||
Click="KnopRelease_Click" />
|
||||
<Button x:Name="KnopInstel" Content="Instellingen"
|
||||
ToolTip="Server, mappen, testadres, Chrome en Gitea-gegevens (uitroller.json)."
|
||||
Click="KnopInstel_Click" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</TabItem>
|
||||
|
||||
@@ -966,6 +966,23 @@ public partial class Hoofdvenster : Window
|
||||
await GiteaKnopBijwerkenAsync(true);
|
||||
}
|
||||
|
||||
/// <summary>Server, mappen, testadres, Chrome en Gitea-gegevens (uitroller.json). Na opslaan
|
||||
/// het venster verversen: de doelregel, of versturen nu kan, en de Gitea-timer/-knop.</summary>
|
||||
private void KnopInstel_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var venster = new Instellingenvenster(_instellingen) { Owner = this };
|
||||
if (venster.ShowDialog() != true) return;
|
||||
|
||||
Doelregel.Text = $"Server: {_instellingen.Server}:{_instellingen.Poort} • " +
|
||||
$"Project: {_instellingen.Projectmap}";
|
||||
|
||||
KnopProef.IsEnabled = _instellingen.KanVersturen;
|
||||
Meld("Instellingen opgeslagen.", false);
|
||||
|
||||
GiteaTimerInstellen();
|
||||
_ = GiteaKnopBijwerkenAsync(true);
|
||||
}
|
||||
|
||||
private void ZetGiteaBezig(bool bezig)
|
||||
{
|
||||
_giteaBezig = bezig;
|
||||
|
||||
@@ -66,6 +66,11 @@ public class Instellingen
|
||||
new JsonSerializerOptions { PropertyNameCaseInsensitive = true }) ?? new Instellingen();
|
||||
}
|
||||
|
||||
/// <summary>Schrijft de instellingen terug naar uitroller.json in de map boven de exe
|
||||
/// (de blijvende plek, zie <see cref="Pad"/>).</summary>
|
||||
public void Bewaar() =>
|
||||
File.WriteAllText(Pad, JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true }));
|
||||
|
||||
/// <summary>
|
||||
/// Wat er mankeert om te kunnen bouwen en inpakken. Null als dat kan.
|
||||
///
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
<Window x:Class="MijnBesluit.Uitroller.Instellingenvenster"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
Title="Instellingen" Height="620" Width="560"
|
||||
Icon="uitroller.ico"
|
||||
WindowStartupLocation="CenterOwner" Background="#F4F5F7"
|
||||
TextOptions.TextFormattingMode="Ideal" UseLayoutRounding="True"
|
||||
FontFamily="Segoe UI">
|
||||
|
||||
<!-- Zelfde palet en stijlen als Hoofdvenster.xaml, hier los gehouden omdat dit een eigen
|
||||
venster is (geen gedeeld resource-woordenboek in dit project). -->
|
||||
<Window.Resources>
|
||||
<SolidColorBrush x:Key="Vlak" Color="#FFFFFF" />
|
||||
<SolidColorBrush x:Key="Rand" Color="#E3E6EC" />
|
||||
<SolidColorBrush x:Key="RandDonker" Color="#D5D9E0" />
|
||||
<SolidColorBrush x:Key="Tekst" Color="#23262B" />
|
||||
<SolidColorBrush x:Key="TekstDof" Color="#6B7280" />
|
||||
<SolidColorBrush x:Key="Accent" Color="#8FA12E" />
|
||||
<SolidColorBrush x:Key="AccentDonker" Color="#728226" />
|
||||
<SolidColorBrush x:Key="Hover" Color="#EEF0F3" />
|
||||
<SolidColorBrush x:Key="Ingedrukt" Color="#E4E7EC" />
|
||||
|
||||
<Style TargetType="Button">
|
||||
<Setter Property="Background" Value="{StaticResource Vlak}" />
|
||||
<Setter Property="Foreground" Value="{StaticResource Tekst}" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource RandDonker}" />
|
||||
<Setter Property="BorderThickness" Value="1" />
|
||||
<Setter Property="Padding" Value="14,7" />
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
<Setter Property="Cursor" Value="Hand" />
|
||||
<Setter Property="SnapsToDevicePixels" Value="True" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="rand" Background="{TemplateBinding Background}"
|
||||
BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
|
||||
CornerRadius="8" Padding="{TemplateBinding Padding}"
|
||||
TextElement.Foreground="{TemplateBinding Foreground}">
|
||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter TargetName="rand" Property="Background" Value="{StaticResource Hover}" />
|
||||
</Trigger>
|
||||
<Trigger Property="IsPressed" Value="True">
|
||||
<Setter TargetName="rand" Property="Background" Value="{StaticResource Ingedrukt}" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="Primair" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
|
||||
<Setter Property="Background" Value="{StaticResource Accent}" />
|
||||
<Setter Property="Foreground" Value="White" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource Accent}" />
|
||||
<Setter Property="FontWeight" Value="SemiBold" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="Button">
|
||||
<Border x:Name="rand" Background="{TemplateBinding Background}" CornerRadius="8"
|
||||
Padding="{TemplateBinding Padding}" TextElement.Foreground="{TemplateBinding Foreground}">
|
||||
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||
</Border>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsMouseOver" Value="True">
|
||||
<Setter TargetName="rand" Property="Background" Value="{StaticResource AccentDonker}" />
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style TargetType="TextBox">
|
||||
<Setter Property="Padding" Value="8,6" />
|
||||
<Setter Property="FontSize" Value="13" />
|
||||
<Setter Property="BorderBrush" Value="{StaticResource RandDonker}" />
|
||||
<Setter Property="Background" Value="{StaticResource Vlak}" />
|
||||
</Style>
|
||||
|
||||
<Style TargetType="GroupBox">
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="GroupBox">
|
||||
<StackPanel>
|
||||
<TextBlock Text="{TemplateBinding Header}" FontSize="12" FontWeight="SemiBold"
|
||||
Foreground="{StaticResource TekstDof}" Margin="2,0,0,6" />
|
||||
<Border Background="{StaticResource Vlak}" BorderBrush="{StaticResource Rand}"
|
||||
BorderThickness="1" CornerRadius="10" Padding="14">
|
||||
<ContentPresenter />
|
||||
</Border>
|
||||
</StackPanel>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="VeldLabel" TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{StaticResource TekstDof}" />
|
||||
<Setter Property="Margin" Value="0,0,0,3" />
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
|
||||
<Grid Margin="18">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="*" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<StackPanel Grid.Row="0" Margin="0,0,0,14">
|
||||
<TextBlock Text="Instellingen" FontSize="20" FontWeight="Bold" Foreground="{StaticResource Tekst}" />
|
||||
<TextBlock Text="Deze staan in uitroller.json, in de map boven de exe (overleeft een build)."
|
||||
Foreground="{StaticResource TekstDof}" Margin="0,4,0,0" TextWrapping="Wrap" />
|
||||
</StackPanel>
|
||||
|
||||
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
<GroupBox Header="Server en geheim" Margin="0,0,0,14">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Server" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldServer" Margin="0,0,0,10" />
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="14" />
|
||||
<ColumnDefinition Width="120" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="Geheim" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldGeheim" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="Poort" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldPoort" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="Mappen" Margin="0,0,0,14">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Projectmap" Style="{StaticResource VeldLabel}" />
|
||||
<Grid Margin="0,0,0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="10" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Grid.Column="0" x:Name="VeldProjectmap" />
|
||||
<Button Grid.Column="2" Content="Bladeren…" Click="Bladeren_Projectmap" />
|
||||
</Grid>
|
||||
|
||||
<TextBlock Text="Publicatiemap" Style="{StaticResource VeldLabel}" />
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="10" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Grid.Column="0" x:Name="VeldPublicatiemap" />
|
||||
<Button Grid.Column="2" Content="Bladeren…" Click="Bladeren_Publicatiemap" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="Lokaal testen" Margin="0,0,0,14">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Testadres (van MijnBesluit.Web, launchSettings.json)" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldTestadres" Margin="0,0,0,10" />
|
||||
|
||||
<TextBlock Text="Chrome.exe (leeg = de gewone plek)" Style="{StaticResource VeldLabel}" />
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="10" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBox Grid.Column="0" x:Name="VeldChrome" />
|
||||
<Button Grid.Column="2" Content="Bladeren…" Click="Bladeren_Chrome" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
|
||||
<GroupBox Header="Gitea (alleen invullen als de git-remote 'origin' ontbreekt of niet te ontleden is)">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Basis-URL" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldGiteaUrl" Margin="0,0,0,10" />
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="14" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<StackPanel Grid.Column="0">
|
||||
<TextBlock Text="Eigenaar" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldGiteaEigenaar" />
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2">
|
||||
<TextBlock Text="Repo" Style="{StaticResource VeldLabel}" />
|
||||
<TextBox x:Name="VeldGiteaRepo" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</GroupBox>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,16,0,0">
|
||||
<Button Content="Annuleren" Margin="0,0,10,0" Click="Annuleren_Click" />
|
||||
<Button Content="Opslaan" Style="{StaticResource Primair}" Click="Opslaan_Click" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</Window>
|
||||
@@ -0,0 +1,84 @@
|
||||
using System.Windows;
|
||||
|
||||
namespace MijnBesluit.Uitroller;
|
||||
|
||||
/// <summary>
|
||||
/// Bewerkt uitroller.json. Eenvoudiger dan RenH's Instellingenvenster: MijnBesluit heeft één
|
||||
/// server en geen omgevingen/repo's-lijst, dus dit is alleen een formulier met de velden uit
|
||||
/// <see cref="Instellingen"/>, geen tabellen om regels toe te voegen of te verwijderen.
|
||||
///
|
||||
/// Opslaan schrijft een nieuw <see cref="Instellingen"/>-object terug via
|
||||
/// <see cref="Instellingen.Bewaar"/>; Hoofdvenster leest na het sluiten opnieuw in met
|
||||
/// <see cref="Instellingen.Lees"/>.
|
||||
/// </summary>
|
||||
public partial class Instellingenvenster : Window
|
||||
{
|
||||
private readonly Instellingen _instellingen;
|
||||
|
||||
public Instellingenvenster(Instellingen instellingen)
|
||||
{
|
||||
InitializeComponent();
|
||||
_instellingen = instellingen;
|
||||
VeldenVullen();
|
||||
}
|
||||
|
||||
private void VeldenVullen()
|
||||
{
|
||||
VeldServer.Text = _instellingen.Server;
|
||||
VeldPoort.Text = _instellingen.Poort.ToString();
|
||||
VeldGeheim.Text = _instellingen.Geheim;
|
||||
VeldProjectmap.Text = _instellingen.Projectmap;
|
||||
VeldPublicatiemap.Text = _instellingen.Publicatiemap;
|
||||
VeldTestadres.Text = _instellingen.Testadres;
|
||||
VeldChrome.Text = _instellingen.Chrome ?? "";
|
||||
VeldGiteaUrl.Text = _instellingen.GiteaUrl ?? "";
|
||||
VeldGiteaEigenaar.Text = _instellingen.GiteaEigenaar ?? "";
|
||||
VeldGiteaRepo.Text = _instellingen.GiteaRepo ?? "";
|
||||
}
|
||||
|
||||
private static void Kies(System.Windows.Controls.TextBox veld)
|
||||
{
|
||||
var dlg = new Microsoft.Win32.OpenFolderDialog { Title = "Kies een map" };
|
||||
if (System.IO.Directory.Exists(veld.Text)) dlg.InitialDirectory = veld.Text;
|
||||
if (dlg.ShowDialog() == true) veld.Text = dlg.FolderName;
|
||||
}
|
||||
|
||||
private void Bladeren_Projectmap(object sender, RoutedEventArgs e) => Kies(VeldProjectmap);
|
||||
private void Bladeren_Publicatiemap(object sender, RoutedEventArgs e) => Kies(VeldPublicatiemap);
|
||||
|
||||
private void Bladeren_Chrome(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var dlg = new Microsoft.Win32.OpenFileDialog
|
||||
{
|
||||
Title = "Kies chrome.exe",
|
||||
Filter = "Programma's (*.exe)|*.exe|Alle bestanden (*.*)|*.*"
|
||||
};
|
||||
if (dlg.ShowDialog() == true) VeldChrome.Text = dlg.FileName;
|
||||
}
|
||||
|
||||
private void Opslaan_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (!int.TryParse(VeldPoort.Text.Trim(), out var poort) || poort <= 0)
|
||||
{
|
||||
MessageBox.Show(this, "De poort moet een positief getal zijn.", "Instellingen",
|
||||
MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
_instellingen.Server = VeldServer.Text.Trim();
|
||||
_instellingen.Poort = poort;
|
||||
_instellingen.Geheim = VeldGeheim.Text.Trim();
|
||||
_instellingen.Projectmap = VeldProjectmap.Text.Trim();
|
||||
_instellingen.Publicatiemap = VeldPublicatiemap.Text.Trim();
|
||||
_instellingen.Testadres = VeldTestadres.Text.Trim();
|
||||
_instellingen.Chrome = string.IsNullOrWhiteSpace(VeldChrome.Text) ? null : VeldChrome.Text.Trim();
|
||||
_instellingen.GiteaUrl = string.IsNullOrWhiteSpace(VeldGiteaUrl.Text) ? null : VeldGiteaUrl.Text.Trim();
|
||||
_instellingen.GiteaEigenaar = string.IsNullOrWhiteSpace(VeldGiteaEigenaar.Text) ? null : VeldGiteaEigenaar.Text.Trim();
|
||||
_instellingen.GiteaRepo = string.IsNullOrWhiteSpace(VeldGiteaRepo.Text) ? null : VeldGiteaRepo.Text.Trim();
|
||||
|
||||
_instellingen.Bewaar();
|
||||
DialogResult = true;
|
||||
}
|
||||
|
||||
private void Annuleren_Click(object sender, RoutedEventArgs e) => DialogResult = false;
|
||||
}
|
||||
@@ -222,8 +222,8 @@ else
|
||||
<div class="kaart">
|
||||
<div class="rij">
|
||||
<div class="groei">
|
||||
<div class="groot">@item.Title</div>
|
||||
<div class="zacht">@Naam(item.Category) · @Vrijgave(item)</div>
|
||||
<div class="groot">@Naam(item.Category)</div>
|
||||
<div class="zacht">@item.Title · @Vrijgave(item)</div>
|
||||
@if (item.SharedManagerPersonId is { } gedeeldMet)
|
||||
{
|
||||
<div class="zacht">💬 Wordt besproken met @BeheerderNaam(gedeeldMet)</div>
|
||||
|
||||
Reference in New Issue
Block a user