Bläddra i källkod

【会员】重复restore警告弹窗

lizhe 1 år sedan
förälder
incheckning
9ae59cf32a

+ 48 - 0
PDF Office/PDF Master.xcodeproj/project.pbxproj

@@ -1941,6 +1941,18 @@
 		ADE614BF298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
 		ADE614C0298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
 		ADE614C1298620C000F62ED7 /* ImageToPDF.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */; };
+		ADE787A22AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A02AA5A833002EC85A /* KMAccountExceptionWindowController.swift */; };
+		ADE787A32AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A02AA5A833002EC85A /* KMAccountExceptionWindowController.swift */; };
+		ADE787A42AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A02AA5A833002EC85A /* KMAccountExceptionWindowController.swift */; };
+		ADE787A52AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */; };
+		ADE787A62AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */; };
+		ADE787A72AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */; };
+		ADE787AA2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */; };
+		ADE787AB2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */; };
+		ADE787AC2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */; };
+		ADE787AE2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
+		ADE787AF2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
+		ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */ = {isa = PBXBuildFile; fileRef = ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */; };
 		ADE8BC2529F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
 		ADE8BC2629F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
 		ADE8BC2729F7CCA600570F89 /* KMPageNumberDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */; };
@@ -4356,6 +4368,10 @@
 		ADE614B429861CCC00F62ED7 /* KMBatchSelectedFilesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchSelectedFilesView.swift; sourceTree = "<group>"; };
 		ADE614B929861CFF00F62ED7 /* KMBatchSelectedFilesView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBatchSelectedFilesView.xib; sourceTree = "<group>"; };
 		ADE614BE298620C000F62ED7 /* ImageToPDF.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ImageToPDF.xcassets; sourceTree = "<group>"; };
+		ADE787A02AA5A833002EC85A /* KMAccountExceptionWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAccountExceptionWindowController.swift; sourceTree = "<group>"; };
+		ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAccountExceptionWindowController.xib; sourceTree = "<group>"; };
+		ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMAccountExceptionView.swift; sourceTree = "<group>"; };
+		ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMAccountExceptionView.xib; sourceTree = "<group>"; };
 		ADE8BC2429F7CCA600570F89 /* KMPageNumberDisplayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageNumberDisplayView.swift; sourceTree = "<group>"; };
 		ADE8BC2929F7CDB000570F89 /* KMPageNumberDisplayView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPageNumberDisplayView.xib; sourceTree = "<group>"; };
 		ADE8BC2E29F8CD7200570F89 /* KMPDFThumbnailModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPDFThumbnailModel.swift; sourceTree = "<group>"; };
@@ -7530,6 +7546,7 @@
 		ADE3C1E129A5AB8B00793B13 /* Controller */ = {
 			isa = PBXGroup;
 			children = (
+				ADE7879F2AA5A7DC002EC85A /* AccountException */,
 				ADB5E50F2A3710C1007110A8 /* SubscriptionView */,
 				AD2D74AA29F0CE8500EDC5E4 /* Cancellation */,
 				AD8810AF29A8467100178CA1 /* VerificationCode */,
@@ -7606,6 +7623,25 @@
 			path = Source;
 			sourceTree = "<group>";
 		};
+		ADE7879F2AA5A7DC002EC85A /* AccountException */ = {
+			isa = PBXGroup;
+			children = (
+				ADE787A82AA5A8C1002EC85A /* View */,
+				ADE787A02AA5A833002EC85A /* KMAccountExceptionWindowController.swift */,
+				ADE787A12AA5A833002EC85A /* KMAccountExceptionWindowController.xib */,
+			);
+			path = AccountException;
+			sourceTree = "<group>";
+		};
+		ADE787A82AA5A8C1002EC85A /* View */ = {
+			isa = PBXGroup;
+			children = (
+				ADE787A92AA5A8D3002EC85A /* KMAccountExceptionView.swift */,
+				ADE787AD2AA5AA50002EC85A /* KMAccountExceptionView.xib */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		ADE8BC2329F7CA5900570F89 /* Views */ = {
 			isa = PBXGroup;
 			children = (
@@ -9900,6 +9936,7 @@
 				89E93EE72999DB4200F10F66 /* KMNoteColorCollectionViewItem.xib in Resources */,
 				9F8539F62947137500DF644E /* sadfavicon.png in Resources */,
 				ADBC372429CA923E00D93208 /* KMComparative.plist in Resources */,
+				ADE787AE2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				BBEC00B2295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
 				9FD0FA3429CD947000F2AB0D /* KMOpacityPanel.xib in Resources */,
 				BB4BD9CF2909026500A66A65 /* KMRightSideViewController.xib in Resources */,
@@ -10063,6 +10100,7 @@
 				9F0CB5452986953A00007028 /* KMURLToPDFWindowController.xib in Resources */,
 				ADCB98FD292750A200B51A03 /* KMBatchProcessingTableView.xib in Resources */,
 				9FBA0F0129015A82001117AF /* KMFastToolCollectionViewItem.xib in Resources */,
+				ADE787A52AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */,
 				BBFBE6C528DD7B98008B2335 /* Main.storyboard in Resources */,
 				9F0201752A1B488C00C9B673 /* KMAITranslationVC.xib in Resources */,
 				9F0201812A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
@@ -10377,6 +10415,7 @@
 				9F0CB5462986953A00007028 /* KMURLToPDFWindowController.xib in Resources */,
 				9F8539E8294712D600DF644E /* KMChromiumTabContents.xib in Resources */,
 				BB5F8A1A29BB15AD00365ADB /* pic_mail.pdf in Resources */,
+				ADE787A62AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */,
 				9F8539CF29430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				896933D529AEEE3D0055327F /* PageSheet.xib in Resources */,
 				ADBC376729CD86A000D93208 /* KMReadModelView.xcassets in Resources */,
@@ -10386,6 +10425,7 @@
 				BBFE6E712930D9C600142C01 /* KMMergeSettingWindowController.xib in Resources */,
 				ADD1B6FD2946C0D400C3FFF7 /* KMPrintChoosePageSizePamphletView.xib in Resources */,
 				ADF9ED3429A850D200C4A943 /* KMAccountInfoView.xib in Resources */,
+				ADE787AF2AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				F36EB6CD2987C9FE004C25FB /* KMDocumentAIViewController.xib in Resources */,
 				89316826296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
 				BB2EDF50296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
@@ -10468,6 +10508,7 @@
 				BB7648EA29ECECBF00931039 /* Color.xcassets in Resources */,
 				ADD1B6F22946C06C00C3FFF7 /* KMPrintChoosePageSizeSizeView.xib in Resources */,
 				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
+				ADE787B02AA5AA50002EC85A /* KMAccountExceptionView.xib in Resources */,
 				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				ADD1B6F62946C07800C3FFF7 /* KMPrintChoosePageSizePosterView.xib in Resources */,
 				89E4E6F12963D1B7002DBA6F /* KMColorPickerViewController.xib in Resources */,
@@ -10499,6 +10540,7 @@
 				ADD1B6FE2946C0D400C3FFF7 /* KMPrintChoosePageSizePamphletView.xib in Resources */,
 				9FF94F1629A7476000B1EF69 /* KMDesignPropertySelector.xib in Resources */,
 				ADE8BC3529F9261900570F89 /* KMSearchCellView.xib in Resources */,
+				ADE787A72AA5A833002EC85A /* KMAccountExceptionWindowController.xib in Resources */,
 				ADC075DF29876622006C752F /* KMBatchConverPDFPPTView.xib in Resources */,
 				BB3BA9082A13684A00623C08 /* Assets.xcassets in Resources */,
 				AD0FA51829A9FA8F00EDEB50 /* KMResetPasswordView.xib in Resources */,
@@ -10799,6 +10841,7 @@
 				9FDD0FA629533494000C4DAD /* KMJSONParser.swift in Sources */,
 				BBFE6E7F2930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
 				AD1CA4302A0640F20070541F /* KMAnnotationScreenHeadView.swift in Sources */,
+				ADE787AA2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				BB14700B299DC0D100784A6A /* OIDAuthorizationRequest.m in Sources */,
 				ADE3C1DE29A5AA0B00793B13 /* KMRequestServer.swift in Sources */,
 				BBC3484A2958222C008D2CD1 /* KMBackgroundOutsideView.swift in Sources */,
@@ -11157,6 +11200,7 @@
 				8942F7F02926087200389627 /* KMSearchViewController.swift in Sources */,
 				89E4E7282963FB74002DBA6F /* KMPropertiesViewPopController.m in Sources */,
 				BB32BF232A5EA05900D11348 /* KMAnalytics.swift in Sources */,
+				ADE787A22AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */,
 				BB86C21428F560D1005AD968 /* NSGraphics_SKExtensions.m in Sources */,
 				9F1FE4AE29406E4700E952CA /* CTPresentationModeController.m in Sources */,
 				BB146FC0299DC0D100784A6A /* GTMSessionFetcherLogging.m in Sources */,
@@ -11834,6 +11878,7 @@
 				BB003027298CF7EC002DD1A0 /* KMPreferenceDisplayController.swift in Sources */,
 				F36AD77829642FE80015AD53 /* CPDFListView+UndoManager.m in Sources */,
 				BB89726A294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
+				ADE787A32AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */,
 				BB146FBB299DC0D100784A6A /* GTLRBase64.m in Sources */,
 				BB2C6ACE28F41B9F00478A33 /* CPDFListView.m in Sources */,
 				BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
@@ -11952,6 +11997,7 @@
 				BB147036299DC0D200784A6A /* OIDRegistrationResponse.m in Sources */,
 				BB86C21A28F561C7005AD968 /* NSColor_SKExtensions.m in Sources */,
 				9FDD0F8D2952FCE0000C4DAD /* KMGlobalParser.swift in Sources */,
+				ADE787AB2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				ADD1B6ED2946C04C00C3FFF7 /* KMPrintChoosePageSizePamphletView.swift in Sources */,
 				BB4EEF3529764166003A3537 /* KMRedactPropertyWindowController.swift in Sources */,
 				ADCB996F292C65EE00B51A03 /* KMOCROperation.m in Sources */,
@@ -12658,6 +12704,7 @@
 				BBB9B318299A5D6D004F3235 /* KMDropboxManager.m in Sources */,
 				BB8F4559295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				89752DBA2936F9B9003FF08E /* NSButton+TitleColor.m in Sources */,
+				ADE787A42AA5A833002EC85A /* KMAccountExceptionWindowController.swift in Sources */,
 				BB162E94294FFE020088E9D1 /* KMWatermarkModel.swift in Sources */,
 				F3A9DC80294309D80074E5D2 /* CPDFListEditAnnotationViewController.m in Sources */,
 				AD867F9629D955BF00F00440 /* KMBOTAOutlineCellView.swift in Sources */,
@@ -12776,6 +12823,7 @@
 				AD0FA50429A8E36200EDEB50 /* KMLightMemberAlertView.swift in Sources */,
 				9F0CB53F2986571A00007028 /* KMDesignToken+Typography.swift in Sources */,
 				F37322E6292DF9410013862C /* CPDFCircleAnnotation+PDFListView.m in Sources */,
+				ADE787AC2AA5A8D3002EC85A /* KMAccountExceptionView.swift in Sources */,
 				9F1FE49529406E4700E952CA /* common.m in Sources */,
 				BBC3481E295593F0008D2CD1 /* KMBackgroundListController.swift in Sources */,
 				ADC31FA82A0E0C1A00ED44A2 /* KMEditPropertyAlignmentView.swift in Sources */,

+ 42 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/AccountException/KMAccountExceptionWindowController.swift

@@ -0,0 +1,42 @@
+//
+//  KMAccountExceptionWindowController.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/9/4.
+//
+
+import Cocoa
+
+var accountExceptionController: KMAccountExceptionWindowController?
+var accountExceptionMainWindow: NSWindow?
+
+class KMAccountExceptionWindowController: NSWindowController {
+
+    @IBOutlet weak var accountExceptionView: KMAccountExceptionView!
+    override func windowDidLoad() {
+        super.windowDidLoad()
+        self.setup()
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+    }
+    
+    //MARK: 打开文件
+    static func show(window: NSWindow) -> KMAccountExceptionWindowController {
+        let controller: KMAccountExceptionWindowController = KMAccountExceptionWindowController.init(windowNibName: "KMAccountExceptionWindowController")
+        window.beginSheet(controller.window!)
+        controller.window?.center()
+        accountExceptionController = controller
+        accountExceptionMainWindow = window
+        return controller
+    }
+    
+    func setup() {
+        self.window?.contentView?.backgroundColor(NSColor.km_init(hex: "#FFFFFF"))
+        
+        self.accountExceptionView.cancelAction = { view in
+            cancellationMainWindow?.endSheet(view.window!)
+            view.window?.close()
+            accountExceptionMainWindow = nil
+            accountExceptionController = nil
+        }
+    }
+}

+ 43 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/AccountException/KMAccountExceptionWindowController.xib

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAccountExceptionWindowController" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="accountExceptionView" destination="JGT-CD-5uD" id="c2Q-ou-2WM"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="400" height="306"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="400" height="306"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="JGT-CD-5uD" customClass="KMAccountExceptionView" customModule="PDF_Master" customModuleProvider="target">
+                        <rect key="frame" x="0.0" y="0.0" width="400" height="306"/>
+                    </customView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="JGT-CD-5uD" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="gGH-Os-LRu"/>
+                    <constraint firstAttribute="trailing" secondItem="JGT-CD-5uD" secondAttribute="trailing" id="hEQ-Gt-oR1"/>
+                    <constraint firstAttribute="bottom" secondItem="JGT-CD-5uD" secondAttribute="bottom" id="hGA-u2-sdM"/>
+                    <constraint firstItem="JGT-CD-5uD" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="kJY-Ex-6yX"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="84" y="212"/>
+        </window>
+    </objects>
+</document>

+ 100 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/AccountException/View/KMAccountExceptionView.swift

@@ -0,0 +1,100 @@
+//
+//  KMAccountExceptionView.swift
+//  PDF Master
+//
+//  Created by lizhe on 2023/9/4.
+//
+
+import Cocoa
+
+typealias KMAccountExceptionViewCancelAction = (_ view: KMAccountExceptionView) -> Void
+
+class KMAccountExceptionView: KMBaseXibView {
+    @IBOutlet var textView: NSTextView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var doneButton: NSButton!
+    
+    @IBOutlet weak var closeButton: NSButton!
+    @IBOutlet weak var closeBox: KMBox!
+    
+    
+    var cancelAction: KMAccountExceptionViewCancelAction?
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    override func setup() {
+        self.closeBox.moveCallback = { [weak self] (mouseEntered, mouseBox) in
+            if mouseEntered {
+                self?.closeButton?.image = NSImage(named: "control_btn_icon_close_hov")
+            } else {
+                self?.closeButton?.image = NSImage(named: "control_btn_icon_close")
+            }
+        }
+        
+        self.textView.delegate = self
+        self.textView.frame = (self.textView.enclosingScrollView?.contentView.bounds)!
+        self.textView.autoresizingMask = [.width, .height]
+        
+        self.titleLabel.textColor = NSColor.km_init(hex: "#252629")
+        self.titleLabel.font = NSFont.SFProTextSemiboldFont(20)
+        
+        self.doneButton.backgroundColor(NSColor.km_init(hex: "#1770F4"))
+        self.doneButton.contentTintColor = NSColor.km_init(hex: "#FFFFFF")
+        self.doneButton.font = NSFont.SFProTextRegularFont(14)
+        self.doneButton.border(NSColor.clear, 0, 4)
+    }
+    
+    override func updateLanguage() {
+        
+        self.titleLabel.stringValue = NSLocalizedString("Account Exception", comment: "")
+        //singin
+        let string = NSLocalizedString("Your account is currently blocked due to frequent number cuts, during which you can still use the free Basics function normally.Unblock the account, please Contact Us and provide complaint instructions.", comment: "")
+        let attributedString = NSMutableAttributedString.init(string: string)
+        let paragraphStyle = NSMutableParagraphStyle()
+        paragraphStyle.alignment = .center;
+        paragraphStyle.lineHeightMultiple = 1.32
+        paragraphStyle.lineBreakMode = .byWordWrapping
+        attributedString.addAttributes([NSAttributedString.Key.font : NSFont.SFProTextRegularFont(14.0),
+                                        NSAttributedString.Key.foregroundColor : NSColor.km_init(hex: "#616469"),
+                                        NSAttributedString.Key.paragraphStyle : paragraphStyle],
+                                    range: NSRange(location: 0, length: string.count))
+
+        let range = string.range(of: NSLocalizedString("Contact Us", comment: ""))
+        attributedString.setAttributes([NSAttributedString.Key.font : NSFont.SFProTextRegularFont(12.0),
+                                        NSAttributedString.Key.foregroundColor : NSColor.km_init(hex: "#1770F4"),
+                                        NSAttributedString.Key.underlineColor : NSColor.clear,
+                                        NSAttributedString.Key.link : "timer://"],
+                                       range: string.nsRange(from: range!)!)
+
+        self.textView.textStorage?.setAttributedString(attributedString)
+    }
+    
+    
+    @IBAction func doneAction(_ sender: Any) {
+        guard let callBack = cancelAction else { return }
+        
+        callBack(self)
+    }
+    
+    @IBAction func closeButtonAction(_ sender: Any) {
+        guard let callBack = cancelAction else { return }
+        
+        callBack(self)
+    }
+}
+
+extension KMAccountExceptionView: NSTextViewDelegate {
+    func textView(_ textView: NSTextView, clickedOnLink link: Any, at charIndex: Int) -> Bool {
+        if link as! String == "timer://" {
+//            guard let callBack = reSendAction else { return true }
+//            textView.isSelectable = false
+//            callBack(self, textView)
+            NSWorkspace.shared.open(URL(string: "https://www.pdfreaderpro.com/contact")!)
+        }
+        return true
+    }
+}

+ 133 - 0
PDF Office/PDF Master/Class/KMLightMember/Controller/AccountException/View/KMAccountExceptionView.xib

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMAccountExceptionView" customModule="PDF_Master" customModuleProvider="target">
+            <connections>
+                <outlet property="closeBox" destination="MHN-NE-sQe" id="fDR-eN-Kxf"/>
+                <outlet property="closeButton" destination="hMe-4u-Zx8" id="LAS-Im-b9U"/>
+                <outlet property="doneButton" destination="cBn-Kn-Hsf" id="01W-ln-Z1A"/>
+                <outlet property="textView" destination="bop-ts-OHe" id="6kS-6h-grq"/>
+                <outlet property="titleLabel" destination="Qck-ob-xJt" id="6rk-XN-8cm"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe">
+            <rect key="frame" x="0.0" y="0.0" width="400" height="306"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="NeX-6e-gus">
+                    <rect key="frame" x="0.0" y="278" width="400" height="28"/>
+                    <subviews>
+                        <box boxType="custom" borderWidth="0.0" cornerRadius="4" translatesAutoresizingMaskIntoConstraints="NO" id="MHN-NE-sQe" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                            <rect key="frame" x="8" y="8" width="12" height="12"/>
+                            <view key="contentView" id="Pfv-1T-36f">
+                                <rect key="frame" x="0.0" y="0.0" width="12" height="12"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            </view>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="12" id="oIC-Q5-iVH"/>
+                                <constraint firstAttribute="height" constant="12" id="uOe-nL-FQK"/>
+                            </constraints>
+                        </box>
+                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hMe-4u-Zx8">
+                            <rect key="frame" x="8" y="8" width="12" height="12"/>
+                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="control_btn_icon_close" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="TjZ-ax-YbX">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="12" id="bWb-H9-4Fp"/>
+                                <constraint firstAttribute="height" constant="12" id="cof-Ln-xU7"/>
+                            </constraints>
+                            <connections>
+                                <action selector="closeButtonAction:" target="-2" id="uO7-Fu-fzT"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="hMe-4u-Zx8" firstAttribute="leading" secondItem="NeX-6e-gus" secondAttribute="leading" constant="8" id="03x-SY-cRz"/>
+                        <constraint firstItem="hMe-4u-Zx8" firstAttribute="centerY" secondItem="NeX-6e-gus" secondAttribute="centerY" id="7Xb-S4-zJG"/>
+                        <constraint firstItem="MHN-NE-sQe" firstAttribute="leading" secondItem="NeX-6e-gus" secondAttribute="leading" constant="8" id="S7F-GV-PpI"/>
+                        <constraint firstItem="MHN-NE-sQe" firstAttribute="centerY" secondItem="NeX-6e-gus" secondAttribute="centerY" id="ZbC-SM-I2X"/>
+                        <constraint firstAttribute="height" constant="28" id="viF-TB-Gb0"/>
+                    </constraints>
+                </customView>
+                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Qck-ob-xJt">
+                    <rect key="frame" x="141" y="242" width="118" height="16"/>
+                    <textFieldCell key="cell" lineBreakMode="clipping" title="Account Exception" id="THt-xK-kHp">
+                        <font key="font" usesAppearanceFont="YES"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YwU-fS-mY1">
+                    <rect key="frame" x="32" y="116" width="336" height="110"/>
+                    <clipView key="contentView" drawsBackground="NO" copiesOnScroll="NO" id="uDf-Ok-ReC">
+                        <rect key="frame" x="0.0" y="0.0" width="336" height="110"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textView wantsLayer="YES" editable="NO" drawsBackground="NO" importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="bop-ts-OHe">
+                                <rect key="frame" x="0.0" y="0.0" width="336" height="110"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                                <size key="minSize" width="336" height="110"/>
+                                <size key="maxSize" width="336" height="10000000"/>
+                                <color key="insertionPointColor" name="textInsertionPointColor" catalog="System" colorSpace="catalog"/>
+                            </textView>
+                        </subviews>
+                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+                    </clipView>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="110" id="7ga-du-wYA"/>
+                    </constraints>
+                    <scroller key="horizontalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="YES" id="MHe-JO-Pvz">
+                        <rect key="frame" x="-100" y="-100" width="225" height="15"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                    <scroller key="verticalScroller" hidden="YES" verticalHuggingPriority="750" horizontal="NO" id="Qvu-i4-J1D">
+                        <rect key="frame" x="-100" y="-100" width="15" height="135"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </scroller>
+                </scrollView>
+                <button translatesAutoresizingMaskIntoConstraints="NO" id="cBn-Kn-Hsf">
+                    <rect key="frame" x="80" y="40" width="240" height="32"/>
+                    <buttonCell key="cell" type="square" title="OK" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="lKb-Su-P0o">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system"/>
+                    </buttonCell>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="32" id="PHy-kQ-nMU"/>
+                        <constraint firstAttribute="width" constant="240" id="v6U-H9-69V"/>
+                    </constraints>
+                    <connections>
+                        <action selector="doneAction:" target="-2" id="xoa-YF-sGs"/>
+                    </connections>
+                </button>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="YwU-fS-mY1" secondAttribute="trailing" constant="32" id="1mY-ea-JBg"/>
+                <constraint firstItem="YwU-fS-mY1" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="7KR-KH-Im8"/>
+                <constraint firstItem="Qck-ob-xJt" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="Cf2-4A-FKT"/>
+                <constraint firstItem="YwU-fS-mY1" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="32" id="EBW-Ib-Whg"/>
+                <constraint firstItem="cBn-Kn-Hsf" firstAttribute="centerX" secondItem="c22-O7-iKe" secondAttribute="centerX" id="H9a-oo-U2k"/>
+                <constraint firstAttribute="bottom" secondItem="cBn-Kn-Hsf" secondAttribute="bottom" constant="40" id="IYw-Vt-Nmz"/>
+                <constraint firstAttribute="trailing" secondItem="NeX-6e-gus" secondAttribute="trailing" id="X6U-sv-cue"/>
+                <constraint firstItem="Qck-ob-xJt" firstAttribute="top" secondItem="NeX-6e-gus" secondAttribute="bottom" constant="20" id="aeR-1a-oAA"/>
+                <constraint firstItem="NeX-6e-gus" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="bU8-nA-pSa"/>
+                <constraint firstItem="NeX-6e-gus" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="dCW-lE-T95"/>
+                <constraint firstItem="YwU-fS-mY1" firstAttribute="top" secondItem="Qck-ob-xJt" secondAttribute="bottom" constant="16" id="wNb-bu-cov"/>
+            </constraints>
+            <point key="canvasLocation" x="-12" y="154"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="control_btn_icon_close" width="12" height="12"/>
+    </resources>
+</document>

+ 1 - 1
PDF Office/PDF Master/Class/KMLightMember/Controller/Cancellation/KMCancellationWindowController.swift

@@ -40,7 +40,7 @@ class KMCancellationWindowController: NSWindowController {
             cancellationMainWindow?.endSheet(view.window!)
             view.window?.close()
             cancellationMainWindow = nil
-            cancellationMainWindow = nil
+            cancellationController = nil
         }
     }
 }