123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- //
- // DSignatureSaveFolderViewController.swift
- // PDF Reader Pro Edition
- //
- // Created by Niehaoyu on 2023/9/28.
- //
- import Cocoa
- class DSignatureSaveFolderViewController: NSViewController, NSTextFieldDelegate {
-
- @IBOutlet weak var titleLabel: NSTextField!
- @IBOutlet weak var subTitleLabel: NSTextField!
-
- @IBOutlet weak var filesLabel: NSTextField!
- @IBOutlet weak var passwordLabel: NSTextField!
- @IBOutlet weak var confirmPasswordLabel: NSTextField!
- @IBOutlet weak var filesTextField: NSTextField!
- @IBOutlet weak var passwordTextField: NSSecureTextField!
- @IBOutlet weak var confirmPasswordTextField: NSSecureTextField!
- @IBOutlet weak var errorLabel: NSTextField!
- @IBOutlet weak var openFileButton: NSButton!
-
- @IBOutlet weak var promptBox: NSBox!
- @IBOutlet var promptTextView: NSTextView!
-
- @IBOutlet weak var cancelButton: NSButton!
- @IBOutlet weak var continueButton: NSButton!
-
- // @property(nonatomic) IBOutlet NSLayoutConstraint *bottomOffset;
-
-
- var actionBlock: ((_ saveFolderVC: DSignatureSaveFolderViewController, _ actionType: DSignatureActionType, _ infoDic: NSDictionary)->Void)?
-
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- self.titleLabel.textColor = NSColor.labelColor
- self.subTitleLabel.textColor = NSColor.labelColor
-
- self.filesLabel.textColor = NSColor.labelColor
- self.passwordLabel.textColor = NSColor.labelColor
- self.confirmPasswordLabel.textColor = NSColor.labelColor
-
- self.filesTextField.textColor = NSColor.labelColor
- self.passwordTextField.textColor = NSColor.labelColor
- self.confirmPasswordTextField.textColor = NSColor.labelColor
-
- self.promptTextView.textColor = NSColor.labelColor
-
- // self.bottomOffset.constant = 25.0;
- self.errorLabel.isHidden = true
-
- self.filesTextField.wantsLayer = true
- self.passwordTextField.wantsLayer = true
- self.confirmPasswordTextField.wantsLayer = true
- self.filesTextField.delegate = self;
- self.filesTextField.isEnabled = false
-
- self.filesTextField.layer?.borderWidth = 1.0
- self.passwordTextField.layer?.borderWidth = 1.0
- self.confirmPasswordTextField.layer?.borderWidth = 1.0;
-
- self.filesTextField.updateState(false)
- self.passwordTextField.layer?.borderColor = NSColor.clear.cgColor
- self.confirmPasswordTextField.layer?.borderColor = NSColor.clear.cgColor
-
- self.filesTextField.layer?.cornerRadius = 5.0
- self.passwordTextField.layer?.cornerRadius = 5.0
- self.confirmPasswordTextField.layer?.cornerRadius = 5.0;
-
- self.filesTextField.delegate = self
- self.confirmPasswordTextField.delegate = self
-
- self.localizedLanguage()
-
- if self.filesTextField.stringValue.isEmpty == false {
- self.continueButton.isEnabled = true
- } else {
- self.continueButton.isEnabled = false
- }
- }
- func localizedLanguage() {
- self.titleLabel.stringValue = NSLocalizedString("Save the Self-signed Digital ID to a File", comment: "");
- self.subTitleLabel.stringValue = NSLocalizedString("Your digital ID will be saved at the following location :", comment: "")
- self.filesLabel.stringValue = NSLocalizedString("File", comment: "");
- self.passwordLabel.stringValue = NSLocalizedString("Password", comment: "")
- self.confirmPasswordLabel.stringValue = NSLocalizedString("Confirm the Password", comment: "")
- self.promptTextView.string = String(format: "%@\n\n%@",NSLocalizedString("Add a password to protect the private key of the digital ID. You will need this password again to use the digital ID for signing.", comment: ""), NSLocalizedString("Save the digital ID file in a known location so that you can copy or backup it.", comment: ""))
-
- self.cancelButton.title = NSLocalizedString("Previous Step", comment: "")
- self.continueButton.title = NSLocalizedString("Continue", comment: "")
- self.openFileButton.title = String(format: "%@",NSLocalizedString("Browse", comment: ""))
- self.errorLabel.stringValue = NSLocalizedString("Passwords do not match", comment: "")
- }
-
- func getUniqueFilePath(_ filePath: String) -> (String) {
- var i = 0
- var isDirectory: ObjCBool = false
- var uniqueFilePath = filePath
-
- let filemanager = FileManager.default
- filemanager.fileExists(atPath: uniqueFilePath, isDirectory: &isDirectory)
- if isDirectory.boolValue {
- while filemanager.fileExists(atPath: uniqueFilePath) {
- i += 1
- uniqueFilePath = String(format: "%@(%d)", filePath, i)
- }
- } else {
- while filemanager.fileExists(atPath: uniqueFilePath) {
- i += 1
- let fileURL = URL(fileURLWithPath: filePath)
- let path = String(format: "%@(%d)", fileURL.deletingPathExtension().path, i)
- uniqueFilePath = String(format: "%@.%@", path, fileURL.pathExtension)
- }
- }
-
- return uniqueFilePath
- }
-
-
- //MARK: IBAction
- @IBAction func penFile(_ sender: Any) {
- let accessoryCtr = PDFCertExportAccessoryView.init()
-
- let openPanel = NSOpenPanel()
- openPanel.accessoryView = accessoryCtr.view
- openPanel.canChooseDirectories = true
- openPanel.canChooseFiles = false
- openPanel.beginSheetModal(for: self.view.window!) { result in
- if result == .OK {
- let outputULR = openPanel.url!
- var filePath = outputULR.path
- if accessoryCtr.formatMatrix.selectedRow == 0 {
- filePath = filePath + "/Untitled.p12"
- } else {
- filePath = filePath + "/Untitled.pfx"
- }
- self.filesTextField.stringValue = self.getUniqueFilePath(filePath)
-
- if self.filesTextField.stringValue.isEmpty {
- self.filesTextField.updateState(true)
- } else {
- self.filesTextField.updateState(false)
- }
-
- if self.filesTextField.stringValue.isEmpty == false {
- self.continueButton.isEnabled = true
- } else {
- self.continueButton.isEnabled = false
- }
-
- }
-
- }
-
- }
-
- @IBAction func closeAction(_ sender: Any) {
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .cancel, NSDictionary())
- }
-
- @IBAction func previousAction(_ sender: Any) {
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .previousStep, NSDictionary())
- }
-
- @IBAction func continueAction(_ sender: Any) {
- self.view.window?.makeFirstResponder(nil)
- if self.filesTextField.stringValue.count < 1 {
- return
- }
- if self.confirmPasswordTextField.stringValue == self.passwordTextField.stringValue {
- var isDir: ObjCBool = false
-
- let filePath = URL(fileURLWithPath: self.filesTextField.stringValue)
- let parentDirectory = filePath.deletingLastPathComponent().path
- let isExists = FileManager.default.fileExists(atPath: parentDirectory, isDirectory: &isDir)
- if isDir.boolValue == false || isExists == false {
- let alert = NSAlert.init()
- alert.messageText = NSLocalizedString("Output Folder can not be empty.", comment: "")
- alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
- alert.runModal()
- return
- }
- let dic = NSMutableDictionary()
- dic.setValue(self.filesTextField.stringValue, forKey: SAVEFILEPATH_KEY)
- if self.passwordTextField.stringValue.count > 0 {
- dic.setValue(self.passwordTextField.stringValue, forKey: PASSWORD_KEY)
- }
- self.errorLabel.isHidden = true
- // self.bottomOffset.constant = 25.0;
-
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .confirm, dic)
- } else {
- self.errorLabel.isHidden = false
- // self.bottomOffset.constant = self.errorLabel.frame.size.height + 10;
- }
- }
-
- //MARK: NSTextFieldDelegate
- func controlTextDidChange(_ obj: Notification) {
-
- if self.filesTextField.stringValue.isEmpty == false {
- self.continueButton.isEnabled = true
- } else {
- self.continueButton.isEnabled = false
- }
-
- let textField = obj.object as! NSTextField
- if self.filesTextField.isEqual(textField) {
- if self.filesTextField.stringValue.isEmpty == false {
- self.filesTextField.updateState(false)
- } else {
- self.filesTextField.updateState(true)
- }
- }
-
- self.errorLabel.isHidden = true
- // self.bottomOffset.constant = 25.0;
- }
- }
- extension NSTextField {
- func updateState(_ isError: Bool) {
- if isError {
- self.layer?.borderColor = NSColor.systemRed.cgColor
- } else {
- self.layer?.borderColor = NSColor.clear.cgColor
- }
- }
- }
|