Included tabs in some views to make the display more compact
This commit is contained in:
parent
661768abdd
commit
f53b37eb12
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="50"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -54,7 +54,7 @@
|
|||||||
<TextBlock Name="textBlockMessageClass" FontWeight="DemiBold" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
<TextBlock Name="textBlockMessageClass" FontWeight="DemiBold" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||||
<Button Content="{x:Static p:Resources.textNewDGItem}" Name="buttonNewItem" Margin="2" Click="buttonNewItem_Click" Grid.Row="2" Grid.Column="1" Background="Transparent" />
|
<Button Content="{x:Static p:Resources.textNewDGItem}" Name="buttonNewItem" Margin="2" Click="buttonNewItem_Click" Grid.Row="2" Grid.Column="1" Background="Transparent" />
|
||||||
<TabControl Grid.Row="3" Grid.ColumnSpan="2">
|
<TabControl Grid.Row="3" Grid.ColumnSpan="2">
|
||||||
<TabItem Header="{x:Static p:Resources.text102}">
|
<TabItem Header="{x:Static p:Resources.text102}" x:Name="tabIBCItems">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="36"/>
|
<RowDefinition Height="36"/>
|
||||||
@ -79,7 +79,7 @@
|
|||||||
</enictrl:ENIDataGrid>
|
</enictrl:ENIDataGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{x:Static p:Resources.text103}">
|
<TabItem Header="{x:Static p:Resources.text103}" x:Name="tabIGCItems">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="36"/>
|
<RowDefinition Height="36"/>
|
||||||
@ -101,7 +101,7 @@
|
|||||||
</enictrl:ENIDataGrid>
|
</enictrl:ENIDataGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{x:Static p:Resources.text104}">
|
<TabItem Header="{x:Static p:Resources.text104}" x:Name="tabIMSBCItems">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="36"/>
|
<RowDefinition Height="36"/>
|
||||||
@ -131,7 +131,7 @@
|
|||||||
</enictrl:ENIDataGrid>
|
</enictrl:ENIDataGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{x:Static p:Resources.text105}">
|
<TabItem Header="{x:Static p:Resources.text105}" x:Name="tabMARPOLItems">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="36"/>
|
<RowDefinition Height="36"/>
|
||||||
@ -153,7 +153,7 @@
|
|||||||
</enictrl:ENIDataGrid>
|
</enictrl:ENIDataGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="{x:Static p:Resources.text106}">
|
<TabItem Header="{x:Static p:Resources.text106}" x:Name="tabIMDGItems">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="36"/>
|
<RowDefinition Height="36"/>
|
||||||
|
|||||||
@ -7,8 +7,10 @@ using ENI2.EditControls;
|
|||||||
using ENI2.Util;
|
using ENI2.Util;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Specialized;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
|
|
||||||
namespace ENI2.SheetDisplayControls
|
namespace ENI2.SheetDisplayControls
|
||||||
@ -72,40 +74,52 @@ namespace ENI2.SheetDisplayControls
|
|||||||
#region init grids
|
#region init grids
|
||||||
|
|
||||||
this.dataGridIMDGItems.Initialize();
|
this.dataGridIMDGItems.Initialize();
|
||||||
this.dataGridIMDGItems.ItemsSource = this.IsDeparture ? this.hazd.IMDGPositions : this.haza.IMDGPositions;
|
this.dataGridIMDGItems.ItemsSource = this.IsDeparture ? this.hazd.IMDGPositions : this.haza.IMDGPositions;
|
||||||
|
CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(dataGridIMDGItems.Items);
|
||||||
|
((INotifyCollectionChanged)myCollectionView).CollectionChanged += DangerousGoodsDetailControl_CollectionChanged;
|
||||||
this.dataGridIMDGItems.CreateRequested += DataGridIMDGItems_CreateRequested;
|
this.dataGridIMDGItems.CreateRequested += DataGridIMDGItems_CreateRequested;
|
||||||
this.dataGridIMDGItems.AddingNewItem += DataGridIMDGItems_AddingNewItem;
|
this.dataGridIMDGItems.AddingNewItem += DataGridIMDGItems_AddingNewItem;
|
||||||
this.dataGridIMDGItems.EditRequested += DataGridIMDGItems_EditRequested;
|
this.dataGridIMDGItems.EditRequested += DataGridIMDGItems_EditRequested;
|
||||||
this.dataGridIMDGItems.DeleteRequested += DataGridIMDGItems_DeleteRequested;
|
this.dataGridIMDGItems.DeleteRequested += DataGridIMDGItems_DeleteRequested;
|
||||||
|
|
||||||
this.dataGridIBCItems.Initialize();
|
this.dataGridIBCItems.Initialize();
|
||||||
this.dataGridIBCItems.ItemsSource = this.IsDeparture ? this.hazd.IBCPositions : this.haza.IBCPositions;
|
this.dataGridIBCItems.ItemsSource = this.IsDeparture ? this.hazd.IBCPositions : this.haza.IBCPositions;
|
||||||
|
myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(dataGridIBCItems.Items);
|
||||||
|
((INotifyCollectionChanged)myCollectionView).CollectionChanged += DangerousGoodsDetailControl_CollectionChanged;
|
||||||
this.dataGridIBCItems.CreateRequested += DataGridIBCItems_CreateRequested;
|
this.dataGridIBCItems.CreateRequested += DataGridIBCItems_CreateRequested;
|
||||||
this.dataGridIBCItems.AddingNewItem += DataGridIBCItems_AddingNewItem;
|
this.dataGridIBCItems.AddingNewItem += DataGridIBCItems_AddingNewItem;
|
||||||
this.dataGridIBCItems.EditRequested += DataGridIBCItems_EditRequested;
|
this.dataGridIBCItems.EditRequested += DataGridIBCItems_EditRequested;
|
||||||
this.dataGridIBCItems.DeleteRequested += DataGridIBCItems_DeleteRequested;
|
this.dataGridIBCItems.DeleteRequested += DataGridIBCItems_DeleteRequested;
|
||||||
|
|
||||||
this.dataGridIGCItems.Initialize();
|
this.dataGridIGCItems.Initialize();
|
||||||
this.dataGridIGCItems.ItemsSource = this.IsDeparture ? this.hazd.IGCPositions : this.haza.IGCPositions;
|
this.dataGridIGCItems.ItemsSource = this.IsDeparture ? this.hazd.IGCPositions : this.haza.IGCPositions;
|
||||||
|
((INotifyCollectionChanged)myCollectionView).CollectionChanged += DangerousGoodsDetailControl_CollectionChanged;
|
||||||
|
this.dataGridIGCItems.CreateRequested += DataGridIGCItems_CreateRequested;
|
||||||
this.dataGridIGCItems.CreateRequested += DataGridIGCItems_CreateRequested;
|
this.dataGridIGCItems.CreateRequested += DataGridIGCItems_CreateRequested;
|
||||||
this.dataGridIGCItems.AddingNewItem += DataGridIGCItems_AddingNewItem;
|
this.dataGridIGCItems.AddingNewItem += DataGridIGCItems_AddingNewItem;
|
||||||
this.dataGridIGCItems.EditRequested += DataGridIGCItems_EditRequested;
|
this.dataGridIGCItems.EditRequested += DataGridIGCItems_EditRequested;
|
||||||
this.dataGridIGCItems.DeleteRequested += DataGridIGCItems_DeleteRequested;
|
this.dataGridIGCItems.DeleteRequested += DataGridIGCItems_DeleteRequested;
|
||||||
|
|
||||||
this.dataGridIMSBCItems.Initialize();
|
this.dataGridIMSBCItems.Initialize();
|
||||||
this.dataGridIMSBCItems.ItemsSource = this.IsDeparture ? this.hazd.IMSBCPositions : this.haza.IMSBCPositions;
|
this.dataGridIMSBCItems.ItemsSource = this.IsDeparture ? this.hazd.IMSBCPositions : this.haza.IMSBCPositions;
|
||||||
|
myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(dataGridIMSBCItems.Items);
|
||||||
|
((INotifyCollectionChanged)myCollectionView).CollectionChanged += DangerousGoodsDetailControl_CollectionChanged;
|
||||||
this.dataGridIMSBCItems.CreateRequested += DataGridIMSBCItems_CreateRequested;
|
this.dataGridIMSBCItems.CreateRequested += DataGridIMSBCItems_CreateRequested;
|
||||||
this.dataGridIMSBCItems.AddingNewItem += DataGridIMSBCItems_AddingNewItem;
|
this.dataGridIMSBCItems.AddingNewItem += DataGridIMSBCItems_AddingNewItem;
|
||||||
this.dataGridIMSBCItems.EditRequested += DataGridIMSBCItems_EditRequested;
|
this.dataGridIMSBCItems.EditRequested += DataGridIMSBCItems_EditRequested;
|
||||||
this.dataGridIMSBCItems.DeleteRequested += DataGridIMSBCItems_DeleteRequested;
|
this.dataGridIMSBCItems.DeleteRequested += DataGridIMSBCItems_DeleteRequested;
|
||||||
|
|
||||||
this.dataGridMARPOLItems.Initialize();
|
this.dataGridMARPOLItems.Initialize();
|
||||||
this.dataGridMARPOLItems.ItemsSource = this.IsDeparture ? this.hazd.MARPOLPositions : this.haza.MARPOLPositions;
|
this.dataGridMARPOLItems.ItemsSource = this.IsDeparture ? this.hazd.MARPOLPositions : this.haza.MARPOLPositions;
|
||||||
|
myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(dataGridMARPOLItems.Items);
|
||||||
|
((INotifyCollectionChanged)myCollectionView).CollectionChanged += DangerousGoodsDetailControl_CollectionChanged;
|
||||||
this.dataGridMARPOLItems.CreateRequested += DataGridMARPOLItems_CreateRequested;
|
this.dataGridMARPOLItems.CreateRequested += DataGridMARPOLItems_CreateRequested;
|
||||||
this.dataGridMARPOLItems.AddingNewItem += DataGridMARPOLItems_AddingNewItem;
|
this.dataGridMARPOLItems.AddingNewItem += DataGridMARPOLItems_AddingNewItem;
|
||||||
this.dataGridMARPOLItems.EditRequested += DataGridMARPOLItems_EditRequested;
|
this.dataGridMARPOLItems.EditRequested += DataGridMARPOLItems_EditRequested;
|
||||||
this.dataGridMARPOLItems.DeleteRequested += DataGridMARPOLItems_DeleteRequested;
|
this.dataGridMARPOLItems.DeleteRequested += DataGridMARPOLItems_DeleteRequested;
|
||||||
|
|
||||||
|
this.RefreshTabHeaders();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Extra Menüpunkte um Positionen zwischen HAZA / HAZD zu kopieren
|
#region Extra Menüpunkte um Positionen zwischen HAZA / HAZD zu kopieren
|
||||||
@ -197,7 +211,12 @@ namespace ENI2.SheetDisplayControls
|
|||||||
this.textBlock105.Text = Properties.Resources.text115MARPOLData;
|
this.textBlock105.Text = Properties.Resources.text115MARPOLData;
|
||||||
this.textBlock106.Text = Properties.Resources.text116IMDGData;
|
this.textBlock106.Text = Properties.Resources.text116IMDGData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DangerousGoodsDetailControl_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
|
{
|
||||||
|
this.RefreshTabHeaders();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -825,6 +844,38 @@ namespace ENI2.SheetDisplayControls
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The tab headers include an info on how many DG items there are
|
||||||
|
/// </summary>
|
||||||
|
private void RefreshTabHeaders()
|
||||||
|
{
|
||||||
|
HAZ haz = this.IsDeparture ? hazd : haza;
|
||||||
|
if (haz.IMDGPositions.Count > 0)
|
||||||
|
this.tabIMDGItems.Header = string.Format("{0} ({1})", Properties.Resources.textIMDGItems, haz.IMDGPositions.Count);
|
||||||
|
else
|
||||||
|
this.tabIMDGItems.Header = Properties.Resources.textIMDGItems;
|
||||||
|
|
||||||
|
if (haz.IBCPositions.Count > 0)
|
||||||
|
this.tabIBCItems.Header = string.Format("{0} ({1})", Properties.Resources.textIBCItems, haz.IBCPositions.Count);
|
||||||
|
else
|
||||||
|
this.tabIBCItems.Header = Properties.Resources.textIBCItems;
|
||||||
|
|
||||||
|
if (haz.IGCPositions.Count > 0)
|
||||||
|
this.tabIGCItems.Header = string.Format("{0} ({1})", Properties.Resources.textIGCItems, haz.IGCPositions.Count);
|
||||||
|
else
|
||||||
|
this.tabIGCItems.Header = Properties.Resources.textIGCItems;
|
||||||
|
|
||||||
|
if (haz.IMSBCPositions.Count > 0)
|
||||||
|
this.tabIMSBCItems.Header = string.Format("{0} ({1})", Properties.Resources.textIMSBCItems, haz.IMSBCPositions.Count);
|
||||||
|
else
|
||||||
|
this.tabIMSBCItems.Header = Properties.Resources.textIMSBCItems;
|
||||||
|
|
||||||
|
if (haz.MARPOLPositions.Count > 0)
|
||||||
|
this.tabMARPOLItems.Header = string.Format("{0} ({1})", Properties.Resources.textMARPOLItems, haz.MARPOLPositions.Count);
|
||||||
|
else
|
||||||
|
this.tabMARPOLItems.Header = Properties.Resources.textMARPOLItems;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
<ScrollViewer PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width=".35*"/>
|
<ColumnDefinition Width="220"/>
|
||||||
<ColumnDefinition Width=".65*" />
|
<ColumnDefinition Width=".65*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@ -261,7 +261,7 @@
|
|||||||
<TextBlock Grid.Row="8" Grid.Column="0" Text="{x:Static p:Resources.textAwareofConditionInfectious}" Name="label_AwareOfCondition" Margin="0,0,10,0" TextWrapping="Wrap"/>
|
<TextBlock Grid.Row="8" Grid.Column="0" Text="{x:Static p:Resources.textAwareofConditionInfectious}" Name="label_AwareOfCondition" Margin="0,0,10,0" TextWrapping="Wrap"/>
|
||||||
<CheckBox Name="checkBoxAwareOfConditions" IsChecked="{Binding AwareOfFurtherInfections}" Grid.Row="8" Grid.Column="1" VerticalAlignment="Center"/>
|
<CheckBox Name="checkBoxAwareOfConditions" IsChecked="{Binding AwareOfFurtherInfections}" Grid.Row="8" Grid.Column="1" VerticalAlignment="Center"/>
|
||||||
<Label HorizontalContentAlignment="Right" Grid.Row="9" Grid.Column="0" Content="{x:Static p:Resources.textAnySanitaryMeasures}" Name="labelSanitaryMeasuresApplied" Margin="0,0,10,0"/>
|
<Label HorizontalContentAlignment="Right" Grid.Row="9" Grid.Column="0" Content="{x:Static p:Resources.textAnySanitaryMeasures}" Name="labelSanitaryMeasuresApplied" Margin="0,0,10,0"/>
|
||||||
<CheckBox Name="checkBoxSanitaryMeasuresApplied" IsChecked="{Binding SanitaryMeasuresApplied}" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" Margin="6,0,0,0 "/>
|
<CheckBox Name="checkBoxSanitaryMeasuresApplied" IsChecked="{Binding SanitaryMeasuresApplied}" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" />
|
||||||
<enictrl:ENIDataGrid Grid.Row="10" Grid.Column="0" Grid.ColumnSpan="2" x:Name="dataGridSanitaryMeasures" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
<enictrl:ENIDataGrid Grid.Row="10" Grid.Column="0" Grid.ColumnSpan="2" x:Name="dataGridSanitaryMeasures" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
|
||||||
SelectionMode="Single" AutoGenerateColumns="False" Margin="0,5,0,0">
|
SelectionMode="Single" AutoGenerateColumns="False" Margin="0,5,0,0">
|
||||||
<DataGrid.Columns>
|
<DataGrid.Columns>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user