Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class HDIngreepModel : IComparable
[HasDefault(false)]
public string OpticomRelatedInput { get; set; }
public bool Sirene { get; set; }
public int KARSignaalGroepNummerHD { get; set; }
public bool InmeldingOokDoorToepassen { get; set; }
public int InmeldingOokDoorFase { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ public class PrioIngreepModel : IComparable
public int GeconditioneerdePrioOpTijd { get; set; }
public int GeconditioneerdePrioTeLaat { get; set; }

public int KARSignaalGroepNummer { get; set; }

public HalfstarPrioIngreepModel HalfstarIngreepData { get; set; }

[HasDefault(false)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,9 @@ public override void CollectCCOLElements(ControllerModel c)
{
if (!int.TryParse(sg.Naam, out var iFc)) continue;
if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200;
var ingr = c.PrioData.PrioIngrepen.FirstOrDefault(x => x.FaseCyclus == sg.Naam && x.HasPrioIngreepKAR());
var iFcm = ingr?.KARSignaalGroepNummer;
iFc = (int)((iFcm > 0) ? iFcm : iFc);
_myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement(
$"{_prmkarsg}{sg.Naam}", iFc, CCOLElementTimeTypeEnum.None, _prmkarsg, sg.Naam));
}
Expand All @@ -697,6 +700,9 @@ public override void CollectCCOLElements(ControllerModel c)
{
if (!int.TryParse(hd.FaseCyclus, out var iFc)) continue;
if (c.PrioData.VerlaagHogeSignaalGroepNummers && iFc > 200) iFc -= 200;
var ingr = c.PrioData.HDIngrepen.FirstOrDefault(x => x.FaseCyclus == hd.FaseCyclus && x.KAR);
var iFcm = ingr?.KARSignaalGroepNummerHD;
iFc = (int)((iFcm > 0) ? iFcm : iFc);
_myElements.Add(CCOLGeneratorSettingsProvider.Default.CreateElement(
$"{_prmkarsghd}{hd.FaseCyclus}", iFc, CCOLElementTimeTypeEnum.None, _prmkarsghd, hd.FaseCyclus));

Expand Down
280 changes: 205 additions & 75 deletions TLCGen.PluggedInItems/TLCGen.Specificator/TableGenerator.cs

Large diffs are not rendered by default.

17 changes: 15 additions & 2 deletions TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
<ct:AutoGrid Columns="Auto,*" RowCount="39">
<ct:AutoGrid Columns="Auto,*" RowCount="40">
<!-- Algemeen -->
<TextBlock Text="Algemene opties" TextDecorations="Underline" Margin="5" Grid.ColumnSpan="2" />
<StackPanel Orientation="Horizontal">
Expand All @@ -61,7 +61,6 @@
<ComboBox Margin="2"
SelectedItem="{Binding Path=Type,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding Source={helper:EnumBindingSource {x:Type enums:PrioIngreepVoertuigTypeEnum}}}" />

<!-- Tijden -->
<TextBlock Text="Tijden" TextDecorations="Underline" Margin="5" Grid.ColumnSpan="2" />
<Label Content="Rijtijd ongehinderd" />
Expand Down Expand Up @@ -200,6 +199,20 @@
<TextBlock Text="Overig" Grid.ColumnSpan="2" Margin="5" Padding="0" TextDecorations="Underline" />
<Label Content="Check op wagen nummer" Grid.Row="1" />
<CheckBox IsChecked="{Binding Path=CheckWagenNummer,UpdateSourceTrigger=PropertyChanged}" Margin="5" />
<Grid Grid.ColumnSpan="2" Visibility="{Binding Path=HasKAROV,Converter={StaticResource Bool2VisConv}}" >

@mennowo mennowo Jun 20, 2025

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merk op dat AutoGrid al kolommen aanmaakt via Columns="Auto,*". Je kunt dus deze Grid verwijderen ten gunste van gewoon direct in de lijst opnemen van Label en TextBox

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Er is een geneste Grid omdat er twee visibility condities zijn: HasKAROV en KARSignaalGroepNummersInParameters. De een werkt nu op de geneste Grid, de ander op Label en TextBox. Wanneer 1 van beide ontbreekt mag de optie niet getoond worden (vind ik tenminste ;-) ).
Ik heb gepoogd om eea te maken met een booleanAndConverter (via MultiValueConverter), maar dat kreeg ik niet werkend.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dit kun je in het ViewModel oplossen. Bv.:

public bool TwoConditions => Condition1 && Condition2;

// ... en in de setters van Codition1 en Condition2:

OnPropertyChanged(nameof(TwoCoditions));

Vervolgens kun je in de View gewoon een regulier Binding doen op de TwoConditions property.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HasKAROV is gebaseerd op een extension (?) HasPrioIngreepKAR() .
public bool HasKAROV => PrioIngreep.HasPrioIngreepKAR();

Ik weet niet hoe je daar een setter bij maakt.

<Grid.ColumnDefinitions>
<ColumnDefinition Width="180" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Content="KAR richtingnummer OV" Grid.Column="0"
Visibility="{Binding Path=KARSignaalGroepNummersInParameters,Converter={StaticResource Bool2VisConv}}" />
<TextBox Width="30" HorizontalAlignment="Left" Margin="10,0,0,0" Padding="0"
Visibility="{Binding Path=KARSignaalGroepNummersInParameters,Converter={StaticResource Bool2VisConv}}"
Text="{Binding KARSignaalGroepNummer,UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" />
</Grid>
<Label Content="Klokperiode als voorwaarde" Grid.Row="1" />
<CheckBox IsChecked="{Binding Path=CheckPeriode,UpdateSourceTrigger=PropertyChanged}" Margin="5" />
<DataGrid
Expand Down
36 changes: 36 additions & 0 deletions TLCGen/Views/Tabs/PrioriteitsTab/DataTypes/PrioIngreepViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,42 @@ public bool CheckWagenNummer
}
}

[Browsable(false)]
public static bool KARSignaalGroepNummersInParameters =>
ControllerAccessProvider.Default.Controller.PrioData.KARSignaalGroepNummersInParameters;

[Browsable(false)]
public static bool VerlaagHogeSG =>
ControllerAccessProvider.Default.Controller.PrioData.VerlaagHogeSignaalGroepNummers;

[Browsable(false)]
public bool HasKAROV => PrioIngreep.HasPrioIngreepKAR();

[Browsable(false)]
public int KARSignaalGroepNummer
{

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dit kan ik niet helemaal plaatsen. Functioneel zou ik het beste vinden, indien je als gebruiker gewoon in kunt vullen wat je in wilt vullen, en dat ook in het model komt. Deze code lijkt eigenstandig iets te doen met de ingevoerde waarde op basis van instellingen die hier buiten beeld vallen.

Mijn voorstel zou zijn: hier gewoon één waarde met een simpele get-set, en dan in de code generatie deze logica toepassen op basis van de algemene instellingen.

@mennowo mennowo Nov 18, 2025

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Graag zou ik deze PR mergen met de master, deze code vind ik evenwel toch wat problematisch, vooral omdat ik niet kan volgen wat functioneel de bedoeling is.
Mijn voorkeur zou zijn: KARSignaalGroepNummer een reguliere full property maken, en dit soort logica verplaatsen naar de code generator (met commentaar zodat duidelijk is wat er functioneel gebeurt). Tenzij er een goede reden is om dit hier te doen, maar ook dan hebben we commentaar nodig zodat de code in de toekomst beheerbaar blijft.
Excuses voor de vertraging omtrent deze merge, voortgang rond TLCGen hing enige tijd op een merge van de "interstartgroen" branch, die anders te ver af zou geraken van de master.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deze logica staat al in de code generator. Is hier bedoeld om hetzelfde te tonen als dat er gegenereerd wordt.

Indien nog geen SG nummer bestaat (KARSGN == 0) wordt het richtingnummer bepaald obv de fasecyclus via TryParse. Is de signaalgroep > 200 dan wordt er 200 afgetrokken.
Wanneer de gebruiker zelf een SG nr opgeeft dat groter is dan 200 ook. Bij kleiner, wordt het nr wat de gebruiker opgeeft geaccepteerd.

Test op <= 400 is omdat je anders alsnog boven de 200 uit zou komen (462 - 200 is alsnog 262).

get
{
if ((PrioIngreep.KARSignaalGroepNummer == 0) && (int.TryParse(PrioIngreep.FaseCyclus, out var iFc)))
if ((iFc > 200) && VerlaagHogeSG)
return iFc - 200;
else
return iFc;
else if ((PrioIngreep.KARSignaalGroepNummer > 0) && (PrioIngreep.KARSignaalGroepNummer <= 200))
return PrioIngreep.KARSignaalGroepNummer;
else if (VerlaagHogeSG && (PrioIngreep.KARSignaalGroepNummer > 200) && (PrioIngreep.KARSignaalGroepNummer <= 400))
return PrioIngreep.KARSignaalGroepNummer - 200;
else
return 0;
}
set
{
if (VerlaagHogeSG && (value > 200) && (value <= 400)) value = value - 200;
PrioIngreep.KARSignaalGroepNummer = value;
OnPropertyChanged(nameof(KARSignaalGroepNummer), broadcast: true);
}
}

[Browsable(false)]
[Description("Check op ritcategorie")]
public bool CheckRitCategorie
Expand Down
34 changes: 34 additions & 0 deletions TLCGen/Views/Tabs/PrioriteitsTab/HD/HDIngreepViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,40 @@ public bool Sirene
}
}

[Browsable(false)]
public static bool KARSignaalGroepNummersInParameters =>
ControllerAccessProvider.Default.Controller.PrioData.KARSignaalGroepNummersInParameters;

[Browsable(false)]
public static bool VerlaagHogeSG =>
ControllerAccessProvider.Default.Controller.PrioData.VerlaagHogeSignaalGroepNummers;

[Description("KAR richtingnummer HD")]
[BrowsableCondition(nameof(KARSignaalGroepNummersInParameters))]
public int KARSignaalGroepNummerHD
{

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Zie vorige opmerkingen: mijn voorstel zou zijn de logica te verplaatsen naar de code generatie

get
{
if ((_HDIngreep.KARSignaalGroepNummerHD == 0) && (int.TryParse(_HDIngreep.FaseCyclus, out var iFc)))
if ((iFc > 200) && VerlaagHogeSG)
return iFc - 200;
else
return iFc;
else if ((_HDIngreep.KARSignaalGroepNummerHD > 0) && (_HDIngreep.KARSignaalGroepNummerHD <= 200))
return _HDIngreep.KARSignaalGroepNummerHD;
else if ((_HDIngreep.KARSignaalGroepNummerHD > 200) && (_HDIngreep.KARSignaalGroepNummerHD <= 400))
return HDIngreep.KARSignaalGroepNummerHD - 200;
else
return 0;
}
set
{
if (VerlaagHogeSG && (value > 200) && (value <= 400)) value = value - 200;
_HDIngreep.KARSignaalGroepNummerHD = value;
OnPropertyChanged(nameof(KARSignaalGroepNummerHD), broadcast: true);
}
}

[Browsable(false)]
public bool OpticomAvailable => OpticomIngangen != null && OpticomIngangen.Any();

Expand Down