Browse Source

综合- 补充关闭询问弹窗,补充缩略图更新逻辑,修复OCR进度条问题

ZhouJieSheng 2 years ago
parent
commit
555fd3a188

+ 6 - 1
PDF Office/ViewModels/MainContentViewModel.cs

@@ -79,6 +79,10 @@ namespace PDF_Office.ViewModels
 
         public DelegateCommand RenameCommand { get; set; }
 
+        public ViewContentViewModel viewContentViewModel { get; set; }
+
+        public MainWindowViewModel mainWindowViewModel { get; set; }
+
 
         private string regionName;
 
@@ -556,8 +560,9 @@ namespace PDF_Office.ViewModels
                 {
                     await CreateFileFromOffice(filepath);
                 }
-           
             }
+
+            mainWindowViewModel = App.mainWindowViewModel;
         }
 
         public bool IsNavigationTarget(NavigationContext navigationContext)

+ 94 - 3
PDF Office/ViewModels/MainWindowViewModel.cs

@@ -18,6 +18,7 @@ using ComPDFKitViewer.PdfViewer;
 using Dragablz;
 using System.Windows;
 using Prism.Ioc;
+using PDF_Office.CustomControl;
 
 namespace PDF_Office.ViewModels
 {
@@ -37,20 +38,24 @@ namespace PDF_Office.ViewModels
                     {
                         CurrentPDFViewer = pdfviewer;
                     }
+                    else
+                    {
+                        CurrentPDFViewer = null;
+                    }
                 }
             }
         }
 
-        private double value = 0;
+        private double processvalue = 0;
         /// <summary>
         /// 进度条当前值
         /// </summary>
         public double Value
         {
-            get { return value; }
+            get { return processvalue; }
             set
             {
-                SetProperty(ref value, value);
+                SetProperty(ref processvalue, value);
             }
         }
 
@@ -81,6 +86,20 @@ namespace PDF_Office.ViewModels
             }
         }
 
+        private bool isCloseAllEnable = false;
+
+        public bool IsCloseAllEnable
+        {
+            get { return isCloseAllEnable; }
+            set
+            {
+                SetProperty(ref isCloseAllEnable, value);
+            }
+        }
+
+        public DelegateCommand CloseAllTabCommand { get; set; }
+
+
         /// <summary>
         /// 进度条关闭的事件
         /// </summary>
@@ -131,6 +150,7 @@ namespace PDF_Office.ViewModels
 
             AddTab = new DelegateCommand(AddTabItem);
             CloseOCRCommand = new DelegateCommand(closeocr);
+            CloseAllTabCommand = new DelegateCommand(()=> { closeAllTabItem(); });
 
             //第一次打开时需要自动加载Home页
             if (App.IsFirstOpen)
@@ -161,6 +181,7 @@ namespace PDF_Office.ViewModels
         private void AddTabItem()
         {
             region.RequestNavigate(RegionNames.MainRegion, "MainContent");
+            CheckViewsCount();
         }
 
         /// <summary>
@@ -174,19 +195,69 @@ namespace PDF_Office.ViewModels
                 { ParameterNames.FilePath, filePath }
             };
             region.RequestNavigate(RegionNames.MainRegion, "MainContent", parameters);
+            CheckViewsCount();
+        }
+
+
+        /// <summary>
+        /// 关闭所有页签
+        /// </summary>
+        public bool closeAllTabItem()
+        {
+            while (region.Regions[RegionNames.MainRegion].Views.Count() > 0)
+            {
+                if (CurrentPDFViewer.UndoManager.CanSave)
+                {
+                    ContentResult result = ShowSaveDialog((SelectedItem.DataContext as MainContentViewModel).viewContentViewModel);
+                    if (result == ContentResult.Cancel)
+                        return false;
+                }
+                App.OpenedFileList.Remove(CurrentPDFViewer.Document.FilePath);
+                CurrentPDFViewer.CloseDocument();
+                region.Regions[RegionNames.MainRegion].Remove(selectedItem);
+            }
+            return true;
         }
 
         public void CloseTabItem(object item)
         {
+            if (pdfViewer != null && pdfViewer.UndoManager.CanSave)
+            {
+                ContentResult result = ShowSaveDialog((SelectedItem.DataContext as MainContentViewModel).viewContentViewModel);
+                if (result == ContentResult.Cancel)
+                {
+                    return;
+                }
+                App.OpenedFileList.Remove(pdfViewer.Document.FilePath);
+                if (pdfViewer.Document != null)
+                {
+                    pdfViewer.CloseDocument();
+                }
+
+            }
             if (region.Regions[RegionNames.MainRegion].Views.Count() > 1)
             {
                 region.Regions[RegionNames.MainRegion].Remove(item);
+                CheckViewsCount();
             }
             else
             {
                 App.Current.MainWindow.Close();
             }
             return;
+
+        }
+
+        private void CheckViewsCount()
+        {
+            if(region.Regions[RegionNames.MainRegion].Views.Count()>1)
+            {
+                IsCloseAllEnable = true;
+            }
+            else
+            {
+                IsCloseAllEnable = false;
+            }
         }
 
         public void SelectItem(string filepath)
@@ -202,5 +273,25 @@ namespace PDF_Office.ViewModels
                 behavior.ActivateView(item);
             }
         }
+
+        /// <summary>
+        /// 显示关闭询问弹窗
+        /// </summary>
+        /// <param name="pdfViewer"></param>
+        /// <returns></returns>
+        private ContentResult ShowSaveDialog(ViewContentViewModel viewContentViewModel)
+        {
+            AlertsMessage alertsMessage = new AlertsMessage();
+            alertsMessage.ShowDialog("关闭提示","当前文档有为保存的操作,是否需要保存?","Cancel","No","Ok");
+            var result = alertsMessage.result;
+
+            if (result == ContentResult.Ok)
+            {
+                var isSave = viewContentViewModel.saveFile();
+                if (isSave == false)
+                    result = ContentResult.Cancel;
+            }
+            return result;
+        }
     }
 }

+ 43 - 41
PDF Office/ViewModels/ViewContentViewModel.cs

@@ -28,6 +28,7 @@ using PDF_Office.Helper;
 using System.Security.Policy;
 using System.Windows.Documents;
 using ComPDFKit.PDFDocument;
+using PDFSettings.Settings;
 
 namespace PDF_Office.ViewModels
 {
@@ -927,6 +928,7 @@ namespace PDF_Office.ViewModels
             if (mainVM != null)
             {
                 mainViewModel = mainVM;
+                mainViewModel.viewContentViewModel = this;
             }
             var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer;
             if (pdfview != null)
@@ -1042,7 +1044,7 @@ namespace PDF_Office.ViewModels
         /// <summary>
         /// 已有路径文档的保存逻辑
         /// </summary>
-        private bool saveFile()
+        public bool saveFile()
         {
             try
             {
@@ -1089,46 +1091,46 @@ namespace PDF_Office.ViewModels
                     PDFViewer.UndoManager.CanSave = false;
                     App.Current.Dispatcher.Invoke(() =>
                                   {
-                                      //TODO:更新缩略图
-                                      //OpenFileInfo info = SettingHelper.GetFileInfo(PdfViewer.Document.FilePath);
-                                      //try
-                                      //{
-                                      //    if (!string.IsNullOrEmpty(info.ThumbImgPath) && !PdfViewer.Document.IsEncrypted)//加密的文档不获取缩略图
-                                      //    {
-                                      //        var size = PdfViewer.Document.GetPageSize(0);
-                                      //        System.Drawing.Bitmap bitmap = ToolMethod.RenderPageBitmapNoWait(PdfViewer.Document, (int)size.Width, (int)size.Height, 0, true, true);
-                                      //        string folderPath = System.IO.Path.Combine(App.CurrentPath, "CoverImage");
-                                      //        if (File.Exists(folderPath))
-                                      //            File.Delete(folderPath);
-                                      //        DirectoryInfo folder = new DirectoryInfo(folderPath);
-                                      //        if (!folder.Exists)
-                                      //            folder.Create();
-                                      //        string imagePath = info.ThumbImgPath;
-                                      //        if (!File.Exists(imagePath))//由加密文档变为非加密文档时 新建一个路径
-                                      //        {
-                                      //            string imageName = Guid.NewGuid().ToString();
-                                      //            imagePath = System.IO.Path.Combine(folderPath, imageName);
-                                      //            using (FileStream stream = new FileStream(imagePath, FileMode.Create))
-                                      //            {
-                                      //                bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
-                                      //            }
-                                      //        }
-                                      //        else
-                                      //        {
-                                      //            using (FileStream stream = new FileStream(imagePath, FileMode.Open))
-                                      //            {
-                                      //                bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
-                                      //            }
-                                      //        }
-                                      //        info.ThumbImgPath = imagePath;
-                                      //        SettingHelper.SetFileInfo(info);
-                                      //    }
-                                      //}
-                                      //catch
-                                      //{
-                                      //    info.ThumbImgPath = null;
-                                      //    SettingHelper.SetFileInfo(info);
-                                      //}
+                                      //保存时更新缩略图
+                                      OpenFileInfo info = SettingHelper.GetFileInfo(PDFViewer.Document.FilePath);
+                                      try
+                                      {
+                                          if (!string.IsNullOrEmpty(info.ThumbImgPath) && !PDFViewer.Document.IsEncrypted)//加密的文档不获取缩略图
+                                          {
+                                              var size = PDFViewer.Document.GetPageSize(0);
+                                              System.Drawing.Bitmap bitmap = ToolMethod.RenderPageBitmapNoWait(PDFViewer.Document, (int)size.Width, (int)size.Height, 0, true, true);
+                                              string folderPath = System.IO.Path.Combine(App.CurrentPath, "CoverImage");
+                                              if (File.Exists(folderPath))
+                                                  File.Delete(folderPath);
+                                              DirectoryInfo folder = new DirectoryInfo(folderPath);
+                                              if (!folder.Exists)
+                                                  folder.Create();
+                                              string imagePath = info.ThumbImgPath;
+                                              if (!File.Exists(imagePath))//由加密文档变为非加密文档时 新建一个路径
+                                              {
+                                                  string imageName = Guid.NewGuid().ToString();
+                                                  imagePath = System.IO.Path.Combine(folderPath, imageName);
+                                                  using (FileStream stream = new FileStream(imagePath, FileMode.Create))
+                                                  {
+                                                      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
+                                                  }
+                                              }
+                                              else
+                                              {
+                                                  using (FileStream stream = new FileStream(imagePath, FileMode.Open))
+                                                  {
+                                                      bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
+                                                  }
+                                              }
+                                              info.ThumbImgPath = imagePath;
+                                              SettingHelper.SetFileInfo(info);
+                                          }
+                                      }
+                                      catch
+                                      {
+                                          info.ThumbImgPath = null;
+                                          SettingHelper.SetFileInfo(info);
+                                      }
                                   });
                 }
                 else

+ 5 - 1
PDF Office/Views/MainWindow.xaml

@@ -19,6 +19,7 @@
     prism:ViewModelLocator.AutoWireViewModel="True"
     Activated="Window_Activated"
     Closed="Window_Closed"
+    Closing="Window_Closing"
     SizeChanged="Window_SizeChanged"
     Style="{StaticResource WindowStyle}"
     UseLayoutRounding="True"
@@ -138,7 +139,10 @@
                                             Command="{Binding DataContext.CloseTab}"
                                             CommandParameter="{Binding}"
                                             Header="Close Tab" />
-                                        <MenuItem Header="Close All Tab" />
+                                        <MenuItem
+                                            Command="{Binding DataContext.mainWindowViewModel.CloseAllTabCommand}"
+                                            Header="Close All Tab"
+                                            IsEnabled="{Binding DataContext.mainWindowViewModel.IsCloseAllEnable}" />
                                         <MenuItem Header="Open In New Window" Visibility="Collapsed" />
                                     </ContextMenu>
                                 </Grid.ContextMenu>

+ 8 - 0
PDF Office/Views/MainWindow.xaml.cs

@@ -143,5 +143,13 @@ namespace PDF_Office.Views
                 TabablzControl.Focus();
             }
         }
+
+        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            if (!(DataContext as MainWindowViewModel).closeAllTabItem())
+            {
+                e.Cancel = true;
+            }
+        }
     }
 }