New list view items.
This commit is contained in:
@@ -69,7 +69,10 @@
|
||||
</DataTemplate>
|
||||
|
||||
<DataTemplate x:Key="ThreadMailItemTemplate" x:DataType="viewModelData:ThreadMailItemViewModel">
|
||||
<controls:WinoExpander x:Name="ExpanderPart" IsExpanded="{x:Bind IsThreadExpanded, Mode=TwoWay}">
|
||||
<controls:WinoExpander
|
||||
x:Name="ExpanderPart"
|
||||
Margin="0,2"
|
||||
IsExpanded="{x:Bind IsThreadExpanded, Mode=TwoWay}">
|
||||
<controls:WinoExpander.Header>
|
||||
<controls:MailItemDisplayInformationControl
|
||||
x:DefaultBindMode="OneWay"
|
||||
@@ -95,11 +98,20 @@
|
||||
toolkitExt:ListViewExtensions.ItemContainerStretchDirection="Horizontal"
|
||||
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
||||
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
||||
IsItemClickEnabled="True"
|
||||
IsThreadListView="True"
|
||||
ItemClick="WinoListViewItemClicked"
|
||||
ItemContainerStyle="{StaticResource DefaultMailListViewItemStyle}"
|
||||
ItemTemplate="{StaticResource SingleMailItemTemplate}"
|
||||
ItemsSource="{x:Bind ThreadEmails, Mode=OneTime}"
|
||||
ProcessKeyboardAccelerators="WinoListViewProcessKeyboardAccelerators"
|
||||
SelectionMode="Extended" />
|
||||
SelectionMode="Extended">
|
||||
<listview:WinoListView.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<ItemsStackPanel Margin="8,0,12,0" AreStickyGroupHeadersEnabled="True" />
|
||||
</ItemsPanelTemplate>
|
||||
</listview:WinoListView.ItemsPanel>
|
||||
</listview:WinoListView>
|
||||
</controls:WinoExpander.Content>
|
||||
</controls:WinoExpander>
|
||||
|
||||
@@ -117,7 +129,7 @@
|
||||
|
||||
<DataTemplate x:Key="MailGroupHeaderDefaultTemplate" x:DataType="collections:IReadOnlyObservableGroup">
|
||||
<Grid
|
||||
Margin="4,2"
|
||||
Margin="0,0,0,6"
|
||||
AllowFocusOnInteraction="False"
|
||||
Background="{ThemeResource MailListHeaderBackgroundColor}"
|
||||
CornerRadius="6">
|
||||
@@ -386,12 +398,11 @@
|
||||
toolkitExt:ScrollViewerExtensions.VerticalScrollBarMargin="0"
|
||||
ChoosingItemContainer="WinoListViewChoosingItemContainer"
|
||||
IsItemClickEnabled="True"
|
||||
ItemClick="WinoListView_ItemClick"
|
||||
ItemClick="WinoListViewItemClicked"
|
||||
ItemContainerStyleSelector="{StaticResource WinoMailItemContainerStyleSelector}"
|
||||
ItemTemplateSelector="{StaticResource MailItemTemplateSelector}"
|
||||
ItemsSource="{x:Bind MailCollectionViewSource.View, Mode=OneWay}"
|
||||
ProcessKeyboardAccelerators="WinoListViewProcessKeyboardAccelerators"
|
||||
SelectionChanged="WinoListViewSelectionChanged"
|
||||
SelectionMode="Extended">
|
||||
<listview:WinoListView.ItemContainerTransitions>
|
||||
<TransitionCollection>
|
||||
@@ -400,7 +411,7 @@
|
||||
</listview:WinoListView.ItemContainerTransitions>
|
||||
<listview:WinoListView.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<ItemsStackPanel Margin="8,0,12,0" AreStickyGroupHeadersEnabled="True" />
|
||||
<ItemsStackPanel AreStickyGroupHeadersEnabled="True" GroupPadding="10,10,10,0" />
|
||||
</ItemsPanelTemplate>
|
||||
</listview:WinoListView.ItemsPanel>
|
||||
<listview:WinoListView.Resources>
|
||||
@@ -412,15 +423,6 @@
|
||||
<GroupStyle HeaderTemplate="{StaticResource MailGroupHeaderDefaultTemplate}" HidesIfEmpty="True" />
|
||||
</listview:WinoListView.GroupStyle>
|
||||
</listview:WinoListView>
|
||||
<!--<advanced:WinoItemsView
|
||||
x:Name="MailListView"
|
||||
Margin="4"
|
||||
ItemTemplate="{StaticResource MailItemContainerSelector}"
|
||||
ItemsSource="{x:Bind ViewModel.MailCollection.Items, Mode=OneTime}"
|
||||
Layout="{StaticResource DefaultItemsViewLayout}"
|
||||
LoadMoreCommand="{x:Bind ViewModel.LoadMoreItemsCommand}"
|
||||
ProcessKeyboardAccelerators="MailListView_ProcessKeyboardAccelerators"
|
||||
SelectionMode="Extended" />-->
|
||||
|
||||
<!-- Try online search panel. -->
|
||||
<Grid Grid.Row="1" Visibility="{x:Bind ViewModel.IsOnlineSearchButtonVisible, Mode=OneWay}">
|
||||
|
||||
@@ -63,6 +63,7 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void OnNavigatedFrom(NavigationEventArgs e)
|
||||
{
|
||||
base.OnNavigatedFrom(e);
|
||||
@@ -162,6 +163,8 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
||||
args.IsContainerPrepared = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async void MailItemContextRequested(UIElement sender, ContextRequestedEventArgs args)
|
||||
{
|
||||
// TODO: New ItemsView implementation.
|
||||
@@ -496,7 +499,7 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
||||
|
||||
private void UpdateAdaptiveness()
|
||||
{
|
||||
bool isMultiSelectionEnabled = ViewModel.IsMultiSelectionModeEnabled || KeyPressService.IsCtrlKeyPressed();
|
||||
bool isMultiSelectionEnabled = ViewModel.IsMultiSelectionModeEnabled;
|
||||
|
||||
if (StatePersistenceService.IsReaderNarrowed)
|
||||
{
|
||||
@@ -545,22 +548,85 @@ public sealed partial class MailListPage : MailListPageAbstract,
|
||||
}
|
||||
}
|
||||
|
||||
private void WinoListViewSelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
private async void WinoListViewItemClicked(object sender, ItemClickEventArgs e)
|
||||
{
|
||||
if (sender is not WinoListView listView) return;
|
||||
|
||||
}
|
||||
bool isSelectedItemFromThread = listView.IsThreadListView;
|
||||
bool isCtrlPressed = KeyPressService.IsCtrlKeyPressed();
|
||||
|
||||
private void WinoListView_ItemClick(object sender, ItemClickEventArgs e)
|
||||
{
|
||||
if (e.ClickedItem is ThreadMailItemViewModel clickedThread)
|
||||
bool isClickingThreadItem = e.ClickedItem is ThreadMailItemViewModel;
|
||||
|
||||
// Unselect all items. It's single selection.
|
||||
if (!isCtrlPressed)
|
||||
{
|
||||
// Only if container is selected.
|
||||
await ViewModel.MailCollection.UnselectAllAsync();
|
||||
|
||||
var threadContainer = MailListView.ContainerFromItem(clickedThread) as WinoThreadMailItemViewModelListViewItem;
|
||||
|
||||
if (threadContainer?.IsSelected ?? false)
|
||||
if (!isSelectedItemFromThread && !isClickingThreadItem)
|
||||
{
|
||||
clickedThread.IsThreadExpanded = !clickedThread.IsThreadExpanded;
|
||||
await ViewModel.MailCollection.CollapseAllThreadsAsync();
|
||||
}
|
||||
}
|
||||
|
||||
if (e.ClickedItem is MailItemViewModel mailListItem)
|
||||
{
|
||||
mailListItem.IsSelected = !mailListItem.IsSelected;
|
||||
}
|
||||
else if (e.ClickedItem is ThreadMailItemViewModel threadMailItemViewModel)
|
||||
{
|
||||
// Extended selection mode handling for threads
|
||||
if (isCtrlPressed)
|
||||
{
|
||||
// If thread is selected and Ctrl is pressed
|
||||
if (threadMailItemViewModel.IsSelected)
|
||||
{
|
||||
// If thread was collapsed, expand it
|
||||
if (!threadMailItemViewModel.IsThreadExpanded)
|
||||
{
|
||||
threadMailItemViewModel.IsThreadExpanded = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Check if all items are selected.
|
||||
// If so, then unselect all items in the thread and unselect the thread itself.
|
||||
if (threadMailItemViewModel.ThreadEmails.All(a => a.IsSelected))
|
||||
{
|
||||
foreach (var threadEmail in threadMailItemViewModel.ThreadEmails)
|
||||
{
|
||||
threadEmail.IsSelected = false;
|
||||
}
|
||||
threadMailItemViewModel.IsSelected = false;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If thread was already expanded, select all items in the thread
|
||||
foreach (var threadEmail in threadMailItemViewModel.ThreadEmails)
|
||||
{
|
||||
threadEmail.IsSelected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Thread is not selected, select and expand it.
|
||||
if (!threadMailItemViewModel.IsThreadExpanded) threadMailItemViewModel.IsThreadExpanded = true;
|
||||
if (!threadMailItemViewModel.IsSelected)
|
||||
{
|
||||
threadMailItemViewModel.IsSelected = true;
|
||||
|
||||
foreach (var threadEmail in threadMailItemViewModel.ThreadEmails)
|
||||
{
|
||||
threadEmail.IsSelected = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// No Ctrl pressed, toggle expansion state (default behavior)
|
||||
threadMailItemViewModel.IsThreadExpanded = !threadMailItemViewModel.IsThreadExpanded;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user