// // KMMainViewController+UI.swift // PDF Reader Pro // // Created by wanjun on 2022/12/15. // import Foundation extension KMMainViewController { func showChildToolbar(showToolbar:Bool) { if showToolbar == true && self.isReadMode == false { self.view.addSubview(self.childToolbarController.view) } else { self.childToolbarController.view.removeFromSuperview() } self.updateTopView() } private func updateTopView () { let frame = self.view.frame if self.childToolbarController.view.superview != nil { let toolbarFrame = self.childToolbarController.view.frame; self.childToolbarController.view.frame = CGRect(x: 0, y: (frame.size.height ?? 0)-toolbarFrame.size.height, width: frame.size.width ?? 0, height: toolbarFrame.size.height) self.childToolbarController.view.autoresizingMask = [.width,.minYMargin] self.toplayoutConstraint.constant = toolbarFrame.size.height } else { self.toplayoutConstraint.constant = 0 } } //通知 func preferenceDidChangeNotification(notification:Notification) { let info : [AnyHashable : Any] = notification.userInfo ?? [:] if info.keys.contains(KMPreference.viewZoomScaleTypeKey) { self.selectZoom(KMPreferenceManager.shared.viewZoomScaleType) } if notification.name.rawValue == "pdfViewDocumentDidLoaded" || info.keys.contains(KMPreference.viewPageDisplayTypeKey) { self.selectDisplay(display: KMPreferenceManager.shared.viewPageDisplayType) } if info.keys.contains(KMPreference.displayBackgroundNormalColorKey) || notification.name.rawValue == "pdfViewDocumentDidLoaded" { self.listView.backgroundColor = KMPreferenceManager.shared.displayBackgroundNormalColor self.listView.layoutDocumentView() } self.updatePageIndicatoreType() if (info.keys.contains(KMPreference.generalAuthorNameKey)) { // 作者名称 CPDFKitConfig.sharedInstance().setAnnotationAuthor((info[KMPreference.generalAuthorNameKey] as! String)) } if (info.keys.contains(KMPreference.highlightLinksKey)) { let hlLink = info[KMPreference.highlightLinksKey] as? Bool CPDFKitConfig.sharedInstance().setEnableLinkFieldHighlight(hlLink == nil ? false : hlLink!) self.listView.setNeedsDisplayForVisiblePages() } if (info.keys.contains(KMPreference.autoSaveKey) || info.keys.contains(KMPreference.autoSavePerNumberMinuteKey)) { self.autoSaveTimeStartOrStopIfNeed() } if info.keys.contains(KMPreference.thumbPageSizeKey) { self.leftSideViewController.refreshUIOfThumbnailIfNeed(preference: true) } if info.keys.contains(KMPreference.thumbSnapshotSizeKey) { self.leftSideViewController.refreshUIOfSnapshotIfNeed(preference: true) } if info.keys.contains(KMPreference.outlineFontSizeKey) { self.leftSideViewController.updateTableFont() } if info.keys.contains(KMPreference.greekThresholdKey) { let value = KMPreference.shared.greekThreshold.cgFloat self.listView.setGreekingThreshold(value) self.secondaryPdfView?.setGreekingThreshold(value) } if info.keys.contains(KMPreference.antiAliasTextKey) { self.listView.setShouldAntiAlias(KMPreference.shared.antiAliasText) self.listView.applyDefaultInterpolationQuality() self.secondaryPdfView?.setShouldAntiAlias(KMPreference.shared.antiAliasText) self.secondaryPdfView?.applyDefaultInterpolationQuality() } } //刷新页面显示器 func updatePageIndicatoreType () { if self.isReadMode { self.pageNumberDisplayView.dismiss() } else { if self.listView.document != nil { self.pageNumberDisplayView.totalPagesCount = Int(self.listView.document.pageCount) } self.pageNumberDisplayView.currentPageIndex = self.listView.currentPageIndex self.pageNumberDisplayView.displayType = KMPreferenceManager.shared.pageIndicatorType self.readContentView.addSubview(self.tipCurrentPageBox, positioned: .above, relativeTo: self.readContentView) } } // MARK: - KMInterfaceThemeChangedProtocol override func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) { super.interfaceThemeDidChanged(appearance) self.toolbarController.interfaceThemeDidChanged(appearance) self.leftSideViewController.interfaceThemeDidChanged(appearance) self.rightSideViewController.interfaceThemeDidChanged(appearance) self.pdfEditController?.interfaceThemeDidChanged(appearance) self.mianSplitView.superview?.wantsLayer = true // let sView = self.listView.documentView() if KMAppearance.isDarkMode() { self.mianSplitView.superview?.layer?.backgroundColor = NSColor(red: 0.149, green: 0.157, blue: 0.169, alpha: 1).cgColor // sView?.backgroundColor = NSColor(red: 0.149, green: 0.157, blue: 0.169, alpha: 1) } else { self.mianSplitView.superview?.layer?.backgroundColor = NSColor(red: 0.988, green: 0.992, blue: 1, alpha: 1).cgColor // sView?.backgroundColor = NSColor(red: 0.988, green: 0.992, blue: 1, alpha: 1) } } } extension KMMainViewController: KMToolbarControllerDelegate { func toolbarController(_ viewController: KMToolbarController, heightOffsetChange heightOffset: Float, animated: Bool) { let heightConst = (animated ? self.heightOffset.animator() : self.heightOffset) if self.isReadMode { if self.toolbarController.toolbarType == .Annatiton { heightConst?.constant = CGFloat(heightOffset) } else { heightConst?.constant = CGFloat(0) } } else { heightConst?.constant = CGFloat(heightOffset) } self.refreshListViewToolMode() self.trackEvent(toolMode: self.listView.toolMode) if self.listView.annotationType == .editTextImage || self.listView.annotationType == .addText || self.listView.annotationType == .addImage { self.closeRightPane() } self.listView.annotationType = .unkown // self.rightSideViewController.view.isHidden = true // self.rightSideViewController.isHidden = true // if self.toolbarController.toolbarType != .LeftPanel { // self.closeRightPane() // } } func changeAnnotationModeAction(item: KMToolbarClickButton) { if self.listView.toolMode == .formToolMode { if !IAPProductsManager.default().isAvailableAllFunction(){ KMPurchaseCompareWindowController.sharedInstance().showWindow(nil) return } } if (self.rightMouseEventing) { self.rightMouseEventing = false } if (self.toolbarController.ignoreCurrentAnnotationTypeChange) { self.toolbarController.ignoreCurrentAnnotationTypeChange = false } var currentType = self.listView.annotationType if (currentType == .eraser) { currentType = .ink } let isSelected = (currentType == CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown) && ((self.listView.toolMode == .noteToolMode) || (self.listView.toolMode == .selfSignMode)) var editSelectd = false if self.listView.annotationType == CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown && self.listView.toolMode == .editPDFToolMode { editSelectd = true } //多边形工具栏点击特殊处理 // if (self.listView.annotationType == .square || // self.listView.annotationType == .circle || // self.listView.annotationType == .arrow || // self.listView.annotationType == .line) { // if CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown == .square || // CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown == .circle || // CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown == .arrow || // CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown == .line { // isSelected = true // } // } else if (item.tag > 3 && item.tag < 8) { // let shape = UserDefaults.standard.object(forKey: KMToolBarToolPDFShapeStyle) // item.tag = shape as? Int ?? item.tag // } if isSelected { self.listView.toolMode = .textToolMode self.listView.annotationType = .unkown self.closeRightPane() } else { if let type = CAnnotationType(rawValue: item.tag) { self.trackEvent(annotationType: type) } if self.listView.currentSelection != nil { let annotation = self.listView.addAnnotation(with: CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown, selection: self.listView.currentSelection, page: self.listView.currentSelection.page, bounds: self.listView.currentSelection.bounds) if((annotation != nil) && !self.listView.activeAnnotations.contains(annotation ?? self.listView.activeAnnotation)) { var newAnnonations : [CPDFAnnotation] = [] newAnnonations.append(annotation!) self.listView.updateActiveAnnotations(newAnnonations) self.listView.setNeedsDisplayAnnotationViewFor(annotation?.page) } } self.refreshListViewToolMode() let type = CAnnotationType(rawValue: item.tag) ?? CAnnotationType.unkown var annotations: [CPDFAnnotation] = [] if (type == .link) { for annotation in self.listView.activeAnnotations { if ((annotation is CPDFLinkAnnotation) == false) { continue } annotations.append(annotation as! CPDFAnnotation) } } self.listView.annotationType = type if (type == .link && annotations.count > 0) { self.listView.updateActiveAnnotations(annotations) } } if self.listView.toolMode != .editPDFToolMode && self.listView.annotationType != .unkown { // self.rightSideViewController.view.isHidden = false self.rightSideViewController.isHidden = false self.rightSideViewController.subViewType = .AnnotationProperts if !self.isReadMode { self.openRightPane() } } else if self.listView.toolMode == .editPDFToolMode { if editSelectd { // self.rightSideViewController.view.isHidden = true self.rightSideViewController.isHidden = true self.listView.setShouAddEdit([]) self.listView.change([.text, .image]) self.listView.annotationType = .editTextImage self.closeRightPane() } else if self.listView.annotationType == .addText { // self.rightSideViewController.view.isHidden = false self.rightSideViewController.isHidden = false if !self.isReadMode { self.openRightPane() } self.rightSideViewController.subViewType = .EditPDFAddText FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_EditPDF", withProperties: ["SubTbr_Btn" : "Btn_SubTbr_EditPDF_AddText"]) self.listView.setShouAddEdit(.text) self.listView.change(.text) } else if self.listView.annotationType == .addImage { self.rightSideViewController.isHidden = false if !self.isReadMode { self.openRightPane() } FMTrackEventManager.defaultManager.trackEvent(event: "SubTbr_EditPDF", withProperties: ["SubTbr_Btn" : "Btn_SubTbr_EditPDF_AddImage"]) // self.closeRightPane() self.rightSideViewController.subViewType = .EditPDFAddImage self.listView.setShouAddEdit(.image) self.listView.change(.image) self.rightSideViewController.eidtPDFImageProperty.reloadData() } } else { // self.rightSideViewController.view.isHidden = true self.rightSideViewController.isHidden = true self.closeRightPane() } } func refreshListViewToolMode () { if self.toolbarController.toolbarType == .Annatiton { self.listView.toolMode = .noteToolMode } else if self.toolbarController.toolbarType == .Move { self.listView.toolMode = .moveToolMode } else if self.toolbarController.toolbarType == .Magnify { self.listView.toolMode = .magnifyToolMode } else if self.toolbarController.toolbarType == .Select { self.listView.toolMode = .selectToolMode } else if self.toolbarController.toolbarType == .SelectZoom { self.listView.toolMode = .selectZoomToolMode } else if self.toolbarController.toolbarType == .Page { } else if self.toolbarController.toolbarType == .Form { self.listView.toolMode = .formToolMode self.rightSideViewController.subViewType = .AnnotationProperts } else if self.toolbarController.toolbarType == .FillSign { self.listView.toolMode = .selfSignMode self.rightSideViewController.subViewType = .AnnotationProperts } else if self.toolbarController.toolbarType == .editPDF { self.listView.toolMode = .editPDFToolMode // self.listView.editingConfig().isShowEditingAreaHover = true // self.listView.editingConfig().editingBorderWidth = 1 // self.listView.editingConfig().editingCenterRadius = 5 // self.listView.editingConfig().editAreaMargin = 2 // self.listView.editingConfig().editingHoverBorderColor = NSColor.init(red: 0, green: 136.0/255.0, blue: 1.0, alpha: 0.5) // self.listView.editingConfig().editingBorderColor = NSColor.init(red: 0, green: 0, blue: 0, alpha: 0.4) // self.listView.editingConfig().addEditAreaColor = NSColor.init(red: 23.0/255.0, green: 112.0/255.0, blue: 244.0/255.0, alpha: 0.5) // self.listView.editingConfig().editAreaMoveFillColor = NSColor.init(red: 23.0/255.0, green: 112.0/255.0, blue: 244.0/255.0, alpha: 0.1) self.listView.setShouAddEdit([]) }else if self.toolbarController.toolbarType == .LeftPanel { self.toggleLeftPane() self.leftSideViewController.showPanelView(show: true) }else { // if self.leftSideViewController.isShowPanel { // self.leftSideViewController.showPanelView(show: false) // } self.listView.toolMode = .textToolMode } } func showPDFLayoutModeAction(show: Bool) { self.listView.annotationType = .unkown self.showOrHideNotes() } } extension KMMainViewController : NSSplitViewDelegate { func splitView(_ splitView: NSSplitView, canCollapseSubview subview: NSView) -> Bool { // KMPrint("kk- canCollapseSubview") if splitView == self.mianSplitView { // return (subview == self.listView) == false } else if splitView == self.newPDFSplitView { return subview.isEqual(to: self.secondaryPdfContentView) } return false } func splitView(_ splitView: NSSplitView, shouldCollapseSubview subview: NSView, forDoubleClickOnDividerAt dividerIndex: Int) -> Bool { // KMPrint("kk- shouldCollapseSubview") if splitView == self.newPDFSplitView { if subview.isEqual(to: self.secondaryPdfContentView) { var position = self.newPDFSplitView.maxPossiblePositionOfDivider(at: dividerIndex) if self.newPDFSplitView.isSubviewCollapsed(subview) { if self.lastSplitPDFHeight <= 0.0 { let DEFAULT_SPLIT_PANE_HEIGHT: Float = 200.0 self.lastSplitPDFHeight = DEFAULT_SPLIT_PANE_HEIGHT } if self.lastSplitPDFHeight.cgFloat > NSHeight(self.pdfContentView.frame) { self.lastSplitPDFHeight = floorf(0.5 * Float(NSHeight(self.pdfContentView.frame))) } position += self.lastSplitPDFHeight.cgFloat } else { self.lastSplitPDFHeight = Float(NSHeight(subview.frame)) } self.pdfSplitView.setPosition(position, ofDividerAt: dividerIndex, animate: true) } return false } return false } func splitView(_ splitView: NSSplitView, shouldHideDividerAt dividerIndex: Int) -> Bool { // KMPrint("kk- shouldHideDividerAt") if splitView == self.mianSplitView { return splitView == self.mianSplitView } else if splitView == self.newPDFSplitView { KMPrint("") return false } return false } func splitView(_ splitView: NSSplitView, constrainMaxCoordinate proposedMaximumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat { // KMPrint("kk- constrainMaxCoordinate") if splitView == mianSplitView { let splitViewWidth = splitView.frame.width let dividerIndexX0 = panelWidth + functionWidth if dividerIndex == 0 { if leftPanelOpen { return CGFloat(dividerIndexX0 * 1.5) } else { return functionWidth } } else if dividerIndex == 1 { return splitViewWidth } } else if splitView == self.newPDFSplitView { if dividerIndex == 0 { let MIN_SIDE_PANE_WIDTH = 270 return proposedMaximumPosition + MIN_SIDE_PANE_WIDTH.cgFloat } } return proposedMaximumPosition } func splitView(_ splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat { // KMPrint("kk- constrainMinCoordinate") if splitView == mianSplitView { let splitViewWidth = splitView.frame.width let dividerIndexX1 = splitViewWidth - defaultRightWidth if dividerIndex == 0 { return functionWidth } else if dividerIndex == 1 { return dividerIndexX1 } } else if splitView == self.newPDFSplitView { KMPrint("") } return proposedMinimumPosition } func splitView(_ splitView: NSSplitView, resizeSubviewsWithOldSize oldSize: NSSize) { // KMPrint("kk- resizeSubviewsWithOldSize") if splitView.isEqual(to: mianSplitView) { let leftView = splitView.subviews[0] let centerView = splitView.subviews[1] let rightView = splitView.subviews[2] // let centerView = self.pdfSplitView ?? splitView.subviews[1] // let rightView = self.rightView ?? splitView.subviews[2] // 左边是否收起 let leftCollapsed = splitView.isSubviewCollapsed(leftView) // 右边是否收起 let rightCollapsed = splitView.isSubviewCollapsed(rightView) var leftSize = leftView.frame.size var mainSize = centerView.frame.size var rightSize = rightView.frame.size var contentWidth = splitView.frame.width if leftCollapsed { leftSize.width = 0.0 } else { contentWidth = contentWidth - splitView.dividerThickness } if rightCollapsed { rightSize.width = 0.0 } else { contentWidth = contentWidth - splitView.dividerThickness } if contentWidth < leftSize.width + rightSize.width { var oldContentWidth = oldSize.width if leftCollapsed == false { oldContentWidth = oldContentWidth - splitView.dividerThickness } if rightCollapsed == false { oldContentWidth = oldContentWidth - splitView.dividerThickness } let resizeFactor = contentWidth / oldContentWidth leftSize.width = floor(resizeFactor*leftSize.width) rightSize.width = floor(resizeFactor*rightSize.width) } mainSize.width = contentWidth - leftSize.width - rightSize.width leftSize.height = splitView.frame.height rightSize.height = splitView.frame.height mainSize.height = splitView.frame.height if leftCollapsed == false { leftView.setFrameSize(leftSize) } if rightCollapsed == false { rightView.setFrameSize(rightSize) } centerView.setFrameSize(mainSize) } else if splitView == self.newPDFSplitView { // let firstV = splitView.subviews.first // let lastV = splitView.subviews.last // if firstV == lastV{ // splitView.adjustSubviews() // return // } // if self.newPDFSplitView.isVertical { // 横向 // // 左边是否收起 // let leftCollapsed = splitView.isSubviewCollapsed(firstV!) // // 右边是否收起 // let rightCollapsed = splitView.isSubviewCollapsed(lastV!) // // var contentSize = splitView.frame.size // firstV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height)) // lastV?.setFrameSize(NSMakeSize(contentSize.width * 0.5, contentSize.height)) // } else { // 纵向 // // 左边是否收起 // let leftCollapsed = splitView.isSubviewCollapsed(firstV!) // // 右边是否收起 // let rightCollapsed = splitView.isSubviewCollapsed(lastV!) // // var contentSize = splitView.frame.size // firstV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5)) // lastV?.setFrameSize(NSMakeSize(contentSize.width, contentSize.height * 0.5)) // } } splitView.adjustSubviews() } func splitViewWillResizeSubviews(_ notification: Notification) { // KMPrint("kk- splitViewWillResizeSubviews") let defaultView = KMSplitView() let sender : NSSplitView = notification.object as? NSSplitView ?? defaultView if (sender == self.mianSplitView || sender == defaultView) && self.view.window?.frameAutosaveName != nil{ // let leftWidth = self.mianSplitView.isSubviewCollapsed(self.leftView) ? 0.0 : leftSideViewController.view.frame.width // if leftPanelOpen { // if leftWidth < 100 && lastLeftPanWidth > functionWidth{ // self.closeLeftPane() // } // } } else { if sender == self.pdfSplitView { KMPrint("") } } } func splitViewDidResizeSubviews(_ notification: Notification) { // KMPrint("kk- splitViewDidResizeSubviews") self.locationPageView.frame = CGRect(x: 0, y: self.listView.frame.maxY-32, width: self.listView.frame.width, height: 32) let defaultView = KMSplitView() let sender : NSSplitView = notification.object as? NSSplitView ?? defaultView if (sender == self.mianSplitView || sender == defaultView) && self.view.window?.frameAutosaveName != nil{ let leftWidth = self.mianSplitView.isSubviewCollapsed(self.leftView) ? 0.0 : leftSideViewController.view.frame.width let rightWidth = self.mianSplitView.isSubviewCollapsed(self.rightView) ? 0.0 : rightSideViewController.view.frame.width UserDefaults.standard.set(leftWidth, forKey: CPDFOfficeLeftSidePaneWidthKey) UserDefaults.standard.set(rightWidth, forKey: CPDFOfficeRightSidePaneWidthKey) } else { if sender == self.pdfSplitView { KMPrint("") } } } func splitView(_ splitView: NSSplitView, constrainSplitPosition proposedPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat { // KMPrint("kk- constrainSplitPosition") if splitView == self.mianSplitView { if dividerIndex == 0 { if leftPanelOpen { //当左边栏开启式,拖拽时不改变宽度,当宽度达到原宽度的一半时关闭窗口 //如果 isShowPanel 为 true 那么将不会收缩 if (proposedPosition < functionWidth + panelWidth * 0.5) && !self.leftSideViewController.isShowPanel { self.closeLeftPane() self.leftSideViewController.refreshMethodType(methodType: .None) return functionWidth } else if proposedPosition > panelWidth + functionWidth { return proposedPosition } else { return panelWidth + functionWidth } } else { return functionWidth } } } else if splitView == self.newPDFSplitView { KMPrint("") } return proposedPosition } } extension KMMainViewController: KMLeftSideViewControllerDelegate { func controlStateChange(_ obj: KMLeftSideViewController, show: Bool) { if show { self.openLeftPane() } else { self.closeLeftPane() } } func enterEditMode(_ obj: KMLeftSideViewController, _ pages: [Int]) { let item : KMToolbarItemView = (self.toolbarController.mainToolBarView?.toolbarItemFindItemIdentifiers(value: KMDocumentPageToolbarItemIdentifier))! self.toolbarController.mainToolBarView?.delegate?.toolbarViewController?(self.toolbarController.mainToolBarView!, clickMode: .Page, toolbar: item, pages) } func searchAction(searchString: String,isCase:Bool) { self.search(searchString: searchString,isCase: isCase) } func controller(_ controller: KMLeftSideViewController, dispayDidChange dispay: KMPDFDisplayType) { self.selectDisplay(display: dispay, viewSettingIsReload: false) } func controller(controller: KMLeftSideViewController, itemClick item: Any?, itemKey: KMItemKey, params: Any?) { if (itemKey == .print) { // 打印 if params is NSImage { KMPrintWindowController.cpdf_printImage(image: params as! NSImage) return } var pageRange: KMPrintPageRange = KMPrintPageRange(type: .allPage, selectPages: [], reversePrintOrder: false) if (params != nil) { pageRange.type = .custom pageRange.selectPages = params as! [Int] } self.showPrintWindow(pageRange: pageRange) } else if (itemKey == .cut || itemKey == .paste || itemKey == .delete || itemKey == .leftRotate || itemKey == .rightRotate) { self.recordIsPDFDocumentEdited(type: itemKey.toSubscribeWaterMarkType()) } else if itemKey == .pageEdit { self.toolbarController.clickItem(KMDocumentPageToolbarItemIdentifier) } else if itemKey == .demote { // 大纲降级 guard let currentOutline: CPDFOutline = controller.tocOutlineView.km.clickedItem() else { return } self.listView?.demote(outline: currentOutline) } else if itemKey == .promote { // 大纲升级 guard let currentOutline: CPDFOutline = controller.tocOutlineView.km.clickedItem() else { return } self.listView?.promote(outline: currentOutline) } } func controller(controller: KMLeftSideViewController, bookMarkDidChange bookMarks: [KMBookMarkItem]) { self.needSave = true self.recordIsPDFDocumentEdited() } func controller(controller: KMLeftSideViewController, rotateType: KMRotateType) { if rotateType == .clockwise { self.menuItemAction_rotateRight((Any).self) } else if rotateType == .anticlockwise { self.menuItemAction_rotateLeft((Any).self) } } func controller(controller: KMLeftSideViewController, listViewSelectionDidChange object: Any?, info: [String : Any]?) { if controller.thumbnailTableView.isEqual(to: object) { let row = controller.thumbnailTableView.selectedRow let curIndex = self.listView.currentPageIndex if (row != -1 && row != curIndex) { self.listView?.go(toPageIndex: row, animated: true) } } } } //MARK: ReadModel extension KMMainViewController { @objc func openReadModel() { //保存进入阅读模式之前的状态 readLeftMethodType = self.leftSideViewController.type.methodType readLeftPanelOpen = leftPanelOpen readLastLeftPanWidth = lastLeftPanWidth readLeftViewShowPanel = self.leftSideViewController.isShowPanel readRightPanelOpen = rightPanelIsOpen readToolbarType = self.toolbarController.toolbarType readToolMode = self.listView.toolMode readAnnotationType = self.listView.annotationType readSubViewType = self.rightSideViewController.subViewType ?? .None if self.toolbarController.lastItemBox.isSelected { readToolbarItemIdentifier = self.toolbarController.lastItemBox.itemIdentifier ?? "" } else { readToolbarItemIdentifier = "" } //设置阅读模式 self.isReadMode = true self.readModelView.isHidden = false // //顶部菜单栏状态清空 self.toolbarController.toolbarType = .None // self.toolbarController.view.isHidden = true self.toolbarController.cancelSelected(KMLeftControlToolbarItemIdentifier) self.toolbarController.cancelSelected(KMRightControlToolbarItemIdentifier) self.toolbarController.lastItemBox.isSelected = false //左侧菜单栏情况 self.leftPanelOpen = false self.lastLeftPanWidth = 0 self.leftSideViewController.refreshMethodType(methodType: .None) //阅读界面初始化 self.readModelView.isHidden = false self.readModelView.currentPageIndex = self.listView.currentPageIndex self.readModelView.totalPagesCount = Int(self.listView.document.pageCount) self.readModelView.beginTimer() // self.listView.autoScales = true // self.readModelView.scaleType = .autoSize self.readModelView.zoomButton.stringValue = (NSString(format: "%.0f", self.listView.scaleFactor * 100) as String) + "%" //关闭左侧右侧菜单栏 self.closeLeftPane() self.closeRightPane() self.leftSideViewController.showPanelView(show: false) self.leftView.isHidden = true //弹出提示框 if readAlertView != nil { readAlertView?.removeFromSuperview() } readAlertView = CustomAlertView.alertView(message: NSLocalizedString("Read Mode On", comment: ""), fromView: self.view, withStyle: .blue, backgroundColor: NSColor.km_init(hex: "#36383B")) } @objc func closeReadModel() { if self.isReadMode { self.isShowBOTA = false self.readModelView.isHidden = true self.isReadMode = false self.readModelView.isHidden = true self.leftSideViewController.refreshMethodType(methodType: readLeftMethodType) self.leftPanelOpen = readLeftPanelOpen self.rightPanelIsOpen = readRightPanelOpen self.lastLeftPanWidth = readLastLeftPanWidth if self.leftPanelOpen { self.openLeftPane() } self.closeRightPane() self.toolbarController.toolbarType = .None self.toolbarController.cancelSelected(KMDocumentViewDisplayToolbarItemIdentifier) // if self.rightPanelIsOpen { // self.rightPanelIsOpen = false //// self.toolbarController.selectItem(KMRightControlToolbarItemIdentifier) // self.openRightPane() // } // // if readToolbarItemIdentifier.count == 0 { // self.toolbarController.toolbarType = .None // } else { // self.toolbarController.selectItem(readToolbarItemIdentifier) // } // self.toolbarController.selectItem(KMDocumentViewDisplayToolbarItemIdentifier) self.leftSideViewController.showPanelView(show: readLeftViewShowPanel) if readLeftViewShowPanel { self.toolbarController.selectItem(KMLeftControlToolbarItemIdentifier) } self.toolbarController.view.isHidden = false self.listView.toolMode = readToolMode self.listView.annotationType = readAnnotationType // self.toolbarController.toolbarType = .viewSetting } else { self.toolbarController.toolbarType = .None } if readAlertView != nil { readAlertView?.removeFromSuperview() } readAlertView = CustomAlertView.alertView(message: NSLocalizedString("Read Mode Off", comment: ""), fromView: self.view, withStyle: .blue, backgroundColor: NSColor.km_init(hex: "#36383B")) } @objc func addOutLineItemAction() { let labelString = "\(KMLocalizedString("Page", nil)) \((self.listView?.currentPageIndex ?? 0) + 1)" let label = self.listView?.currentSelection?.string() ?? labelString let dest = self.listView?.currentDestination if let row = self.leftSideViewController.selectedRowIndexes().last { if let ol = self.leftSideViewController.tocOutlineView.item(atRow: row) as? CPDFOutline { _ = self.listView.addOutline(for: ol.parent, label: label, dest: dest, at: ol.index+1) } else { let idx = self.listView?.document?.outlineRoot()?.numberOfChildren ?? 0 _ = self.listView.addOutlineForRoot(label: label, dest:dest, at: idx) } } else { let idx = self.listView?.document?.outlineRoot()?.numberOfChildren ?? 0 _ = self.listView.addOutlineForRoot(label: label, dest:dest, at: idx) } } @objc func showTTSView() { self.showTTSWindow() } @objc func showShareAction() { } @objc func lookUpAction() { } @objc func searchBaiduAction() { } @objc func showInfoInFinder() { } @objc func NextPageAction() { } @objc func PreviousPageAction() { } @objc func TranslateItemAction() { } @objc func AutoScrollItemAction() { //增加判断,如果是正在滚动,就停止,否则就开始滚动 self.listView.autoFlow() } @objc func shareFromService(sender: NSMenuItem) { if ((NSApp.mainWindow?.windowController is KMBrowserWindowController) == false) { return } var string = "" if let freeTextAnnotation = listView.activeAnnotation as? CPDFFreeTextAnnotation { string = freeTextAnnotation.contents ?? "" } else if let markupAnnotation = listView.activeAnnotation as? CPDFMarkupAnnotation { if let page = markupAnnotation.page { if let selection = page.selection(for: markupAnnotation.bounds) { string = selection.string() } } } else { string = listView.currentSelection.string() } let windowControler = NSApp.mainWindow?.windowController as! KMBrowserWindowController let model: CTTabStripModel = windowControler.browser.tabStripModel if (model.count() <= 0) { return } if (model.activeTabContents().isHome) { return } let document: KMMainDocument = model.activeTabContents() as! KMMainDocument if string.count > 0 { let represent : NSSharingService = sender.representedObject as! NSSharingService represent.perform(withItems: [string]) return } let represent = sender.representedObject as? NSSharingService represent?.perform(withItems: [string]) } @objc func cutAction(sender: NSMenuItem) { } @objc func deleteAction(sender: NSMenuItem) { } @objc func ColorsItemAction(sender: NSMenuItem) { } @objc func LinesItemAction(sender: NSMenuItem) { } @objc func EditNoteItemAction(sender: NSMenuItem) { } @objc func AITranslateItemAction(sender: NSMenuItem) { self.loadAIConfigWindowWithType(.translate) } @objc func AIProofreadItemAction(sender: NSMenuItem) { self.loadAIConfigWindowWithType(.proofreading) } @objc func AIRewriteItemAction(sender: NSMenuItem) { self.loadAIConfigWindowWithType(.reWriting) } // @objc func highlightLinks() { // let highlightLinks = KMPreferenceManager.shared.highlightLinks // KMPreferenceManager.shared.highlightLinks = !highlightLinks // } }