Browse Source

【综合】AI优化工具栏入口相关内容调整

niehaoyu 10 tháng trước cách đây
mục cha
commit
77a72ee827

+ 6 - 0
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMMainToolbarController.swift

@@ -130,6 +130,10 @@ extension KMMainToolbarController : NSToolbarDelegate ,NSToolbarItemValidation,N
                 let menuItem = NSMenuItem.init(title: "scan", action: #selector(leftControllButtonAction), target: self)
                 item?.setViewWithSizes(self.scanORCModelButton)
                 item?.menuFormRepresentation = menuItem
+            } else if itemIdentifier.rawValue == KMDocumentAIToolsToolbarItemIdentifier {
+                let menuItem = NSMenuItem.init(title: "AI Tools", action: #selector(leftControllButtonAction), target: self)
+                item?.setViewWithSizes(self.scanORCModelButton)
+                item?.menuFormRepresentation = menuItem
             } else if itemIdentifier.rawValue == KMDocumentEditToolbarItemIdentifier {
                 let menuItem = NSMenuItem.init(title: "edit", action: #selector(editPDFButtonAction), target: self)
                 item?.setViewWithSizes(self.editModelButton)
@@ -176,6 +180,7 @@ extension KMMainToolbarController : NSToolbarDelegate ,NSToolbarItemValidation,N
                 NSToolbarItem.Identifier(KMDocumentPageToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentConversonToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentScanOCRToolbarItemIdentifier),
+                NSToolbarItem.Identifier(KMDocumentAIToolsToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentEditToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentFormToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentFillSginToolbarItemIdentifier),
@@ -196,6 +201,7 @@ extension KMMainToolbarController : NSToolbarDelegate ,NSToolbarItemValidation,N
                 NSToolbarItem.Identifier(KMDocumentPageToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentConversonToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentScanOCRToolbarItemIdentifier),
+                NSToolbarItem.Identifier(KMDocumentAIToolsToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentEditToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentFormToolbarItemIdentifier),
                 NSToolbarItem.Identifier(KMDocumentFillSginToolbarItemIdentifier),

+ 2 - 0
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarController.swift

@@ -329,6 +329,8 @@ class KMToolbarController: NSViewController {
                 self.mainToolBarView?.itemAction(data)
             } else if identifier == KMDocumentScanOCRToolbarItemIdentifier {
                 self.mainToolBarView?.itemAction(data)
+            } else if identifier == KMDocumentAIToolsToolbarItemIdentifier {
+                self.mainToolBarView?.itemAction(data)
             }
             
             return

+ 19 - 2
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarViewController.swift

@@ -26,6 +26,7 @@ import Cocoa
     case LeftPanel
     case RightPanel
     case viewSetting
+    case AITools
     
     func isToolMode() -> Bool {
         return (self == .Move || self == .Magnify || self == .Select || self == .SelectZoom)
@@ -60,6 +61,8 @@ import Cocoa
             return KMLeftControlToolbarItemIdentifier
         } else if (self == .RightPanel) {
             return KMRightControlToolbarItemIdentifier
+        } else if (self == .AITools) {
+            return KMDocumentAIToolsToolbarItemIdentifier
         }
         return ""
     }
@@ -676,7 +679,8 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
                     KMDocumentEditToolbarItemIdentifier,
                     KMDocumentDigitalSignToolbarItemIdentifier,
                     KMDocumentRedactToolbarItemIdentifier,
-                    KMDocumentScanOCRToolbarItemIdentifier]
+                    KMDocumentScanOCRToolbarItemIdentifier,
+                    KMDocumentAIToolsToolbarItemIdentifier]
         case .Annatiton,.Magnify,.Move,.Select,.SelectZoom:
             let itemIdentifiers: [String]? = self.toolbar?.toolbarIdentifier != nil ? (UserDefaults.standard.object(forKey: self.toolbar?.toolbarIdentifier ?? "") as? [String]) : []
             if itemIdentifiers == nil || itemIdentifiers!.count <= 0 {
@@ -708,7 +712,7 @@ extension KMToolbarViewController : KMToolbarViewDelegate,NSToolbarItemValidatio
             return [KMToolbarToolCompressItemIdentifier, KMToolbarToolMergeItemIdentifier,
                     KMToolbarToolSecureItemIdentifier, KMToolbarComparisonItemIdentifier,
                     KMToolbarToolWatermarkItemIdentifier, KMToolbarToolBackgroundItemIdentifier,
-                    KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier, KMToolbarAIItemIdentifier]
+                    KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBatesItemIdentifier]
         case .Form:
             return [KMToolbarToolTextFieldItemIdentifier,
                     KMToolbarToolCheckBoxItemIdentifier,
@@ -1308,6 +1312,19 @@ extension KMToolbarViewController {
             let menuItem = NSMenuItem.init(title: NSLocalizedString("Page Display", comment: ""), action: #selector(_menuItemAction), target: self)
             menuItem.representedObject = identifier
             item?.menuFormRepresentation = menuItem
+        } else if identifier == KMDocumentAIToolsToolbarItemIdentifier {
+            item?.image = NSImage(named: "KMImageNameUXIconAINor")
+            item?.titleName = NSLocalizedString("AI Tools", comment: "")
+            item?.target = self
+            item?.toolTip = NSLocalizedString("AI Tools", comment: "")
+            item?.boxImagePosition = .imageAbove
+            item?.selectBackgroundType = .imageBox
+            item?.btnAction = #selector(_itemAction)
+            item?.promptIdentifier = identifier
+            
+            let menuItem = NSMenuItem.init(title: NSLocalizedString("AI Tools", comment: ""), action: #selector(_menuItemAction), target: self)
+            menuItem.representedObject = identifier
+            item?.menuFormRepresentation = menuItem
         } else if identifier == KMDocumentShareToolbarItemIdentifier {
             item?.image = NSImage(named: "KMImageNameUXIconToolbarShareNor")
             item?.titleName = NSLocalizedString("Share", comment: "")

+ 3 - 4
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/PublicKey.swift

@@ -31,10 +31,10 @@ let KMDocumentAITranslationToolbarItemIdentifier = "KMDocumentAITranslationToolb
 let KMDocumentShareToolbarItemIdentifier = "KMDocumentShareToolbarItemIdentifier"
 let KMDocumentSearchToolbarItemIdentifier = "KMDocumentSearchToolbarItemIdentifier"
 let KMRightControlToolbarItemIdentifier  = "KMRightControlToolbarItemIdentifier"
+let KMDocumentAIToolsToolbarItemIdentifier = "KMDocumentAIToolsToolbarItemIdentifier"
 let mainToolIdentifiers = [KMLeftControlToolbarItemIdentifier, KMDocumentZoomToolbarItemIdentifier, KMDocumentZoomOutToolbarItemIdentifier,
                            KMDocumentZoomViewToolbarItemIdentifier, KMDocumentPreviousPageToolbarItemIdentifier, KMDocumentNextPageToolbarItemIdentifier,
-                           KMDocumentHomeToolbarItemIdentifier, KMDocumentAnnotationToolbarItemIdentifier, KMDocumentPageToolbarItemIdentifier, KMDocumentConversonToolbarItemIdentifier,KMDocumentRedactToolbarItemIdentifier,KMDocumentViewDisplayToolbarItemIdentifier,
-                           KMDocumentScanOCRToolbarItemIdentifier, KMDocumentFormToolbarItemIdentifier, KMDocumentEditToolbarItemIdentifier, KMDocumentDigitalSignToolbarItemIdentifier,
+                           KMDocumentHomeToolbarItemIdentifier, KMDocumentAnnotationToolbarItemIdentifier, KMDocumentPageToolbarItemIdentifier, KMDocumentConversonToolbarItemIdentifier,KMDocumentRedactToolbarItemIdentifier,KMDocumentAIToolsToolbarItemIdentifier,KMDocumentViewDisplayToolbarItemIdentifier,KMDocumentScanOCRToolbarItemIdentifier, KMDocumentFormToolbarItemIdentifier, KMDocumentEditToolbarItemIdentifier, KMDocumentDigitalSignToolbarItemIdentifier,
                            KMDocumentFillSginToolbarItemIdentifier, KMDocumentToolToolbarItemIdentifier, KMDocumentPrintToolbarItemIdentifier,
                            KMDocumentShareToolbarItemIdentifier, KMDocumentSearchToolbarItemIdentifier, KMRightControlToolbarItemIdentifier]
 
@@ -132,8 +132,7 @@ let toolToolIdentifiers = [KMToolbarToolCropItemIdentifier, KMToolbarToolBatesIt
                            KMToolbarToolHeaderFooterItemIdentifier, KMToolbarToolBackgroundItemIdentifier,
                            KMToolbarToolWatermarkItemIdentifier, KMToolbarToolRedactItemIdentifier,
                            KMToolbarToolCompressItemIdentifier, KMToolbarToolSecureItemIdentifier,
-                           KMToolbarToolMergeItemIdentifier,KMToolbarComparisonItemIdentifier,
-                           KMToolbarAIItemIdentifier]
+                           KMToolbarToolMergeItemIdentifier,KMToolbarComparisonItemIdentifier]
 
 /// Form
 let KMToolbarToolTextFieldItemIdentifier =  "KMToolbarFormTextFieldItemIdentifier"

+ 7 - 5
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+Action.swift

@@ -4517,6 +4517,8 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
                     self.enterRedact()
                 } else if itemID == KMDocumentScanOCRToolbarItemIdentifier {
                     showOCRWindow()
+                } else if itemID == KMDocumentAIToolsToolbarItemIdentifier {
+                    self.showAITypeChooseView(aiConfigType: .none)
                 } else if itemID == KMDocumentDigitalSignToolbarItemIdentifier {
                     if !self.listView.document!.allowsPrinting || !self.listView.document!.allowsCopying {
                         let alert = NSAlert()
@@ -4736,13 +4738,13 @@ extension KMMainViewController : KMMainToolbarControllerDelegate {
             self.showOCRWindow()
         } else if toolbarItem.itemIdentifier == KMToolbarAIItemIdentifier {
             if index == 1 {
-                self.loadAIConfigWindowWithType(.summarize)
+                self.showAITypeChooseView(aiConfigType: .summarize)
             } else if index == 2 {
-                self.loadAIConfigWindowWithType(.reWriting)
+                self.showAITypeChooseView(aiConfigType: .reWriting)
             } else if index == 3 {
-                self.loadAIConfigWindowWithType(.proofreading)
-            } else if index == 4 { 
-                self.loadAIConfigWindowWithType(.translate)
+                self.showAITypeChooseView(aiConfigType: .proofreading)
+            } else if index == 4 {
+                self.showAITypeChooseView(aiConfigType: .translate)
             }
         } else if toolbarItem.itemIdentifier == KMDocumentScanOCRToolbarItemIdentifier {
             self.showOCRWindow()

+ 3 - 3
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift

@@ -899,13 +899,13 @@ extension KMMainViewController {
         
     }
     @objc func AITranslateItemAction(sender: NSMenuItem) {
-        self.loadAIConfigWindowWithType(.translate)
+        self.showAITypeChooseView(aiConfigType: .translate)
     }
     @objc func AIProofreadItemAction(sender: NSMenuItem) {
-        self.loadAIConfigWindowWithType(.proofreading)
+        self.showAITypeChooseView(aiConfigType: .proofreading)
     }
     @objc func AIRewriteItemAction(sender: NSMenuItem) {
-        self.loadAIConfigWindowWithType(.reWriting)
+        self.showAITypeChooseView(aiConfigType: .reWriting)
     }
     
 //    @objc func highlightLinks() {

+ 54 - 84
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController.swift

@@ -264,7 +264,7 @@ import Cocoa
         
         if (self.document == nil || self.document!.isLocked == false) {
             self.loadFunctionGuide()
-            self.loadAIIconView()
+//            self.loadAIIconView()
         }
         
         if (self.document?.isLocked == false) {
@@ -691,7 +691,7 @@ import Cocoa
         if self.aiTipView == nil {
             self.aiTipView = AITipIconView.createFromNib()
             self.aiTipView.clickHandle = { [weak self] view in
-                self?.showAITypeChooseView()
+//                self?.showAITypeChooseView()
             }
             self.aiTipView.rightClickHandle = { view in
                 AIInfoManager.default().showAIIcon = false
@@ -723,91 +723,61 @@ import Cocoa
         }
     }
     
-    func showAITypeChooseView() -> Void {
-        if AIInfoManager.default().aiInfo.infoDict.isEmpty == true {
-#if VERSION_DMG
-            KMPurchaseCompareWindowController.dmgPurchaseInstance().showWindow(nil)
-#else
-            AIPurchaseWindowController.currentWC().showWindow(nil)
-#endif
-            return
-        }
-        let controller = NSViewController.init()
-        let view = NSView.init()
-        controller.view = view
-        
-        var string: String = NSLocalizedString("AI Summarize", comment: "")
-        if string.count < NSLocalizedString("AI Rewrite", comment: "").count {
-            string = NSLocalizedString("AI Rewrite", comment: "")
-        }
-        if string.count < NSLocalizedString("AI Proofread", comment: "").count {
-            string = NSLocalizedString("AI Proofread", comment: "")
-        }
-        if string.count < NSLocalizedString("AI Translate", comment: "").count {
-            string = NSLocalizedString("AI Translate", comment: "")
-        }
-         
-        _ = NSFont.SFProTextRegularFont(13)
-        let style = NSMutableParagraphStyle.init()
-        style.alignment = .center
-        style.lineBreakMode = .byCharWrapping
-        let size: NSSize = string.boundingRect(with: NSSize(width: 1000, height: 100),
-                                               options: NSString.DrawingOptions(rawValue: 3),
-                                               attributes: [NSAttributedString.Key.font : NSFont.SFProTextRegularFont(13), NSAttributedString.Key.paragraphStyle : style]).size
-         
-        controller.view.frame = CGRectMake(0, 0, size.width+80, 160)
-        if self.aiTypeChooseView == nil {
-            self.aiTypeChooseView = AITypeChooseView.createFromNib()
-        }
-        self.aiTypeChooseView.clickHandle = { [weak self] view, type in
-            DispatchQueue.main.async {
-                self?.loadAIConfigWindowWithType(type)
-            }
-        }
-        self.aiTypeChooseView.frame = controller.view.bounds
-        self.aiTypeChooseView.autoresizingMask = [.width, .height]
-        controller.view.addSubview(self.aiTypeChooseView)
+    func showAITypeChooseView(aiConfigType: AIConfigType) -> Void {
         
-        let popover = NSPopover.init()
-        popover.contentViewController = controller
-        popover.animates = true
-        popover.behavior = .transient
-        var rect = self.aiTipView.bounds
-        rect.origin.y += 20
-        popover.show(relativeTo: rect, of: self.aiTipView, preferredEdge: .minY)
-    }
-    
-    func loadAIConfigWindowWithType(_ type: AIConfigType) -> Void {
-        if AIInfoManager.default().aiInfo.infoDict.isEmpty == true {
-#if VERSION_DMG
-            KMPurchaseCompareWindowController.dmgPurchaseInstance().showWindow(nil)
-#else
-            AIPurchaseWindowController.currentWC().showWindow(nil)
-#endif
-            return
+        if (self.document != nil) {
+            AIChatInfoManager.defaultManager.currentFilePath = (self.document?.documentURL.path)!
+        } else {
+            AIChatInfoManager.defaultManager.currentFilePath = ""
+        }
+        
+        let windowVC: AINewConfigWindowController = AINewConfigWindowController.currentWC()
+        windowVC.chooseCurFileHandle = {windowVC in
+            if AIChatInfoManager.defaultManager.currentFilePath.isEmpty == false {
+                let documentArray = NSDocumentController.shared.documents
+                var didFileEdit: Bool = false
+                var curDoc: KMMainDocument!
+                for document in documentArray {
+                    if document.fileURL?.path == AIChatInfoManager.defaultManager.currentFilePath {
+                        didFileEdit = document.isDocumentEdited
+                        curDoc = document as! KMMainDocument
+                        break
+                    }
+                }
+                if didFileEdit {
+                    let tempFileURL = FileManager.default.temporaryDirectory.appendingPathComponent(AIChatInfoManager.defaultManager.currentFilePath.lastPathComponent)
+                    if FileManager.default.fileExists(atPath: tempFileURL.path) {
+                        do {
+                            try FileManager.default.removeItem(at: tempFileURL)
+                            
+                        } catch {
+                           
+                        }
+                    }
+                    if curDoc != nil {
+                        curDoc.mainViewController?.SaveTempPDFDocumentToURLPath(tempPath: tempFileURL.path)
+                    }
+                }
+                windowVC.window?.becomeMain()
+            }
         }
-        let windowVC = AIConfigWindowController.currentWC()
-        windowVC.configType = type
-        if type == .summarize {
-            windowVC.window?.setFrame(CGRectMake(0, 0, 800, 500), display: true)
-            FMTrackEventManager.defaultManager.trackEvent(event: "AITools", withProperties: ["AITools_Btn": "AISum"])
-        } else if type == .reWriting {
-            windowVC.window?.setFrame(CGRectMake(0, 0, 800, 460), display: true)
-            FMTrackEventManager.defaultManager.trackEvent(event: "AITools", withProperties: ["AITools_Btn": "AIRewrite"])
-        } else if type == .proofreading {
-            windowVC.window?.setFrame(CGRectMake(0, 0, 800, 460), display: true)
-            FMTrackEventManager.defaultManager.trackEvent(event: "AITools", withProperties: ["AITools_Btn": "AIProofread"])
-        } else if type == .translate {
-            windowVC.window?.setFrame(CGRectMake(0, 0, 800, 545), display: true)
-            FMTrackEventManager.defaultManager.trackEvent(event: "AITools", withProperties: ["AITools_Btn": "AITranslate"])
+        if windowVC.window?.isVisible == true {
+            
+        } else {
+            var windowRect = windowVC.window?.frame
+            windowRect!.origin.x = CGRectGetMaxX(self.view.window!.frame) - (windowRect?.size.width)!
+            windowRect!.origin.y = CGRectGetMaxY(self.view.window!.frame) - (windowRect?.size.height)! - 64
+            windowVC.window?.setFrame(windowRect!, display: true)
         }
-        
-        windowVC.cancelHandle = { [weak self] windowVC in
-            self?.view.window?.endSheet(windowVC.window!)
+        windowVC.eventLabel = "AITools_Tbr"
+        windowVC.showWindow(nil)
+        if (aiConfigType != .none) {
+            windowVC.eventLabel = "AITools_Start"
+            if self.listView.currentSelection.string().isEmpty == false {
+                windowVC.setCurrentPDFSelection(self.listView.currentSelection.string())
+            }
+            windowVC.chooseAIFunctionWithType(aiConfigType)
         }
-        windowVC.refreshUI()
-        self.view.window?.beginSheet(windowVC.window!)
-        windowVC.refreshUI()
     }
     
     @objc func aiTipIconViewShowStateChangeNoti() {
@@ -1904,7 +1874,7 @@ import Cocoa
     internal func documentDidUnlockNotification(_ sender: Notification) {
         if (self.listView.document != nil && self.listView.document.isEqual(to: sender.object)) {
             
-            self.loadAIIconView()
+//            self.loadAIIconView()
             
             if (self.myDocument == nil) {
                 return

+ 15 - 14
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.m

@@ -315,20 +315,21 @@ NSPopoverDelegate>
     
     CGFloat totalWidth = CGRectGetMaxX(self.labelContentView.frame) + 8;
     
-    self.aiLabel.stringValue = NSLocalizedString(@"My AI Credit", nil);
-    [self.aiLabel sizeToFit];
-    CGFloat aiWidth = self.aiLabel.frame.size.width;
-    aiWidth += 4;
-    aiWidth += 16;
-    aiWidth += 16;
-    self.aiContendView.frame = CGRectMake(totalWidth, 0, aiWidth, self.view.frame.size.height);
-    self.aiIconImg.frame = CGRectMake(8, CGRectGetHeight(self.view.frame)/2.-8, 16, 16);
-    CGRect ailabelRect = self.aiLabel.frame;
-    ailabelRect.origin.x = CGRectGetMaxX(self.aiIconImg.frame) + 4;
-    self.aiLabel.frame = ailabelRect;
-    
-    totalWidth += aiWidth;
-    totalWidth += 8;
+//    self.aiLabel.stringValue = NSLocalizedString(@"My AI Credit", nil);
+//    [self.aiLabel sizeToFit];
+//    CGFloat aiWidth = self.aiLabel.frame.size.width;
+//    aiWidth += 4;
+//    aiWidth += 16;
+//    aiWidth += 16;
+//    self.aiContendView.frame = CGRectMake(totalWidth, 0, aiWidth, self.view.frame.size.height);
+//    self.aiIconImg.frame = CGRectMake(8, CGRectGetHeight(self.view.frame)/2.-8, 16, 16);
+//    CGRect ailabelRect = self.aiLabel.frame;
+//    ailabelRect.origin.x = CGRectGetMaxX(self.aiIconImg.frame) + 4;
+//    self.aiLabel.frame = ailabelRect;
+//    
+//    totalWidth += aiWidth;
+//    totalWidth += 8;
+    self.aiContendView.hidden = YES;
     
     if (self.button.hidden == NO) {
         CGFloat buttonWidth = CGRectGetMaxX(self.button.frame);