Skip to content

Commit

Permalink
Fix little bug, close #557.
Browse files Browse the repository at this point in the history
  • Loading branch information
SunnieShine committed Mar 6, 2024
1 parent 481549b commit 998728f
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 10 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/Sudoku.Strategying/Resources/StrategyingResources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,6 @@
<value>Single prefer rule: {0} is preferred as primary technique, Hidden Single in rows or columns {1}included</value>
</data>
<data name="EliminationCountConstraint" xml:space="preserve">
<value>Elimination count rule: a step must contain {0} {1} elimination{2}</value>
<value>Elimination count rule: a {3} step must contain {0} {1} elimination{2}</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,6 @@
<value>出数技巧偏好:希望以{0}技巧作为主技巧解题,行列排除{1}在计算之中</value>
</data>
<data name="EliminationCountConstraint" xml:space="preserve">
<value>删数数量:一个步骤需要有 {0} {1} 个删数结论{2}</value>
<value>删数数量:一个{3}步骤需要有 {0} {1} 个删数结论{2}</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,13 @@ public sealed partial class EliminationCountConstraint : Constraint, IComparison
[StringMember]
public int LimitCount { get; set; }

/// <summary>
/// Indicates the technique used.
/// </summary>
[HashCodeMember]
[StringMember]
public Technique Technique { get; set; }

/// <inheritdoc/>
[HashCodeMember]
[StringMember]
Expand All @@ -33,7 +40,7 @@ public override bool Check(ConstraintCheckingContext context)
var @operator = Operator.GetOperator<int>();
foreach (var step in context.AnalyzerResult)
{
if (@operator(LimitCount, step.Conclusions.Length))
if (step.Code == Technique && @operator(LimitCount, step.Conclusions.Length))
{
return true;
}
Expand All @@ -52,6 +59,7 @@ public override string ToString(CultureInfo? culture = null)
ResourceDictionary.Get("EliminationCountConstraint", culture),
Operator.GetOperatorString(),
LimitCount,
LimitCount != 1 ? string.Empty : ResourceDictionary.Get("NounPluralSuffix", culture)
LimitCount != 1 ? string.Empty : ResourceDictionary.Get("NounPluralSuffix", culture),
Technique.GetName(culture)
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
</MenuFlyoutItem>
<MenuFlyoutItem Text="{m:R Key=GeneratedPuzzleConstraintPage_EliminationCountConstraint}" Click="MenuFlyoutItem_Click">
<MenuFlyoutItem.Tag>
<con:EliminationCountConstraint LimitCount="5" Operator="GreaterThanOrEqual" />
<con:EliminationCountConstraint Technique="LockedPair" LimitCount="5" Operator="GreaterThanOrEqual" />
</MenuFlyoutItem.Tag>
</MenuFlyoutItem>
<MenuFlyoutItem Text="{m:R Key=GeneratedPuzzleConstraintPage_DifficultyLevelConstraint}" Click="MenuFlyoutItem_Click">
Expand Down
29 changes: 26 additions & 3 deletions src/SudokuStudio/Views/Pages/GeneratedPuzzleConstraintPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -706,9 +706,9 @@ static string getTechniqueString(TechniqueSet techniques)
};
}

private SettingsCard? Create_EliminationCount(EliminationCountConstraint constraint)
private SettingsExpander? Create_EliminationCount(EliminationCountConstraint constraint)
{
if (constraint is not { LimitCount: var limitCount, Operator: var @operator })
if (constraint is not { LimitCount: var limitCount, Operator: var @operator, Technique: var technique })
{
return null;
}
Expand All @@ -723,15 +723,38 @@ static string getTechniqueString(TechniqueSet techniques)
//
var limitCountControl = LimitCountControl(limitCount, constraint);

//
// chosen techniques displayer
//
var displayerControl = new TextBlock
{
MaxWidth = 400,
TextWrapping = TextWrapping.WrapWholeWords,
VerticalAlignment = VerticalAlignment.Center,
Text = $"{technique.GetName(App.CurrentCulture)}{ResourceDictionary.Get("_Token_Comma2", App.CurrentCulture)}"
};

//
// technique view
//
var techniqueControl = new TechniqueView { SelectionMode = TechniqueViewSelectionMode.Single, SelectedTechniques = [technique] };
techniqueControl.CurrentSelectedTechniqueChanged += (_, e) =>
{
var technique = e.Technique;
constraint.Technique = technique;
displayerControl.Text = $"{technique.GetName(App.CurrentCulture)}{ResourceDictionary.Get("_Token_Comma2", App.CurrentCulture)}";
};

return new()
{
Header = ResourceDictionary.Get("GeneratedPuzzleConstraintPage_EliminationCount", App.CurrentCulture),
Margin = DefaultMargin,
Items = { techniqueControl },
Content = new StackPanel
{
Orientation = Orientation.Horizontal,
Spacing = 3,
Children = { operatorControl, limitCountControl }
Children = { displayerControl, operatorControl, limitCountControl }
},
Tag = constraint
};
Expand Down
7 changes: 6 additions & 1 deletion src/docxml/Sudoku.Strategying.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 998728f

Please sign in to comment.