Browse Source

【2025】【综合】
1、打开阅读界面串接默认数据
2、组件库逻辑完善

niehaoyu 2 months ago
parent
commit
54028aa915

+ 1 - 1
PDF Office/KMComponentLibrary/KMComponentLibrary/View/CheckBox/ComponentCheckBox.swift

@@ -176,7 +176,7 @@ public class ComponentCheckBox: ComponentBaseXibView {
     }
     
     public override func mouseUp(with event: NSEvent) {
-        super.mouseUp(with: event)
+//        super.mouseUp(with: event)
         
         var eventContinue = true
         let point = convert(event.locationInWindow, from: nil)

+ 10 - 2
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Select/ComponentSelect.swift

@@ -119,7 +119,11 @@ public class ComponentSelect: ComponentBaseXibView {
     public func selectItemAtIndex(_ index: Int) {
         if index >= 0 && index < menuitemPropertys.count {
             let chooseIndex: Int = index
-            let chooseProperty = menuitemPropertys[chooseIndex]
+
+            var filteredArray = menuitemPropertys.filter { !($0.type == .divider) }
+            filteredArray = filteredArray.filter { !($0.type == .header) }
+            
+            let chooseProperty = filteredArray[chooseIndex]
             
             chooseItem(chooseProperty)
         }
@@ -127,7 +131,11 @@ public class ComponentSelect: ComponentBaseXibView {
     
     public func indexOfSelect() -> NSInteger {
         if let selProperty = selItemProperty {
-            if let index = menuitemPropertys.firstIndex(of: selProperty) {
+            
+            var filteredArray = menuitemPropertys.filter { !($0.type == .divider) }
+            filteredArray = filteredArray.filter { !($0.type == .header) }
+            
+            if let index = filteredArray.firstIndex(of: selProperty) {
                 return index
             }
         }

+ 90 - 26
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -434,34 +434,88 @@ struct KMNMWCFlags {
         applyLeftSideWidth(0, rightSideWidth: 0) //初始打开左边栏
          
         //初始化侧边栏打开内容
-//        if SettingsManager.sharedInstance.leftPanelType == .defaultOpen {
-//            if SettingsManager.sharedInstance.defaultOpen == .thumbnail {
-//                viewManager.pdfSideBarType = .thumbnail
-//            } else if SettingsManager.sharedInstance.defaultOpen == .outline {
-//                viewManager.pdfSideBarType = .outline
-//            } else if SettingsManager.sharedInstance.defaultOpen == .bookmark {
-//                viewManager.pdfSideBarType = .bookmark
-//            } else if SettingsManager.sharedInstance.defaultOpen == .annotation {
-//                viewManager.pdfSideBarType = .annotation
-//            }
-//        } else if SettingsManager.sharedInstance.leftPanelType == .sameAsLastOpen {
-//            if let value = UserDefaults.standard.value(forKey: "KMPDFSidebarTypeKey"), let data = value as? Int {
-//                let pdfSideBarType: KMPDFSidebarType = KMPDFSidebarType(rawValue: data) ?? .none
-//                viewManager.pdfSideBarType = pdfSideBarType
-//            }
-//        } else if SettingsManager.sharedInstance.leftPanelType == .hideLeftSide {
-//            viewManager.pdfSideBarType = .none
-//        } else if SettingsManager.sharedInstance.leftPanelType == .prioritizeOutline {
-//            
-//        }
-//        if viewManager.pdfSideBarType == .none {
-//            toggleCloseLeftSide()
-//        } else {
-//            toggleOpenLeftSide(pdfSideBarType: viewManager.pdfSideBarType)
-//        }
+        if SettingsManager.sharedInstance.leftPanelType == .defaultOpen {
+            if SettingsManager.sharedInstance.defaultOpen == .thumbnail {
+                viewManager.pdfSideBarType = .thumbnail
+            } else if SettingsManager.sharedInstance.defaultOpen == .outline {
+                viewManager.pdfSideBarType = .outline
+            } else if SettingsManager.sharedInstance.defaultOpen == .bookmark {
+                viewManager.pdfSideBarType = .bookmark
+            } else if SettingsManager.sharedInstance.defaultOpen == .annotation {
+                viewManager.pdfSideBarType = .annotation
+            }
+        } else if SettingsManager.sharedInstance.leftPanelType == .sameAsLastOpen {
+            if let value = UserDefaults.standard.value(forKey: "KMPDFSidebarTypeKey"), let data = value as? Int {
+                let pdfSideBarType: KMPDFSidebarType = KMPDFSidebarType(rawValue: data) ?? .none
+                viewManager.pdfSideBarType = pdfSideBarType
+            }
+        } else if SettingsManager.sharedInstance.leftPanelType == .hideLeftSide {
+            viewManager.pdfSideBarType = .none
+        } else if SettingsManager.sharedInstance.leftPanelType == .prioritizeOutline {
+            
+        }
+        if viewManager.pdfSideBarType == .none {
+            toggleCloseLeftSide()
+        } else {
+            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.15) {
+                self.toggleCloseLeftSide()
+                self.toggleOpenLeftSide(pdfSideBarType: self.viewManager.pdfSideBarType)
+            }
+        }
+        
+        //Layout & Zoom
+        let layoutType = SettingsManager.sharedInstance.layoutType
+        if layoutType == .singlePage {
+            self.updatePDFViewDisplayMode(viewMode: .singlePage)
+        } else if layoutType == .singlePageContinue {
+            self.updatePDFViewDisplayMode(viewMode: .singlePageContinuous)
+        } else if layoutType == .twoPage {
+            self.updatePDFViewDisplayMode(viewMode: .twoUp)
+        } else if layoutType == .twoPageContinue {
+            self.updatePDFViewDisplayMode(viewMode: .twoUpContinuous)
+        } else if layoutType == .bookMode {
+            self.updatePDFViewDisplayMode(isbookMode: true, direction: .horizontal)
+        } else if layoutType == .bookModeContinue {
+            self.updatePDFViewDisplayMode(isbookMode: true, direction: .vertical)
+        }
          
     }
     
+    func refreshPDFViewZoomInfo(_ zoomType: zoomInfoType) {
+        if zoomType == .adaptationWidth {
+            listView.autoScales = true
+        } else if zoomType == .adapPage {
+            let pageHeight = listView.currentPage().size.height
+            let pdfviewHeight = listView.bounds.size.height
+            listView.scaleFactor = pdfviewHeight/pageHeight
+            listView.autoScales = false
+        } else if zoomType == .actualSize {
+            if listView.scaleFactor != 1.0 {
+                listView.scaleFactor = 1.0
+                listView.autoScales = false
+            }
+        } else if zoomType == .percent_10 {
+            listView.scaleFactor = 0.1
+        } else if zoomType == .percent_25 {
+            listView.scaleFactor = 0.25
+        } else if zoomType == .percent_50 {
+            listView.scaleFactor = 0.5
+        } else if zoomType == .percent_75 {
+            listView.scaleFactor = 0.75
+        } else if zoomType == .percent_100 {
+            listView.scaleFactor = 1.0
+        } else if zoomType == .percent_150 {
+            listView.scaleFactor = 1.5
+        } else if zoomType == .percent_200 {
+            listView.scaleFactor = 2.0
+        } else if zoomType == .percent_400 {
+            listView.scaleFactor = 4.0
+        } else if zoomType == .percent_800 {
+            listView.scaleFactor = 8.0
+        }
+
+    }
+    
     func applyLeftSideWidth(_ leftSideWidth: CGFloat, rightSideWidth: CGFloat) -> Void {
         infoContendSplitView.setPosition(infoContendSplitView.maxPossiblePositionOfDivider(at: 1) - infoContendSplitView.dividerThickness - rightSideWidth, ofDividerAt: 1)
         infoContendSplitView.setPosition(leftSideWidth, ofDividerAt: 0)
@@ -476,6 +530,11 @@ struct KMNMWCFlags {
         listView.document = self.document
         listView.pageBreakMargins = NSEdgeInsetsMake(10, 0, 10, 10)
         reloadPDFSplitInfo()
+        
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.15) {
+            let zoomType = SettingsManager.sharedInstance.zoomType
+            self.refreshPDFViewZoomInfo(zoomType)
+        }
     }
     
     func updatePDFViewAnnotationMode() {
@@ -2967,10 +3026,15 @@ struct KMNMWCFlags {
         NSWorkspace.shared.activateFileViewerSelecting([self.listView.document.documentURL])
     }
     //MARK: - DisplayViewMode
-    func updatePDFViewDisplayMode(viewMode mode: CPDFDisplayViewMode = .singlePage, isbookMode bookMode: Bool = false) {
+    func updatePDFViewDisplayMode(viewMode mode: CPDFDisplayViewMode = .singlePage, isbookMode bookMode: Bool = false, direction directionValue: CPDFDisplayDirection? = nil) {
         if bookMode == true {
+            //书本模式
             listView.displaysAsBook = true
             listView.displayTwoUp = true
+            
+            if let value = directionValue {
+                listView.displayDirection = value
+            }
         } else {
             listView.setDisplay(mode)
         }

+ 6 - 1
PDF Office/PDF Master/KMClass/Settings/SettingsManager.swift

@@ -153,7 +153,12 @@ class SettingsManager: NSObject {
         self.keychainType = keyChainPasswordType(rawValue: UserDefaults.standard.integer(forKey: settingsKeychainTypeKey)) ?? .ask
         
         //PageDisplay
-        self.layoutType = pageLayoutType(rawValue: UserDefaults.standard.integer(forKey: settingsPageLayoutTypeKey)) ?? .singlePage
+        if let value = UserDefaults.standard.value(forKey: "settingsPageLayoutTypeKey"), let data = value as? Int {
+            self.layoutType = pageLayoutType(rawValue: data) ?? .singlePageContinue
+        } else {
+            self.layoutType = .singlePageContinue
+        }
+        
         self.zoomType = zoomInfoType(rawValue: UserDefaults.standard.integer(forKey: settingsZoomTypeKey)) ?? .adaptationWidth
         self.leftPanelType = leftSidePanelType(rawValue: UserDefaults.standard.integer(forKey: settingsLeftSidePanelKey)) ?? .defaultOpen
         self.defaultOpen = defaultOpenType(rawValue: UserDefaults.standard.integer(forKey: settingsDefaultOpenTypeKey)) ?? .thumbnail