// // KMWatermarkPropertyController.swift // PDF Reader Pro // // Created by tangchao on 2022/12/15. // import Cocoa /// typealias KMWatermarkPropertyControllerTemplateModelDidSelected = (_ model: KMWatermarkModel)->() typealias KMWatermarkPropertyControllerTemplateMenuItemClick = (_ itemIndex: Int, _ model: KMWatermarkModel)->() class KMWatermarkPropertyController: KMWatermarkAdjectivePropertyBaseController { var textController: KMWatermarkAdjectiveListController! var fileController: KMWatermarkAdjectiveListController! var templateModelDidSelected: KMWatermarkPropertyControllerTemplateModelDidSelected! var templateMenuItemClick: KMWatermarkPropertyControllerTemplateMenuItemClick! override func viewDidLoad() { super.viewDidLoad() self.showBack(show: false) self.titleLabel.stringValue = NSLocalizedString("Watermark", comment: "") self.segementControl.items = [NSLocalizedString("Text", comment: ""),NSLocalizedString("File", comment: "")] self.segementControl.itemClick = { [self] (index: Int) in self.tabView.selectTabViewItem(at: index) } var textModels: Array = [] var fileModels: Array = [] for model in KMWatermarkManager.defaultManager.watermarks { if ((model.image) != nil) { /// 文件 fileModels.append(model) } else { /// 文本 textModels.append(model) } } let item = NSTabViewItem(identifier: "tabID") item.label = "tab1"; let controller = KMWatermarkAdjectiveListController() item.viewController = controller controller.emptyView.despLabel.stringValue = NSLocalizedString("Click the Add button in the upper right corner to create a new watermark.", comment: "") controller.delegate = self textController = controller let item2 = NSTabViewItem(identifier: "tablID2") item2.label = "tab2"; let controller2 = KMWatermarkAdjectiveListController() item2.viewController = controller2 controller2.emptyView.despLabel.stringValue = NSLocalizedString("Click the Add button in the upper right corner to create a new watermark.", comment: "") controller2.delegate = self fileController = controller2 self.tabView.addTabViewItem(item) self.tabView.addTabViewItem(item2) controller.initDatas(datas: textModels) controller2.initDatas(datas: fileModels) } override func initDatas() { } override func updateDatas() { var textModels: Array = [] var fileModels: Array = [] for model in KMWatermarkManager.defaultManager.watermarks { if ((model.image) != nil) { /// 文件 fileModels.append(model) } else { /// 文本 textModels.append(model) } } textController.initDatas(datas: textModels) fileController.initDatas(datas: fileModels) } func addTextModel(model: KMWatermarkModel) { let templateModel = KMWatermarkTemplateModel() templateModel.initModel(model: model) textController.datas.insert(templateModel, at: 0) textController.dealSelectModel(selectedModel: templateModel) textController.refreshUI() } func addFileModel(model: KMWatermarkModel) { let templateModel = KMWatermarkTemplateModel() templateModel.initModel(model: model) fileController.datas.insert(templateModel, at: 0) fileController.dealSelectModel(selectedModel: templateModel) fileController.refreshUI() } } extension KMWatermarkPropertyController: KMWatermarkAdjectiveListControllerDelegate { func controller(controller: KMWatermarkAdjectiveListController, shouldSelectAtRow: Int) -> Bool { if self.preView != nil { let watermarks = self.preView.document.watermarks() if (watermarks == nil || watermarks!.count == 0) { return true } // 替换水印 let alert = NSAlert() alert.alertStyle = .warning alert.messageText = NSLocalizedString("文件中已添加水印,您要替换现有的水印吗?", comment: "") alert.addButton(withTitle: NSLocalizedString("替换", comment: "")) alert.addButton(withTitle: NSLocalizedString("Cancel", comment: "")) let result = alert.runModal() if (result != .alertFirstButtonReturn) { return false } /// 替换 for i in 0 ..< watermarks!.count { let model = watermarks![i] self.preView.document.removeWatermark(model) self.preView.setNeedsDisplayForVisiblePages() } } return true } func controller(controller: KMWatermarkAdjectiveListController, didSelectAtRow: Int) { if (didSelectAtRow < controller.datas.count) { let model: KMWatermarkTemplateModel = controller.datas[didSelectAtRow] as! KMWatermarkTemplateModel guard let callback = templateModelDidSelected else { return } callback(model) } } func controller(controller: KMWatermarkAdjectiveListController, shouldRemoveAtRow: Int) -> Bool { return true } func controller(controller: KMWatermarkAdjectiveListController, didRemoveAtRow: Int) { let model: KMWatermarkTemplateModel = controller.datas[didRemoveAtRow] as! KMWatermarkTemplateModel let result = KMWatermarkManager.defaultManager.removeWatermark(watermark: model) if (result) { controller.datas.remove(at: didRemoveAtRow) controller.refreshUI() } } func controller(controller: KMWatermarkAdjectiveListController, shouldEditAtRow: Int) -> Bool { return true } func controller(controller: KMWatermarkAdjectiveListController, didEditAtRow: Int) { let model: KMWatermarkTemplateModel = controller.datas[didEditAtRow] as! KMWatermarkTemplateModel guard let callback = templateMenuItemClick else { return } callback(1, model) } func controller(controller: KMWatermarkAdjectiveListController, item: NSMenuItem, itemIndex: Int) { if (itemIndex == 0) { /// 编辑 let model: KMWatermarkTemplateModel = controller.datas[item.tag] as! KMWatermarkTemplateModel guard let callback = templateMenuItemClick else { return } callback(1, model) } else if (itemIndex == 1) { /// 删除 if (item.tag < controller.datas.count) { let model: KMWatermarkTemplateModel = controller.datas[item.tag] as! KMWatermarkTemplateModel let result = KMWatermarkManager.defaultManager.removeWatermark(watermark: model) if (result) { controller.datas.remove(at: item.tag) controller.refreshUI() } } } else if (itemIndex == 2) { /// 删除全部 let alert = NSAlert() alert.messageText = "确认删除全部模板吗?" alert.addButton(withTitle: "删除") alert.addButton(withTitle: "取消") let result = alert.runModal() if (result == .alertSecondButtonReturn) { /// 取消 return } if (textController.isEqual(to: controller)) { /// 文本 let result = KMWatermarkManager.defaultManager.removeAllTextWatermarks() if (result) { controller.datas.removeAll() controller.refreshUI() } } else if (fileController.isEqual(to: controller)) { /// 文件 let result = KMWatermarkManager.defaultManager.removeAllFileWatermarks() if (result) { controller.datas.removeAll() controller.refreshUI() } } } } }