|
@@ -7,6 +7,7 @@ using compdfkit_tools.PDFControl;
|
|
|
using ComPDFKitViewer;
|
|
|
using ComPDFKitViewer.AnnotEvent;
|
|
|
using ComPDFKitViewer.PdfViewer;
|
|
|
+using Dragablz;
|
|
|
using Microsoft.Win32;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
@@ -40,23 +41,28 @@ namespace compdfkit
|
|
|
{
|
|
|
InitializeComponent();
|
|
|
Loaded += MainWindow_Loaded;
|
|
|
+ App.OpenedFilePathList.Clear();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ ///
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- LoadDefaultDocument();
|
|
|
+ if (App.DefaultPDFLoaded == false)
|
|
|
+ {
|
|
|
+ LoadDefaultDocument();
|
|
|
+ App.DefaultPDFLoaded = true;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void LoadDefaultDocument()
|
|
|
{
|
|
|
- MainPage viewPage = new MainPage();
|
|
|
- TabItemExt tabItem = new TabItemExt();
|
|
|
string defaultFilePath = "developer_guide_windows.pdf";
|
|
|
- viewPage.InitWithFilePath(defaultFilePath);
|
|
|
- tabItem.Content = viewPage;
|
|
|
- tabItem.IsSelected = true;
|
|
|
- tabItem.FileName = Path.GetFileName(defaultFilePath);
|
|
|
- TabControl.Items.Add(tabItem);
|
|
|
+ TabControlLoadDocument(defaultFilePath);
|
|
|
}
|
|
|
|
|
|
private void DefaultAddButton_Click(object sender, RoutedEventArgs e)
|
|
@@ -64,16 +70,90 @@ namespace compdfkit
|
|
|
string filePath = CommonHelper.GetFilePathOrEmpty();
|
|
|
if (filePath != string.Empty)
|
|
|
{
|
|
|
- TabItemExt tabItem = new TabItemExt();
|
|
|
- MainPage viewPage = new MainPage();
|
|
|
- viewPage.InitWithFilePath(filePath);
|
|
|
- tabItem.Content = viewPage;
|
|
|
- tabItem.IsSelected = true;
|
|
|
- tabItem.FileName = Path.GetFileName(filePath);
|
|
|
- TabControl.Items.Add(tabItem);
|
|
|
+ TabControlLoadDocument(filePath);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void TabControlLoadDocument(string filePath)
|
|
|
+ {
|
|
|
+ foreach (TabItemExt item in TabControl.Items)
|
|
|
+ {
|
|
|
+ if (item.Tag != null && item.Tag.ToString() == filePath)
|
|
|
+ {
|
|
|
+ item.IsSelected = true; // 如果存在相同的 Tag,则选中对应的 tabItem
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ TabItemExt tabItem = new TabItemExt();
|
|
|
+ MainPage viewPage = new MainPage();
|
|
|
+
|
|
|
+ viewPage.CheckExistBeforeOpenFileEvent -= (e) =>
|
|
|
+ {
|
|
|
+ foreach (TabItemExt item in TabControl.Items)
|
|
|
+ {
|
|
|
+ if (item.Tag != null && item.Tag.ToString() == e)
|
|
|
+ {
|
|
|
+ item.IsSelected = true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tabItem.IsSelected = true;
|
|
|
+ tabItem.FileName = Path.GetFileName(e);
|
|
|
+ if (App.OpenedFilePathList.Contains(e))
|
|
|
+ {
|
|
|
+ for (int i = 0; i < App.OpenedFilePathList.Count; i++)
|
|
|
+ {
|
|
|
+ if (e.ToLower() == App.OpenedFilePathList[i].ToLower())
|
|
|
+ {
|
|
|
+ App.OpenedFilePathList[i] = e;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tabItem.Tag = e;
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+
|
|
|
+ viewPage.CheckExistBeforeOpenFileEvent += (e) =>
|
|
|
+ {
|
|
|
+ foreach (TabItemExt item in TabControl.Items)
|
|
|
+ {
|
|
|
+ if (item.Tag != null && item.Tag.ToString() == e)
|
|
|
+ {
|
|
|
+ item.IsSelected = true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tabItem.IsSelected = true;
|
|
|
+ tabItem.FileName = Path.GetFileName(e);
|
|
|
+ if (App.OpenedFilePathList.Contains(e))
|
|
|
+ {
|
|
|
+ for (int i = 0; i < App.OpenedFilePathList.Count; i++)
|
|
|
+ {
|
|
|
+ if (e.ToLower() == App.OpenedFilePathList[i].ToLower())
|
|
|
+ {
|
|
|
+ App.OpenedFilePathList[i] = e;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tabItem.Tag = e;
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+
|
|
|
+ viewPage.InitWithFilePath(filePath);
|
|
|
+ tabItem.Content = viewPage;
|
|
|
+ tabItem.IsSelected = true;
|
|
|
+ tabItem.FileName = Path.GetFileName(filePath);
|
|
|
+ tabItem.Tag = filePath;
|
|
|
+
|
|
|
+ App.OpenedFilePathList.Add(filePath);
|
|
|
+
|
|
|
+ TabControl.Items.Add(tabItem);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public class TabItemExt : TabItem, INotifyPropertyChanged
|
|
|
{
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
@@ -93,6 +173,7 @@ namespace compdfkit
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 文件更改显示*
|
|
|
/// </summary>
|
|
@@ -123,7 +204,64 @@ namespace compdfkit
|
|
|
DragMove();
|
|
|
}
|
|
|
|
|
|
- #region window action
|
|
|
+ private void Button_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ var button = sender as Button;
|
|
|
+ var dragablzItem = FindParentDragablzItem(button);
|
|
|
+ var tabControl = FindParentTabControl(dragablzItem);
|
|
|
+ MainPage mainPage = (dragablzItem.Content as TabItemExt).Content as MainPage;
|
|
|
+
|
|
|
+ if (mainPage.CanSave)
|
|
|
+ {
|
|
|
+ string fileName = (dragablzItem.Content as TabItemExt).FileName;
|
|
|
+ var message = string.Format("Do you want to save the changes in {0}?", fileName);
|
|
|
+ var result = MessageBox.Show(message, "Alert", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
|
|
|
+
|
|
|
+ if (result == MessageBoxResult.Yes)
|
|
|
+ {
|
|
|
+ mainPage.SaveFile();
|
|
|
+ tabControl.Items.Remove(dragablzItem.Content);
|
|
|
+ }
|
|
|
+ else if (result == MessageBoxResult.No)
|
|
|
+ {
|
|
|
+ tabControl.Items.Remove(dragablzItem.Content);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tabControl.Items.Remove(dragablzItem.Content);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tabControl.Items.Count == 0)
|
|
|
+ {
|
|
|
+ SystemCommands.CloseWindow(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private DragablzItem FindParentDragablzItem(DependencyObject element)
|
|
|
+ {
|
|
|
+ while (element != null && !(element is DragablzItem))
|
|
|
+ {
|
|
|
+ element = VisualTreeHelper.GetParent(element);
|
|
|
+ }
|
|
|
+
|
|
|
+ return element as DragablzItem;
|
|
|
+ }
|
|
|
+
|
|
|
+ private TabControl FindParentTabControl(DependencyObject element)
|
|
|
+ {
|
|
|
+ while (element != null && !(element is TabControl))
|
|
|
+ {
|
|
|
+ element = VisualTreeHelper.GetParent(element);
|
|
|
+ }
|
|
|
+
|
|
|
+ return element as TabControl;
|
|
|
+ }
|
|
|
+
|
|
|
private void MinimizeButton_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
SystemCommands.MinimizeWindow(this);
|
|
@@ -143,9 +281,45 @@ namespace compdfkit
|
|
|
|
|
|
private void CloseButton_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- SystemCommands.CloseWindow(this);
|
|
|
- }
|
|
|
- #endregion
|
|
|
+ int count = TabControl.Items.Count;
|
|
|
+ while (count > 0)
|
|
|
+ {
|
|
|
+ TabItemExt item = TabControl.Items[0] as TabItemExt;
|
|
|
+
|
|
|
+ MainPage mainPage = item.Content as MainPage;
|
|
|
+ if (mainPage.CanSave)
|
|
|
+ {
|
|
|
+ string fileName = item.FileName;
|
|
|
+ var message = string.Format("Do you want to save the changes in {0}?", fileName);
|
|
|
+ var result = MessageBox.Show(message, "Alert", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
|
|
|
+
|
|
|
+ if (result == MessageBoxResult.Yes)
|
|
|
+ {
|
|
|
+ mainPage.SaveFile();
|
|
|
+ TabControl.Items.Remove(item);
|
|
|
+ count--;
|
|
|
+ }
|
|
|
+ else if (result == MessageBoxResult.No)
|
|
|
+ {
|
|
|
+ TabControl.Items.Remove(item);
|
|
|
+ count--;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TabControl.Items.Remove(item);
|
|
|
+ count--;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ if (count == 0)
|
|
|
+ {
|
|
|
+ SystemCommands.CloseWindow(this);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|