|
@@ -1,6 +1,7 @@
|
|
|
using ComPDFKit.PDFDocument;
|
|
|
using PDF_Office.Helper;
|
|
|
using PDF_Office.Model.BOTA;
|
|
|
+using PDF_Office.ViewModels.BOTA;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
@@ -23,6 +24,14 @@ namespace PDF_Office.Views.BOTA
|
|
|
/// </summary>
|
|
|
public partial class OutLineControl : UserControl
|
|
|
{
|
|
|
+ /// <summary>
|
|
|
+ /// 当前显示了线段的Item
|
|
|
+ /// </summary>
|
|
|
+ private TreeViewItem Treeviewitem = null;
|
|
|
+ /// <summary>
|
|
|
+ /// 需要重命名的Item的DataContext
|
|
|
+ /// </summary>
|
|
|
+ private OutlineNode ReNameOutlineNode = null;
|
|
|
public OutLineControl()
|
|
|
{
|
|
|
InitializeComponent();
|
|
@@ -36,7 +45,7 @@ namespace PDF_Office.Views.BOTA
|
|
|
}
|
|
|
private void OutlineView_PreviewMouseMove(object sender, MouseEventArgs e)
|
|
|
{
|
|
|
- if (e.LeftButton == MouseButtonState.Pressed )
|
|
|
+ if (e.LeftButton == MouseButtonState.Pressed)
|
|
|
{
|
|
|
var pos = e.GetPosition(OutlineView);
|
|
|
HitTestResult result = VisualTreeHelper.HitTest(OutlineView, pos);
|
|
@@ -55,7 +64,11 @@ namespace PDF_Office.Views.BOTA
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private TreeViewItem Treeviewitem = null;
|
|
|
+ /// <summary>
|
|
|
+ /// 拖拽判断区域以及显示什么线
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
private void Grid_DragOver(object sender, DragEventArgs e)
|
|
|
{
|
|
|
TreeViewItem sourceitem = e.Data.GetData(typeof(TreeViewItem)) as TreeViewItem;
|
|
@@ -70,34 +83,184 @@ namespace PDF_Office.Views.BOTA
|
|
|
TreeViewItem treeviewitem = CommonHelper.FindVisualParent<TreeViewItem>(result.VisualHit);
|
|
|
if (treeviewitem != null)
|
|
|
{
|
|
|
- Point p = treeviewitem.TranslatePoint(new Point(0, 0), OutlineView);
|
|
|
- if (Treeviewitem==null)
|
|
|
- {
|
|
|
- Treeviewitem = treeviewitem;
|
|
|
- }
|
|
|
- else if (!Treeviewitem.Equals(treeviewitem))
|
|
|
- {
|
|
|
- (Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
- (Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
- Treeviewitem = treeviewitem;
|
|
|
- }
|
|
|
- else
|
|
|
+ //控制最顶端的线
|
|
|
+ if (pos.Y <= 9)
|
|
|
{
|
|
|
+ if (Treeviewitem == null)
|
|
|
+ {
|
|
|
+ Treeviewitem = treeviewitem;
|
|
|
+ }
|
|
|
+ (DataContext as OutLineControlViewModel).IsInsertHead = true;
|
|
|
(Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
(Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
}
|
|
|
- if (pos.Y < p.Y + 16)
|
|
|
- {
|
|
|
- (treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = true;
|
|
|
- }
|
|
|
else
|
|
|
{
|
|
|
- (treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = true;
|
|
|
+ (DataContext as OutLineControlViewModel).IsInsertHead = false;
|
|
|
+
|
|
|
+ if (Treeviewitem == null)
|
|
|
+ {
|
|
|
+ Treeviewitem = treeviewitem;
|
|
|
+ }
|
|
|
+ else if (!Treeviewitem.Equals(treeviewitem))
|
|
|
+ {
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
+ Treeviewitem = treeviewitem;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
+ }
|
|
|
+ if (Treeviewitem.Equals(sourceitem))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //鼠标位于上半部分显示实线,下半部分显示虚线
|
|
|
+ Point p = treeviewitem.TranslatePoint(new Point(0, 0), OutlineView);
|
|
|
+ if (pos.Y < p.Y + 16)
|
|
|
+ {
|
|
|
+ (treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ (treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Grid_DragLeave(object sender, DragEventArgs e)
|
|
|
+ {
|
|
|
+ HiddenaAllLine();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OutlineView_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
|
|
|
+ {
|
|
|
+ TextBlock text = e.OriginalSource as TextBlock;
|
|
|
+ if (text == null || text.Name == "PageIndex")
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ TreeView tree = sender as TreeView;
|
|
|
+ if (tree == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ OutlineNode viewitem = tree.SelectedItem as OutlineNode;
|
|
|
+ if (viewitem == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ReNameOutlineNode = viewitem;
|
|
|
+ text.Visibility = Visibility.Collapsed;
|
|
|
+ e.Handled = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OutlineView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OutlineView_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
|
|
+ {
|
|
|
+ (DataContext as OutLineControlViewModel).IsInsertHead = false;
|
|
|
+ if (Treeviewitem != null)
|
|
|
+ {
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
+ Treeviewitem = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OutlineView_Drop(object sender, DragEventArgs e)
|
|
|
+ {
|
|
|
+ TreeViewItem souredata = e.Data.GetData(typeof(TreeViewItem)) as TreeViewItem;
|
|
|
+ OutlineNode soureoutlineNode = souredata.DataContext as OutlineNode;
|
|
|
+ Point pos = e.GetPosition(OutlineView);
|
|
|
+ HitTestResult result = VisualTreeHelper.HitTest(OutlineView, pos);
|
|
|
+ if (result==null)
|
|
|
+ {
|
|
|
+ HiddenaAllLine();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ TreeViewItem targetitem = CommonHelper.FindVisualParent<TreeViewItem>(result.VisualHit);
|
|
|
+ if (targetitem==null)
|
|
|
+ {
|
|
|
+ HiddenaAllLine();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ OutlineNode targetoutlineNode = targetitem.DataContext as OutlineNode;
|
|
|
+ if (soureoutlineNode.Equals(targetoutlineNode))
|
|
|
+ {
|
|
|
+ HiddenaAllLine();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ (DataContext as OutLineControlViewModel).InsertOutLine(targetoutlineNode, soureoutlineNode);
|
|
|
+
|
|
|
+ HiddenaAllLine();
|
|
|
+ (DataContext as OutLineControlViewModel).Updata(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void HiddenaAllLine()
|
|
|
+ {
|
|
|
+ (DataContext as OutLineControlViewModel).IsInsertHead = false;
|
|
|
+ if (Treeviewitem != null)
|
|
|
+ {
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertCurrentLayer = false;
|
|
|
+ (Treeviewitem.DataContext as OutlineNode).IsInsertNextLayer = false;
|
|
|
+ Treeviewitem = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ private void ReName_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
|
|
|
+ {
|
|
|
+ TextBox ReNameText = sender as TextBox;
|
|
|
+ if (ReNameText == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (ReNameText.Visibility == Visibility.Visible)
|
|
|
+ {
|
|
|
+ if (ReNameOutlineNode != null)
|
|
|
+ {
|
|
|
+ ReNameText.Text = ReNameOutlineNode.Outline.Title;
|
|
|
+ }
|
|
|
+ ReNameText.Focus();
|
|
|
+ ReNameText.SelectAll();
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ private void RenameGrid_LostFocus(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ TextBox newdto = e.OriginalSource as TextBox;
|
|
|
+ if (newdto == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ string newtitle = string.IsNullOrEmpty(newdto.Text) ? "" : newdto.Text;
|
|
|
+ Grid senderdto = sender as Grid;
|
|
|
+ if (senderdto == null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ senderdto.Visibility = Visibility.Collapsed;
|
|
|
+ if (ReNameOutlineNode != null)
|
|
|
+ {
|
|
|
+ CPDFOutline result = ReNameOutlineNode.Outline;
|
|
|
+ if (result != null)
|
|
|
+ {
|
|
|
+ if (newtitle == result.Title)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ (DataContext as OutLineControlViewModel).SetTitle(result, newtitle);
|
|
|
+ }
|
|
|
+ (DataContext as OutLineControlViewModel).Updata(false);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|