Browse Source

Merge branch 'develop_PDFReaderPro_V4.7.0' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderPro_V4.7.0

tangchao 3 months ago
parent
commit
87c21c2704

+ 6 - 2
PDF Office/PDF Master/AppDelegate.swift

@@ -129,14 +129,18 @@ class AppDelegate: NSObject, NSApplicationDelegate, iRateDelegate{
                     }
 #if VERSION_DMG
                     let model = KMProductModel.shared
-                    model.getDMGProductDatas()
+                    model.getDMGProductDatas() { [weak self] success, result in
+                        
+                    }
 #endif
                 }
             }
         } else {
 #if VERSION_DMG
             let model = KMProductModel.shared
-            model.getDMGProductDatas()
+            model.getDMGProductDatas() { [weak self] success, result in
+                
+            }
 #endif
         }
 

+ 13 - 3
PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/Views/AIHeaderView/AIHeaderView.swift

@@ -52,10 +52,21 @@ class AIHeaderView: NSView, NibLoadable {
     
     //MARK: IBAction
     @IBAction func creditInfoAction(_ sender: NSButton) {
-       
         AIInfoManager.default().fetchAIInfo { dict, error in
             
         }
+        if(KMMemberInfo.shared.isLogin == true) {
+            KMUserInfoViewController.refreshTokenUserInfo {[weak self] success in
+                if(success == true) {
+                    self?.enterAIInfo(sender)
+                }
+            }
+        } else  {
+            enterAIInfo(sender)
+        }
+    }
+    
+    func enterAIInfo(_ sender: NSButton) {
         
         KMUserInfoVCModel().refreshUserInfo { success, msg in
             NotificationCenter.default.post(name: NSNotification.Name(rawValue: kDeviceAIStatusChangeNotification), object: nil)
@@ -100,7 +111,6 @@ class AIHeaderView: NSView, NibLoadable {
         popover.contentViewController = controller
         popover.behavior = .transient
         popover.show(relativeTo: sender.bounds, of: sender, preferredEdge: .minY)
-        
-        
+    
     }
 }

+ 3 - 3
PDF Office/PDF Master/Class/AIInfo/KMAIRequestServerManager.swift

@@ -320,7 +320,7 @@ class ResultWrapper: NSObject {
                     let code: String = data["code"] as? String ?? "06005"
                     if Int(code)! == 200, let dataDic = data["data"] {
                         let wrapper = ResultWrapper(success: true, resultData: dataDic as! NSDictionary)
-                        if let value = data["fileKey"] {
+                        if let value = (dataDic as! NSDictionary)["fileKey"] {
                             wrapper.content = value as! String
                         }
                         complete(wrapper)
@@ -879,7 +879,7 @@ class KMAIRequestServer {
            }
             let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
             if jsonObject != nil {
-                let codeStr: String = jsonObject!["code"] as! String
+                let codeStr: String = jsonObject!["code"] as? String ?? ""
                 var code: Int = 0
                 if let numCode = Int(codeStr) {
                     code = numCode
@@ -889,7 +889,7 @@ class KMAIRequestServer {
                 var message: String = ""
                 if let string = jsonObject!["data"] {
                     let dataDic = jsonObject!["data"] as? NSDictionary ?? [:]
-                    if let dataStr = dataDic["dst"] {
+                    if let dataStr = dataDic["content"] {
                         message = dataStr as! String
                         result_bool = true
                     }

+ 51 - 0
PDF Office/PDF Master/Class/Purchase/DMG/KMPurchaseEmbeddedWindowController.swift

@@ -150,6 +150,7 @@ class KMPurchaseEmbeddedWindowController: NSWindowController {
     @IBOutlet weak var imageBottomLayout: NSLayoutConstraint!
     @IBOutlet weak var image2BottomLayout: NSLayoutConstraint!
     
+    private var _product_code : String = ""
     private var _dmgProductType: KMDMGProductType = .advanced_annual_subscription_trail
     private var _product_Info: KMListingProductsModel = KMListingProductsModel(id: "23", productName: "PDF Reader Pro Advanced - Annual Plan", price: NSNumber(value: 99.99), maxDeviceNum: 4, displayPrice: NSNumber(value: 0.0), levels: "3", platforms: "Windows,Android,Mac,iOS", productLineId: 1, paymentModel: 1, cycle: 4, cnyPrice: NSNumber(value: 0), displayCnyPrice: NSNumber(value: 0.0), upgradePrice: NSNumber(value: 0.0), code: "advanced-annual-subscription-trail")
 
@@ -254,6 +255,18 @@ class KMPurchaseEmbeddedWindowController: NSWindowController {
         }
      }
     
+    @objc static func currentCode(_ productCode: String) -> KMPurchaseEmbeddedWindowController {
+        if currentWindowController != nil {
+            currentWindowController.product_code = productCode
+            return currentWindowController
+        } else {
+            let configWC: KMPurchaseEmbeddedWindowController = KMPurchaseEmbeddedWindowController.init(windowNibName: "KMPurchaseEmbeddedWindowController")
+            currentWindowController = configWC;
+            currentWindowController.product_code = productCode
+            return currentWindowController
+        }
+     }
+    
     @objc static func currentFirstTrialWC(_ productId: String) -> KMPurchaseEmbeddedWindowController {
         if currentWindowController != nil {
             currentWindowController.productID = productId
@@ -1767,6 +1780,44 @@ class KMPurchaseEmbeddedWindowController: NSWindowController {
     
     // MARK: get & set
     
+    var product_code : String {
+        get {
+            return _product_code
+        }
+        
+        set {
+            _product_code = newValue
+            
+            let model = KMProductModel.shared
+            let products : [KMListingProductsModel] = model.dmgProductDatas?.listingProducts ?? []
+            if products.count > 0 {
+                for product in products {
+                    if product.code == _product_code {
+                        self.product_Info = product;
+                        //更新价格
+                        self.updateProduct_Info()
+                        break
+                    }
+                }
+            } else {
+                model.getDMGProductDatas() { [weak self] success, result in
+                    let products : [KMListingProductsModel] = model.dmgProductDatas?.listingProducts ?? []
+                    if products.count > 0 {
+                        for product in products {
+                            if product.code == self?.product_code {
+                                self?.product_Info = product;
+                                //更新价格
+                                self?.updateProduct_Info()
+                                break
+                            }
+                        }
+                    }
+                }
+            }
+            
+        }
+    }
+    
     var product_Info: KMListingProductsModel {
         get {
             return _product_Info

+ 16 - 8
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.m

@@ -545,14 +545,22 @@ NSPopoverDelegate>
 }
 
 - (IBAction)personalCenterAction:(NSButton *)sender {
-    // 用户头像点击事件
-    self.userMenu = [[NSMenu alloc] init];
-    KMUserInfoViewController *userInfo = [[KMUserInfoViewController alloc] init];
-    NSMenuItem *item = [self.userMenu addItemWithTitle:@"" action:nil target:@""];
-    item.target = self;
-    item.representedObject = userInfo;
-    item.view = userInfo.view;
-    [self.userMenu popUpMenuPositioningItem:nil atLocation:NSMakePoint(-130, 30) inView:sender];
+    [KMUserInfoViewController refreshTokenUserInfoWithCallback:^(BOOL success) {
+        if(success) {
+            if([KMMemberInfo shared].isLogin == YES) {
+                // 用户头像点击事件
+                self.userMenu = [[NSMenu alloc] init];
+                KMUserInfoViewController *userInfo = [[KMUserInfoViewController alloc] init];
+                NSMenuItem *item = [self.userMenu addItemWithTitle:@"" action:nil target:@""];
+                item.target = self;
+                item.representedObject = userInfo;
+                item.view = userInfo.view;
+                [self.userMenu popUpMenuPositioningItem:nil atLocation:NSMakePoint(-130, 30) inView:sender];
+            }
+        }
+    }];
+  
+
 }
 
 - (IBAction)signUpAction:(NSButton *)sender {

+ 5 - 0
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.h

@@ -77,6 +77,11 @@ extern NSString * const KMIAPSubscriptionLoadedNotification;
 
 @property (nonatomic,readonly) IAPProduct *DMGAllAccessProduct;
 @property (nonatomic,readonly) IAPProduct *DMGPDFToOfficeProduct;
+@property (nonatomic,readonly) IAPProduct *DMGPDFReaderProAdcanced;
+@property (nonatomic,readonly) IAPProduct *DMGPDFReaderProPermanent;
+@property (nonatomic,readonly) IAPProduct *DMGPDFReaderProAI_Annual;
+@property (nonatomic,readonly) IAPProduct *DMGPDFReaderProAI_Monthly;
+@property (nonatomic,readonly) IAPProduct *DMGAdd2Device;
 
 @property (nonatomic, readonly) NSString *temptransactioReceipt;
 

+ 5 - 1
PDF Office/PDF Master/MemberCenter/Model/KMMemberInfo.swift

@@ -832,10 +832,14 @@ import Cocoa
                 return true
             }
             if AIInfoManager.default().aiInfo.totalToken - AIInfoManager.default().aiInfo.usedTimes > 0 {
-                return false
+                return true
             } else {
                 return false
             }
+        } else {
+            if AIInfoManager.default().aiInfo.totalToken - AIInfoManager.default().aiInfo.usedTimes > 0 {
+                return true
+            }
         }
         return false
 #endif

+ 4 - 4
PDF Office/PDF Master/MemberCenter/View/KMEnterVerificationCodeView.swift

@@ -193,12 +193,12 @@ class KMEnterVerificationCodeView: KMBaseXibView {
         viewModel.$passwordErrorMessage
             .receive(on: RunLoop.main)
             .sink { [weak self] newValue in
-                self?.verifficationErrorLabel.stringValue = newValue
-                if self?.viewModel.passwordErrorMessage.isEmpty == false {
-                    self?.verifficationErrorLabel.isHidden = true
+                self?.verifficationErrorLabel.stringValue = self?.viewModel.passwordErrorMessage ?? ""
+                if self?.verifficationErrorLabel.stringValue.isEmpty == false {
+                    self?.verifficationErrorLabel.isHidden = false
                     self?.verifficationBox.borderColor = NSColor(named: "FA1E5D") ?? NSColor.red
                 } else {
-                    self?.verifficationErrorLabel.isHidden = false
+                    self?.verifficationErrorLabel.isHidden = true
                     self?.verifficationBox.borderColor = NSColor(named: "DADBDE") ?? NSColor.red
                 }
             }

+ 29 - 0
PDF Office/PDF Master/MemberCenter/ViewController/KMUserInfoViewController.swift

@@ -105,6 +105,31 @@ class KMUserInfoViewController: NSViewController {
     deinit {
         KMPrint("KMUserInfoViewController deinit.")
     }
+    
+   @objc class func refreshTokenUserInfo(callback: ((Bool)->Void)?) -> Void {
+        if KMMemberCenterManager.manager.isConnectionAvailable() == false {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("Error Information", comment: "")
+            alert.informativeText = NSLocalizedString("Please make sure your internet connection is available.", comment: "")
+            alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
+            alert.runModal()
+            
+            callback?(false)
+            return
+        }
+        
+        KMUserInfoVCModel().refreshUserInfo(networkAlert: false) { success, msg in
+            callback?(success)
+            if success {
+                KMMemberInfo.shared.isLogin = true
+                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "MemberCenterLoginSuccess"), object: nil)
+            } else {
+                KMMemberInfo.shared.isLogin = false
+            }
+        }
+
+    }
 
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -1126,6 +1151,10 @@ class KMUserInfoViewController: NSViewController {
             guard let self = self else { return }
             if KMMemberInfo.shared.userScenarioType == .lite_type1 {
                 self.viewModel.skipCompare(.trial)
+            } else if KMMemberInfo.shared.userScenarioType == .dmg_type4 ||
+                        KMMemberInfo.shared.userScenarioType == .dmg_type19 ||
+                        KMMemberInfo.shared.userScenarioType == .dmg_type34 {
+                self.viewModel.skipCompare(.trial)
             }
         }
         

+ 47 - 9
PDF Office/PDF Master/MemberCenter/ViewModel/KMProductModel.swift

@@ -57,7 +57,8 @@ import StoreKit
     case pdfReaderProAIAnnual_dmg  // AI 年订阅
     case pdfReaderProAIMonthly_dmg  // AI 月订阅
     case pdfToOffice_dmg  // 转档包 永久
-    case add2Device_dmg  // 转档包 永久
+    case add2Device_dmg  // 多设备全平台
+    case add3Device_dmg  // 单平台升级高级版
 }
 
 typealias AppstorePurchaseComplete = (_ success: Bool,_ msg: String) -> Void
@@ -123,11 +124,12 @@ class KMProductModel: ObservableObject {
      @abstract 获取DMG服务器架上所有商品 (得到的价格是原始价格)
      @param
      */
-    func getDMGProductDatas() -> Void {
+    func getDMGProductDatas( _ complete: @escaping KMMemberProductComplete) -> Void {
         checkConnectionAvailable()
         KMMemberCenterManager.manager.getListingProducts(isEducation: 0) { [weak self] success, result in
             guard let productsArrays : KMMemberProductResult = result else { return }
             self?.dmgProductDatas = productsArrays
+            complete(success, result)
         }
         
         if KMMemberInfo.shared.isLogin {
@@ -457,13 +459,35 @@ class KMProductModel: ObservableObject {
             } else {
                 return IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_pro.price()
             }
+        } else if type == .pdfReaderProStandard_dmg {
+            return "79.99"
+        } else if type == .pdfReaderProAdvanced_dmg {
+            return "99.99"
+        } else if type == .pdfReaderProPermanent_dmg {
+            return "119.99"
+        } else if type == .pdfReaderProAIAnnual_dmg {
+            return "125.99"
+        } else if type == .pdfReaderProAIMonthly_dmg {
+            return "14.99"
+        } else if type == .pdfToOffice_dmg {
+            return "29.99"
+        } else if type == .add2Device_dmg {
+            return "39.99"
+        } else if type == .add3Device_dmg {
+            return "49.99"
         }
         return ""
     }
     
     func appstorePurchaseAction(_ tag: Int, _ complete: @escaping AppstorePurchaseComplete) -> Void {
         if state == .dmg_Base {
-            
+            if tag == 0 {
+                
+            } else if tag == 3 {
+                
+            } else {
+                
+            }
         } else if state == .dmg_Upgrades1 {
             
         } else if state == .dmg_Upgrades2 {
@@ -479,13 +503,17 @@ class KMProductModel: ObservableObject {
             }
         } else if state == .lite_MacWindows {
             if tag == 2 {
+                let platforms = KMMemberInfo.shared.vip_platforms
+                let platformsArray = platforms
+                    .components(separatedBy: ",")
+                    .map { $0.trimmingCharacters(in: .whitespaces) }
                 if KMMemberInfo.shared.userScenarioType == .lite_type5 {
-                    membershipPurchase(.advancedAddDevicesAllAccessPack12months_lite)
+                    if platformsArray.count == 1 {
+                        membershipPurchase(.advancedAddDevicesAllAccessPack12months_lite)
+                    } else if platformsArray.count == 2 {
+                        membershipPurchase(.advancedAdd2DevicesAllAccessPack12months_lite)
+                    }
                 } else {
-                    let platforms = KMMemberInfo.shared.vip_platforms
-                    let platformsArray = platforms
-                        .components(separatedBy: ",")
-                        .map { $0.trimmingCharacters(in: .whitespaces) }
                     if platformsArray.count == 1 {
                         membershipPurchase(.advancedAddDevicesAllAccessPack12months_lite)
                     } else if platformsArray.count == 2 {
@@ -507,7 +535,17 @@ class KMProductModel: ObservableObject {
             if KMMemberInfo.shared.userScenarioType == .pro_type1 {
                 membershipPurchase(.advancedAddDevicesAllAccessPack12months_pro)
             } else if KMMemberInfo.shared.userScenarioType == .pro_type4 {
-                membershipPurchase(.advancedAddDevicesAllAccessPack12months_pro)
+                let platforms = KMMemberInfo.shared.vip_platforms
+                let platformsArray = platforms
+                    .components(separatedBy: ",")
+                    .map { $0.trimmingCharacters(in: .whitespaces) }
+                if platformsArray.count == 1 {
+                    membershipPurchase(.advancedAddDevicesAllAccessPack12months_pro)
+                } else if platformsArray.count == 2 {
+                    membershipPurchase(.advancedAdd2DevicesAllAccessPack12months_pro)
+                } else {
+                    membershipPurchase(.advancedAdd2DevicesAllAccessPack12months_pro)
+                }
             }
         } else {
             if tag == 2 {

+ 1 - 1
PDF Office/PDF Master/MemberCenter/ViewModel/KMSignUpViewModel.swift

@@ -390,7 +390,7 @@ class KMSignUpViewModel: ObservableObject {
             return
         }
         if verificationCode.count <= 0 || verificationCode.count > 6 || !isValidVerificationCode() {
-            emailErrorMessage = NSLocalizedString("Verification code error.", tableName: "MemberCenterLocalizable", comment: "")
+            passwordErrorMessage = NSLocalizedString("Verification code error.", tableName: "MemberCenterLocalizable", comment: "")
             complete(false, "")
             return
         }

+ 9 - 0
PDF Office/PDF Master/MemberCenter/ViewModel/KMUserInfoVCModel.swift

@@ -36,6 +36,8 @@ class KMUserInfoVCModel: ObservableObject {
             guard let result = result else { return }
             let resultDict = result as KMMemberCenterResult
             let msg = resultDict.msg
+            let code = resultDict.code
+
             if success {
                 let userInfo = resultDict.userInfo
                 guard let userInfo = resultDict.userInfo else { return }
@@ -43,6 +45,13 @@ class KMUserInfoVCModel: ObservableObject {
                 complete(true, "")
             } else {
                 complete(false, "")
+                if(code == 304) {
+                    KMMemberInfo.shared.clearMemberInfoCache()
+                    KMMemberInfo.shared.isLogin = false
+                    KMMemberInfo.shared.access_token = ""
+                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "MemberCenterLogoutSuccess"), object: nil)
+
+                }
             }
         }
     }

+ 51 - 13
PDF Office/PDF Master/MemberCenter/WindowsController/KMProductCompareWC.swift

@@ -308,12 +308,18 @@ class KMProductCompareWC: NSWindowController {
 
     @objc override func showWindow(_ sender: Any?) {
         super.showWindow(sender)
+        if orientation {
+            model.state = orientationType
+        } else {
+            model.getCurrentComparisonTableType()
+        }
         languageLocalized()
         initializeUI()
         reloadData()
         if model.isShowSale {
             showDiscountToSaveWindow()
         }
+        reloadDataContent()
     }
 
     // MARK: - Private Methods
@@ -355,12 +361,15 @@ class KMProductCompareWC: NSWindowController {
 #if VERSION_DMG
     // DMG
         if model.state == .dmg_Base {
-
+            standardPlanPurchaseLabel.stringValue = model.getProductPrice(.pdfReaderProStandard_dmg)
+            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.pdfReaderProAdvanced_dmg)
+            permanentPurchaseLabel.stringValue = model.getProductPrice(.pdfReaderProPermanent_dmg)
         } else if model.state == .dmg_Upgrades1 {
-            
+            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.add2Device_dmg)
         } else if model.state == .dmg_Upgrades2 {
-            
+            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.add3Device_dmg)
         } else {
+            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.pdfReaderProAdvanced_dmg)
         }
 #else
     // AppStore 免费版本
@@ -398,7 +407,17 @@ class KMProductCompareWC: NSWindowController {
             if KMMemberInfo.shared.userScenarioType == .pro_type1 {
                 advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_pro)
             } else if KMMemberInfo.shared.userScenarioType == .pro_type4 {
-                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_pro)
+                let platforms = KMMemberInfo.shared.vip_platforms
+                let platformsArray = platforms
+                    .components(separatedBy: ",")
+                    .map { $0.trimmingCharacters(in: .whitespaces) }
+                if platformsArray.count == 1 {
+                    advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_pro)
+                } else if platformsArray.count == 2 {
+                    advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAdd2DevicesAllAccessPack12months_pro)
+                } else {
+                    advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAdd2DevicesAllAccessPack12months_pro)
+                }
             }
         } else {
             advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.fourDevicesAllAccessPack12months_pro)
@@ -1066,7 +1085,7 @@ class KMProductCompareWC: NSWindowController {
             }
         }
         
-        let embeddedWC = KMPurchaseEmbeddedWindowController.currentWC(product ?? KMListingProductsModel())
+        let embeddedWC = KMPurchaseEmbeddedWindowController.currentCode(product?.code ?? "")
         embeddedWC.showWindow(nil)
         embeddedWC.window?.center()
 #else
@@ -1183,7 +1202,8 @@ extension KMProductCompareWC: NSTableViewDelegate, NSTableViewDataSource {
                     cellView.selectBoxLeft.constant = 352.0
                     cellView.selectBoxWidth.constant = 320.0
                 } else if model.state == .dmg_Upgrades2 {
-                    
+                    cellView.selectBoxLeft.constant = 352.0
+                    cellView.selectBoxWidth.constant = 320.0
                 } else if model.state == .lite_Base {
                     cellView.selectBoxLeft.constant = 352.0 + 179.0
                     cellView.selectBoxWidth.constant = 240.0
@@ -1269,8 +1289,8 @@ extension KMProductCompareWC: NSTableViewDelegate, NSTableViewDataSource {
             configureCellView(cellView, value: value4, label: cellView.value4Label, imageView: cellView.value4ImageView, platformsBox: cellView.platformsBox4)
         } else if model.state == .dmg_Upgrades1 {
             configureCellView(cellView, value: value3, label: cellView.value1Label, imageView: cellView.value1ImageView, platformsBox: cellView.platformsBox1)
-        } else if model.state == .dmg_Upgrades1 {
-            
+        } else if model.state == .dmg_Upgrades2 {
+            configureCellView(cellView, value: value3, label: cellView.value1Label, imageView: cellView.value1ImageView, platformsBox: cellView.platformsBox1)
         } else if model.state == .lite_Base {
             configureCellView(cellView, value: value1, label: cellView.value1Label, imageView: cellView.value1ImageView, platformsBox: cellView.platformsBox1)
             configureCellView(cellView, value: value3, label: cellView.value2Label, imageView: cellView.value2ImageView, platformsBox: cellView.platformsBox2)
@@ -1326,38 +1346,56 @@ extension KMProductCompareWC: NSTableViewDelegate, NSTableViewDataSource {
     }
     
     private func checkOrNot(_ cellView: KMProductCompareTableCell) {
+        cellView.selectBox1.isHidden = true
+        cellView.selectBox2.isHidden = true
+        cellView.selectBox3.isHidden = true
+        cellView.selectBox4.isHidden = true
+        cellView.cellView1.isHidden = true
+        cellView.cellView2.isHidden = true
+        cellView.cellView3.isHidden = true
+        cellView.cellView4.isHidden = true
         if model.state == .dmg_Base {
             cellView.selectBox3.isHidden = false
+            cellView.cellView1.isHidden = false
+            cellView.cellView2.isHidden = false
+            cellView.cellView3.isHidden = false
+            cellView.cellView4.isHidden = false
             cellView.viewWidth1.constant = 149.5
             cellView.viewWidth2.constant = 149.5
             cellView.viewWidth3.constant = 149.5
             cellView.viewWidth4.constant = 149.5
         } else if model.state == .dmg_Upgrades1 {
             cellView.selectBox1.isHidden = false
+            cellView.cellView1.isHidden = false
             cellView.viewWidth1.constant = 320.0
-        } else if model.state == .dmg_Upgrades1 {
+        } else if model.state == .dmg_Upgrades2 {
             cellView.selectBox1.isHidden = false
+            cellView.cellView1.isHidden = false
             cellView.viewWidth1.constant = 320.0
         } else if model.state == .lite_Base {
-            cellView.cellView4.isHidden = true
             cellView.selectBox2.isHidden = false
+            cellView.cellView1.isHidden = false
+            cellView.cellView2.isHidden = false
+            cellView.cellView3.isHidden = false
             cellView.viewWidth1.constant = 179.0
             cellView.viewWidth2.constant = 240.0
             cellView.viewWidth3.constant = 240.0
         } else if model.state == .lite_MacWindows {
             cellView.selectBox1.isHidden = false
             cellView.viewWidth1.constant = 320.0
+            cellView.cellView1.isHidden = false
         } else if model.state == .pro_Base {
-            cellView.cellView3.isHidden = true
             cellView.selectBox1.isHidden = false
             cellView.viewWidth1.constant = 299.0
+            cellView.cellView1.isHidden = false
         } else if model.state == .pro_Advanced {
             cellView.selectBox1.isHidden = false
             cellView.viewWidth1.constant = 320.0
+            cellView.cellView1.isHidden = false
         } else {
             // model.state == .trial
-            cellView.cellView3.isHidden = true
-            cellView.cellView4.isHidden = true
+            cellView.cellView1.isHidden = false
+            cellView.cellView2.isHidden = false
             cellView.selectBox2.isHidden = false
             cellView.viewWidth1.constant = 179.0
             cellView.viewWidth2.constant = 240.0

+ 21 - 21
PDF Office/PDF Master/MemberCenter/WindowsController/KMProductCompareWC.xib

@@ -102,7 +102,7 @@
         <window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="documentWindow" titlebarAppearsTransparent="YES" id="7jy-UC-R98">
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
             <rect key="contentRect" x="77" y="40" width="970" height="660"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1800" height="1125"/>
             <view key="contentView" wantsLayer="YES" misplaced="YES" id="BHT-Ss-56B">
                 <rect key="frame" x="0.0" y="0.0" width="970" height="660"/>
                 <autoresizingMask key="autoresizingMask"/>
@@ -1095,14 +1095,6 @@ https://www.pdfreaderpro.com/privacy-policy</mutableString>
             <rect key="frame" x="0.0" y="0.0" width="742" height="194"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="TbI-cd-sd7">
-                    <rect key="frame" x="0.0" y="-10" width="144" height="204"/>
-                    <view key="contentView" id="Cgn-Mc-kdm">
-                        <rect key="frame" x="1" y="1" width="142" height="202"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                    </view>
-                    <color key="borderColor" red="1" green="0.36862745099999999" blue="0.17254901959999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                </box>
                 <box boxType="custom" borderWidth="0.0" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="rtR-EN-GZe">
                     <rect key="frame" x="0.0" y="0.0" width="144" height="194"/>
                     <view key="contentView" id="WCI-ju-KkU">
@@ -1113,10 +1105,10 @@ https://www.pdfreaderpro.com/privacy-policy</mutableString>
                         <constraint firstAttribute="width" constant="144" id="dmj-ri-GBh"/>
                     </constraints>
                 </box>
-                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="eSr-Ep-bND">
-                    <rect key="frame" x="144" y="-10" width="300" height="204"/>
-                    <view key="contentView" id="eqd-ll-M9M">
-                        <rect key="frame" x="1" y="1" width="298" height="202"/>
+                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="TbI-cd-sd7">
+                    <rect key="frame" x="0.0" y="-10" width="144" height="204"/>
+                    <view key="contentView" id="Cgn-Mc-kdm">
+                        <rect key="frame" x="1" y="1" width="142" height="202"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                     </view>
                     <color key="borderColor" red="1" green="0.36862745099999999" blue="0.17254901959999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -1131,10 +1123,10 @@ https://www.pdfreaderpro.com/privacy-policy</mutableString>
                         <constraint firstAttribute="width" constant="300" id="Fht-ba-6vO"/>
                     </constraints>
                 </box>
-                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="LHQ-au-Z59">
-                    <rect key="frame" x="444" y="-10" width="154" height="204"/>
-                    <view key="contentView" id="Up6-RM-FdN">
-                        <rect key="frame" x="1" y="1" width="152" height="202"/>
+                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="eSr-Ep-bND">
+                    <rect key="frame" x="144" y="-10" width="300" height="204"/>
+                    <view key="contentView" id="eqd-ll-M9M">
+                        <rect key="frame" x="1" y="1" width="298" height="202"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                     </view>
                     <color key="borderColor" red="1" green="0.36862745099999999" blue="0.17254901959999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -1149,10 +1141,10 @@ https://www.pdfreaderpro.com/privacy-policy</mutableString>
                         <constraint firstAttribute="width" constant="154" id="UZc-yX-zJD"/>
                     </constraints>
                 </box>
-                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="fpi-Pf-NfD">
-                    <rect key="frame" x="598" y="-10" width="144" height="204"/>
-                    <view key="contentView" id="3FX-SF-Qg1">
-                        <rect key="frame" x="1" y="1" width="142" height="202"/>
+                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="LHQ-au-Z59">
+                    <rect key="frame" x="444" y="-10" width="154" height="204"/>
+                    <view key="contentView" id="Up6-RM-FdN">
+                        <rect key="frame" x="1" y="1" width="152" height="202"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                     </view>
                     <color key="borderColor" red="1" green="0.36862745099999999" blue="0.17254901959999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@@ -1167,6 +1159,14 @@ https://www.pdfreaderpro.com/privacy-policy</mutableString>
                         <constraint firstAttribute="width" constant="144" id="Vd3-5i-fHR"/>
                     </constraints>
                 </box>
+                <box boxType="custom" cornerRadius="12" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="fpi-Pf-NfD">
+                    <rect key="frame" x="598" y="-10" width="144" height="204"/>
+                    <view key="contentView" id="3FX-SF-Qg1">
+                        <rect key="frame" x="1" y="1" width="142" height="202"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                    </view>
+                    <color key="borderColor" red="1" green="0.36862745099999999" blue="0.17254901959999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                </box>
             </subviews>
             <constraints>
                 <constraint firstItem="Qq2-ys-Kfy" firstAttribute="trailing" secondItem="fpi-Pf-NfD" secondAttribute="trailing" id="37c-ei-nKe"/>