From 771a0e7b6b1276087515bbe94de28358cb92963b Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 04 六月 2026 10:32:27 +0800
Subject: [PATCH] 优化老化;
---
HMI.AlermInfoManage/AlarmSettingList.xaml | 464 +++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 396 insertions(+), 68 deletions(-)
diff --git a/HMI.AlermInfoManage/AlarmSettingList.xaml b/HMI.AlermInfoManage/AlarmSettingList.xaml
index fcc2bf0..1a296ef 100644
--- a/HMI.AlermInfoManage/AlarmSettingList.xaml
+++ b/HMI.AlermInfoManage/AlarmSettingList.xaml
@@ -10,40 +10,406 @@
xmlns:dp="clr-namespace:HMI.UI.DpUtil;assembly=HMI.UI"
mc:Ignorable="d"
Title="{Binding SelectedValue,Mode=OneWay}"
- SizeToContent="Height"
- Width="800"
- Height="600"
- BorderBrush="#3E3E45"
- BorderThickness="1"
- Foreground="Black"
- pu:WindowXCaption.Background="{StaticResource PrimaryColor}"
- pu:WindowXModalDialog.ButtonStyle="{StaticResource ModalButton}"
- pu:WindowXCaption.Foreground="#FFF"
pu:WindowXModalDialog.Buttons="OK"
- pu:WindowXModalDialog.OKButtonContent="鍏抽棴"
+ pu:WindowXModalDialog.OKButtonContent="{DynamicResource App.Close}"
+ Width="1000"
+ Height="600"
+ InteropOwnersMask="False"
Loaded="WindowX_Loaded"
- WindowStartupLocation="CenterScreen"
- pu:WindowXModalDialog.ButtonPanelMargin="0,30,10,10">
- <Window.Resources>
+ WindowStartupLocation="CenterOwner"
+ Style="{StaticResource ModalWindow}">
+ <pu:WindowX.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
- <pu:StyleDictionary Includes="TabControl"/>
- <ResourceDictionary Source="/HMI.UI;component/Resources/Font/Font.xaml"/>
- <ResourceDictionary Source="/HMI.UI;component/Style/Colors.xaml"/>
+ <ResourceDictionary Source="/HMI.UI;component/Style/PanuonListView.xaml"/>
</ResourceDictionary.MergedDictionaries>
- </ResourceDictionary>
- </Window.Resources>
+ <Style x:Key="EditLink" TargetType="Button" BasedOn="{StaticResource RowLink}">
+ <Setter Property="Content" Value="{DynamicResource App.Edit}"/>
+ <Setter Property="Foreground" Value="{DynamicResource PrimaryColor}"/>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding Path=IsMouseOver,
+ RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"
+ Value="True">
+ <Setter Property="Foreground" Value="#FFF"/>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding Path=IsSelected,
+ RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"
+Value="True">
+ <Setter Property="Foreground" Value="#FFF"/>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </ResourceDictionary>
+ </pu:WindowX.Resources>
<Grid Margin="10">
- <Border BorderThickness="1" BorderBrush="Gray">
- <Grid>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="Auto"/>
+ <RowDefinition />
+ </Grid.RowDefinitions>
+
+ <StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Right"
+ Margin="0,0,0,10"
+ dp:StackPanelHelper.ChildSpace="10">
+ <Button Style="{StaticResource AddBtn}" x:Name="addBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource RfhBtn}" x:Name="refreshBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource ExportBtn}" x:Name="exportBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource ImportBtn}" x:Name="importBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource DelBtn}" x:Name="delBatchBtn" Click="Button_Click"/>
+ </StackPanel>
+
+ <Grid Grid.Row="1">
+
+ <TabControl Style="{StaticResource HeaderTabControl}" SelectedIndex="{Binding ItemIndex}" x:Name="tab">
+ <TabItem Header="DB鍧楁姤璀�">
+ <!--<ListView Style="{StaticResource DefaultListTable}" ItemsSource="{Binding Datasource}">
+ <ListView.View>
+ <GridView AllowsColumnReorder="False">
+
+ <GridViewColumn Width="30">
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <CheckBox VerticalAlignment="Center"
+IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="60" Header="#">
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Converter={StaticResource lvRowNumber},
+RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="100">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbAddress}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding DBAddress}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="150">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.StartAddress}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding StartAddress}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="100">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbLength}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding Length}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="150">
+ <GridViewColumn.Header>
+ <TextBlock Text="鎶ヨ浠g爜"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding AlarmCode}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="250">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.Description}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+Text="{Binding Description}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="120">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource App.Opt}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10">
+ <Button x:Name="editBtn" Style="{StaticResource EditLink}"
+ Click="Button_Click" Tag="{Binding }"/>
+
+ <Button x:Name="delBtn" Style="{StaticResource DeleteLink}"
+ Click="Button_Click" Tag="{Binding }"/>
+ </StackPanel>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ </GridView>
+ </ListView.View>
+ </ListView>-->
+ <DataGrid Style="{StaticResource DefaultDataGrid}"
+ dp:DataGridHelper.ShowRowNumber="True"
+ ItemsSource="{Binding BlockDatasource}">
+ <DataGrid.Columns>
+ <DataGridTemplateColumn Width="20" CanUserResize="False">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <CheckBox VerticalAlignment="Center"
+HorizontalAlignment="Center" IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+
+ <DataGridTextColumn Header="#"
+ Binding="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}"
+ Width="40"/>
+
+ <DataGridTextColumn Width="100" Binding="{Binding DBAddress}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbAddress}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="150" Binding="{Binding StartAddress}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.StartAddress}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="100" Binding="{Binding Length}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbLength}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="150" Binding="{Binding AlarmCode}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="鎶ヨ浠g爜"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="*" Binding="{Binding Level}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="绾у埆"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="*" Binding="{Binding Description}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.Description}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTemplateColumn Width="120">
+ <DataGridTemplateColumn.Header>
+ <TextBlock Text="{DynamicResource App.Opt}"/>
+ </DataGridTemplateColumn.Header>
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10">
+ <Button x:Name="editBtn" Style="{StaticResource EditLink}"
+Click="Button_Click" Tag="{Binding }"/>
+
+ <Button x:Name="delBtn" Style="{StaticResource DeleteLink}"
+Click="Button_Click" Tag="{Binding }"/>
+ </StackPanel>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+ </TabItem>
+ <TabItem Header="鏍囧織浣嶆姤璀�">
+ <DataGrid Style="{StaticResource DefaultDataGrid}"
+ dp:DataGridHelper.ShowRowNumber="True"
+ ItemsSource="{Binding MarkDatasource}">
+ <DataGrid.Columns>
+ <DataGridTemplateColumn Width="Auto" CanUserResize="False">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <CheckBox VerticalAlignment="Center"
+HorizontalAlignment="Center" IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+
+ <DataGridTextColumn Header="#"
+ Binding="{Binding Header, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}, Mode=FindAncestor}}" Width="40"/>
+
+ <DataGridTextColumn Width="100" Binding="{Binding DBAddress}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbAddress}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="150" Binding="{Binding StartAddress}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.StartAddress}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="100" Binding="{Binding Length}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbLength}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTextColumn Width="*" Binding="{Binding Description}">
+ <DataGridTextColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.Description}"/>
+ </DataGridTextColumn.Header>
+ </DataGridTextColumn>
+
+ <DataGridTemplateColumn Width="120">
+ <DataGridTemplateColumn.Header>
+ <TextBlock Text="{DynamicResource App.Opt}"/>
+ </DataGridTemplateColumn.Header>
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10">
+ <Button x:Name="editBtn" Style="{StaticResource EditLink}"
+Click="Button_Click" Tag="{Binding }"/>
+
+ <Button x:Name="delBtn" Style="{StaticResource DeleteLink}"
+Click="Button_Click" Tag="{Binding }"/>
+ </StackPanel>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+
+ <!--<ListView Style="{StaticResource DefaultListTable}" ItemsSource="{Binding MarkDatasource}">
+ <ListView.View>
+ <GridView AllowsColumnReorder="False">
+
+ <GridViewColumn Width="30">
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <CheckBox VerticalAlignment="Center"
+IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="60" Header="#">
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}" Text="{Binding Converter={StaticResource lvRowNumber},
+RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ListViewItem,AncestorLevel=1}}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+
+ <GridViewColumn Width="220">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbAddress}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding DBAddress}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="180">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.StartAddress}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding StartAddress}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="150">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.DbLength}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding Length}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="200">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource Alm.Description}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <Border Style="{StaticResource CellBorder}">
+ <TextBlock Style="{StaticResource ListTableTextBlock}"
+ Text="{Binding Description}"/>
+ </Border>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ <GridViewColumn Width="120">
+ <GridViewColumn.Header>
+ <TextBlock Text="{DynamicResource App.Opt}"/>
+ </GridViewColumn.Header>
+ <GridViewColumn.CellTemplate>
+ <DataTemplate>
+ <StackPanel Orientation="Horizontal" dp:StackPanelHelper.ChildSpace="10">
+ <Button x:Name="editBtn" Style="{StaticResource EditLink}"
+ Click="Button_Click" Tag="{Binding }"/>
+
+ <Button x:Name="delBtn" Style="{StaticResource DeleteLink}"
+ Click="Button_Click" Tag="{Binding }"/>
+ </StackPanel>
+ </DataTemplate>
+ </GridViewColumn.CellTemplate>
+ </GridViewColumn>
+ </GridView>
+ </ListView.View>
+ </ListView>-->
+ </TabItem>
+ </TabControl>
+ <!--<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
- <ListBox ItemsSource="{Binding Items}" SelectedValue="{Binding SelectedValue}" BorderThickness="0">
+ <ListBox ItemsSource="{Binding Items}" SelectedIndex="{Binding ItemIndex}" BorderThickness="0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
@@ -58,7 +424,9 @@
<ControlTemplate TargetType="ListBoxItem">
<Border x:Name="border" Background="LightGray"
Padding="10" Margin="0" BorderThickness="0">
- <!-- 鍐呭鍛堢幇鍣� -->
+ -->
+ <!-- 鍐呭鍛堢幇鍣� -->
+ <!--
<StackPanel>
<ContentPresenter Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
@@ -81,53 +449,13 @@
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right"
Margin="0,0,0,10"
dp:StackPanelHelper.ChildSpace="10">
- <Button Style="{StaticResource PrimaryButton}" pu:ButtonHelper.Icon="" x:Name="refreshBtn" Click="Button_Click">鍒锋柊</Button>
- <Button Style="{StaticResource PrimaryButton}" pu:ButtonHelper.Icon="" x:Name="addBtn" Click="Button_Click">鏂板</Button>
- <Button Style="{StaticResource DangerButton}" pu:ButtonHelper.Icon="" x:Name="delBatchBtn" Click="Button_Click">鍒犻櫎</Button>
+ <Button Style="{StaticResource AddBtn}" x:Name="addBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource RfhBtn}" x:Name="refreshBtn" Click="Button_Click"/>
+ <Button Style="{StaticResource DelBtn}" x:Name="delBatchBtn" Click="Button_Click"/>
</StackPanel>
- <DataGrid x:Name="table" Grid.Row="2"
- Style="{StaticResource DefaultDataGrid}" ItemsSource="{Binding Datasource}">
- <DataGrid.Columns>
- <DataGridTemplateColumn Header="" Width="Auto" CanUserResize="False">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <CheckBox VerticalAlignment="Center"
- IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="#" CanUserResize="False">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Converter={StaticResource rowNumber},
-RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"/>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTextColumn Width="*" Binding="{Binding DBAddress}" Header="DB鍦板潃" />
- <DataGridTextColumn Width="*" Binding="{Binding StartAddress}" Header="璧峰鍦板潃" />
- <DataGridTextColumn Width="*" Binding="{Binding Length}" Header="DB闀垮害" />
- <DataGridTemplateColumn Header="鎿嶄綔" Width="100" IsReadOnly="True" CanUserResize="False">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <StackPanel Orientation="Horizontal">
- <Button x:Name="editBtn" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
- Style="{StaticResource RowLink}"
- Margin="0,0,10,0"
- Click="Button_Click"
- DataContext="{Binding }">缂栬緫</Button>
- <Button x:Name="delBtn" Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow},AncestorLevel=1}}"
- Style="{StaticResource DangerLinkButton}"
- DataContext="{Binding }"
- Click="Button_Click">鍒犻櫎</Button>
- </StackPanel>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- </DataGrid.Columns>
- </DataGrid>
- </Grid>
- </Border>
+
+ </Grid>-->
+ </Grid>
</Grid>
</pu:WindowX>
--
Gitblit v1.9.1