Files
GSS2Rework/GSS2/Views/AmineContent/BrandCalibrationView.axaml
amkovkov 72ae26eee7 comprehensive update
1) remove unused components: camera view (due it causes segmentation faults), compute resources and all related, illuminator controller (due in useless without camera view), image storage service, temperature and humidity service
2) database schema - reduce tables references, features storing in records themselves in compressed form, add records creation and editing date and time, add separator comment column
3) analysis - rework of pipeline and ui, now database storing only raw data and all display values calculated from it
4) lights service - add reconnection if disconnected
5) add width and height command line arguments
6) fix some typos and other issues
2026-06-29 15:13:29 +03:00

418 lines
17 KiB
XML

<UserControl
x:Class="GSS2.Views.AmineContent.BrandCalibrationView"
x:DataType="vm:BrandCalibrationViewModel"
xmlns:controls="using:GSS2.Controls"
xmlns:core="using:GSS2.UI.Core"
xmlns:i="using:Avalonia.Xaml.Interactivity"
xmlns:ia="using:Avalonia.Xaml.Interactions.Custom"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="using:GSS2.ViewModels.AmineContent"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="https://github.com/avaloniaui"
>
<Grid Background="{StaticResource MainBackground}">
<!-- Основная форма -->
<Grid IsEnabled="{Binding CanInteract}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" /> <!-- Кнопка "Удалить" -->
<ColumnDefinition Width="*" /> <!-- Кнопка "Сохранить" -->
</Grid.ColumnDefinitions>
<Grid.ColumnSpacing>5</Grid.ColumnSpacing>
<Grid.RowDefinitions>
<RowDefinition Height="*" /> <!-- Главная панель -->
<RowDefinition Height="Auto" /> <!-- Кнопки главной панели -->
</Grid.RowDefinitions>
<Grid.RowSpacing>5</Grid.RowSpacing>
<!-- Главная панель -->
<Grid
Grid.Column="0"
Grid.ColumnSpan="3"
Grid.Row="0"
>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" /> <!-- Кнопка меню -->
<ColumnDefinition Width="*" /> <!-- Информация -->
<ColumnDefinition Width="*" /> <!-- Информация -->
</Grid.ColumnDefinitions>
<Grid.ColumnSpacing>5</Grid.ColumnSpacing>
<Grid.RowDefinitions>
<RowDefinition Height="*" /> <!-- Информация -->
<RowDefinition Height="Auto" /> <!-- Кнопки -->
</Grid.RowDefinitions>
<Grid.RowSpacing>5</Grid.RowSpacing>
<!-- Кнопка меню -->
<Button
Classes="vertical"
Command="{Binding ToggleMenuCommand}"
Grid.Column="0"
Grid.Row="0"
Grid.RowSpan="3"
VerticalAlignment="Stretch"
>
<TextBlock Text="☰"/>
</Button>
<!-- Информация -->
<core:SectionPanel
CanScrollBackward="{Binding InfoSectionCanScrollBackward}"
CanScrollForward="{Binding InfoSectionCanScrollForward}"
ClipToBounds="True"
CurrentIndex="{Binding InfoSectionCurrentIndex}"
Cyclic="True"
Grid.Column="1"
Grid.ColumnSpan="2"
Grid.Row="0"
IsScrolling="{Binding InfoSectionIsScrolling}"
Orientation="Horizontal"
>
<!-- Id / Uuid / BrandName / MixtureName / MixtureNormalRate -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.ColumnSpacing>5</Grid.ColumnSpacing>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <!-- Id (подпись) | Uuid (подпись) -->
<RowDefinition Height="Auto" /> <!-- Id (поле ) | Uuid (поле ) -->
<RowDefinition Height="Auto" /> <!-- BrandName (подпись) -->
<RowDefinition Height="Auto" /> <!-- BrandName (поле ) -->
<RowDefinition Height="Auto" /> <!-- MixtureName (подпись) | MixtureNormalRate (подпись) -->
<RowDefinition Height="Auto" /> <!-- MixtureName (поле ) | MixtureNormalRate (поле ) -->
<RowDefinition Height="*" /> <!-- Пустое пространство -->
</Grid.RowDefinitions>
<Grid.RowSpacing>5</Grid.RowSpacing>
<!-- Id (подпись) -->
<TextBlock
Classes="mini"
Grid.Column="0"
Grid.Row="0"
Text="ИД:"
/>
<!-- Id (поле) -->
<TextBox
Classes="singleline"
Grid.Column="0"
Grid.Row="1"
IsReadOnly="True"
PlaceholderText="ИД"
Text="{Binding Record.Id}"
/>
<!-- Uuid (подпись) -->
<TextBlock
Classes="mini"
Grid.Column="1"
Grid.Row="0"
Text="Уникальный ИД:"
/>
<!-- Uuid (поле) -->
<TextBox
Classes="singleline"
Grid.Column="1"
Grid.Row="1"
IsReadOnly="True"
PlaceholderText="Уникальный ИД"
Text="{Binding Record.Uuid}"
/>
<!-- BrandName (подпись) -->
<TextBlock
Classes="mini"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="2"
Text="Марка продукта:"
/>
<!-- BrandName (поле) -->
<controls:TouchTextBox
Classes="singleline"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="3"
PlaceholderText="Марка продукта"
Text="{Binding Record.BrandName}"
/>
<!-- MixtureName (подпись) -->
<TextBlock
Classes="mini"
Grid.Column="0"
Grid.Row="4"
Text="Марка смеси:"
/>
<!-- MixtureName (поле) -->
<controls:TouchTextBox
Classes="singleline"
Grid.Column="0"
Grid.Row="5"
PlaceholderText="Марка смеси"
Text="{Binding Record.MixtureName}"
/>
<!-- MixtureNormalRate (подпись) -->
<TextBlock
Classes="mini" Text="Норма расхода смеси (кг/т | гр/кг):"
Grid.Column="1"
Grid.Row="4"
/>
<!-- MixtureNormalRate (поле) -->
<controls:TouchNumericUpDown
Classes="singleline"
FormatString="0.0000"
Grid.Column="1"
Grid.Row="5"
Increment="0.0001"
PlaceholderText="Норма расхода смеси (кг/т | гр/кг)"
Value="{Binding Record.MixtureNormalRate}"
/>
</Grid>
<!-- Comment -->
<Grid>
<Grid.RowSpacing>5</Grid.RowSpacing>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <!-- Comment (подпись) -->
<RowDefinition Height="*" /> <!-- Comment (поле ) -->
</Grid.RowDefinitions>
<!-- Comment (подпись) -->
<TextBlock
Classes="mini"
Grid.Row="0"
Text="Дополнительная информация:"
/>
<!-- Comment (поле) -->
<controls:TouchTextBox
Classes="multiline"
Grid.Row="1"
PlaceholderText="Дополнительная информация"
Text="{Binding Record.Comment}"
/>
</Grid>
</core:SectionPanel>
<!-- Кнопка влево -->
<Button
Command="{Binding InfoSectionPreviousCommand}"
Grid.Column="1"
Grid.Row="1"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
>
<Button.IsEnabled>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="InfoSectionCanScrollBackward" />
<Binding Converter="{x:Static BoolConverters.Not}" Path="InfoSectionIsScrolling" />
</MultiBinding>
</Button.IsEnabled>
<TextBlock Text="◀"/>
</Button>
<!-- Кнопка вправо -->
<Button
Command="{Binding InfoSectionNextCommand}"
Grid.Column="2"
Grid.Row="1"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
>
<Button.IsEnabled>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="InfoSectionCanScrollForward" />
<Binding Converter="{x:Static BoolConverters.Not}" Path="InfoSectionIsScrolling" />
</MultiBinding>
</Button.IsEnabled>
<TextBlock Text="▶"/>
</Button>
</Grid>
<!-- Кнопки главной панели -->
<!-- Кнопка "Удалить" -->
<Button
Classes="danger"
Command="{Binding DeleteRecordCommand}"
Grid.Column="0"
Grid.Row="1"
HorizontalAlignment="Stretch"
>
<TextBlock Text="Удалить" />
</Button>
<!-- Кнопка "Сохранить" -->
<Button
Command="{Binding SaveRecordCommand}"
Content="Сохранить"
Grid.Column="1"
Grid.Row="1"
HorizontalAlignment="Stretch"
>
<TextBlock Text="Сохранить" />
</Button>
</Grid>
<!-- Полупрозрачный оверлей -->
<Border
Background="{StaticResource Overlay}"
IsEnabled="{Binding MenuOpened}"
IsVisible="{Binding MenuOpened}"
>
<Interaction.Behaviors>
<TappedTrigger>
<InvokeCommandAction Command="{Binding CloseMenuCommand}" />
</TappedTrigger>
</Interaction.Behaviors>
</Border>
<!-- Выезжающая боковая панель -->
<Border
Background="{StaticResource MenuBackground}"
BorderBrush="{StaticResource MenuBorder}"
BorderThickness="0,0,1,0"
HorizontalAlignment="Left"
IsEnabled="{Binding MenuOpened}"
IsVisible="{Binding MenuOpened}"
>
<!-- Переходы -->
<Border.Transitions>
<Transitions>
<TransformOperationsTransition Duration="0:0:0.25" Property="RenderTransform" />
</Transitions>
</Border.Transitions>
<!-- Поведения -->
<Interaction.Behaviors>
<!-- Поведение при открытии меню -->
<DataTriggerBehavior
Binding="{Binding MenuOpened}"
ComparisonCondition="Equal"
Value="True"
>
<ChangePropertyAction PropertyName="RenderTransform" Value="translateX(0px)" />
</DataTriggerBehavior>
<!-- Поведение при закрытии меню -->
<DataTriggerBehavior
Binding="{Binding MenuOpened}"
ComparisonCondition="Equal"
Value="False"
>
<ChangePropertyAction PropertyName="RenderTransform" Value="translateX(-320px)" />
</DataTriggerBehavior>
</Interaction.Behaviors>
<!-- Содержимое меню -->
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <!-- Кнопка "Новая запись" -->
<RowDefinition Height="*" /> <!-- Элементы меню -->
</Grid.RowDefinitions>
<Grid.RowSpacing>10</Grid.RowSpacing>
<!-- Кнопка "Новая запись" -->
<Button
Command="{Binding CreateRecordCommand}"
Grid.Row="0"
HorizontalAlignment="Stretch"
MinWidth="200"
>
<TextBlock Text="Новая запись" />
</Button>
<!-- Элементы меню -->
<ListBox
Background="{StaticResource MenuBackground}"
Grid.Row="1"
ItemsSource="{Binding MenuItems}"
SelectedIndex="{Binding MenuSelectedIndex}"
>
<!-- Шаблон списка элементов -->
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<!-- Стили элементов -->
<ListBox.Styles>
<!-- Общий стиль -->
<Style Selector="ListBoxItem">
<Setter Property="Background" Value="{StaticResource ButtonBackground}" />
</Style>
<!-- Стиль выбранного элемента -->
<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="{StaticResource MainBackground}" />
</Style>
<!-- Стиль элемента над которым находится указатель -->
<Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="{StaticResource MainBackground}" />
</Style>
</ListBox.Styles>
<!-- Шаблон элемента -->
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:BrandCalibrationViewModel+MenuItemViewModel">
<Border Margin="3" CornerRadius="5">
<TextBlock
Classes="mini"
HorizontalAlignment="Center"
VerticalAlignment="Center"
>
<Run Text="{Binding Id, StringFormat='[{0}] '}" />
<Run Text="{Binding BrandName}" />
<Run Text=" - " />
<Run Text="{Binding MixtureName}" />
</TextBlock>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Border>
</Grid>
</UserControl>