123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- //
- // KMBatchWindowController.swift
- // PDF Master
- //
- // Created by lizhe on 2023/1/12.
- //
- import Cocoa
- import KMComponentLibrary
- class CustomWindowController: NSWindowController {
- override func windowDidLoad() {
- super.windowDidLoad()
-
- // 创建一个工具栏
- let toolbar = NSToolbar(identifier: "CustomToolbar")
- toolbar.delegate = self
- toolbar.allowsUserCustomization = false
- toolbar.displayMode = .iconAndLabel
- // 设置窗口的工具栏
- self.window?.toolbar = toolbar
- }
- }
- extension CustomWindowController: NSToolbarDelegate {
- func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
- let item = NSToolbarItem(itemIdentifier: itemIdentifier)
- item.label = "Action"
- item.target = self
- item.action = #selector(toolbarAction)
- return item
- }
- func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
- return [.flexibleSpace, NSToolbarItem.Identifier("CustomItem")]
- }
- @objc func toolbarAction() {
- print("Toolbar action triggered!")
- }
- }
- class KMBatchWindowController: NSWindowController {
- @IBOutlet weak var batchPrecessingView: KMBatchProcessingView!
- @IBOutlet weak var batchCollectionView: KMBatchCollectionView!
- @IBOutlet weak var batchCollectionViewWidthConstraint: NSLayoutConstraint!
- @IBOutlet weak var batchHandleView: NSView!
- @IBOutlet weak var settingView: KMBatchSettingView!
- @IBOutlet weak var processView: NSView!
-
- var isDisable: Bool = false {
- didSet {
- self.batchCollectionView.isDisable = isDisable
- self.settingView.isDisable = isDisable
- }
- }
- private var batchData: [KMBatchProcessingTableViewModel]?
-
- @objc var inputData:[URL] = [] {
- didSet {
- self.reloadData()
- }
- }
-
- @objc var inputDataModel:[KMBatchProcessingTableViewModel] = [] {
- didSet {
- self.reloadData()
- }
- }
-
- var inputFileModels:[KMBatchProcessingTableViewModel] = [] {
- didSet {
- self.reloadData()
- }
- }
-
- var inputSubType: Any? {
- didSet {
- self.reloadData()
- }
- }
-
- var type: KMBatchCollectionViewType = .convertPDF {
- didSet {
- if type == .imageToPDF {
- var rect = self.window!.frame
- rect.size.width = 880
- rect.size.height = 600
-
- self.window?.setFrame(rect, display: true, animate: false)
- self.window?.minSize = CGSize(width: 880, height: 600)
- }
-
- self.reloadData()
- }
- }
-
- deinit {
- KMPrint("KMImageToPDFWindowController 释放")
- NotificationCenter.default.removeObserver(self)
- }
-
- override func windowDidLoad() {
- super.windowDidLoad()
- guard let window = self.window else { return }
-
- // 隐藏标题栏
- window.titleVisibility = .hidden
- window.titlebarAppearsTransparent = true
-
- // // 添加自定义导航栏
- // let navBar = NSView(frame: NSRect(x: 0, y: window.frame.height - 10, width: window.frame.width, height: 10))
- // navBar.wantsLayer = true
- // navBar.layer?.backgroundColor = ComponentLibrary.shared.backgroundColor(forToken: "colorBg/layout-middle")?.cgColor // 自定义颜色
- //
- // // 添加到窗口内容视图中
- // window.contentView?.addSubview(navBar)
- //
- // // 添加约束
- // navBar.translatesAutoresizingMaskIntoConstraints = false
- // NSLayoutConstraint.activate([
- // navBar.topAnchor.constraint(equalTo: window.contentView!.topAnchor),
- // navBar.leadingAnchor.constraint(equalTo: window.contentView!.leadingAnchor),
- // navBar.trailingAnchor.constraint(equalTo: window.contentView!.trailingAnchor),
- // navBar.heightAnchor.constraint(equalToConstant: 10)
- // ])
- self.setup()
- self.reloadData()
- self.addNotification()
- }
-
- func addNotification() {
- NotificationCenter.default.addObserver(self, selector: #selector(bacthProcessingNotification), name: NSNotification.Name(kBacthProcessNotification), object: nil)
- }
-
- func setup() {
- self.window?.contentView?.wantsLayer = true
- self.window?.contentView?.layer?.backgroundColor = ComponentLibrary.shared.backgroundColor(forToken: "colorBg/layout-middle")?.cgColor
- // 修改窗口背景颜色
- self.window?.backgroundColor = ComponentLibrary.shared.backgroundColor(forToken: "colorBg/layout-middle")
-
- // self.window?.contentView?.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider") , 0.5, 0)
-
- // self.processView.wantsLayer = true
- // self.processView.border(ComponentLibrary.shared.getComponentColorFromKey("colorBorder/divider"), 0.5)
-
- self.batchCollectionView.delegate = self
- self.batchPrecessingView.delegate = self
-
- self.settingView.type = .convertPDF
- }
-
- func reloadData() {
- if self.type == .imageToPDF {
- batchCollectionViewWidthConstraint.constant = 0
- } else {
- batchCollectionViewWidthConstraint.constant = 240
- }
-
- self.batchPrecessingView.inputType = self.type
- self.batchCollectionView.inputType = self.type
- self.settingView.type = self.type
- self.settingView.subType = self.inputSubType
-
- if inputData.count != 0 {
- self.batchPrecessingView.inputData = inputData
- }
- if inputDataModel.count != 0 {
- self.batchPrecessingView.inputDataModel = inputDataModel
- }
- }
-
- //MARK: 打开文件
- static func openFiles(window: NSWindow) {
- if KMBatchWindowController.isSampleController() {
- KMPrint("存在相同文件")
- if let controller: KMBatchWindowController = self.fetchSampleController() {
- controller.showWindow(window)
- }
- } else {
- KMBatchProcessingView.openfiles(window: window) { openPanel in
- openPanel.title = "选择图片"
- openPanel.canChooseDirectories = false
- openPanel.canChooseFiles = true
- openPanel.allowsMultipleSelection = true
- openPanel.allowedFileTypes = KMOCRModel.supportedTypes()
- } completion: { (panel ,data) in
- if data.count != 0 {
- let batchWindowController: KMBatchWindowController = KMBatchWindowController.init(windowNibName: "KMBatchWindowController")
- batchWindowController.showWindow(window)
- batchWindowController.batchPrecessingView.inputData = data
- }
- }
- }
- }
-
- //MARK: 打开文件
- static func openFile(_ url: URL?, _ type: KMBatchCollectionViewType, _ subType: Any = "") {
- if KMBatchWindowController.isSampleController() {
- if let controller: KMBatchWindowController = self.fetchSampleController() {
- KMPrint("存在相同文件")
- controller.inputSubType = subType
- controller.type = type
- controller.showWindow(NSApp.mainWindow)
- }
- } else {
- let batchWindowController: KMBatchWindowController = KMBatchWindowController.init(windowNibName: "KMBatchWindowController")
- batchWindowController.showWindow(NSApp.mainWindow)
- if url != nil {
- batchWindowController.batchPrecessingView.inputData = [url!]
- }
-
- batchWindowController.inputSubType = subType
- batchWindowController.type = type
- }
- }
-
- static func isSampleController() -> Bool {
- for window in NSApp.windows {
- let controller = window.windowController
- if controller is KMBatchWindowController {
- return true
- }
- }
- return false
- }
-
- static func fetchSampleController() -> KMBatchWindowController? {
- for window in NSApp.windows {
- let controller = window.windowController
- if controller is KMBatchWindowController {
- return controller as? KMBatchWindowController
- }
- }
-
- return nil
- }
- }
- extension KMBatchWindowController: KMBatchProcessingViewDelegate {
- func reloadData(data: [KMBatchProcessingTableViewModel]) {
- self.batchData = data
-
- KMBatchManager.manager.filesData = data
- self.settingView.filesData = data
- }
- }
- extension KMBatchWindowController: KMBatchCollectionViewDelegate {
- func didSelect(index: IndexPath, data: KMBatchCollectionViewModel) {
- KMPrint(data.type.rawValue)
- let dataType: KMBatchCollectionViewType = data.type
- self.settingView.type = dataType
- self.batchPrecessingView.inputType = dataType
- }
- }
- extension KMBatchWindowController {
- @objc func bacthProcessingNotification() {
- if KMBatchManager.manager.state == .processing {
- self.isDisable = true
- } else {
- self.isDisable = false
- }
- }
- }
|