Handle PDFs with new Transimission presentation controllers

This commit is contained in:
Jackson Harper
2023-12-04 12:11:34 +08:00
parent af2759cab0
commit bfd3365f28
10 changed files with 142 additions and 21 deletions

View File

@ -0,0 +1,40 @@
#if os(iOS)
import Models
import PSPDFKit
import PSPDFKitUI
import SwiftUI
import Utils
import WebKit
struct PDFSettingsView: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentationMode
let pdfViewController: PDFViewController?
func makeCoordinator() -> PDFSettingsViewCoordinator {
PDFSettingsViewCoordinator(self)
}
func makeUIViewController(context _: Context) -> some UIViewController {
let settingsViewcontroller = PSPDFKitUI.PDFSettingsViewController()
settingsViewcontroller.pdfViewController = pdfViewController
let nav = UINavigationController(rootViewController: settingsViewcontroller)
return nav
}
func updateUIViewController(_: UIViewControllerType, context _: Context) {}
}
class PDFSettingsViewCoordinator: NSObject, UINavigationControllerDelegate {
var parent: PDFSettingsView
init(_ parent: PDFSettingsView) {
self.parent = parent
}
@objc func dismiss() {
parent.presentationMode.wrappedValue.dismiss()
}
}
#endif

View File

@ -51,6 +51,9 @@ import Utils
@State private var annotation = ""
@State private var addNoteHighlight: Highlight?
@State private var showAnnotationModal = false
@State private var showSettingsModal = false
@Environment(\.dismiss) private var dismiss
init(viewModel: PDFViewerViewModel) {
self.viewModel = viewModel
@ -103,19 +106,13 @@ import Utils
guard pdfStateObject.controllerNeedsConfig else { return }
coordinator.setController(controller: controller, dataService: dataService)
// Disable the Document Editor
controller.navigationItem.setRightBarButtonItems(
[controller.thumbnailsButtonItem],
for: .thumbnails,
animated: false
)
let barButtonItems = [
UIBarButtonItem(
image: UIImage(systemName: "textformat"),
style: .plain,
target: controller.settingsButtonItem.target,
action: controller.settingsButtonItem.action
target: coordinator,
action: #selector(PDFViewCoordinator.displaySettingsSheet)
),
UIBarButtonItem(
image: UIImage(systemName: "book"),
@ -137,6 +134,15 @@ import Utils
)
]
let leftButtonItems = [
UIBarButtonItem(
image: UIImage(named: "chevron-right", in: Bundle(url: ViewsPackage.bundleURL), with: nil),
style: .plain,
target: coordinator,
action: #selector(PDFViewCoordinator.pop)
)
]
document.areAnnotationsEnabled = true
coordinator.viewer = self
@ -146,6 +152,7 @@ import Utils
controller.setPageIndex(pageIndex, animated: false)
}
controller.navigationItem.setLeftBarButtonItems(leftButtonItems, for: .document, animated: false)
controller.navigationItem.setRightBarButtonItems(barButtonItems, for: .document, animated: false)
pdfStateObject.controllerNeedsConfig = false
}
@ -215,6 +222,12 @@ import Utils
}
.navigationViewStyle(StackNavigationViewStyle())
}
.formSheet(isPresented: $showSettingsModal, modalSize: CGSize(width: 400, height: 475)) {
NavigationView {
PDFSettingsView(pdfViewController: coordinator.controller)
}
.navigationViewStyle(StackNavigationViewStyle())
}
.fullScreenCover(isPresented: $readerView, content: {
PDFReaderViewController(document: document)
})
@ -263,7 +276,7 @@ import Utils
var subscriptions = Set<AnyCancellable>()
public var viewer: PDFViewer?
var controller: PDFViewController?
public var controller: PDFViewController?
init(document: Document, viewModel: PDFViewerViewModel) {
self.document = document
@ -446,12 +459,24 @@ import Utils
}
}
@objc public func pop() {
if let viewer = self.viewer {
viewer.dismiss()
}
}
@objc public func toggleReaderView() {
if let viewer = self.viewer {
viewer.readerView = !viewer.readerView
}
}
@objc public func displaySettingsSheet() {
if let viewer = self.viewer {
viewer.showSettingsModal = true
}
}
@objc public func toggleNotebookView() {
if let viewer = self.viewer {
viewer.showNotebookView = !viewer.showNotebookView