Преглед на файлове

compdfkit(win) - 新建文档另存为和打开文档逻辑

weixiangjie преди 1 година
родител
ревизия
a0ad397446

+ 1 - 1
Demo/Examples/Compdfkit_Tools/Common/HomePage/HomePageControl.xaml

@@ -83,7 +83,7 @@
                     <RowDefinition MinHeight="200"></RowDefinition>
                 </Grid.RowDefinitions>
                 <local:FeaturesListControl x:Name="FeaturesListControl"></local:FeaturesListControl>
-                <local:RecentFilesControl Grid.Row="1" Margin="0,20,0,0"></local:RecentFilesControl>
+                <local:RecentFilesControl Grid.Row="1" x:Name="RecentFilesControl" Margin="0,20,0,0"></local:RecentFilesControl>
             </Grid>
     </Grid>
 </UserControl>

+ 27 - 3
Demo/Examples/Compdfkit_Tools/Common/HomePage/HomePageControl.xaml.cs

@@ -40,11 +40,15 @@ namespace Compdfkit_Tools.PDFControl
         /// Open file event. 
         /// param: Whether to create a file
         /// </summary>
-        public event EventHandler<bool> OpenFileEvent;
+        public event EventHandler<OpenFileEventArgs> OpenFileEvent;
 
         public HomePageControl()
         {
             InitializeComponent();
+            RecentFilesControl.OpenFileEvent += (sender, args) =>
+            {
+                OpenFileEvent?.Invoke(this, args);
+            };
         }
 
         private void ImportFeatures()
@@ -295,13 +299,33 @@ namespace Compdfkit_Tools.PDFControl
 
         private void CreateDocument_Click(object sender, RoutedEventArgs e)
         {
-            OpenFileEvent?.Invoke(this, true);
+            OpenFileEvent?.Invoke(this, new OpenFileEventArgs(FileOperationType.CreateNewFile));
         }
 
         private void OpenDocument_Click(object sender, RoutedEventArgs e)
         {
-            OpenFileEvent?.Invoke(this, false);
+            OpenFileEvent?.Invoke(this, new OpenFileEventArgs(FileOperationType.OpenFileDialog));
+        }
+    }
+
+    public class OpenFileEventArgs : EventArgs
+    {
+        public string FilePath { get; set; } // 文件路径
+
+        public FileOperationType OperationType { get; set; } // 操作类型
+
+        public OpenFileEventArgs(FileOperationType operationType, string filePath = "")
+        {
+            OperationType = operationType;
+            FilePath = filePath;
         }
     }
 
+    public enum FileOperationType
+    {
+        CreateNewFile,
+        OpenFileDialog,
+        OpenFileDirectly
+    }
+
 }

+ 1 - 0
Demo/Examples/Compdfkit_Tools/Common/HomePage/RecentFilesControl.xaml

@@ -46,6 +46,7 @@
             </DrawingImage.Drawing>
         </DrawingImage>
         <Style x:Key="ItemContainerStyle" TargetType="ListViewItem">
+            <EventSetter Event="MouseDoubleClick" Handler="ListViewItem_DoubleClick"></EventSetter>
             <Setter Property="HorizontalAlignment" Value="Stretch" />
             <Setter Property="HorizontalContentAlignment" Value="Stretch" />
             <Setter Property="Template">

+ 16 - 0
Demo/Examples/Compdfkit_Tools/Common/HomePage/RecentFilesControl.xaml.cs

@@ -21,10 +21,26 @@ namespace Compdfkit_Tools.PDFControl
     /// </summary>
     public partial class RecentFilesControl : UserControl
     {
+        /// <summary>
+        /// Open file event. Parameter is file path.
+        /// </summary>
+        public event EventHandler<OpenFileEventArgs> OpenFileEvent;
         public RecentFilesControl()
         {
             this.DataContext = FileHistoryHelper<PDFFileInfo>.Instance;
             InitializeComponent();
         }
+
+        private void ListViewItem_DoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            if (sender is ListViewItem listViewItem)
+            {
+                if (listViewItem.Content is PDFFileInfo fileInfo)
+                {
+                    OpenFileEvent?.Invoke(this, new OpenFileEventArgs(FileOperationType.OpenFileDirectly, fileInfo.FilePath));
+                }
+            }
+        }
+
     }
 }

+ 1 - 0
Demo/Examples/Compdfkit_Tools/Security/Encryption/DecryptionDialog.xaml.cs

@@ -42,6 +42,7 @@ namespace Compdfkit_Tools.PDFControl
                     PasswordWindow window = new PasswordWindow();
                     window.InitWithDocument(document);
                     window.Owner = this;
+                    window.PasswordDialog.SetShowText(fileInfoData.FileName + " is encrypted.");
                     window.ShowDialog();
                     if (document.IsLocked)
                     {

+ 27 - 14
Demo/Examples/PDFViewer/MainPage.xaml.cs

@@ -41,7 +41,7 @@ namespace PDFViewer
 
         public event EventHandler FileChangeEvent;
         public event Func<string[], bool> CheckExistBeforeOpenFileEvent;
-        
+        public event EventHandler<string> AfterSaveAsFileEvent;
         public event PropertyChangedEventHandler PropertyChanged;
 
         private bool _canSave = false;
@@ -694,14 +694,19 @@ namespace PDFViewer
                 if (pdfViewer != null && pdfViewer.PDFView != null && pdfViewer.PDFView.Document != null)
                 {
                     CPDFDocument pdfDoc = pdfViewer.PDFView.Document;
-                    SaveFileDialog saveDialog = new SaveFileDialog();
-                    saveDialog.Filter = "(*.pdf)|*.pdf";
-                    saveDialog.DefaultExt = ".pdf";
-                    saveDialog.OverwritePrompt = true;
+                    SaveFileDialog saveDialog = new SaveFileDialog
+                    {
+                        Filter = "(*.pdf)|*.pdf",
+                        DefaultExt = ".pdf",
+                        OverwritePrompt = true
+                    };
 
                     if (saveDialog.ShowDialog() == true)
                     {
-                        pdfDoc.WriteToFilePath(saveDialog.FileName);
+                        if (pdfDoc.WriteToFilePath(saveDialog.FileName))
+                        {
+                            AfterSaveAsFileEvent?.Invoke(this, saveDialog.FileName);
+                        }
                     }
                 }
             }
@@ -717,24 +722,32 @@ namespace PDFViewer
                 try
                 {
                     CPDFDocument pdfDoc = pdfViewer.PDFView.Document;
-                    if (pdfDoc.WriteToLoadedPath())
+                    if(!string.IsNullOrEmpty(pdfDoc.FilePath))
                     {
-                        return;
+                        if (pdfDoc.WriteToLoadedPath())
+                        {
+                            return;
+                        }
                     }
 
-                    SaveFileDialog saveDialog = new SaveFileDialog();
-                    saveDialog.Filter = "(*.pdf)|*.pdf";
-                    saveDialog.DefaultExt = ".pdf";
-                    saveDialog.OverwritePrompt = true;
+                    SaveFileDialog saveDialog = new SaveFileDialog
+                    {
+                        Filter = "(*.pdf)|*.pdf",
+                        DefaultExt = ".pdf",
+                        OverwritePrompt = true
+                    };
 
                     if (saveDialog.ShowDialog() == true)
                     {
-                        pdfDoc.WriteToFilePath(saveDialog.FileName);
+                        if (pdfDoc.WriteToFilePath(saveDialog.FileName))
+                        {
+                            AfterSaveAsFileEvent?.Invoke(this, saveDialog.FileName);
+                        }
                     }
                 }
                 catch (Exception ex)
                 {
-
+                    return;
                 }
             }
         }

+ 31 - 6
Demo/Examples/PDFViewer/MainWindow.xaml.cs

@@ -50,8 +50,8 @@ namespace PDFViewer
             PasswordUI.Confirmed += PasswordUI_Confirmed;
             PasswordUI.Canceled += PasswordUI_Canceled;
             PasswordUI.Closed += PasswordUI_Closed;
-            HomePageControl.OpenFileEvent -= OpenFile;
-            HomePageControl.OpenFileEvent += OpenFile;
+            HomePageControl.OpenFileEvent -= OpenFileEventHandler;
+            HomePageControl.OpenFileEvent += OpenFileEventHandler;
             
 
             if (App.DefaultPDFLoaded == false)
@@ -85,9 +85,13 @@ namespace PDFViewer
             }
         }
 
-        private void OpenFile(object sender, bool isNewFile)
+        private void OpenFileEventHandler(object sender, OpenFileEventArgs args)
         {
-            if (isNewFile)
+            if (args.OperationType == FileOperationType.OpenFileDirectly)
+            {
+                TabControlLoadDocument(args.FilePath);
+            }
+            else if(args.OperationType == FileOperationType.CreateNewFile)
             {
                 TabItemExt tabItem = new TabItemExt();
                 MainPage viewPage = new MainPage();
@@ -96,16 +100,17 @@ namespace PDFViewer
                 
                 viewPage.CheckExistBeforeOpenFileEvent -= ViewPage_CheckExistBeforeOpenFileEvent;
                 viewPage.FileChangeEvent -= ViewPage_FileChangeEvent;
+                viewPage.AfterSaveAsFileEvent -= ViewPage_AfterSaveAsFileEvent;
                 viewPage.CheckExistBeforeOpenFileEvent += ViewPage_CheckExistBeforeOpenFileEvent;
                 viewPage.FileChangeEvent += ViewPage_FileChangeEvent;
+                viewPage.AfterSaveAsFileEvent += ViewPage_AfterSaveAsFileEvent;
                 
                 viewPage.InitWithDocument(document);
                 tabItem.Content = viewPage;
                 tabItem.IsSelected = true;
                 tabItem.FileName = "Blank Page.pdf";
                 tabItem.Tag = "Blank Page.pdf";
-
-                App.OpenedFilePathList.Add("Blank Page.pdf");
+                
                 TabControl.Items.Add(tabItem);
 
                 viewPage.CanSave = true;
@@ -121,6 +126,24 @@ namespace PDFViewer
             }
         }
 
+        private void ViewPage_AfterSaveAsFileEvent(object sender, string e)
+        {
+            if(sender is MainPage mainPage)
+            {
+                var tabItem = (from object t in TabControl.Items select t as TabItemExt).FirstOrDefault(item => Equals(item.Content, mainPage));
+                if (tabItem != null)
+                {
+                    tabItem.FileName = Path.GetFileName(e);
+                    tabItem.Tag = e;
+                }
+                mainPage.pdfViewer.PDFView.CloseDocument();
+                mainPage.pdfViewer.PDFView.InitDocument(e);
+                mainPage.pdfViewer.PDFView.Load();
+                
+                App.OpenedFilePathList.Add(e);
+            }
+        }
+
         private void TabControlLoadDocument(string filePath)
         {
             if (App.OpenedFilePathList.Contains(filePath))
@@ -150,8 +173,10 @@ namespace PDFViewer
 
             viewPage.CheckExistBeforeOpenFileEvent -= ViewPage_CheckExistBeforeOpenFileEvent;
             viewPage.FileChangeEvent -= ViewPage_FileChangeEvent;
+            viewPage.AfterSaveAsFileEvent -= ViewPage_AfterSaveAsFileEvent;
             viewPage.CheckExistBeforeOpenFileEvent += ViewPage_CheckExistBeforeOpenFileEvent;
             viewPage.FileChangeEvent += ViewPage_FileChangeEvent;
+            viewPage.AfterSaveAsFileEvent += ViewPage_AfterSaveAsFileEvent;
 
             passwordViewer = new PDFViewControl();
             passwordViewer.PDFView.InitDocument(filePath);