Skip to content

Commit 1a253ef

Browse files
committed
Improved layout and details
1 parent a82a0b6 commit 1a253ef

2 files changed

Lines changed: 89 additions & 30 deletions

File tree

QrCodeAnalyzer/MainWindow.xaml

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,25 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:local="clr-namespace:Net.Codecrete.QrCodeGenerator.Analyzer"
77
mc:Ignorable="d"
8-
Title="QR Code" Height="560" Width="600"
8+
Title="QR Code" Height="650" Width="700"
99
Background="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">
1010
<Grid Margin="20,16,20,16">
1111
<Grid.ColumnDefinitions>
1212
<ColumnDefinition Width="1*"/>
13-
<ColumnDefinition Width="Auto"/>
13+
<ColumnDefinition Width="Auto" MinWidth="150"/>
1414
</Grid.ColumnDefinitions>
1515
<Grid.RowDefinitions>
1616
<RowDefinition Height="1*"/>
1717
<RowDefinition Height="Auto"/>
18+
<RowDefinition Height="Auto"/>
1819
<RowDefinition Height="140"/>
1920
</Grid.RowDefinitions>
2021
<Image Source="{Binding Path=QrCodeImage}" Grid.Row="0" Grid.Column="0" Margin="0,0,0,16"
2122
RenderOptions.BitmapScalingMode="NearestNeighbor" RenderOptions.EdgeMode="Aliased"/>
2223
<Grid Grid.Row="0" Grid.Column="1">
2324
<Grid.ColumnDefinitions>
2425
<ColumnDefinition Width="Auto"/>
25-
<ColumnDefinition Width="Auto"/>
26+
<ColumnDefinition Width="1*"/>
2627
</Grid.ColumnDefinitions>
2728
<Grid.RowDefinitions>
2829
<RowDefinition Height="Auto"/>
@@ -32,31 +33,51 @@
3233
<RowDefinition Height="Auto"/>
3334
<RowDefinition Height="Auto"/>
3435
<RowDefinition Height="Auto"/>
36+
<RowDefinition Height="Auto"/>
37+
<RowDefinition Height="Auto"/>
38+
<RowDefinition Height="Auto"/>
39+
<RowDefinition Height="Auto"/>
40+
<RowDefinition Height="Auto"/>
41+
<RowDefinition Height="Auto"/>
42+
<RowDefinition Height="Auto"/>
3543
</Grid.RowDefinitions>
36-
<Label Content="Horz. Streaks:" Grid.Row="0" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="HorizontalStreaks"
37-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
38-
<Label Content="{Binding Path=PenaltyDetails.HorizontalStreaks}" Grid.Row="0" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="HorizontalStreaks"
39-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
40-
<Label Content="Vert. Streaks:" Grid.Row="1" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="VerticalStreaks"
41-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
42-
<Label Content="{Binding Path=PenaltyDetails.VerticalStreaks}" Grid.Row="1" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="VerticalStreaks"
43-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
44-
<Label Content="Boxes:" Grid.Row="2" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="Blocks"
45-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
46-
<Label Content="{Binding Path=PenaltyDetails.Blocks}" Grid.Row="2" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="Blocks"
47-
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
48-
<Label Content="Horz. Finder:" Grid.Row="3" Grid.Column="0" />
49-
<Label Content="{Binding Path=PenaltyDetails.HorizontalFinderPatterns}" Grid.Row="3" Grid.Column="1" />
50-
<Label Content="Vert. Finder:" Grid.Row="4" Grid.Column="0" />
51-
<Label Content="{Binding Path=PenaltyDetails.VerticalFinderPatterns}" Grid.Row="4" Grid.Column="1" />
52-
<Label Content="Balance:" Grid.Row="5" Grid.Column="0"/>
53-
<Label Content="{Binding Path=PenaltyDetails.ColorBalance}" Grid.Row="5" Grid.Column="1" />
54-
<Label Content="Total:" Grid.Row="6" Grid.Column="0"/>
55-
<Label Content="{Binding Path=PenaltyDetails.Total}" Grid.Row="6" Grid.Column="1" />
44+
<TextBlock Text="General" FontWeight="Bold" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Padding="5,2"/>
45+
<Border Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" BorderBrush="Gray" BorderThickness="0,0,0,1" VerticalAlignment="Bottom"/>
46+
<Label Content="Version:" Grid.Row="1" Grid.Column="0"/>
47+
<Label Content="{Binding Path=QrCodeVersion}" Grid.Row="1" Grid.Column="1"/>
48+
<Label Content="Size:" Grid.Row="2" Grid.Column="0"/>
49+
<Label Content="{Binding Path=QrCodeSize}" Grid.Row="2" Grid.Column="1"/>
50+
<Label Content="ECC:" Grid.Row="3" Grid.Column="0"/>
51+
<Label Content="{Binding Path=SelectedEcc}" Grid.Row="3" Grid.Column="1"/>
52+
<Label Content="Data Mask:" Grid.Row="4" Grid.Column="0"/>
53+
<Label Content="{Binding Path=SelectedDataMaskPattern}" Grid.Row="4" Grid.Column="1"/>
54+
<TextBlock Text="Penalty" FontWeight="Bold" Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Padding="5,10,5,2"/>
55+
<Border Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="2" BorderBrush="Gray" BorderThickness="0,0,0,1" VerticalAlignment="Bottom"/>
56+
<Label Content="Horz. Streaks:" Grid.Row="7" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="HorizontalStreaks"
57+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
58+
<Label Content="{Binding Path=PenaltyDetails.HorizontalStreaks}" Grid.Row="7" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="HorizontalStreaks"
59+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
60+
<Label Content="Vert. Streaks:" Grid.Row="8" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="VerticalStreaks"
61+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
62+
<Label Content="{Binding Path=PenaltyDetails.VerticalStreaks}" Grid.Row="8" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="VerticalStreaks"
63+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
64+
<Label Content="Boxes:" Grid.Row="9" Grid.Column="0" Background="Transparent" Cursor="Hand" Tag="Blocks"
65+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
66+
<Label Content="{Binding Path=PenaltyDetails.Blocks}" Grid.Row="9" Grid.Column="1" Background="Transparent" Cursor="Hand" Tag="Blocks"
67+
PreviewMouseLeftButtonDown="HighlightLabel_MouseDown" PreviewMouseLeftButtonUp="HighlightLabel_MouseUp"/>
68+
<Label Content="Horz. Finder:" Grid.Row="10" Grid.Column="0"/>
69+
<Label Content="{Binding Path=PenaltyDetails.HorizontalFinderPatterns}" Grid.Row="10" Grid.Column="1"/>
70+
<Label Content="Vert. Finder:" Grid.Row="11" Grid.Column="0"/>
71+
<Label Content="{Binding Path=PenaltyDetails.VerticalFinderPatterns}" Grid.Row="11" Grid.Column="1"/>
72+
<Label Content="Balance:" Grid.Row="12" Grid.Column="0"/>
73+
<Label Content="{Binding Path=PenaltyDetails.ColorBalance}" Grid.Row="12" Grid.Column="1"/>
74+
<Label Content="Total:" Grid.Row="13" Grid.Column="0"/>
75+
<Label Content="{Binding Path=PenaltyDetails.Total}" Grid.Row="13" Grid.Column="1"/>
5676
</Grid>
57-
<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2">
58-
<TextBox x:Name="QrCodeTextBox" Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}"
77+
<TextBox x:Name="QrCodeTextBox" Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}"
78+
Grid.Row="1" Grid.ColumnSpan="2"
5979
Padding="5,3" Margin="0,6"/>
80+
<StackPanel Grid.Row="2" Grid.Column="0">
6081
<WrapPanel>
6182
<Label Content="Error Correction:" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="0,5,12,5"/>
6283
<ComboBox x:Name="ErrorCorrectionCombo" HorizontalAlignment="Left" VerticalAlignment="Center" Width="100" Margin="0,6,24,6"
@@ -71,13 +92,12 @@
7192
<Label Content="Data Mask:" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="0,5,12,5"/>
7293
<ComboBox x:Name="DataMaskCombo" HorizontalAlignment="Left" VerticalAlignment="Center" Width="100" Margin="0,6,24,6"
7394
ItemsSource="{Binding Path=DataMasks, Mode=OneTime}" DisplayMemberPath="Item1" SelectedValuePath="Item2" SelectedValue="{Binding Path=DataMaskPattern}"/>
74-
<Label Content="Selected Data Mask:" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="0,5,12,5"/>
75-
<Label Content="{Binding Path=SelectedDataMaskPattern, Mode=OneWay}" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="0,5,12,5"/>
7695
</WrapPanel>
77-
<Button x:Name="CopyButton" Content="Copy QR Code" Grid.Row="3" Margin="0,6,0,0"
78-
VerticalAlignment="Center" HorizontalAlignment="Right" Padding="10,3" Click="CopyButton_Click"/>
7996
</StackPanel>
80-
<Grid Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,12,0,0">
97+
<Button x:Name="CopyButton" Content="Copy QR Code" Margin="0,6,0,0"
98+
VerticalAlignment="Top" HorizontalAlignment="Right" Padding="10,3" Click="CopyButton_Click"
99+
Grid.Row="2" Grid.Column="1"/>
100+
<Grid Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,12,0,0">
81101
<Grid.RowDefinitions>
82102
<RowDefinition Height="Auto"/>
83103
<RowDefinition Height="1*"/>

QrCodeAnalyzer/MainWindowViewModel.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
3737
private QrCode? _currentQrCode;
3838
private HighlightKind _highlight = HighlightKind.None;
3939
private IReadOnlyList<SegmentRow> _dataSegments = Array.Empty<SegmentRow>();
40+
private int _qrCodeVersion;
41+
private string _qrCodeSize = string.Empty;
42+
private QrCode.Ecc _selectedEcc;
4043

4144
public MainWindowViewModel()
4245
{
@@ -160,6 +163,39 @@ private set
160163
}
161164
}
162165

166+
public int QrCodeVersion
167+
{
168+
get => _qrCodeVersion;
169+
private set
170+
{
171+
if (_qrCodeVersion == value) return;
172+
_qrCodeVersion = value;
173+
OnPropertyChanged();
174+
}
175+
}
176+
177+
public string QrCodeSize
178+
{
179+
get => _qrCodeSize;
180+
private set
181+
{
182+
if (_qrCodeSize == value) return;
183+
_qrCodeSize = value;
184+
OnPropertyChanged();
185+
}
186+
}
187+
188+
public QrCode.Ecc SelectedEcc
189+
{
190+
get => _selectedEcc;
191+
private set
192+
{
193+
if (_selectedEcc == value) return;
194+
_selectedEcc = value;
195+
OnPropertyChanged();
196+
}
197+
}
198+
163199
public IReadOnlyList<SegmentRow> DataSegments
164200
{
165201
get => _dataSegments;
@@ -195,6 +231,9 @@ private void UpdateQrCode()
195231
_currentQrCode = qrCode;
196232
SelectedDataMaskPattern = qrCode.Mask;
197233
PenaltyDetails = _debugInfo.Penalties[qrCode.Mask];
234+
QrCodeVersion = qrCode.Version;
235+
QrCodeSize = $"{qrCode.Size}×{qrCode.Size}";
236+
SelectedEcc = qrCode.ErrorCorrectionLevel;
198237
DataSegments = _debugInfo.DataSegments?.Select(BuildSegmentRow).ToArray()
199238
?? (IReadOnlyList<SegmentRow>)Array.Empty<SegmentRow>();
200239
RenderQrCodeImage();

0 commit comments

Comments
 (0)