Bläddra i källkod

【偏好设置】KMGeneralPreferences 调式UI

tangchao 1 år sedan
förälder
incheckning
ddd139a526

+ 70 - 26
PDF Office/PDF Master/Class/Common/Category/NSObject+KMExtension.swift

@@ -211,36 +211,80 @@ private var _currentPointingDeviceType: NSEvent.PointingDeviceType = .unknown
 let  MIN_BUTTON_WIDTH = 82.0
 let MAX_BUTTON_WIDTH = 100.0
 let EXTRA_BUTTON_WIDTH = 12.0
-@objc extension NSGraphicsContext {
-    @objc static func SKAutoSizeButtons(_ buttons: NSArray, rightAlign: Bool) {
-        if (buttons.count == 0) {
-            return
-        }
-        let button = buttons.firstObject as! NSButton
-        var x = rightAlign ? NSMaxX(button.frame) : NSMinX(button.frame)
-        var width = 0.0
-        for btn in buttons {
-            let _btn = btn as! NSButton
-            _btn.sizeToFit()
-            width = fmax(width, NSWidth(_btn.frame) + EXTRA_BUTTON_WIDTH)
-        }
-        width = fmin(MAX_BUTTON_WIDTH, fmax(MIN_BUTTON_WIDTH, width))
-        for btn in buttons {
-            let _btn = btn as! NSButton
-            var frame = _btn.frame
-            frame.size.width = fmax(width, NSWidth(frame) + EXTRA_BUTTON_WIDTH)
-            if (rightAlign) {
-                x -= NSWidth(frame)
-                frame.origin.x = x
-            } else {
-                frame.origin.x = x
-                x += NSWidth(frame)
-            }
-            _btn.frame = frame
+
+func KMAutoSizeButtons(_ buttons: [NSButton], rightAlign: Bool) {
+    if (buttons.count == 0) {
+        return
+    }
+    let button = buttons.first!
+    var x = rightAlign ? NSMaxX(button.frame) : NSMinX(button.frame)
+    var width = 0.0
+    for btn in buttons {
+        btn.sizeToFit()
+        width = fmax(width, NSWidth(btn.frame) + EXTRA_BUTTON_WIDTH)
+    }
+    width = fmin(MAX_BUTTON_WIDTH, fmax(MIN_BUTTON_WIDTH, width))
+    for btn in buttons {
+        var frame = btn.frame
+        frame.size.width = fmax(width, NSWidth(frame) + EXTRA_BUTTON_WIDTH)
+        if (rightAlign) {
+            x -= NSWidth(frame)
+            frame.origin.x = x
+        } else {
+            frame.origin.x = x
+            x += NSWidth(frame)
         }
+        btn.frame = frame
+    }
+}
+@objc extension NSGraphicsContext {
+    @objc static func AutoSizeButtons(_ buttons: [NSButton], rightAlign: Bool) {
+        KMAutoSizeButtons(buttons, rightAlign: rightAlign)
+    }
+}
+
+func KMAutoSizeLabelFields(_ labelFields: [NSTextField], _ controls: [NSControl], _ resizeControls: Bool) -> CGFloat {
+    if (labelFields.count == 0) {
+        return 0.0
+    }
+    
+    var _: NSControl?
+    var frame: NSRect = .zero
+    var left = CGFLOAT_MAX
+    var width = 0.0
+    var right = 0.0
+    var dw = -NSMaxX(labelFields.last!.frame)
+    for control in labelFields {
+        control.sizeToFit()
+        frame = control.frame
+        left = fmin(left, NSMinX(frame))
+        width = fmax(width, NSWidth(frame))
+    }
+    right = left + width;
+    for control in labelFields {
+        frame = control.frame
+        frame.origin.x = right - NSWidth(frame)
+        control.frame = frame
     }
+    dw += right
+    KMShiftAndResizeViews(controls, dx: dw, dw: resizeControls ? -dw : 0.0);
+    return dw;
 }
 
+func KMShiftAndResizeViews(_ views: [NSView], dx: CGFloat, dw: CGFloat) {
+    for view in views {
+        KMShiftAndResizeView(view, dx: dx, dw: dw)
+    }
+}
+ 
+func KMShiftAndResizeView(_ view: NSView, dx: CGFloat, dw: CGFloat) {
+    var frame = view.frame
+    frame.origin.x += dx
+    frame.size.width += dw
+    view.frame = frame
+}
+
+
 // MARK: - CGContext 相关
 
 func KMContextSaveGState(_ ctx: CGContext?) {

+ 3 - 7
PDF Office/PDF Master/Class/Preference/Controller/GeneralPreferences.xib

@@ -14,11 +14,12 @@
                 <outlet property="autoSaveLbl" destination="ZL9-Lh-TU6" id="x6x-wf-IHZ"/>
                 <outlet property="autoSaveSlider" destination="lhd-Ip-SPl" id="TBt-xk-IJ2"/>
                 <outlet property="defaultOpenButton" destination="Va1-PC-V4S" id="xHW-Ke-qfy"/>
+                <outlet property="fullScreenButton" destination="13" id="rwP-bT-LWq"/>
+                <outlet property="normalButton" destination="14" id="2S5-K4-kkj"/>
                 <outlet property="openFilesLabelField" destination="16" id="78"/>
                 <outlet property="openFilesMatrix" destination="17" id="77"/>
                 <outlet property="openTabButton" destination="A68-ez-c6M" id="72V-76-LRe"/>
                 <outlet property="openTabLabel" destination="FPU-E1-Wj1" id="vuU-vq-0hl"/>
-                <outlet property="revertPDFSettingsButtons" destination="80" id="81"/>
                 <outlet property="savePasswordsMatrix" destination="21" id="75"/>
                 <outlet property="showConvertMenuButton" destination="AVa-Al-8gG" id="XPN-Cp-dpt"/>
                 <outlet property="updateIntervalLabelField" destination="7" id="76"/>
@@ -382,11 +383,6 @@
             <point key="canvasLocation" x="117" y="78.5"/>
         </customView>
         <userDefaultsController representsSharedInstance="YES" id="58"/>
-        <customObject id="80" userLabel="Revert PDF Display Buttons" customClass="SKIBArray">
-            <connections>
-                <outlet property="object1" destination="14" id="82"/>
-                <outlet property="object2" destination="13" id="83"/>
-            </connections>
-        </customObject>
+        <customObject id="80" userLabel="Revert PDF Display Buttons" customClass="SKIBArray"/>
     </objects>
 </document>

+ 38 - 48
PDF Office/PDF Master/Class/Preference/Controller/KMGeneralPreferences.swift

@@ -38,29 +38,21 @@ class KMGeneralPreferences: NSViewController {
     
     @IBOutlet var autoSaveLbl: NSTextField!
     
+    @IBOutlet weak var normalButton: NSButton!
+    @IBOutlet weak var fullScreenButton: NSButton!
+    var revertPDFSettingsButtons: [NSButton] = []
+    
     var updateInterval: Int = 0 {
         didSet {
             
         }
-//        set {
-//
-//        }
-//        get {
-//
-//        }
     }
     
     /*
      @interface KMGeneralPreferences : NSViewController <SKPreferencePane> {
-         NSArray *revertPDFSettingsButtons;
          NSInteger updateInterval;
      }
 
-     @property (nonatomic, retain) IBOutlet NSArray *revertPDFSettingsButtons;
-
-
-     @property (nonatomic) NSInteger ;
-
      - (IBAction)revertPDFViewSettings:(id)sender;
      - (IBAction)revertFullScreenPDFViewSettings:(id)sender;
      */
@@ -75,6 +67,22 @@ class KMGeneralPreferences: NSViewController {
      @end
      */
     
+    deinit {
+        KMPrint("KMGeneralPreferences deinit.")
+        
+        /*
+         @try {
+             
+             [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeys:[NSArray arrayWithObjects:SKStringConstants.defaultPDFDisplaySettingsKey, SKStringConstants.defaultFullScreenPDFDisplaySettingsKey, nil]];
+     #if VERSION_DMG
+             [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:AUTOMATICALLYCHECKSFORUPDATES_KEY];
+             [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:UPDATECHECKINTERVAL_KEY];
+     #endif
+         }
+         @catch(id e) {}
+         */
+    }
+    
     override var nibName: NSNib.Name? {
         return "GeneralPreferences"
     }
@@ -111,13 +119,13 @@ class KMGeneralPreferences: NSViewController {
     //            [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"KMOpenDocumentInTab"];
     //        }
     #endif
-        
-    //    SKAutoSizeButtons(revertPDFSettingsButtons, NO);
-    //    SKAutoSizeLabelField(openFilesLabelField, openFilesMatrix, NO);
-    //    CGFloat dw = SKAutoSizeLabelField(updateIntervalLabelField, updateIntervalPopUpButton, NO);
-    //    [openFilesMatrix sizeToFit];
-    //    [savePasswordsMatrix sizeToFit];
-    //    SKShiftAndResizeView([self view], 0.0, dw);
+        self.revertPDFSettingsButtons = [self.normalButton, self.fullScreenButton]
+        KMAutoSizeButtons(self.revertPDFSettingsButtons, rightAlign: false)
+        _ = KMAutoSizeLabelFields([openFilesLabelField], [openFilesMatrix], false)
+        let dw = KMAutoSizeLabelFields([updateIntervalLabelField], [updateIntervalPopUpButton], false)
+        self.openFilesMatrix.sizeToFit()
+        self.savePasswordsMatrix.sizeToFit()
+        KMShiftAndResizeView(self.view, dx: 0.0, dw: dw)
         
         self._synchronizeUpdateInterval()
         self._updateRevertButtons()
@@ -224,31 +232,6 @@ class KMGeneralPreferences: NSViewController {
      }
      */
     /*
-     @synthesize updateIntervalPopUpButton, revertPDFSettingsButtons, openFilesLabelField, openFilesMatrix, updateIntervalLabelField, savePasswordsMatrix, updateInterval, authorLabel, authorTextField, defaultOpenButton, showConvertMenuButton;
-
-     - (void)dealloc {
-         @try {
-             
-             [[NSUserDefaultsController sharedUserDefaultsController] removeObserver:self forKeys:[NSArray arrayWithObjects:SKStringConstants.defaultPDFDisplaySettingsKey, SKStringConstants.defaultFullScreenPDFDisplaySettingsKey, nil]];
-     #if VERSION_DMG
-             [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:AUTOMATICALLYCHECKSFORUPDATES_KEY];
-             [[SUUpdater sharedUpdater] removeObserver:self forKeyPath:UPDATECHECKINTERVAL_KEY];
-     #endif
-         }
-         @catch(id e) {}
-     //    SKDESTROY(updateIntervalPopUpButton);
-     //    SKDESTROY(revertPDFSettingsButtons);
-     //    SKDESTROY(openFilesLabelField);
-     //    SKDESTROY(openFilesMatrix);
-     //    SKDESTROY(updateIntervalLabelField);
-     //    SKDESTROY(savePasswordsMatrix);
-     //    SKDESTROY(authorLabel);
-     //    SKDESTROY(authorTextField);
-     //    SKDESTROY(defaultOpenButton);
-     //    SKDESTROY(showConvertMenuButton);
-     //    [super dealloc];
-     }
-
      #pragma mark Accessors
 
      - (void)setUpdateInterval:(NSInteger)interval {
@@ -316,12 +299,19 @@ extension KMGeneralPreferences {
     
     private func _updateRevertButtons() {
         let initialValues = NSUserDefaultsController.shared.initialValues
+        
         let sud = UserDefaults.standard
-//        [[revertPDFSettingsButtons objectAtIndex:0] setEnabled:[[initialValues objectForKey:SKStringConstants.defaultPDFDisplaySettingsKey] isEqual:[sud dictionaryForKey:SKStringConstants.defaultPDFDisplaySettingsKey]] == NO];
-//        [[revertPDFSettingsButtons objectAtIndex:1] setEnabled:[[initialValues objectForKey:SKStringConstants.defaultFullScreenPDFDisplaySettingsKey] isEqual:[sud dictionaryForKey:SKStringConstants.defaultFullScreenPDFDisplaySettingsKey]] == NO];
+        if let data = sud.dictionary(forKey: SKDefaultPDFDisplaySettingsKey) {
+            self.normalButton.isEnabled = NSDictionary(dictionary: data).isEqual(initialValues?[SKDefaultPDFDisplaySettingsKey]) == false
+        } else {
+            self.normalButton.isEnabled = true
+        }
+        if let data = sud.dictionary(forKey: SKDefaultFullScreenPDFDisplaySettingsKey) {
+            self.fullScreenButton.isEnabled = NSDictionary(dictionary: data).isEqual(initialValues?[SKDefaultFullScreenPDFDisplaySettingsKey]) == false
+        } else {
+            self.fullScreenButton.isEnabled = true
+        }
     }
-    /*
-     */
 }
 
 extension KMGeneralPreferences: KMPreferencePane {