using ComPDFKitViewer.AnnotEvent;
using PDF_Office.DataConvert;
using PDF_Office.Helper;
using PDF_Office.Model.BOTA;
using PDF_Office.ViewModels.BOTA;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.StartPanel;
using ListBox = System.Windows.Controls.ListBox;
using MenuItem = System.Windows.Controls.MenuItem;
using UserControl = System.Windows.Controls.UserControl;
namespace PDF_Office.Views.BOTA
{
///
/// AnnotationContent.xaml 的交互逻辑
///
public partial class AnnotationContent : UserControl
{
private AnnotationContentViewModel viewModel;
public AnnotationContent()
{
InitializeComponent();
viewModel = this.DataContext as AnnotationContentViewModel;
}
private void ListBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
if (Mouse.LeftButton == e.ButtonState)
{
viewModel.ListBoxItemPreviewMouseLeftButtonDown.Execute(sender);
}
else if (Mouse.RightButton == e.ButtonState)
{
var pos = e.GetPosition(AnnotationList);
var result = VisualTreeHelper.HitTest(AnnotationList, pos);
if (result != null)
{
ListBoxItem myListBoxItem = sender as System.Windows.Controls.ListBoxItem;
MenuItem copyText = myListBoxItem.ContextMenu.Items[0] as MenuItem;
MenuItem export = myListBoxItem.ContextMenu.Items[1] as MenuItem;
if (AnnotationList.SelectedItems.Count > 1)
{
export.IsEnabled = false;
copyText.IsEnabled = false;
}
else
{
viewModel.ListBoxItemPreviewMouseLeftButtonDown.Execute(sender);
if (myListBoxItem.DataContext is AnnotationHandlerEventArgs annotation)
{
if (annotation.EventType == AnnotArgsType.AnnotFreeText)
{
copyText.IsEnabled = true;
}
else
{
copyText.IsEnabled = false;
}
}
export.IsEnabled = true;
export.Command = viewModel.ExportCommentsCommand;
}
}
}
}
//else if (e.ClickCount == 2)
//{
// viewModel.DoubleClikCommand.Execute(sender);
//}
}
private void AnnotationList_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
//AnnotationList.ContextMenu.IsEnabled = false;
}
private async void MenuExpandAll_Click(object sender, RoutedEventArgs e)
{
SetAllExpander(true);
await Task.Delay(1);
for (int i = 0; i < AnnotationList.Items.Count; i++)
{
ListBoxItem item = AnnotationList.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
ToggleButton button = GetExpandButton(item);
if (button != null && button.Visibility == Visibility.Visible)
{
button.IsChecked = true;
}
}
}
private void MenuCollapseAll_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < AnnotationList.Items.Count; i++)
{
ListBoxItem item = AnnotationList.ItemContainerGenerator.ContainerFromIndex(i) as ListBoxItem;
ToggleButton button = GetExpandButton(item);
if (button != null && button.Visibility == Visibility.Visible)
{
button.IsChecked = false;
}
}
SetAllExpander(false);
}
private void SetAllExpander(bool isexpand)
{
AnnotationList.Dispatcher.Invoke(() =>
{
//开启虚拟化之后 全部展开和折叠会有问题
var scroller = GetScrollHost(AnnotationList);
var stackpanel = CommonHelper.FindVisualChild(scroller);
int count = VisualTreeHelper.GetChildrenCount(stackpanel);
for (int i = 0; i < count; i++)
{
var item = VisualTreeHelper.GetChild(stackpanel, i) as GroupItem;
var g = CommonHelper.FindVisualChild(item);
if (g != null)
g.IsExpanded = isexpand;
}
});
}
private ScrollViewer GetScrollHost(ListBox listBox)
{
if (VisualTreeHelper.GetChildrenCount(listBox) > 0)
{
int s = VisualTreeHelper.GetChildrenCount(listBox);
Border border = VisualTreeHelper.GetChild(listBox, 0) as Border;
if (border != null)
{
return VisualTreeHelper.GetChild(border, 0) as ScrollViewer;
}
}
return null;
}
private ToggleButton GetExpandButton(ListBoxItem item)
{
if (item == null) return null;
Border border = VisualTreeHelper.GetChild(item, 0) as Border;
var btn = CommonHelper.FindVisualChild(border);
return btn;
}
private void MenuTimeRightSort_Click(object sender, RoutedEventArgs e)
{
ICollectionView v = CollectionViewSource.GetDefaultView(AnnotationList.ItemsSource);
CreateTimeToDate createTimeToDate = new CreateTimeToDate();
v.GroupDescriptions.Clear();
v.GroupDescriptions.Add(new PropertyGroupDescription(nameof(AnnotHandlerEventArgs.CreateTime), createTimeToDate));
v.SortDescriptions.Clear();
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.CreateTime), ListSortDirection.Ascending));
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.AnnotIndex), ListSortDirection.Ascending));
}
private void MenuTimeBackSort_Click(object sender, RoutedEventArgs e)
{
ICollectionView v = CollectionViewSource.GetDefaultView(AnnotationList.ItemsSource);
CreateTimeToDate createTimeToDate = new CreateTimeToDate();
v.GroupDescriptions.Clear();
v.GroupDescriptions.Add(new PropertyGroupDescription(nameof(AnnotHandlerEventArgs.CreateTime), createTimeToDate));
v.SortDescriptions.Clear();
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.CreateTime), ListSortDirection.Descending));
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.AnnotIndex), ListSortDirection.Descending));
}
private void MenuPageSort_Click(object sender, RoutedEventArgs e)
{
ICollectionView v = CollectionViewSource.GetDefaultView(AnnotationList.ItemsSource);
v.GroupDescriptions.Clear();
v.GroupDescriptions.Add(new PropertyGroupDescription(nameof(AnnotHandlerEventArgs.PageIndex)));
v.SortDescriptions.Clear();
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.PageIndex), ListSortDirection.Ascending));
v.SortDescriptions.Add(new SortDescription(nameof(AnnotHandlerEventArgs.AnnotIndex), ListSortDirection.Ascending));
}
private void MenuItemCopyText_Click(object sender, RoutedEventArgs e)
{
if (AnnotationList.SelectedItems.Count == 1)
{
if (AnnotationList.SelectedItem is AnnotationHandlerEventArgs annotation)
{
if (annotation.EventType == AnnotArgsType.AnnotFreeText)
{
StringBuilder Copystr = new StringBuilder();
Copystr.Append(annotation.Content);
System.Windows.Clipboard.SetText(Copystr.ToString());
CustomControl.MessageBoxEx.Show("数据复制成功");
}
}
}
}
private void MenuItemDelete_Click(object sender, RoutedEventArgs e)
{
List pagelist = new List();
for (int i = 0; i < AnnotationList.SelectedItems.Count; i++)
{
AnnotationHandlerEventArgs annotation = AnnotationList.SelectedItems[i] as AnnotationHandlerEventArgs;
pagelist.Add(AnnotationList.Items.IndexOf(annotation));
}
pagelist.Sort();
for (int i = 0; i < pagelist.Count; i++)
{
AnnotationHandlerEventArgs annotation = AnnotationList.Items[pagelist[pagelist.Count - i - 1]] as AnnotationHandlerEventArgs;
if (annotation == null)
{
continue;
}
viewModel.DeleteCommand.Execute(annotation);
}
}
}
}