Преглед изворни кода

【2025】【Markup】预处理

niehaoyu пре 3 месеци
родитељ
комит
a61ae3a2f1
23 измењених фајлова са 811 додато и 591 уклоњено
  1. 28 0
      PDF Office/KMComponentLibrary/KMComponentLibrary/View/Select/ComponentSelect.swift
  2. 13 372
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFAnnotation+PDFListView.swift
  3. 35 0
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Annotations.swift
  4. 0 0
      PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+CPDFEditArea.swift
  5. 17 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Eraser/KMEraserController.swift
  6. 19 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Eraser/KMEraserController.xib
  7. 17 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/WavyLine/KMWavylineController.swift
  8. 19 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/WavyLine/KMWavylineController.xib
  9. 47 1
      PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift
  10. 5 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/KMPDFViewManager.swift
  11. 25 5
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift
  12. 63 55
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/AnnotationProperty/NSObject/KMAnnotationPropertiesColorManager.swift
  13. 17 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMArrowController.swift
  14. 19 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMArrowController.xib
  15. 0 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.swift
  16. 0 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.xib
  17. 17 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Circle/KMCircleController.swift
  18. 19 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Circle/KMCircleController.xib
  19. 1 1
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.swift
  20. 128 0
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Highlight/KMHighlightController.swift
  21. 111 5
      PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Highlight/KMHighlightController.xib
  22. 125 36
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  23. 86 116
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 28 - 0
PDF Office/KMComponentLibrary/KMComponentLibrary/View/Select/ComponentSelect.swift

@@ -17,6 +17,8 @@ import AppKit
     @objc optional func componentSelectTextDidChange(_ view: ComponentSelect)
     
     @objc optional func componentSelectTextDidEndEditing(_ view: ComponentSelect)
+     
+    @objc optional func componentSelectTextDidEndEditing(_ view: ComponentSelect, removeUnit text: String?)
   
 }
 
@@ -276,6 +278,23 @@ public class ComponentSelect: ComponentBaseXibView {
         isGroupViewShow = false
     }
     
+    func stringByDeleteCharString(_ originStr: String, _ deleteStr: String) -> String {
+        var result = ""
+        for character in originStr {
+            var canAdd = true
+            for deleteChar in (deleteStr as String) {
+                if deleteChar == character {
+                    canAdd = false
+                    break
+                }
+            }
+            if canAdd {
+                result.append(character)
+            }
+        }
+        return result
+    }
+    
     //MARK: - TextNotification
     @objc func textFieldDidBeginEditingNotification(_ notification: Notification) {
         
@@ -322,6 +341,15 @@ public class ComponentSelect: ComponentBaseXibView {
             properties.text = inputField.stringValue
             
             delegate?.componentSelectTextDidEndEditing?(self)
+            
+            if let text = properties.text, let unitStr = properties.textUnit {
+                let resultStr = self.stringByDeleteCharString(text, unitStr)
+                
+                delegate?.componentSelectTextDidEndEditing?(self, removeUnit: resultStr)
+            } else {
+                delegate?.componentSelectTextDidEndEditing?(self, removeUnit: properties.text)
+            }
+            
         }
     }
     

+ 13 - 372
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFKitExtensions/CPDFAnnotationExtensions/CPDFAnnotation+PDFListView.swift

@@ -19,7 +19,6 @@ import Foundation
     
     private static var _keys: Set<AnyHashable>?
     func keysForValuesToObserveForUndo() -> Set<AnyHashable>! {
-//    func keysForValuesToObserveForUndo() -> NSSet? {
         if (CPDFAnnotation._keys == nil) {
             CPDFAnnotation._keys = (NSSet(objects: CPDFAnnotationBoundsKey,
                                           CPDFAnnotationContentKey,
@@ -112,10 +111,6 @@ import Foundation
     }
     
     func setLineWidth(_ width: CGFloat) {
-//        if let oldBorder = self.border {
-//            let border = CPDFBorder(style: oldBorder.style, lineWidth: oldBorder.lineWidth, dashPattern: oldBorder.dashPattern)
-//            self.border = border
-//        }
         if self.isEditable() {
             if (width > 0.0) {
                 let oldBorder = self.border
@@ -188,87 +183,9 @@ import Foundation
 // MARK: - PDFAnnotation_SKExtensions
 
 @objc extension CPDFAnnotation {
-    /*
-     #define SKUseUserNameKey @"SKUseUserName"
-
-
-     NSString *SKPDFAnnotationScriptingBorderStyleKey = @"scriptingBorderStyle";
-     NSString *SKPDFAnnotationScriptingColorKey = @"scriptingColor";
-     NSString *SKPDFAnnotationScriptingModificationDateKey = @"scriptingModificationDate";
-     NSString *SKPDFAnnotationScriptingUserNameKey = @"scriptingUserName";
-     NSString *SKPDFAnnotationScriptingTextContentsKey = @"textContents";
-
-     NSString *SKPDFAnnotationBoundsOrderKey = @"boundsOrder";
-
-     NSString *SKPasteboardTypeSkimNote = @"net.sourceforge.skim-app.pasteboard.skimnote";
-
-
-     #if SDK_BEFORE(12)
-     @interface PDFAnnotation (SKSierraDeclarations)
-     - (id)valueForAnnotationKey:(NSString *)key;
-     @end
-     #endif
-
-     @implementation PDFAnnotation (SKExtensions)
-
-     - (PDFTextAnnotationIconType)fallback_iconType { return kPDFTextAnnotationIconNote; }
-
-     + (void)load {
-         SKAddInstanceMethodImplementationFromSelector(self, @selector(iconType), @selector(fallback_iconType));
-     }
-
-     static PDFAnnotation *currentActiveAnnotation = nil;
-
-     + (PDFAnnotation *)currentActiveAnnotation {
-         PDFAnnotation *annotation = nil;
-         @synchronized (self) {
-             annotation = [currentActiveAnnotation retain];
-         }
-         return [annotation autorelease];
-     }
-
-     + (void)setCurrentActiveAnnotation:(PDFAnnotation *)annotation {
-         @synchronized (self) {
-             if (currentActiveAnnotation != annotation) {
-                 [currentActiveAnnotation release];
-                 currentActiveAnnotation = [annotation retain];
-             }
-         }
-     }
-
-     + (NSArray *)readableTypesForPasteboard:(NSPasteboard *)pasteboard {
-         return [NSArray arrayWithObjects:SKPasteboardTypeSkimNote, nil];
-     }
-
-     + (NSPasteboardReadingOptions)readingOptionsForType:(NSString *)type pasteboard:(NSPasteboard *)pasteboard {
-         return NSPasteboardReadingAsData;
-     }
-
-     - (id)initWithPasteboardPropertyList:(id)propertyList ofType:(NSString *)type {
-         if ([type isEqualToString:SKPasteboardTypeSkimNote] &&
-             [propertyList isKindOfClass:[NSData class]]) {
-             self = [self initSkimNoteWithProperties:[NSKeyedUnarchiver unarchiveObjectWithData:propertyList]];
-         } else {
-             [[self initWithBounds:NSZeroRect] release];
-             self = nil;
-         }
-         return self;
-     }
-
-     - (NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard {
-         return [NSArray arrayWithObjects:SKPasteboardTypeSkimNote, nil];
-     }
-
-     - (id)pasteboardPropertyListForType:(NSString *)type {
-         if ([type isEqualToString:SKPasteboardTypeSkimNote])
-             return [NSKeyedArchiver archivedDataWithRootObject:[self SkimNoteProperties]];
-         return nil;
-     }
-     */
     
     @objc func fdfString() -> String {
-//        NSMutableString * = [NSMutableString string];
-        var fdfString = ""
+         var fdfString = ""
         let bounds = self.bounds
         let color = self.color ?? .black
         let (r,g,b,a) = color.getRGBAComponents(.deviceRGB)
@@ -311,8 +228,7 @@ import Foundation
                 fdfString = fdfString.appendFDFName(CPDFBorder.Key.styleSolid)
             }
             fdfString = fdfString.appendFDFName(CPDFAnnotation.Key.dashPattern)
-//            [fdfString appendFormat:@"[%@]", [[[border dashPattern] valueForKey:@"stringValue"] componentsJoinedByString:@" "]];
-        } else {
+         } else {
             fdfString = fdfString.appendFDFName(CPDFAnnotation.Key.lineWidth)
             fdfString = fdfString.appending(" 0.0")
         }
@@ -402,12 +318,8 @@ import Foundation
                 let urlString = (action as! CPDFURLAction).url()
                 return URL(string: urlString ?? "")
             }
-//            else if ([action isKindOfClass:[PDFActionRemoteGoTo class]]) {
-//                return [(PDFActionRemoteGoTo *)action URL];
-//            }
             else if action.isKind(of: NSDictionary.self) {
-//            else if ([action isKindOfClass:[NSDictionary class]]) {
-                let _action = action as! NSDictionary
+                 let _action = action as! NSDictionary
                 let type = _action.object(forKey: "/S") as? String ?? ""
                 if type == "/URI" {
                     let url = _action.object(forKey: "/URI")
@@ -457,73 +369,7 @@ import Foundation
         }
         return Self._types?.contains(self.type) ?? false
     }
-    
-//    var lineWidth: CGFloat {
-//        get {
-//            return self.border?.lineWidth ?? 0
-//        }
-//        set {
-//            if self.isEditable() {
-//                if (newValue > 0.0) {
-//                    let oldBorder = self.border
-//                    var dashPattern: [Any] = []
-//                    var style: CPDFBorderStyle = .solid
-//                    if oldBorder != nil && oldBorder!.lineWidth > 0 {
-//                        dashPattern = oldBorder?.dashPattern ?? []
-//                        style = oldBorder?.style ?? .solid
-//                    }
-//                    self.border = CPDFBorder(style: style, lineWidth: newValue, dashPattern: dashPattern)
-//                } else {
-//                    self.border = nil
-//                    if self.border != nil {
-//                        self.border = CPDFBorder(style: .solid, lineWidth: 0, dashPattern: [])
-//                    }
-//                }
-//            }
-//        }
-//    }
-    
-    /*
-
-     - (void)setBorderStyle:(PDFBorderStyle)style {
-         if ([self isEditable]) {
-             PDFBorder *oldBorder = [self border];
-             PDFBorder *border = nil;
-             if (oldBorder || style)
-                 border = [[PDFBorder allocWithZone:[self zone]] init];
-             if (oldBorder) {
-                 [border setLineWidth:[oldBorder lineWidth]];
-                 [border setDashPattern:[oldBorder dashPattern]];
-             }
-             if (border)
-                 [border setStyle:style];
-             [self setBorder:border];
-             [border release];
-         }
-     }
-
-     - (NSArray *)dashPattern {
-         return [[self border] dashPattern];
-     }
-
-     - (void)setDashPattern:(NSArray *)pattern {
-         if ([self isEditable]) {
-             PDFBorder *oldBorder = [self border];
-             PDFBorder *border = nil;
-             if (oldBorder || [pattern count])
-                 border = [[PDFBorder allocWithZone:[self zone]] init];
-             if (oldBorder) {
-                 [border setLineWidth:[oldBorder lineWidth]];
-                 [border setStyle:[oldBorder style]];
-             }
-             if (border)
-                 [border setDashPattern:pattern];
-             [self setBorder:border];
-             [border release];
-         }
-     }
-     */
-    
+     
     @objc func displayRectForBounds(_ bounds: NSRect, lineWidth: CGFloat) -> NSRect {
         return NSRectFromCGRect(KMRectInset(NSRectToCGRect(bounds), -5, -5))
     }
@@ -531,64 +377,7 @@ import Foundation
     @objc func displayRect() -> NSRect {
         self.displayRectForBounds(self.bounds, lineWidth: self.lineWidth())
     }
-    
-    /*
-
-     - (CGFloat)boundsOrder {
-         return [[self page] sortOrderForBounds:[self bounds]];
-     }
-
-     - (SKRectEdges)resizeHandleForPoint:(NSPoint)point scaleFactor:(CGFloat)scaleFactor {
-         NSRect rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect([self bounds]), -5, -5));
-         return [self isResizable] ? SKResizeHandleForPointFromRect(point, rect, 4.0 / scaleFactor) : 0;
-     }
-
-     - (void)drawSelectionHighlightForView:(PDFView *)pdfView inContext:(CGContextRef)context {
-         if (NSIsEmptyRect([self bounds]))
-             return;
-         if ([self isSkimNote]) {
-                 if ([pdfView isKindOfClass:[SKPDFView class]]) {
-                     SKPDFView *skView = (SKPDFView *)pdfView;
-                     BOOL isWidget = [skView.activeAnnotation isKindOfClass:[PDFAnnotationButtonWidget class]] ||
-                     [skView.activeAnnotation isKindOfClass:[PDFAnnotationTextWidget class]] ||
-                     [skView.activeAnnotation isKindOfClass:[PDFAnnotationChoiceWidget class]];
-
-                     if (@available(macOS 10.13, *)) {
-                         if ([skView.activeAnnotation.widgetFieldType isEqualToString:PDFAnnotationWidgetSubtypeSignature]) {
-                             isWidget = YES;
-                         }
-                     }
-                     if (isWidget &&skView.toolMode != SKFormToolMode) {
-                         return;
-                     }
-                 }
-                 BOOL active = RUNNING_AFTER(10_12) ? YES : [[pdfView window] isKeyWindow] && [[[pdfView window] firstResponder] isDescendantOf:pdfView];
-                 NSRect rect = [pdfView integralRect:[self bounds] onPage:[self page]];
-                 rect = NSRectFromCGRect(CGRectInset(NSRectToCGRect(rect), -5, -5));
-                 CGFloat lineWidth = [pdfView unitWidthOnPage:[self page]];
-                 CGContextSaveGState(context);
-                 CGColorRef color = [(active ? [NSColor colorWithRed:37/255.0 green:139/255.0 blue:251/255.0 alpha:1] : [NSColor disabledControlTextColor]) CGColor];
-                 CGContextSetStrokeColorWithColor(context, color);
-                 CGFloat length[] = {5,2};
-                 CGContextSetLineDash(context, 0, length, 2);
-                 CGContextStrokeRectWithWidth(context, CGRectInset(NSRectToCGRect(rect), -0.5 * lineWidth, -0.5 * lineWidth), lineWidth);
-                 CGContextRestoreGState(context);
-                 CGContextSaveGState(context);
-                 if ([self isResizable])
-                     SKDrawResizeHandles(context, rect, 4.0 * lineWidth, active);
-                 CGContextRestoreGState(context);
-             
-         } else if ([self isLink] && [self respondsToSelector:@selector(setHighlighted:)] == NO) {
-             CGContextSaveGState(context);
-             CGColorRef color = CGColorCreateGenericGray(0.0, 0.2);
-             CGContextSetFillColorWithColor(context, color);
-             CGColorRelease(color);
-             CGContextFillRect(context, NSRectToCGRect([self bounds]));
-             CGContextRestoreGState(context);
-         }
-     }
-     */
-    
+     
     @objc func autoUpdateString() {
         
     }
@@ -614,8 +403,7 @@ import Foundation
                 oldColor = self.color ?? .clear
             }
         }
-//        NSColor *oldColor = (isFill ? [(id)self interiorColor] : (isText ? [(id)self fontColor] : [self color])) ?: [NSColor clearColor];
-        if color.isEqual(to: oldColor) == false {
+         if color.isEqual(to: oldColor) == false {
             if (isFill) {
                 //                [(id)self setInteriorColor:[color alphaComponent] > 0.0 ? color : nil];
                 self.perform(NSSelectorFromString("setInteriorColor:"), with: color.alphaComponent > 0.0 ? color : nil)
@@ -623,18 +411,13 @@ import Foundation
                 //                [(id)self setFontColor:[color alphaComponent] > 0.0 ? color : nil];
                 self.perform(NSSelectorFromString("setFontColor:"), with: color.alphaComponent > 0.0 ? color : nil)
             } else {
-//                CGFloat red,green,blue,opacity;
-//                if (color) {
-//                    //当 RGB值都为0时的颜色设置会数组越界,用系统的黑色代替
-                let (red, green, blue, alpha) = color.getRGBAComponents()
-//                    [[color colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&red green:&green blue:&blue alpha:&opacity];
-                    if(red == 0.0 && green == 0.0 && blue == 0.0 && alpha == 1.0) {
+                 let (red, green, blue, alpha) = color.getRGBAComponents()
+                     if(red == 0.0 && green == 0.0 && blue == 0.0 && alpha == 1.0) {
                         self.color = .black
                     } else {
                         self.color = color
                     }
-//                }
-            }
+             }
         }
         if (update) {
             let key = (isFill || isText) ? self.alternateColorDefaultKey() : self.colorDefaultKey()
@@ -643,81 +426,12 @@ import Foundation
             }
         }
     }
-    
-    /*
-     - (void)registerUserName {
-     //    if ([[NSUserDefaults standardUserDefaults] boolForKey:SKUseUserNameKey]) {
-             NSString *userName = [[NSUserDefaults standardUserDefaults] stringForKey:SKUserNameKey];
-             [self setUserName:userName ? : NSFullUserName()];
-     //    }
-         if ([[NSUserDefaults standardUserDefaults] boolForKey:SKDisableModificationDateKey] == NO)
-             [self setModificationDate:[NSDate date]];
-     }
-
-     - (NSSet *)keysForValuesToObserveForUndo {
-         static NSSet *keys = nil;
-         if (keys == nil)
-             keys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationBoundsKey, SKNPDFAnnotationStringKey, SKNPDFAnnotationColorKey, SKNPDFAnnotationBorderKey, SKNPDFAnnotationModificationDateKey, SKNPDFAnnotationUserNameKey, nil];
-         return keys;
-     }
-     */
+     
     
     @objc func uniqueID() -> String {
         return String(format: "%p", self)
     }
-    
-    /*
-     #pragma mark Scripting support
-
-     - (NSScriptObjectSpecifier *)objectSpecifier {
-         NSScriptObjectSpecifier *containerRef = [[self page] objectSpecifier];
-         return [[[NSUniqueIDSpecifier allocWithZone:[self zone]] initWithContainerClassDescription:[containerRef keyClassDescription] containerSpecifier:containerRef key:@"notes" uniqueID:[self uniqueID]] autorelease];
-     }
-
-     - (NSString *)uniqueID {
-         return [NSString stringWithFormat:@"%p", (void *)self];
-     }
-
-     // overridden by subclasses to add or remove custom scripting keys relevant for the class, subclasses should call super first
-     + (NSSet *)customScriptingKeys {
-         static NSSet *customScriptingKeys = nil;
-         if (customScriptingKeys == nil)
-             customScriptingKeys = [[NSSet alloc] initWithObjects:SKNPDFAnnotationLineWidthKey, SKPDFAnnotationScriptingBorderStyleKey, SKNPDFAnnotationDashPatternKey, nil];
-         return customScriptingKeys;
-     }
-
-     - (NSDictionary *)scriptingProperties {
-         static NSSet *allCustomScriptingKeys = nil;
-         if (allCustomScriptingKeys == nil) {
-             NSMutableSet *customScriptingKeys = [NSMutableSet set];
-             [customScriptingKeys unionSet:[PDFAnnotationCircle customScriptingKeys]];
-             [customScriptingKeys unionSet:[PDFAnnotationSquare customScriptingKeys]];
-             [customScriptingKeys unionSet:[PDFAnnotationFreeText customScriptingKeys]];
-             [customScriptingKeys unionSet:[SKNPDFAnnotationNote customScriptingKeys]];
-             [customScriptingKeys unionSet:[PDFAnnotationMarkup customScriptingKeys]];
-             [customScriptingKeys unionSet:[PDFAnnotationLine customScriptingKeys]];
-             [customScriptingKeys unionSet:[PDFAnnotationInk customScriptingKeys]];
-             allCustomScriptingKeys = [customScriptingKeys copy];
-         }
-         // remove all custom properties that are not valid for this class
-         NSMutableDictionary *properties = [[[super scriptingProperties] mutableCopy] autorelease];
-         NSMutableSet *customKeys = [allCustomScriptingKeys mutableCopy];
-         [customKeys minusSet:[[self class] customScriptingKeys]];
-         [properties removeObjectsForKeys:[customKeys allObjects]];
-         [customKeys release];
-         return properties;
-     }
-
-     - (void)setScriptingProperties:(NSDictionary *)properties {
-         [super setScriptingProperties:properties];
-         // set the borderStyle afterwards, as this may have been changed when setting the dash pattern
-         id style = [properties objectForKey:SKPDFAnnotationScriptingBorderStyleKey];
-         if ([style respondsToSelector:@selector(integerValue)] && [properties objectForKey:SKNPDFAnnotationDashPatternKey])
-             [self setScriptingBorderStyle:[style integerValue]];
-     }
-
-     */
-    
+ 
     var scriptingColor: NSColor? {
         get {
             return self.color
@@ -775,14 +489,6 @@ import Foundation
     @objc func richText() -> AnyObject? {
         return nil
     }
-    /*
-     - (id)coerceValueForTextContents:(id)value {
-         if ([value isKindOfClass:[NSScriptObjectSpecifier class]])
-             value = [(NSScriptObjectSpecifier *)value objectsByEvaluatingSpecifier];
-         return [[NSScriptCoercionHandler sharedCoercionHandler] coerceValue:value toClass:[NSTextStorage class]];
-     }
-     */
-    
     @objc func scriptingInteriorColor() -> NSColor? {
         return nil
     }
@@ -803,10 +509,6 @@ import Foundation
         return .left
     }
     
-//    func scriptingBorderStyle() -> CPDFBorderStyle {
-//        return self.borderStyle()
-//    }
-    
     var scriptingBorderStyle: CPDFBorderStyle {
         get {
             return self.borderStyle()
@@ -829,46 +531,6 @@ import Foundation
     @objc func selectionSpecifier() -> AnyObject? {
         return nil
     }
-    
-    /*
-     - (void)setBoundsAsQDRect:(NSData *)inQDBoundsAsData {
-         if ([self isMovable] && [self isEditable]) {
-             NSRect newBounds = [inQDBoundsAsData rectValueAsQDRect];
-             if ([self isResizable] == NO) {
-                 newBounds.size = [self bounds].size;
-             } else {
-                 if (NSWidth(newBounds) < 0.0)
-                     newBounds.size.width = 0.0;
-                 if (NSHeight(newBounds) < 0.0)
-                     newBounds.size.height = 0.0;
-             }
-             [self setBounds:newBounds];
-         }
-     }
-     - (NSData *)boundsAsQDRect {
-         return [NSData dataWithRectAsQDRect:[self bounds]];
-     }
-     - (NSData *)startPointAsQDPoint {
-         return nil;
-     }
-     - (NSData *)endPointAsQDPoint {
-         return nil;
-     }
-     - (NSArray *)scriptingPointLists {
-         return nil;
-     }
-     - (void)handleEditScriptCommand:(NSScriptCommand *)command {
-         if ([self isEditable]) {
-             NSDocument *doc = [[self page] containingDocument];
-             if ([doc isPDFDocument])
-                 [[(SKMainDocument *)doc pdfView] editAnnotation:self];
-         }
-     }
-     */
-    
-//    @objc func image() -> NSImage? {
-//        return nil
-//    }
      
     @objc func text() -> NSAttributedString? {
         return nil
@@ -886,10 +548,6 @@ import Foundation
         return nil
     }
     
-//    func interiorColor() -> NSColor? {
-//        return nil
-//    }
-    
     @objc func isMarkup() -> Bool {
         return false
     }
@@ -917,20 +575,7 @@ import Foundation
     @objc func hasBorder() -> Bool {
         return true
     }
-    
-//    func isForm() -> Bool {
-//        if self.isKind(of: CPDFChoiceWidgetAnnotation.self) || self.isKind(of: CPDFTextWidgetAnnotation.self) || self.isKind(of: CPDFButtonWidgetAnnotation.self) {
-//            return true
-//        }
-//        return false
-//    }
-    /*
-
-     - (SKNoteText *)noteText { return nil; }
-
-     - (BOOL)isEditable { return [self isSkimNote] && ([self page] == nil || [[self page] isEditable]); }
-     - (BOOL)hasBorder { return [self isSkimNote]; }
-     */
+     
 }
 
 extension String {
@@ -1208,8 +853,4 @@ func SKFDFLineStyleFromPDFLineStyle(_ lineStyle: CPDFLineStyle) -> String {
     return SKFDFLineStyleNone
 }
 
-/*
- static BOOL SKFDFEqualStrings(SKFDFString string1, SKFDFString string2) {
-     return strcmp(string1, string2) == 0;
- }
- */
+ 

+ 35 - 0
PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Annotations.swift

@@ -0,0 +1,35 @@
+//
+//  CPDFListView+Annotations.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/26.
+//
+
+import Foundation
+
+extension CPDFListView {
+    
+    
+    func setAnnotationsColor(_ annotations: [CPDFAnnotation], _ color: NSColor?) {
+        guard let resultColor = color else {
+            return
+        }
+        for annotation in annotations {
+            if annotation is CPDFMarkupAnnotation {
+                (annotation as! CPDFMarkupAnnotation).color = resultColor
+                
+                self.updateHighLightAnnotation(annotation)
+            }
+        }
+    }
+    
+    func setAnnotationsOpacity(_ annotations: [CPDFAnnotation], _ opacity: CGFloat) {
+        for annotation in annotations {
+            if annotation is CPDFMarkupAnnotation {
+                (annotation as! CPDFMarkupAnnotation).opacity = opacity
+                
+                self.updateHighLightAnnotation(annotation)
+            }
+        }
+    }
+}

PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+Edit.swift → PDF Office/PDF Master/Class/PDFWindowController/PDFListView/CPDFListViewExtension/CPDFListView+CPDFEditArea.swift


+ 17 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Eraser/KMEraserController.swift

@@ -0,0 +1,17 @@
+//
+//  KMEraserController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/26.
+//
+
+import Cocoa
+
+class KMEraserController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 19 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/Eraser/KMEraserController.xib

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMEraserController" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+        </customView>
+    </objects>
+</document>

+ 17 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/WavyLine/KMWavylineController.swift

@@ -0,0 +1,17 @@
+//
+//  KMWavylineController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/26.
+//
+
+import Cocoa
+
+class KMWavylineController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 19 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/WavyLine/KMWavylineController.xib

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMWavylineController" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+        </customView>
+    </objects>
+</document>

+ 47 - 1
PDF Office/PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift

@@ -321,10 +321,56 @@ import KMComponentLibrary
             listView.annotationType = .unkown
             
             listView.toolMode = .noteToolMode
-            
+  
         } else if toolbarMode == .Markup {
             listView.toolMode = .noteToolMode
             
+            if subToolMode == .None {
+                listView.annotationType = .unkown
+            } else if subToolMode == .Highlight {
+                listView.annotationType = .highlight
+                
+            } else if subToolMode == .Underline {
+                listView.annotationType = .underline
+                
+            } else if subToolMode == .Waveline {
+                listView.annotationType = .squiggly
+                
+            } else if subToolMode == .Strikethrough {
+                listView.annotationType = .strikeOut
+                
+            } else if subToolMode == .Text {
+                listView.annotationType = .freeText
+                
+            } else if subToolMode == .Note {
+                listView.annotationType = .anchored
+                
+            } else if subToolMode == .Pen {
+                listView.annotationType = .ink
+                
+            } else if subToolMode == .Eraser {
+                listView.annotationType = .eraser
+                
+            } else if subToolMode == .Rectangle {
+                listView.annotationType = .square
+                
+            } else if subToolMode == .Circle {
+                listView.annotationType = .circle
+                
+            } else if subToolMode == .Arrow {
+                listView.annotationType = .arrow
+                
+            } else if subToolMode == .Line {
+                listView.annotationType = .line
+                
+            } else if subToolMode == .Stamp {
+                listView.annotationType = .stamp
+                
+            } else if subToolMode == .Sign {
+                listView.annotationType = .signSignature
+ 
+            }
+            
         } else if toolbarMode == .Edit {
             if subToolMode == .None {
                 removeCropController()

+ 5 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/KMPDFViewManager.swift

@@ -48,3 +48,8 @@ class KMPDFViewManager: NSObject {
     }
     
 }
+
+//MARK: - Annotation注释
+extension KMPDFViewManager {
+    
+}

+ 25 - 5
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/KMRightSideController.swift

@@ -32,6 +32,7 @@ class KMRightSideController: NSViewController {
     
     //Controller
     //Markup
+    var highlight_Controller: KMHighlightController?
     
     //Edit
     var edit_textController: KMEditPDFTextPropertyViewController?
@@ -82,12 +83,24 @@ class KMRightSideController: NSViewController {
     
     func setupContentController() {
         updateTitleLabel()
-         
+        
         contentViewController?.view.removeFromSuperview()
         contentViewController = nil
         
-        if viewManager?.toolMode == .Edit {
+        let subToolMode = viewManager?.subToolMode ?? .None
+        
+        if viewManager?.toolMode == .Markup {
+            if subToolMode == .Highlight {
+                if highlight_Controller == nil {
+                    highlight_Controller = KMHighlightController.init()
+                }
+                highlight_Controller?.pdfView = self.pdfView
+                contentViewController = highlight_Controller
+            }
+            
             
+            
+        } else if viewManager?.toolMode == .Edit {
             if pdfView?.km_EditingAreas().isEmpty == true {
                 
             } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {
@@ -137,9 +150,16 @@ class KMRightSideController: NSViewController {
     }
     
     func reloadData() {
-        if viewManager?.toolMode == .Edit {
-            
-            //图片&文字
+        
+        let toolMode = viewManager?.toolMode ?? .None
+        let subToolMode = viewManager?.subToolMode ?? .None
+         
+        if viewManager?.toolMode == .Markup {
+            if subToolMode == .Highlight && (contentViewController is KMHighlightController) {
+                (contentViewController as? KMHighlightController)?.reloadData()
+            }
+        } else if viewManager?.toolMode == .Edit {
+             //图片&文字
             if pdfView?.km_EditingAreas().isEmpty == true {
                 
             } else if pdfView?.km_editingImageAreas().isEmpty == true && pdfView?.km_editingTextAreas().isEmpty == false {

+ 63 - 55
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/AnnotationProperty/NSObject/KMAnnotationPropertiesColorManager.swift

@@ -7,25 +7,33 @@
 
 import Cocoa
 
-let KMMarkupTypeHighlightColors = "KMMarkupTypeHighlightColors"
-let KMMarkupTypeOtherColors = "KMMarkupTypeOtherColors"
-let KMLinePropertColors = "KMLinePropertColors"
-let KMLineFillPropertColors = "KMLineFillPropertColors"
-let KMInkPropertColors = "KMInkPropertColors"
-let KMInkFillPropertColors = "KMInkFillPropertColors"
-let KMFreeTextPropertColors = "KMFreeTextPropertColors"
-let KMFreeTextFillPropertColors = "KMFreeTextFillPropertColors"
+let KMMarkupTypeHighlightColors           = "KMMarkupTypeHighlightColors"
+let KMMarkupTypeOtherColors               = "KMMarkupTypeOtherColors"
+
+let KMLinePropertColors                = "KMLinePropertColors"
+let KMLineFillPropertColors            = "KMLineFillPropertColors"
+
+let KMInkPropertColors                = "KMInkPropertColors"
+let KMInkFillPropertColors            = "KMInkFillPropertColors"
+
+let KMFreeTextPropertColors           = "KMFreeTextPropertColors"
+let KMFreeTextFillPropertColors       = "KMFreeTextFillPropertColors"
+
 let KMOtherColorsPropertColors = "KMOtherColorsPropertColors"
+
 let KMAnchoredNoteColorsPropertColors = "KMAnchoredNoteColorsPropertColors"
+
 let KMFromColorsPropertColors = "KMFromColorsPropertColors"
+
 let KMFromFillColorsPropertColors = "KMFromFillColorsPropertColors"
+
 let KMSelfSignPropertColors = "KMSelfSignPropertColors"
 
 @objcMembers class KMAnnotationPropertiesColorManager: NSObject {
-
+    
     static let manager = KMAnnotationPropertiesColorManager()
     
-// MARK: - markHighlight
+    //MARK: - markHighlight
     var markHighlightColors: [NSColor] {
         get {
             return fetchColors(key: KMMarkupTypeHighlightColors)
@@ -34,17 +42,17 @@ let KMSelfSignPropertColors = "KMSelfSignPropertColors"
             saveColors(colors: newValue, key: KMMarkupTypeHighlightColors)
         }
     }
-
+    
     // MARK: - MarkupTypeOther
     var markOtherColors: [NSColor] {
-       get {
-           return fetchColors(key: KMMarkupTypeOtherColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMMarkupTypeOtherColors)
-       }
+        get {
+            return fetchColors(key: KMMarkupTypeOtherColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMMarkupTypeOtherColors)
+        }
     }
-
+    
     // MARK: - lineColors
     var lineColors: [NSColor] {
         get {
@@ -54,56 +62,56 @@ let KMSelfSignPropertColors = "KMSelfSignPropertColors"
             saveColors(colors: newValue, key: KMLinePropertColors)
         }
     }
-
+    
     // MARK: - fillLineColors
     var fillLineColors: [NSColor] {
-       get {
-           return fetchColors(key: KMLineFillPropertColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMLineFillPropertColors)
-       }
+        get {
+            return fetchColors(key: KMLineFillPropertColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMLineFillPropertColors)
+        }
     }
-
+    
     // MARK: - Ink
     var inkColors: [NSColor] {
-       get {
-           return fetchColors(key: KMInkPropertColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMInkPropertColors)
-       }
+        get {
+            return fetchColors(key: KMInkPropertColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMInkPropertColors)
+        }
     }
-
-
+    
+    
     // MARK: - InkFill
     var inkFillColors: [NSColor] {
-       get {
-           return fetchColors(key: KMInkFillPropertColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMInkFillPropertColors)
-       }
+        get {
+            return fetchColors(key: KMInkFillPropertColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMInkFillPropertColors)
+        }
     }
-
+    
     // MARK: - freeTextColors
     var freeTextColors: [NSColor] {
-       get {
-           return fetchColors(key: KMFreeTextPropertColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMFreeTextPropertColors)
-       }
+        get {
+            return fetchColors(key: KMFreeTextPropertColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMFreeTextPropertColors)
+        }
     }
     
     // MARK: - FreeTextFill
     var freeFillTextColors: [NSColor] {
-       get {
-           return fetchColors(key: KMFreeTextFillPropertColors)
-       }
-       set {
-           saveColors(colors: newValue, key: KMFreeTextFillPropertColors)
-       }
+        get {
+            return fetchColors(key: KMFreeTextFillPropertColors)
+        }
+        set {
+            saveColors(colors: newValue, key: KMFreeTextFillPropertColors)
+        }
     }
     
     // MARK: - OtherColors
@@ -115,7 +123,7 @@ let KMSelfSignPropertColors = "KMSelfSignPropertColors"
             saveColors(colors: newValue, key: KMOtherColorsPropertColors)
         }
     }
-
+    
     // MARK: - AnchoredNoteColors
     var anchoredNoteColors: [NSColor] {
         get {
@@ -168,7 +176,7 @@ extension KMAnnotationPropertiesColorManager {
         UserDefaults.standard.set(datas, forKey: key)
         UserDefaults.standard.synchronize()
     }
-
+    
     func fetchColors(key: String) -> [NSColor] {
         if let colorsData = UserDefaults.standard.array(forKey: key) as? [String] {
             var colors = [NSColor]()

+ 17 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMArrowController.swift

@@ -0,0 +1,17 @@
+//
+//  KMArrowController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/26.
+//
+
+import Cocoa
+
+class KMArrowController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 19 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMArrowController.xib

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMArrowController" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+        </customView>
+    </objects>
+</document>

PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Line/KMLineController.swift → PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.swift


PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Line/KMLineController.xib → PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.xib


+ 17 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Circle/KMCircleController.swift

@@ -0,0 +1,17 @@
+//
+//  KMCircleController.swift
+//  PDF Reader Pro
+//
+//  Created by Niehaoyu on 2024/11/26.
+//
+
+import Cocoa
+
+class KMCircleController: NSViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+    }
+    
+}

+ 19 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Circle/KMCircleController.xib

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMCircleController" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+        </customView>
+    </objects>
+</document>

+ 1 - 1
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/EditPDF/KMEditPDFTextPropertyViewController.swift

@@ -322,7 +322,7 @@ extension KMEditPDFTextPropertyViewController: ComponentSelectDelegate {
         } else if view == fontNameSelect {
             if let fontName = menuItemProperty?.text {
                 var cFont = CPDFFont.mappingFont(withFontString: fontName)
-                var styles = CPDFFont.fontNames(forFamilyName: fontName)
+                let styles = CPDFFont.fontNames(forFamilyName: fontName)
                 if styles.isEmpty == false, let style = styles.first {
                     cFont = CPDFFont.init(familyName: fontName, fontStyle: style)
                 }

+ 128 - 0
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Highlight/KMHighlightController.swift

@@ -6,12 +6,140 @@
 //
 
 import Cocoa
+import KMComponentLibrary
 
 class KMHighlightController: NSViewController {
 
+    @IBOutlet var colorBGView: NSView!
+    @IBOutlet var colorLabel: NSTextField!
+    @IBOutlet var colorGroup: ComponentCColorGroup!
+    @IBOutlet var colorSlider: ComponentSlider!
+    @IBOutlet var colorOpacitySelect: ComponentSelect!
+    
+    private var annotations: [CPDFMarkupAnnotation] = []
+    
+    var pdfView: CPDFListView?
+    
+    //MARK: - func
+    override func viewDidAppear() {
+        super.viewDidAppear()
+    
+        
+        colorSlider.reloadData()
+    }
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         // Do view setup here.
+        
+        setupProperty()
+    }
+    
+    func setupProperty() {
+        
+        colorLabel.stringValue = KMLocalizedString("Font")
+        colorLabel.textColor = ComponentLibrary.shared.getComponentColorFromKey("colorText/2")
+        colorLabel.font = ComponentLibrary.shared.getFontFromKey("mac/body-s-medium")
+        
+        let colorAProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[0])
+        let colorBProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[1])
+        let colorCProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[2])
+        let colorDProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: false, color: KMPDFWatermarkData.watermarkDefaultColors()[3])
+        let colorEProperty = ComponentCColorProperty(colorType: .color, state: .normal, isCustom: true, color: KMPDFWatermarkData.watermarkDefaultColors()[4])
+        colorGroup.setUpWithColorPropertys([colorAProperty, colorBProperty, colorCProperty, colorDProperty], customItemProperty: colorEProperty)
+        colorGroup.delegate = self
+        
+        colorSlider.properties = ComponentSliderProperty(size: .m, percent: 1)
+        colorSlider.delegate = self
+        
+        colorOpacitySelect.properties = ComponentSelectProperties(size: .s,
+                                                                  state: .normal,
+                                                                  creatable: true,
+                                                                  text: "100%",
+                                                                  textUnit: "%",
+                                                                  regexString: "0123456789%")
+        if true {
+            var opacityItems: [ComponentMenuitemProperty] = []
+            for string in ["25%", "50%", "75%", "100%"] {
+                let item = ComponentMenuitemProperty(type: .normal, text: string)
+                opacityItems.append(item)
+            }
+            colorOpacitySelect.updateMenuItemsArr(opacityItems)
+        }
+        colorOpacitySelect.delegate = self
+        
+    }
+    
+    func reloadData() {
+        guard let pdfView = self.pdfView else {
+            return
+        }
+        self.annotations.removeAll()
+        
+        let pdfAnnotations: [CPDFAnnotation] = pdfView.activeAnnotations as? [CPDFAnnotation] ?? []
+        
+        for annotation in pdfAnnotations {
+            if annotation is CPDFMarkupAnnotation {
+                self.annotations.append((annotation as! CPDFMarkupAnnotation))
+            }
+        }
+        
+        let manager = KMAnnotationPropertiesColorManager.manager
+        
+        if annotations.count == 1 {
+            let curAnnotation = annotations.first
+            
+            colorGroup.currentColor = curAnnotation?.color
+            
+            let opacity = curAnnotation?.opacity ?? 0
+
+            colorSlider.properties.percent = opacity
+            colorOpacitySelect.properties.text = String(format: "%.0f%@", opacity*100, "%")
+ 
+        } else {
+            
+        }
+        
+        colorGroup.refreshUI()
+ 
+        colorSlider.reloadData()
+        
+        colorOpacitySelect.reloadData()
+        
+        
     }
     
+     
+    
+}
+
+//MARK: - ComponentCColorDelegate
+extension KMHighlightController: ComponentCColorDelegate {
+    func componentCColorDidChooseColor(_ view: NSView, _ color: NSColor?) {
+        pdfView?.setAnnotationsColor(annotations, color)
+        
+        reloadData()
+    }
+}
+
+//MARK: - ComponentSliderDelegate
+extension KMHighlightController: ComponentSliderDelegate {
+    func componentSliderDidUpdate(_ view: ComponentSlider) {
+        let percent = view.properties.percent
+        pdfView?.setAnnotationsOpacity(annotations, percent)
+        
+        reloadData()
+    }
+}
+
+//MARK: - ComponentSelectDelegate
+extension KMHighlightController: ComponentSelectDelegate {
+    func componentSelectTextDidEndEditing(_ view: ComponentSelect, removeUnit text: String?) {
+        if let result = text {
+            let opacity = max(0, min(1, result.stringToCGFloat()/100))
+            pdfView?.setAnnotationsOpacity(annotations, opacity)
+            
+            reloadData()
+        }
+    }
 }

+ 111 - 5
PDF Office/PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Highlight/KMHighlightController.xib

@@ -1,19 +1,125 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMHighlightController" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMHighlightController" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
+                <outlet property="colorBGView" destination="E5J-5r-6x9" id="2kT-aE-U2l"/>
+                <outlet property="colorGroup" destination="2tl-sb-rOC" id="nlj-3A-KsZ"/>
+                <outlet property="colorLabel" destination="TIV-1q-4fk" id="NrT-pf-gsQ"/>
+                <outlet property="colorOpacitySelect" destination="AJH-zv-LZp" id="uot-th-O1d"/>
+                <outlet property="colorSlider" destination="UP4-TP-PtY" id="4Dk-yX-nnm"/>
                 <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <customView id="Hz6-mo-xeY">
-            <rect key="frame" x="0.0" y="0.0" width="480" height="272"/>
+            <rect key="frame" x="0.0" y="0.0" width="291" height="402"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="dt6-mN-YV2">
+                    <rect key="frame" x="0.0" y="0.0" width="291" height="402"/>
+                    <subviews>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="E5J-5r-6x9">
+                            <rect key="frame" x="30" y="290" width="232" height="112"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="OGF-w0-KIr">
+                                    <rect key="frame" x="0.0" y="72" width="232" height="40"/>
+                                    <subviews>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TIV-1q-4fk">
+                                            <rect key="frame" x="-2" y="12" width="37" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Color" id="g6W-pP-ghb">
+                                                <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>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="TIV-1q-4fk" firstAttribute="leading" secondItem="OGF-w0-KIr" secondAttribute="leading" id="3yy-52-6bf"/>
+                                        <constraint firstAttribute="height" constant="40" id="4pb-nh-7g0"/>
+                                        <constraint firstItem="TIV-1q-4fk" firstAttribute="centerY" secondItem="OGF-w0-KIr" secondAttribute="centerY" id="GmX-b5-J65"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="2tl-sb-rOC" customClass="ComponentCColorGroup" customModule="KMComponentLibrary">
+                                    <rect key="frame" x="0.0" y="40" width="232" height="32"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="32" id="tf1-Lw-Xsu"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="Eg4-p9-fqD">
+                                    <rect key="frame" x="0.0" y="0.0" width="232" height="32"/>
+                                    <subviews>
+                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hZY-P2-dUr">
+                                            <rect key="frame" x="0.0" y="6" width="20" height="20"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="20" id="7l3-Gj-nXc"/>
+                                                <constraint firstAttribute="height" constant="20" id="YNn-nP-5UT"/>
+                                            </constraints>
+                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="edit_ocapity" id="Fom-Vt-4Ne"/>
+                                        </imageView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="UP4-TP-PtY" customClass="ComponentSlider" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="28" y="10" width="116" height="12"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="12" id="Omc-0E-qCu"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="AJH-zv-LZp" customClass="ComponentSelect" customModule="KMComponentLibrary">
+                                            <rect key="frame" x="152" y="0.0" width="80" height="32"/>
+                                            <constraints>
+                                                <constraint firstAttribute="width" constant="80" id="abW-EB-x6P"/>
+                                                <constraint firstAttribute="height" constant="32" id="nbj-Sl-GiL"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="UP4-TP-PtY" firstAttribute="leading" secondItem="Eg4-p9-fqD" secondAttribute="leading" constant="28" id="2zu-pt-XU7"/>
+                                        <constraint firstAttribute="trailing" secondItem="AJH-zv-LZp" secondAttribute="trailing" id="5Vk-yc-FgU"/>
+                                        <constraint firstItem="hZY-P2-dUr" firstAttribute="centerY" secondItem="Eg4-p9-fqD" secondAttribute="centerY" id="bOe-JR-KSy"/>
+                                        <constraint firstAttribute="height" constant="32" id="dkX-Mq-npi"/>
+                                        <constraint firstItem="hZY-P2-dUr" firstAttribute="leading" secondItem="Eg4-p9-fqD" secondAttribute="leading" id="e6k-qZ-F1w"/>
+                                        <constraint firstItem="UP4-TP-PtY" firstAttribute="centerY" secondItem="Eg4-p9-fqD" secondAttribute="centerY" id="iR9-GR-uxI"/>
+                                        <constraint firstItem="AJH-zv-LZp" firstAttribute="leading" secondItem="UP4-TP-PtY" secondAttribute="trailing" constant="8" id="mLg-v9-LNx"/>
+                                        <constraint firstItem="AJH-zv-LZp" firstAttribute="top" secondItem="Eg4-p9-fqD" secondAttribute="top" id="sit-W6-gqn"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="Eg4-p9-fqD" firstAttribute="leading" secondItem="E5J-5r-6x9" secondAttribute="leading" id="09j-ve-z5n"/>
+                                <constraint firstItem="OGF-w0-KIr" firstAttribute="top" secondItem="E5J-5r-6x9" secondAttribute="top" id="Abl-cZ-YtQ"/>
+                                <constraint firstItem="Eg4-p9-fqD" firstAttribute="top" secondItem="2tl-sb-rOC" secondAttribute="bottom" constant="8" id="OMp-ij-nBR"/>
+                                <constraint firstAttribute="trailing" secondItem="OGF-w0-KIr" secondAttribute="trailing" id="RIt-Xm-rKZ"/>
+                                <constraint firstItem="2tl-sb-rOC" firstAttribute="top" secondItem="OGF-w0-KIr" secondAttribute="bottom" id="X8H-JE-VSk"/>
+                                <constraint firstItem="2tl-sb-rOC" firstAttribute="leading" secondItem="E5J-5r-6x9" secondAttribute="leading" id="ZNk-ou-dYr"/>
+                                <constraint firstAttribute="width" constant="232" id="bbQ-dq-KoK"/>
+                                <constraint firstAttribute="trailing" secondItem="2tl-sb-rOC" secondAttribute="trailing" id="hXG-DA-ebl"/>
+                                <constraint firstItem="OGF-w0-KIr" firstAttribute="leading" secondItem="E5J-5r-6x9" secondAttribute="leading" id="i4d-eW-jG2"/>
+                                <constraint firstAttribute="height" constant="112" id="jOK-xa-mZc"/>
+                                <constraint firstAttribute="trailing" secondItem="Eg4-p9-fqD" secondAttribute="trailing" id="xTc-85-DCp"/>
+                            </constraints>
+                        </customView>
+                    </subviews>
+                    <constraints>
+                        <constraint firstItem="E5J-5r-6x9" firstAttribute="centerX" secondItem="dt6-mN-YV2" secondAttribute="centerX" id="Gbe-b0-pDq"/>
+                        <constraint firstItem="E5J-5r-6x9" firstAttribute="top" secondItem="dt6-mN-YV2" secondAttribute="top" id="s6c-xd-nyS"/>
+                    </constraints>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="dt6-mN-YV2" secondAttribute="bottom" id="9Ua-qO-4QH"/>
+                <constraint firstAttribute="trailing" secondItem="dt6-mN-YV2" secondAttribute="trailing" id="NEk-zi-9QJ"/>
+                <constraint firstItem="dt6-mN-YV2" firstAttribute="top" secondItem="Hz6-mo-xeY" secondAttribute="top" id="TEV-gH-L9T"/>
+                <constraint firstItem="dt6-mN-YV2" firstAttribute="leading" secondItem="Hz6-mo-xeY" secondAttribute="leading" id="WZo-aJ-OdB"/>
+            </constraints>
+            <point key="canvasLocation" x="101.5" y="161"/>
         </customView>
     </objects>
+    <resources>
+        <image name="edit_ocapity" width="16" height="16"/>
+    </resources>
 </document>

+ 125 - 36
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -3395,12 +3395,39 @@
 		BB451AAD2CF59F68003E1565 /* KMNoteController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AA92CF59F68003E1565 /* KMNoteController.xib */; };
 		BB451AAE2CF59F68003E1565 /* KMNoteController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AA92CF59F68003E1565 /* KMNoteController.xib */; };
 		BB451AAF2CF59F68003E1565 /* KMNoteController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AA92CF59F68003E1565 /* KMNoteController.xib */; };
-		BB451AB22CF59F75003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB02CF59F75003E1565 /* KMLineController.swift */; };
-		BB451AB32CF59F75003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB02CF59F75003E1565 /* KMLineController.swift */; };
-		BB451AB42CF59F75003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB02CF59F75003E1565 /* KMLineController.swift */; };
-		BB451AB52CF59F75003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB12CF59F75003E1565 /* KMLineController.xib */; };
-		BB451AB62CF59F75003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB12CF59F75003E1565 /* KMLineController.xib */; };
-		BB451AB72CF59F75003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB12CF59F75003E1565 /* KMLineController.xib */; };
+		BB451ABA2CF5AECE003E1565 /* KMWavylineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB82CF5AECE003E1565 /* KMWavylineController.swift */; };
+		BB451ABB2CF5AECE003E1565 /* KMWavylineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB82CF5AECE003E1565 /* KMWavylineController.swift */; };
+		BB451ABC2CF5AECE003E1565 /* KMWavylineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AB82CF5AECE003E1565 /* KMWavylineController.swift */; };
+		BB451ABD2CF5AECE003E1565 /* KMWavylineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB92CF5AECE003E1565 /* KMWavylineController.xib */; };
+		BB451ABE2CF5AECE003E1565 /* KMWavylineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB92CF5AECE003E1565 /* KMWavylineController.xib */; };
+		BB451ABF2CF5AECE003E1565 /* KMWavylineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AB92CF5AECE003E1565 /* KMWavylineController.xib */; };
+		BB451AC52CF5AF68003E1565 /* KMEraserController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AC32CF5AF68003E1565 /* KMEraserController.swift */; };
+		BB451AC62CF5AF68003E1565 /* KMEraserController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AC32CF5AF68003E1565 /* KMEraserController.swift */; };
+		BB451AC72CF5AF68003E1565 /* KMEraserController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AC32CF5AF68003E1565 /* KMEraserController.swift */; };
+		BB451AC82CF5AF68003E1565 /* KMEraserController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AC42CF5AF68003E1565 /* KMEraserController.xib */; };
+		BB451AC92CF5AF68003E1565 /* KMEraserController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AC42CF5AF68003E1565 /* KMEraserController.xib */; };
+		BB451ACA2CF5AF68003E1565 /* KMEraserController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AC42CF5AF68003E1565 /* KMEraserController.xib */; };
+		BB451ACD2CF5AF80003E1565 /* KMCircleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ACB2CF5AF80003E1565 /* KMCircleController.swift */; };
+		BB451ACE2CF5AF80003E1565 /* KMCircleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ACB2CF5AF80003E1565 /* KMCircleController.swift */; };
+		BB451ACF2CF5AF80003E1565 /* KMCircleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ACB2CF5AF80003E1565 /* KMCircleController.swift */; };
+		BB451AD02CF5AF80003E1565 /* KMCircleController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ACC2CF5AF80003E1565 /* KMCircleController.xib */; };
+		BB451AD12CF5AF80003E1565 /* KMCircleController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ACC2CF5AF80003E1565 /* KMCircleController.xib */; };
+		BB451AD22CF5AF80003E1565 /* KMCircleController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ACC2CF5AF80003E1565 /* KMCircleController.xib */; };
+		BB451AD52CF5AF8D003E1565 /* KMArrowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AD32CF5AF8D003E1565 /* KMArrowController.swift */; };
+		BB451AD62CF5AF8D003E1565 /* KMArrowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AD32CF5AF8D003E1565 /* KMArrowController.swift */; };
+		BB451AD72CF5AF8D003E1565 /* KMArrowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AD32CF5AF8D003E1565 /* KMArrowController.swift */; };
+		BB451AD82CF5AF8D003E1565 /* KMArrowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AD42CF5AF8D003E1565 /* KMArrowController.xib */; };
+		BB451AD92CF5AF8D003E1565 /* KMArrowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AD42CF5AF8D003E1565 /* KMArrowController.xib */; };
+		BB451ADA2CF5AF8D003E1565 /* KMArrowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451AD42CF5AF8D003E1565 /* KMArrowController.xib */; };
+		BB451ADD2CF5AF9A003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ADB2CF5AF9A003E1565 /* KMLineController.swift */; };
+		BB451ADE2CF5AF9A003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ADB2CF5AF9A003E1565 /* KMLineController.swift */; };
+		BB451ADF2CF5AF9A003E1565 /* KMLineController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451ADB2CF5AF9A003E1565 /* KMLineController.swift */; };
+		BB451AE02CF5AF9A003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ADC2CF5AF9A003E1565 /* KMLineController.xib */; };
+		BB451AE12CF5AF9A003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ADC2CF5AF9A003E1565 /* KMLineController.xib */; };
+		BB451AE22CF5AF9A003E1565 /* KMLineController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB451ADC2CF5AF9A003E1565 /* KMLineController.xib */; };
+		BB451AE42CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AE32CF5BEC5003E1565 /* CPDFListView+Annotations.swift */; };
+		BB451AE52CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AE32CF5BEC5003E1565 /* CPDFListView+Annotations.swift */; };
+		BB451AE62CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB451AE32CF5BEC5003E1565 /* CPDFListView+Annotations.swift */; };
 		BB4583BF2CC8C53C005737F3 /* KMPDFToolbarConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4583BE2CC8C53C005737F3 /* KMPDFToolbarConfig.swift */; };
 		BB4583C02CC8C53C005737F3 /* KMPDFToolbarConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4583BE2CC8C53C005737F3 /* KMPDFToolbarConfig.swift */; };
 		BB4583C12CC8C53C005737F3 /* KMPDFToolbarConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB4583BE2CC8C53C005737F3 /* KMPDFToolbarConfig.swift */; };
@@ -4194,9 +4221,9 @@
 		BB96A0B82AFCE45800559E24 /* WaitingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96A0B72AFCE45800559E24 /* WaitingView.swift */; };
 		BB96A0B92AFCE45800559E24 /* WaitingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96A0B72AFCE45800559E24 /* WaitingView.swift */; };
 		BB96A0BA2AFCE45800559E24 /* WaitingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96A0B72AFCE45800559E24 /* WaitingView.swift */; };
-		BB96C4292CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+Edit.swift */; };
-		BB96C42A2CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+Edit.swift */; };
-		BB96C42B2CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+Edit.swift */; };
+		BB96C4292CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift */; };
+		BB96C42A2CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift */; };
+		BB96C42B2CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB96C4282CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift */; };
 		BB97BE242BC3E02D00BECEA8 /* SKExportAccessoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB97BE222BC3E02D00BECEA8 /* SKExportAccessoryController.m */; };
 		BB97BE252BC3E02D00BECEA8 /* SKExportAccessoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB97BE222BC3E02D00BECEA8 /* SKExportAccessoryController.m */; };
 		BB97BE262BC3E02D00BECEA8 /* SKExportAccessoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = BB97BE222BC3E02D00BECEA8 /* SKExportAccessoryController.m */; };
@@ -6878,8 +6905,17 @@
 		BB451AA12CF59F5B003E1565 /* KMRectangleController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMRectangleController.xib; sourceTree = "<group>"; };
 		BB451AA82CF59F68003E1565 /* KMNoteController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMNoteController.swift; sourceTree = "<group>"; };
 		BB451AA92CF59F68003E1565 /* KMNoteController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMNoteController.xib; sourceTree = "<group>"; };
-		BB451AB02CF59F75003E1565 /* KMLineController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLineController.swift; sourceTree = "<group>"; };
-		BB451AB12CF59F75003E1565 /* KMLineController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMLineController.xib; sourceTree = "<group>"; };
+		BB451AB82CF5AECE003E1565 /* KMWavylineController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWavylineController.swift; sourceTree = "<group>"; };
+		BB451AB92CF5AECE003E1565 /* KMWavylineController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMWavylineController.xib; sourceTree = "<group>"; };
+		BB451AC32CF5AF68003E1565 /* KMEraserController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMEraserController.swift; sourceTree = "<group>"; };
+		BB451AC42CF5AF68003E1565 /* KMEraserController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMEraserController.xib; sourceTree = "<group>"; };
+		BB451ACB2CF5AF80003E1565 /* KMCircleController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCircleController.swift; sourceTree = "<group>"; };
+		BB451ACC2CF5AF80003E1565 /* KMCircleController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMCircleController.xib; sourceTree = "<group>"; };
+		BB451AD32CF5AF8D003E1565 /* KMArrowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMArrowController.swift; sourceTree = "<group>"; };
+		BB451AD42CF5AF8D003E1565 /* KMArrowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMArrowController.xib; sourceTree = "<group>"; };
+		BB451ADB2CF5AF9A003E1565 /* KMLineController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = KMLineController.swift; path = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.swift"; sourceTree = SOURCE_ROOT; };
+		BB451ADC2CF5AF9A003E1565 /* KMLineController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = KMLineController.xib; path = "PDF Master/KMClass/KMPDFViewController/RightSideController/Views/Arrow/KMLineController.xib"; sourceTree = SOURCE_ROOT; };
+		BB451AE32CF5BEC5003E1565 /* CPDFListView+Annotations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFListView+Annotations.swift"; sourceTree = "<group>"; };
 		BB4583BE2CC8C53C005737F3 /* KMPDFToolbarConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFToolbarConfig.swift; sourceTree = "<group>"; };
 		BB46CF472AFB7E5C00281EDF /* InitialUserDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = InitialUserDefaults.plist; sourceTree = "<group>"; };
 		BB46CF4B2AFBB34800281EDF /* AutoSaveManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoSaveManager.swift; sourceTree = "<group>"; };
@@ -7222,7 +7258,7 @@
 		BB96A0AF2AFCD56100559E24 /* KMToolCompareWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMToolCompareWindowController.swift; sourceTree = "<group>"; };
 		BB96A0B32AFCD56B00559E24 /* KMToolCompareWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMToolCompareWindowController.xib; sourceTree = "<group>"; };
 		BB96A0B72AFCE45800559E24 /* WaitingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitingView.swift; sourceTree = "<group>"; };
-		BB96C4282CE6DDB2003F3668 /* CPDFListView+Edit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFListView+Edit.swift"; sourceTree = "<group>"; };
+		BB96C4282CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CPDFListView+CPDFEditArea.swift"; sourceTree = "<group>"; };
 		BB97BE212BC3E02D00BECEA8 /* SKExportAccessoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKExportAccessoryController.h; sourceTree = "<group>"; };
 		BB97BE222BC3E02D00BECEA8 /* SKExportAccessoryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKExportAccessoryController.m; sourceTree = "<group>"; };
 		BB981E502AD4F637001988CA /* KMCoverButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMCoverButton.swift; sourceTree = "<group>"; };
@@ -8220,6 +8256,8 @@
 			isa = PBXGroup;
 			children = (
 				65D684042C6A24D7003A532E /* Controller */,
+				BB451AB82CF5AECE003E1565 /* KMWavylineController.swift */,
+				BB451AB92CF5AECE003E1565 /* KMWavylineController.xib */,
 			);
 			name = WavyLine;
 			path = ../../../../Class/PDFWindowController/Side/RightSide/WavyLine;
@@ -8236,6 +8274,8 @@
 		65D684092C6A3642003A532E /* Eraser */ = {
 			isa = PBXGroup;
 			children = (
+				BB451AC32CF5AF68003E1565 /* KMEraserController.swift */,
+				BB451AC42CF5AF68003E1565 /* KMEraserController.xib */,
 				65D6840A2C6A3642003A532E /* Controller */,
 			);
 			name = Eraser;
@@ -12229,13 +12269,32 @@
 			path = Note;
 			sourceTree = "<group>";
 		};
-		BB451A6E2CF59C72003E1565 /* Line */ = {
+		BB451AC02CF5AEFC003E1565 /* Circle */ = {
 			isa = PBXGroup;
 			children = (
-				BB451AB02CF59F75003E1565 /* KMLineController.swift */,
-				BB451AB12CF59F75003E1565 /* KMLineController.xib */,
+				BB451ACB2CF5AF80003E1565 /* KMCircleController.swift */,
+				BB451ACC2CF5AF80003E1565 /* KMCircleController.xib */,
 			);
-			path = Line;
+			path = Circle;
+			sourceTree = "<group>";
+		};
+		BB451AC12CF5AF16003E1565 /* Arrow */ = {
+			isa = PBXGroup;
+			children = (
+				BB451AD32CF5AF8D003E1565 /* KMArrowController.swift */,
+				BB451AD42CF5AF8D003E1565 /* KMArrowController.xib */,
+			);
+			path = Arrow;
+			sourceTree = "<group>";
+		};
+		BB451AC22CF5AF1D003E1565 /* Line */ = {
+			isa = PBXGroup;
+			children = (
+				BB451ADB2CF5AF9A003E1565 /* KMLineController.swift */,
+				BB451ADC2CF5AF9A003E1565 /* KMLineController.xib */,
+			);
+			name = Line;
+			path = Circle/Arrow/Line;
 			sourceTree = "<group>";
 		};
 		BB4583C32CC8C669005737F3 /* Model */ = {
@@ -13011,7 +13070,8 @@
 				F36AD77629642FE80015AD53 /* CPDFListView+UndoManager.m */,
 				9FF0D0522B6A3EE40018A732 /* CPDFListView+Form.swift */,
 				AD7D5CA82B906E36006562CD /* CPDFListView+Sync.swift */,
-				BB96C4282CE6DDB2003F3668 /* CPDFListView+Edit.swift */,
+				BB96C4282CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift */,
+				BB451AE32CF5BEC5003E1565 /* CPDFListView+Annotations.swift */,
 			);
 			path = CPDFListViewExtension;
 			sourceTree = "<group>";
@@ -13849,21 +13909,23 @@
 		BBEB0DE62CE36B54004C67BF /* Views */ = {
 			isa = PBXGroup;
 			children = (
-				65D684092C6A3642003A532E /* Eraser */,
-				65D684032C6A24D7003A532E /* WavyLine */,
-				652E953A2C66707E0061FA40 /* Freehand */,
-				89E4E6D72963C6AA002DBA6F /* AnnotationProperty */,
-				BB8B17302907B48E001C5EA5 /* CipherTextView */,
-				8931681E296D73C10073EA59 /* Signature */,
-				89E4E75D29656A88002DBA6F /* StampList */,
-				BB451A6E2CF59C72003E1565 /* Line */,
-				BB451A6C2CF59C54003E1565 /* Note */,
-				BB451A6B2CF59C51003E1565 /* Rectangle */,
 				BB451A652CF59C03003E1565 /* Highlight */,
 				BB451A6A2CF59C25003E1565 /* Underline */,
+				65D684032C6A24D7003A532E /* WavyLine */,
 				BB451A682CF59C1F003E1565 /* Strikethrough */,
 				BB451A672CF59C1C003E1565 /* TextBox */,
+				BB451A6C2CF59C54003E1565 /* Note */,
 				BB451A662CF59C17003E1565 /* Pen */,
+				65D684092C6A3642003A532E /* Eraser */,
+				BB451A6B2CF59C51003E1565 /* Rectangle */,
+				BB451AC02CF5AEFC003E1565 /* Circle */,
+				BB451AC12CF5AF16003E1565 /* Arrow */,
+				BB451AC22CF5AF1D003E1565 /* Line */,
+				89E4E75D29656A88002DBA6F /* StampList */,
+				8931681E296D73C10073EA59 /* Signature */,
+				652E953A2C66707E0061FA40 /* Freehand */,
+				89E4E6D72963C6AA002DBA6F /* AnnotationProperty */,
+				BB8B17302907B48E001C5EA5 /* CipherTextView */,
 				8996CFE4295BE15800D32783 /* EditPDF */,
 			);
 			path = Views;
@@ -14980,6 +15042,7 @@
 				F3DB86112CCA693C00D0AFDE /* KMNSplitPDFWindowController.xib in Resources */,
 				9FE0BBE72B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				BB4F7E852B0C4E820077EC8C /* KMNoteFilterCollevtionViewItem.xib in Resources */,
+				BB451AD02CF5AF80003E1565 /* KMCircleController.xib in Resources */,
 				BB451A722CF59D1C003E1565 /* KMAnnotationPropertiesViewController.xib in Resources */,
 				ADDF83502B391A5C00A81A4E /* CDSignatureCertificateCustomViewController.xib in Resources */,
 				F3A0F85C2CC940DD00E7373F /* KMNPDFInsertBlankWindowController.xib in Resources */,
@@ -15017,7 +15080,6 @@
 				ADE86A7B2B0221E100414DFA /* KMSecurityWindowController.xib in Resources */,
 				BBC8A7752B0640C200FA9377 /* KMBotaSearchViewController.xib in Resources */,
 				BB9138392CEE089C00BAB4A7 /* KMCropController.xib in Resources */,
-				BB451AB52CF59F75003E1565 /* KMLineController.xib in Resources */,
 				9F69DBBD2B55014F003D4C45 /* KMAnnotationButtonWidgetAppearanceViewController.xib in Resources */,
 				BBA9223B2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BB9007032B8DDCE400623B78 /* SyncPreferences.xib in Resources */,
@@ -15045,6 +15107,7 @@
 				BB716D6B2CDDB727009787ED /* KMHeaderPropertyController.xib in Resources */,
 				AD055E902B88304E0035F824 /* BookmarksWindow.xib in Resources */,
 				BB99ACC5292DE22E0048AFD9 /* KMMergeViewController.xib in Resources */,
+				BB451ABD2CF5AECE003E1565 /* KMWavylineController.xib in Resources */,
 				BB79E71C2CE617CB0052CAD5 /* KMEditImageController.xib in Resources */,
 				BB6347B82AF224E200F5438E /* KMConvertCollectionViewHeader.xib in Resources */,
 				8942F7F32926087200389627 /* KMSearchViewController.xib in Resources */,
@@ -15061,6 +15124,7 @@
 				ADDF83622B391A5C00A81A4E /* DSignatureFromFileViewController.xib in Resources */,
 				9F0CB46A2967E5CB00007028 /* KMPropertiesPanelSubViewController.xib in Resources */,
 				9F0CB4722967E63100007028 /* KMPropertiesPanelNameSubVC.xib in Resources */,
+				BB451AC82CF5AF68003E1565 /* KMEraserController.xib in Resources */,
 				ADE8BC2A29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
 				BB19A75A2CB7C724008204DC /* KMHistoryFileListItem.xib in Resources */,
 				BB19A7522CB7C710008204DC /* KMHistoryFileThumbItem.xib in Resources */,
@@ -15077,6 +15141,7 @@
 				ADBC376129CC637900D93208 /* KMReadModelView.xib in Resources */,
 				ADDF83832B391A5D00A81A4E /* DSignatureSaveTypeViewController.xib in Resources */,
 				BBD8EE992B8EC86A00EB05FE /* AutoSaveFileItem.xib in Resources */,
+				BB451AD82CF5AF8D003E1565 /* KMArrowController.xib in Resources */,
 				9F3BCDC82CCB749400BDAB67 /* 快速教学.pdf in Resources */,
 				AD1FE8382BD7C98300AA4A9B /* KMPDFPrintManageWindowController.xib in Resources */,
 				AD1D480B2AFB18DA007AC1F0 /* KMCompressWIndowControllerNew.xib in Resources */,
@@ -15296,6 +15361,7 @@
 				BBA8B7A62935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				BB51074229A61B4100978662 /* ProgressSheet.xib in Resources */,
 				BBA922382B4E97540061057A /* KMPurchaseFirstTrialWindowController.xib in Resources */,
+				BB451AE02CF5AF9A003E1565 /* KMLineController.xib in Resources */,
 				BB5EC3652C2BDC9D0090EF27 /* KMTextAlignmentController.xib in Resources */,
 				BB42A5D82B8ED7960092C524 /* KMTabbingHintWindowController.xib in Resources */,
 				ADE86AA82B031FFA00414DFA /* KMCompareView.xib in Resources */,
@@ -15451,6 +15517,7 @@
 				BB03D6912B01C7AB008C9976 /* KMPDFEditInsertBlankPageWindow.xib in Resources */,
 				BBE788822CBD2463008086E2 /* WCCompWindowController.xib in Resources */,
 				BBFE6E792930E53000142C01 /* KMMergePopoverViewController.xib in Resources */,
+				BB451ABE2CF5AECE003E1565 /* KMWavylineController.xib in Resources */,
 				9F8810912B56614600F69815 /* KMAnnotationChoiceWidgetAppearanceViewController.xib in Resources */,
 				653647B12CDCA5DE00CDB13E /* KMBatchOperateLeftViewController.xib in Resources */,
 				9FDD0F972952FF4D000C4DAD /* $metadata.json in Resources */,
@@ -15466,7 +15533,6 @@
 				BB031B5B2C47BB080099F7AD /* KMUserFbHelpPopController.xib in Resources */,
 				653647B42CDCA5DE00CDB13E /* KMBatchOperateRightViewController.xib in Resources */,
 				ADE86AA92B031FFA00414DFA /* KMCompareView.xib in Resources */,
-				BB451AB62CF59F75003E1565 /* KMLineController.xib in Resources */,
 				9FF94F1D29A770B500B1EF69 /* KMFillSignShapePanel.xib in Resources */,
 				BB1B0AC32B4FC6E900889528 /* KMFunctionGuideWindowController.xib in Resources */,
 				89E4E7862967BF5A002DBA6F /* KMCustomizeStampViewController.xib in Resources */,
@@ -15625,6 +15691,7 @@
 				BB79FAB62CDC65BA00BF7B39 /* KMBGTemplateController.xib in Resources */,
 				9F8539FA2947137500DF644E /* newtab_p.pdf in Resources */,
 				BBE788E52CBD2464008086E2 /* ButtonDemoVC.xib in Resources */,
+				BB451AD92CF5AF8D003E1565 /* KMArrowController.xib in Resources */,
 				AD1FE81B2BD7C98300AA4A9B /* KMPDFMultiplePrintWindowController.xib in Resources */,
 				BB853C962AF8DCC7009C20C1 /* KMBatchOperateRemovePasswordViewController.xib in Resources */,
 				BB1B0AE42B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
@@ -15738,6 +15805,7 @@
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB234F052BA3D798008B3754 /* KMAIIconGuideView.xib in Resources */,
 				BB52F5712CC236A2007418DB /* KMLinkEmailView.xib in Resources */,
+				BB451AD12CF5AF80003E1565 /* KMCircleController.xib in Resources */,
 				ADFA8F162B60E02B002595A4 /* KMSecureAlertView.xib in Resources */,
 				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				9FF371E02C69B93E005F9CC5 /* CAreaSettingWindowController.xib in Resources */,
@@ -15848,6 +15916,7 @@
 				ADDF83752B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
 				BB6EA2952B70AF48000D4490 /* KMConvertCompareViewController.xib in Resources */,
 				BB5A9D652CB6521400F64C1F /* KMPDFSecToolbarController.xib in Resources */,
+				BB451AE12CF5AF9A003E1565 /* KMLineController.xib in Resources */,
 				ADDF834B2B391A5C00A81A4E /* DSignatureDetailsViewController.xib in Resources */,
 				BBFA1CD22B609EC50053AD4A /* KMScreenShotMaskWindowController.xib in Resources */,
 				BBB789B22BE8BF2400F7E09C /* AIChatTranslateResultItem.xib in Resources */,
@@ -15885,6 +15954,7 @@
 				F321C1E82CD9EF74009982C8 /* KMPasswordInputWindow.xib in Resources */,
 				BB276A5D2B038D3A00AB5578 /* KMOCRPDFWindowController.xib in Resources */,
 				ADE86AE12B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
+				BB451AC92CF5AF68003E1565 /* KMEraserController.xib in Resources */,
 				BBDF18192CD4853C00ACDB15 /* KMNWatermarkPropertyController.xib in Resources */,
 				BB3A429B2B4BC75D006D0642 /* NotesPanel.xib in Resources */,
 				BBB789B82BE8BF2400F7E09C /* AIChatDefaultTIpItem.xib in Resources */,
@@ -16022,6 +16092,7 @@
 				ADD1B6F22946C06C00C3FFF7 /* KMPrintChoosePageSizeSizeView.xib in Resources */,
 				AD7D5CE12B957693006562CD /* KMBookmarkOutlineFileCellView.xib in Resources */,
 				656C1E582CD0D28E00295F82 /* KMConvertHtmlSettingView.xib in Resources */,
+				BB451ABF2CF5AECE003E1565 /* KMWavylineController.xib in Resources */,
 				AD1CA4162A061CCD0070541F /* KMAnnotationScreenColorViewItem.xib in Resources */,
 				AD1CA3FC2A05FCB60070541F /* KMAnnotationScreenViewController.xib in Resources */,
 				9FF371D52C69B8C6005F9CC5 /* CPerimeterMeasureInfoWindowController.xib in Resources */,
@@ -16037,7 +16108,6 @@
 				BBA2109629ACC10F00E6B346 /* signlist_add.pdf in Resources */,
 				BBFE6E722930D9C600142C01 /* KMMergeSettingWindowController.xib in Resources */,
 				ADDF83762B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
-				BB451AB72CF59F75003E1565 /* KMLineController.xib in Resources */,
 				BBF62C762B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				BB031B652C47BB080099F7AD /* KMUserFeekbackWindowController.xib in Resources */,
 				BB5A9D662CB6521400F64C1F /* KMPDFSecToolbarController.xib in Resources */,
@@ -16196,6 +16266,7 @@
 				BB6DD81129347F77001F0544 /* KMSecureEncryptWindowController.xib in Resources */,
 				ADD1B6D129431D7100C3FFF7 /* KMPrintPreviewView.xib in Resources */,
 				BBD9223F2B50D6D600DB9585 /* rate_pic_star.pdf in Resources */,
+				BB451ADA2CF5AF8D003E1565 /* KMArrowController.xib in Resources */,
 				BB1B0B062B4FC6E900889528 /* KMCustomColorGuideView.xib in Resources */,
 				653647D22CDCA6CC00CDB13E /* KMBatchOperateBaseViewController.xib in Resources */,
 				BB6347B22AF1F0BB00F5438E /* KMBatchOperateConvertViewController.xib in Resources */,
@@ -16309,6 +16380,7 @@
 				9FDCD8132B6C904900E22166 /* KMFormListMenuPopWindowController.xib in Resources */,
 				BB2E666429C885550000FEBC /* KMSignatureHelpViewController.xib in Resources */,
 				BB1B0AE52B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
+				BB451AD22CF5AF80003E1565 /* KMCircleController.xib in Resources */,
 				89752E092939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				BB0FE03C2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
@@ -16419,6 +16491,7 @@
 				653647C12CDCA5DE00CDB13E /* KMBatchOperateSplitViewController.xib in Resources */,
 				BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BBB789982BE8BF2400F7E09C /* AIInfoInputView.xib in Resources */,
+				BB451AE22CF5AF9A003E1565 /* KMLineController.xib in Resources */,
 				AD867FAC29DFB78200F00440 /* KMAnnotationOutlineView.xib in Resources */,
 				BB10E16C2CDC94E300471D47 /* KMBGTemplateItem.xib in Resources */,
 				BBF811E62B0717970074874F /* KMExtractImageWindowController.xib in Resources */,
@@ -16456,6 +16529,7 @@
 				ADFCEB632B4FBFC50001EBAF /* ad_cancel_button00@4x.png in Resources */,
 				ADAFDA4E2AEA7F2700F084BC /* KMAdvertisementShowView.xib in Resources */,
 				BBE788D72CBD2464008086E2 /* AlertControllerVC.xib in Resources */,
+				BB451ACA2CF5AF68003E1565 /* KMEraserController.xib in Resources */,
 				BB65A0842AF8FEA1003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.xib in Resources */,
 				BB8810632B4F74DD00AFA63E /* KMRepeatTrialAlertController.xib in Resources */,
 				BBB2A9A22CB65C8E0066560B /* KMURLCreatePDFWindowController.xib in Resources */,
@@ -16724,7 +16798,7 @@
 				BB2C84662BAE716600AF6142 /* KMPopupMenuObject.swift in Sources */,
 				9FCFEC6C2AC3D96800EAD2CB /* CPDFListViewAnimatedBorderlessWindow.swift in Sources */,
 				89752DF62938A236003FF08E /* PublicKey.swift in Sources */,
-				BB96C4292CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */,
+				BB96C4292CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */,
 				AD7D5CCB2B95728C006562CD /* KMBookmarkOutlineTitleCellView.swift in Sources */,
 				AD867FB329DFBB2700F00440 /* KMAnnotationOutlineSectionView.swift in Sources */,
 				9FDD0F6F294AD13C000C4DAD /* KMMainViewController+Action.swift in Sources */,
@@ -16921,6 +16995,7 @@
 				BB147014299DC0D100784A6A /* OIDAuthState.m in Sources */,
 				BB147038299DC0D200784A6A /* OIDAuthorizationResponse.m in Sources */,
 				BB2EDF6D296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */,
+				BB451AC52CF5AF68003E1565 /* KMEraserController.swift in Sources */,
 				BB570ADF2B513A66005E7E4A /* KMLeftSideViewController+Snapshot.swift in Sources */,
 				BBB789AB2BE8BF2400F7E09C /* AIChatDefaultTIpItem.swift in Sources */,
 				BB30D4822B90249D00702541 /* KMStatusBar.m in Sources */,
@@ -17115,6 +17190,7 @@
 				BB31DA622AFA3088006D63CB /* KMPreferenceController.swift in Sources */,
 				9FD0D2AF2AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
 				BB5E2EF92C2BF3FF00657A61 /* KMEditPDFCropComfirmWindowController.swift in Sources */,
+				BB451AE42CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */,
 				ADAFDA422AE8F3C400F084BC /* KMAdvertisementTimeStampConversion.swift in Sources */,
 				BB10F1E42B736F11008EAF7E /* FMTrackEventManager.swift in Sources */,
 				BBFE14CF2BFD7FC300176992 /* KMCouponDueWindowController.swift in Sources */,
@@ -17132,6 +17208,7 @@
 				9FAAA339290F72CC0046FFCE /* KMHistoryFileCollectionView.swift in Sources */,
 				BB8810852B4F7C2200AFA63E /* KMVerificationAlertViewController.m in Sources */,
 				F3EF178F2CD5FD4B0007D364 /* KMNLeftSideViewController.swift in Sources */,
+				BB451ADD2CF5AF9A003E1565 /* KMLineController.swift in Sources */,
 				6554450E2C88483C00BD9010 /* KMDiscountToSaveWindowController.m in Sources */,
 				BB93CDE92AE7B6E100B29C57 /* KMToolbarView.swift in Sources */,
 				F321C1E42CD9EF74009982C8 /* KMPasswordInputWindow.swift in Sources */,
@@ -17310,6 +17387,7 @@
 				BB7256B32CDB816100B6CE64 /* KMBackgroundPropertyController.swift in Sources */,
 				BB0A823229C00400002C5C1B /* KMCommonEnum.swift in Sources */,
 				AD88109229A7612000178CA1 /* KMRegisterModel.swift in Sources */,
+				BB451ACD2CF5AF80003E1565 /* KMCircleController.swift in Sources */,
 				BB2C846C2BAE716600AF6142 /* KMBotaTableRowView.swift in Sources */,
 				9FE0BBDE2B0E009F00CD1CAC /* KMColorPickerView.swift in Sources */,
 				ADBC2D1F299CDA29006280C8 /* NSView+Layer.swift in Sources */,
@@ -17563,6 +17641,7 @@
 				BBC8A7712B06408600FA9377 /* KMBotaSearchViewController.swift in Sources */,
 				BB1A34A8295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				9F0CB4FD298655F600007028 /* KMDesignToken+BorderColor.swift in Sources */,
+				BB451AD52CF5AF8D003E1565 /* KMArrowController.swift in Sources */,
 				BB0FE0432B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				BBB1A3A629F6B66400E54E47 /* NSPanel+KMExtension.swift in Sources */,
 				BB031B662C47BB080099F7AD /* KMUserFbListModel.swift in Sources */,
@@ -17676,6 +17755,7 @@
 				BB146FED299DC0D100784A6A /* GTLRBatchResult.m in Sources */,
 				9F8539C629430AC400DF644E /* KMToolbarRightView.swift in Sources */,
 				BB04FD0C2B206F3600D80F7B /* KMPlanViewController.swift in Sources */,
+				BB451ABA2CF5AECE003E1565 /* KMWavylineController.swift in Sources */,
 				AD1FE8352BD7C98300AA4A9B /* KMPDFPrintManageWindowController.m in Sources */,
 				BB65A0542AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				AD7D5C9B2B8F20FE006562CD /* synctex_parser.m in Sources */,
@@ -17709,7 +17789,6 @@
 				ADFA8F112B60E01C002595A4 /* KMSecureAlertView.swift in Sources */,
 				BBFDFA932AF328B200E08AA2 /* KMBatchOperateManager.swift in Sources */,
 				BB10FAEE2AFE233C00F18D65 /* KMLineInspector.swift in Sources */,
-				BB451AB22CF59F75003E1565 /* KMLineController.swift in Sources */,
 				BBBB6CD22AD14A5F0035AA66 /* CPDFChoiceWidgetAnnotation+PDFListView.swift in Sources */,
 				BB4A94A42B04DA0C00940F8B /* KMGOCRManagerNew.swift in Sources */,
 				BB3D07632CD0821F00EB94DF /* KMPDFSplitView.swift in Sources */,
@@ -17914,6 +17993,7 @@
 				BB8810D12B4F980E00AFA63E /* NSNULL+Filtration.m in Sources */,
 				AD58F4202B1DC29100299EE0 /* KMPrintViewModel.swift in Sources */,
 				BB83B8ED2BA8415A00EFF584 /* KMPageEditExtractWindowController.swift in Sources */,
+				BB451AC62CF5AF68003E1565 /* KMEraserController.swift in Sources */,
 				AD1FE8302BD7C98300AA4A9B /* KMBookletParameterModel.m in Sources */,
 				657865FA2CE1E7DD00AFE2DB /* KMBookMarkViewController.swift in Sources */,
 				BB65A0552AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
@@ -17939,6 +18019,7 @@
 				AD2432D02B89DFED00A119A9 /* KMFormAlertView.swift in Sources */,
 				ADC31FA72A0E0C1A00ED44A2 /* KMEditPropertyAlignmentView.swift in Sources */,
 				BB10E1682CDC94E300471D47 /* KMBGTemplateItem.swift in Sources */,
+				BB451AD62CF5AF8D003E1565 /* KMArrowController.swift in Sources */,
 				ADE86A8B2B02269400414DFA /* KMRemovePasswordWindowController.swift in Sources */,
 				BB2CC5652AF123A300D7A796 /* KMBatchHeader.swift in Sources */,
 				BB451A932CF59F3F003E1565 /* KMTextBoxController.swift in Sources */,
@@ -17969,6 +18050,7 @@
 				BBE789182CBD2464008086E2 /* ListVC.swift in Sources */,
 				ADFCEB332B4F78150001EBAF /* KMFileManager.swift in Sources */,
 				BBE789152CBD2464008086E2 /* DividerDemoVC.swift in Sources */,
+				BB451ADE2CF5AF9A003E1565 /* KMLineController.swift in Sources */,
 				89D2D2DF294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
 				AD3AAD6E2B0DCC6800DE5FE7 /* KMCompareSaveWindow.swift in Sources */,
 				89752DF72938A236003FF08E /* PublicKey.swift in Sources */,
@@ -18020,6 +18102,7 @@
 				BB88E455294045B4002B3655 /* KMPDFConvertManager.swift in Sources */,
 				BBCE57152A72713A00508EFC /* NSViewController+KMExtension.swift in Sources */,
 				ADD1B6AC2941E97F00C3FFF7 /* KMPrintWindowController.swift in Sources */,
+				BB451AE52CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */,
 				9FDD0FAF29534FDC000C4DAD /* KMCompLight.swift in Sources */,
 				BBB789BE2BE8BF2400F7E09C /* AIChatStringUploadItem.swift in Sources */,
 				BB8810922B4F7C4100AFA63E /* KMVerificationExpiredViewController.m in Sources */,
@@ -18114,6 +18197,7 @@
 				BB2C6ACE28F41B9F00478A33 /* CPDFListView.m in Sources */,
 				BB6013892AD3A3CB00A76FB2 /* CPDFWidgetAnnotation+PDFListView.swift in Sources */,
 				ADAAC1652BD645DB001F2DA6 /* KMRecommondPopWindow.m in Sources */,
+				BB451ABB2CF5AECE003E1565 /* KMWavylineController.swift in Sources */,
 				BBF729A82B19627500576AC5 /* KMRemoveBackgroundOperationQueue.swift in Sources */,
 				BB1EC7FF2967B26700EC0BC3 /* KMPDFEditViewController.swift in Sources */,
 				BB5F8A2029BB15AD00365ADB /* KMEmailSubWindowController.m in Sources */,
@@ -18324,7 +18408,7 @@
 				9FF0D0612B6A5DCF0018A732 /* KMPDFAnnotationTextWidgetSub.swift in Sources */,
 				AD85D1AE2AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.swift in Sources */,
 				BB19A7582CB7C724008204DC /* KMHistoryFileListItem.swift in Sources */,
-				BB96C42A2CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */,
+				BB96C42A2CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */,
 				BB6719F62AD2C949003D44D5 /* CPDFRedactAnnotation+PDFListView.swift in Sources */,
 				AD055E892B882E7F0035F824 /* SKBookmark.m in Sources */,
 				ADDEEA872AD7805200EF675D /* KMGeneralButton.swift in Sources */,
@@ -18436,7 +18520,6 @@
 				9FF816F42AFB18290087EFC5 /* NSGeometry_KMExtensions.swift in Sources */,
 				BBA93D3429BF0ECE0044E0DD /* SKKeychain.m in Sources */,
 				9FCFEC752AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
-				BB451AB32CF59F75003E1565 /* KMLineController.swift in Sources */,
 				BBB789AC2BE8BF2400F7E09C /* AIChatDefaultTIpItem.swift in Sources */,
 				BB0FE0442B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				9F0CB5162986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
@@ -18919,6 +19002,7 @@
 				9F0CB49829683E1000007028 /* KMPropertiesPanelTextSubVC.swift in Sources */,
 				9F1FE4AC29406E4700E952CA /* CTBrowserWindow.m in Sources */,
 				9FF816DE2AFA5B8E0087EFC5 /* KMAnnotationTableViewController.swift in Sources */,
+				BB451ACE2CF5AF80003E1565 /* KMCircleController.swift in Sources */,
 				9FF371CB2C69B857005F9CC5 /* CDistanceMeasureInfoWindowController.swift in Sources */,
 				BBFE14D02BFD7FC300176992 /* KMCouponDueWindowController.swift in Sources */,
 				9F0CB53E2986571A00007028 /* KMDesignToken+Typography.swift in Sources */,
@@ -19108,6 +19192,7 @@
 				BB6B4C0A292F53CE0071CA06 /* KMMergeFileModel.swift in Sources */,
 				BB1B0A9F2B4FB88100889528 /* IAPProductsManager.m in Sources */,
 				BBB7898C2BE8BF2300F7E09C /* AIHeaderView.swift in Sources */,
+				BB451AD72CF5AF8D003E1565 /* KMArrowController.swift in Sources */,
 				9F0CB4B72977BC1000007028 /* KMPropertiesPanelPreviewSubVC.swift in Sources */,
 				BB3A81B72AC2C0F4006FC66C /* NSObject+KMExtension.swift in Sources */,
 				651675C92CE3312000019A20 /* KMBOTAOutlineCellView.swift in Sources */,
@@ -19260,6 +19345,7 @@
 				BB1969E22B2856A900922736 /* KMSnapshotPDFView.swift in Sources */,
 				AD58F4182B1DAC0900299EE0 /* KMPrintSettingView.swift in Sources */,
 				9FDD0F6D294AD12C000C4DAD /* KMMainViewController+UI.swift in Sources */,
+				BB451AE62CF5BEC5003E1565 /* CPDFListView+Annotations.swift in Sources */,
 				BB1BFF902AEA547B003EB179 /* NSButton+CustomAppearance.swift in Sources */,
 				9FD0D2B12AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
 				BB2C84712BAE716600AF6142 /* KMButtonLayer.swift in Sources */,
@@ -19422,8 +19508,8 @@
 				9F69DBB42B512614003D4C45 /* KMAnnotationTextWidgetOptionsViewController.swift in Sources */,
 				BBFEF7212B3A787900C28AC0 /* KMSystemAnnotationMenu.swift in Sources */,
 				BBE789162CBD2464008086E2 /* DividerDemoVC.swift in Sources */,
+				BB451ACF2CF5AF80003E1565 /* KMCircleController.swift in Sources */,
 				9F1FE4F529406E4700E952CA /* FastResizeView.m in Sources */,
-				BB451AB42CF59F75003E1565 /* KMLineController.swift in Sources */,
 				9F1FE4FE29406E4700E952CA /* CTTabStripController.m in Sources */,
 				BBA762D429D2D98D00844513 /* KMCommonDefine.swift in Sources */,
 				BB9599CD2B3184230062D346 /* KMRedactSelectPagesWindowController.swift in Sources */,
@@ -19442,6 +19528,7 @@
 				89E4E7842967BF5A002DBA6F /* KMCustomizeStampViewController.m in Sources */,
 				BBFA1CD82B60A0670053AD4A /* KMScreenShotMaskView.swift in Sources */,
 				BB146FFB299DC0D100784A6A /* OIDExternalUserAgentMac.m in Sources */,
+				BB451ADF2CF5AF9A003E1565 /* KMLineController.swift in Sources */,
 				AD055ECB2B8848400035F824 /* NSMenu_SKExtensions.m in Sources */,
 				ADDEEA5C2AD399BB00EF675D /* KMSignature.swift in Sources */,
 				BBB789BF2BE8BF2400F7E09C /* AIChatStringUploadItem.swift in Sources */,
@@ -19531,6 +19618,7 @@
 				9FDD0F822952FC36000C4DAD /* KMDesignToken.swift in Sources */,
 				BB4F7E8F2B0C7FE70077EC8C /* KMNoteColorCollectionViewItem.swift in Sources */,
 				9FDCD8102B6C904900E22166 /* KMFormListMenuPopWindowController.swift in Sources */,
+				BB451AC72CF5AF68003E1565 /* KMEraserController.swift in Sources */,
 				ADDF83672B391A5C00A81A4E /* DSignatureFromFileViewController.swift in Sources */,
 				BB7648EE29ECEEF400931039 /* KMAppearance.swift in Sources */,
 				BB4A94932B04926700940F8B /* KMGOCROperation.swift in Sources */,
@@ -19635,6 +19723,7 @@
 				BBE788D12CBD2463008086E2 /* InputDemoVC.swift in Sources */,
 				651675D82CE3312000019A20 /* KMTocOutlineView.swift in Sources */,
 				BB5BE4EF2B060E3000D51BF2 /* KMLanguageViewController.swift in Sources */,
+				BB451ABC2CF5AECE003E1565 /* KMWavylineController.swift in Sources */,
 				BB147025299DC0D100784A6A /* OIDResponseTypes.m in Sources */,
 				BB14701C299DC0D100784A6A /* OIDURLSessionProvider.m in Sources */,
 				BB981E542AD4F638001988CA /* KMCoverButton.swift in Sources */,
@@ -19794,7 +19883,7 @@
 				9F53D5492AD664C300CCF9D8 /* CPDFListHoverAnnotationViewController.swift in Sources */,
 				BBB3FF9A2B567D0300145C4A /* KMApplication.swift in Sources */,
 				9FDD0F862952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
-				BB96C42B2CE6DDB2003F3668 /* CPDFListView+Edit.swift in Sources */,
+				BB96C42B2CE6DDB2003F3668 /* CPDFListView+CPDFEditArea.swift in Sources */,
 				BB27BF3E2B33E85200A0BAAE /* CPDFView+KMExtension.swift in Sources */,
 				65B143A92CF06B97001B5A69 /* Array+KMExtensions.swift in Sources */,
 				BBDE52BD2BF3676C000545B2 /* KMPresentTableViewCell.swift in Sources */,

+ 86 - 116
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -3118,28 +3118,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2372"
-            endingLineNumber = "2372"
+            startingLineNumber = "2418"
+            endingLineNumber = "2418"
             landmarkName = "pdfViewPerformURL(_:withContent:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - d547a7773a9a0abc"
+                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - ce71ce32dece4aa"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewPerformURL(_: Swift.Optional&lt;__C.CPDFView&gt;, withContent: Swift.Optional&lt;Swift.String&gt;) -&gt; ()"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfViewEditingSelectionDidChanged(Swift.Optional&lt;__C.CPDFView&gt;) -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2372"
-                  endingLineNumber = "2372"
-                  offsetFromSymbolStart = "932">
+                  startingLineNumber = "2415"
+                  endingLineNumber = "2415"
+                  offsetFromSymbolStart = "36">
                </Location>
                <Location
-                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - d547a7773a9a0abc"
+                  uuid = "18021D19-EAF7-4279-A121-953E8941B3AE - d547a7773a9a008a"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3149,8 +3149,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2372"
-                  endingLineNumber = "2372"
+                  startingLineNumber = "2418"
+                  endingLineNumber = "2418"
                   offsetFromSymbolStart = "444">
                </Location>
             </Locations>
@@ -3198,58 +3198,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "628"
-            endingLineNumber = "628"
+            startingLineNumber = "674"
+            endingLineNumber = "674"
             landmarkName = "openPDFReadMode()"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - d95d9e29041543b3"
+                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - 72ef9428634125b6"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.openPDFReadMode() -&gt; ()"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.exitPresentationMode() -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "629"
-                  endingLineNumber = "629"
-                  offsetFromSymbolStart = "2308">
-               </Location>
-               <Location
-                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - d95d9e2904154390"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.openPDFReadMode() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "628"
-                  endingLineNumber = "628"
-                  offsetFromSymbolStart = "984">
-               </Location>
-               <Location
-                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - d95d9e2904154390"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.openPDFReadMode() -&gt; ()"
-                  moduleName = "PDF Reader Pro"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "628"
-                  endingLineNumber = "628"
-                  offsetFromSymbolStart = "1072">
+                  startingLineNumber = "673"
+                  endingLineNumber = "673"
+                  offsetFromSymbolStart = "48">
                </Location>
                <Location
-                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - d95d9e2904154390"
+                  uuid = "E7AD4267-48AC-4DD5-867F-6A958C288C52 - d95d9e2904154586"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3259,8 +3229,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "628"
-                  endingLineNumber = "628"
+                  startingLineNumber = "674"
+                  endingLineNumber = "674"
                   offsetFromSymbolStart = "2308">
                </Location>
             </Locations>
@@ -3324,28 +3294,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2854"
-            endingLineNumber = "2854"
+            startingLineNumber = "2900"
+            endingLineNumber = "2900"
             landmarkName = "pdfListViewMenuItemsEditing(at:for:menuItems:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "CA957B0F-74F0-4ECF-9BE5-F996315D44F7 - 55adff6b3ed3dbc"
+                  uuid = "CA957B0F-74F0-4ECF-9BE5-F996315D44F7 - 41b99e031fc7b108"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewMenuItemsEditing(at: __C.CGPoint, for: Swift.Optional&lt;__C.CPDFPage&gt;, menuItems: Swift.Optional&lt;Swift.Array&lt;__C.NSMenuItem&gt;&gt;) -&gt; Swift.Optional&lt;Swift.Array&lt;__C.NSMenuItem&gt;&gt;"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewMenu(forEvent: Swift.Optional&lt;__C.CPDFListView&gt;, for: Swift.Optional&lt;__C.NSEvent&gt;, click: Swift.Optional&lt;Swift.AutoreleasingUnsafeMutablePointer&lt;Swift.Optional&lt;__C.NSMenu&gt;&gt;&gt;, isMoveSelectAnno: Swift.Bool) -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2854"
-                  endingLineNumber = "2854"
-                  offsetFromSymbolStart = "312">
+                  startingLineNumber = "2898"
+                  endingLineNumber = "2898"
+                  offsetFromSymbolStart = "2956">
                </Location>
                <Location
-                  uuid = "CA957B0F-74F0-4ECF-9BE5-F996315D44F7 - 55adff6b3ed3dbc"
+                  uuid = "CA957B0F-74F0-4ECF-9BE5-F996315D44F7 - 55adff6b3ed3bce"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3355,8 +3325,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2854"
-                  endingLineNumber = "2854"
+                  startingLineNumber = "2900"
+                  endingLineNumber = "2900"
                   offsetFromSymbolStart = "136">
                </Location>
             </Locations>
@@ -3372,28 +3342,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2672"
-            endingLineNumber = "2672"
+            startingLineNumber = "2718"
+            endingLineNumber = "2718"
             landmarkName = "pdfListViewKeyDownIsContinue(_:theEvent:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 680781a588394e88"
+                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 3071b91268110009"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewKeyDownIsContinue(_: Swift.Optional&lt;__C.CPDFListView&gt;, theEvent: Swift.Optional&lt;__C.NSEvent&gt;) -&gt; Swift.Bool"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewMenuValidate(_: Swift.Optional&lt;__C.CPDFListView&gt;, menuItem: Swift.Optional&lt;__C.NSMenuItem&gt;, isTakesEffect: Swift.Optional&lt;Swift.UnsafeMutablePointer&lt;ObjectiveC.ObjCBool&gt;&gt;) -&gt; Swift.Bool"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2672"
-                  endingLineNumber = "2672"
-                  offsetFromSymbolStart = "10816">
+                  startingLineNumber = "2716"
+                  endingLineNumber = "2716"
+                  offsetFromSymbolStart = "1724">
                </Location>
                <Location
-                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 680781a588394e88"
+                  uuid = "E36E1A66-A8B1-4248-9550-68D820499376 - 680781a5883948e6"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3403,8 +3373,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2672"
-                  endingLineNumber = "2672"
+                  startingLineNumber = "2718"
+                  endingLineNumber = "2718"
                   offsetFromSymbolStart = "10596">
                </Location>
             </Locations>
@@ -3420,28 +3390,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "2813"
-            endingLineNumber = "2813"
+            startingLineNumber = "2859"
+            endingLineNumber = "2859"
             landmarkName = "pdfListViewChangeatioActiveAnnotations(_:forActiveAnnotations:isRightMenu:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "829A2007-5055-4924-B2CB-8003D30BE87C - f9f96c359432cae1"
+                  uuid = "829A2007-5055-4924-B2CB-8003D30BE87C - 55adff6b3ed3d51"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewChangeatioActiveAnnotations(_: Swift.Optional&lt;__C.CPDFListView&gt;, forActiveAnnotations: Swift.Optional&lt;Swift.Array&lt;__C.CPDFAnnotation&gt;&gt;, isRightMenu: Swift.Bool) -&gt; ()"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.pdfListViewMenuItemsEditing(at: __C.CGPoint, for: Swift.Optional&lt;__C.CPDFPage&gt;, menuItems: Swift.Optional&lt;Swift.Array&lt;__C.NSMenuItem&gt;&gt;) -&gt; Swift.Optional&lt;Swift.Array&lt;__C.NSMenuItem&gt;&gt;"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2813"
-                  endingLineNumber = "2813"
-                  offsetFromSymbolStart = "7532">
+                  startingLineNumber = "2857"
+                  endingLineNumber = "2857"
+                  offsetFromSymbolStart = "312">
                </Location>
                <Location
-                  uuid = "829A2007-5055-4924-B2CB-8003D30BE87C - f9f96c359432cae1"
+                  uuid = "829A2007-5055-4924-B2CB-8003D30BE87C - f9f96c359432b0f3"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3451,8 +3421,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "2813"
-                  endingLineNumber = "2813"
+                  startingLineNumber = "2859"
+                  endingLineNumber = "2859"
                   offsetFromSymbolStart = "7316">
                </Location>
             </Locations>
@@ -3500,28 +3470,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "3822"
-            endingLineNumber = "3822"
+            startingLineNumber = "3868"
+            endingLineNumber = "3868"
             landmarkName = "enterRedact()"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 541e1e6252d62f33"
+                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 6a923dbecae2d167"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "closure #3 (Swift.Bool, Swift.Int, Swift.Bool, Swift.Optional&lt;Foundation.URL&gt;) -&gt; () in PDF_Reader_Pro.KMMainViewController.enterRedact() -&gt; ()"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.showAITypeChooseView(aiConfigType: PDF_Reader_Pro.AIConfigType) -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "3822"
-                  endingLineNumber = "3822"
-                  offsetFromSymbolStart = "3420">
+                  startingLineNumber = "3867"
+                  endingLineNumber = "3867"
+                  offsetFromSymbolStart = "316">
                </Location>
                <Location
-                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 541e1e6252d62f33"
+                  uuid = "92759DD6-8CD9-4B54-BF74-D83EF6A6D5A5 - 541e1e6252d650c1"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3531,8 +3501,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "3822"
-                  endingLineNumber = "3822"
+                  startingLineNumber = "3868"
+                  endingLineNumber = "3868"
                   offsetFromSymbolStart = "3048">
                </Location>
             </Locations>
@@ -3548,28 +3518,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "4113"
-            endingLineNumber = "4113"
+            startingLineNumber = "4159"
+            endingLineNumber = "4159"
             landmarkName = "enterPageEdit(_:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 7653dda15f847f4d"
+                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 8dcf3461f25b292a"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "closure #1 (Swift.Bool, Swift.String) -&gt; () in PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
+                  symbolName = "closure #2 (Swift.Int, Any...) -&gt; () in PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4113"
-                  endingLineNumber = "4113"
-                  offsetFromSymbolStart = "736">
+                  startingLineNumber = "4156"
+                  endingLineNumber = "4156"
+                  offsetFromSymbolStart = "1108">
                </Location>
                <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 7653dda15f847f4d"
+                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 7653dda15f84755f"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3579,12 +3549,12 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4113"
-                  endingLineNumber = "4113"
+                  startingLineNumber = "4159"
+                  endingLineNumber = "4159"
                   offsetFromSymbolStart = "476">
                </Location>
                <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - e21379b039815af9"
+                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - e21379b0398150eb"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3594,12 +3564,12 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4113"
-                  endingLineNumber = "4113"
+                  startingLineNumber = "4159"
+                  endingLineNumber = "4159"
                   offsetFromSymbolStart = "100">
                </Location>
                <Location
-                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 3f6bfbcf2f6c9000"
+                  uuid = "C11A5EAB-3C0F-444C-8EDC-40823949B391 - 3f6bfbcf2f6c9a12"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3609,8 +3579,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4113"
-                  endingLineNumber = "4113"
+                  startingLineNumber = "4159"
+                  endingLineNumber = "4159"
                   offsetFromSymbolStart = "44">
                </Location>
             </Locations>
@@ -3626,28 +3596,28 @@
             filePath = "PDF Master/KMClass/KMPDFViewController/KMMainViewController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "4154"
-            endingLineNumber = "4154"
+            startingLineNumber = "4200"
+            endingLineNumber = "4200"
             landmarkName = "enterPageEdit(_:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 8dcf3461f25b26ec"
+                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - c6842c794ced26bd"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "closure #2 (Swift.Int, Any...) -&gt; () in PDF_Reader_Pro.KMMainViewController.enterPageEdit(Swift.Array&lt;Swift.Int&gt;) -&gt; ()"
+                  symbolName = "PDF_Reader_Pro.KMMainViewController.exitPageEdit() -&gt; ()"
                   moduleName = "PDF Reader Pro"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4154"
-                  endingLineNumber = "4154"
-                  offsetFromSymbolStart = "1544">
+                  startingLineNumber = "4198"
+                  endingLineNumber = "4198"
+                  offsetFromSymbolStart = "1848">
                </Location>
                <Location
-                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 7781c9841a673a14"
+                  uuid = "4E0E8246-D746-4D5F-A4A2-89C78AEA0880 - 7781c9841a673006"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -3657,8 +3627,8 @@
                   urlString = "file:///Users/kdanmobile/Documents/Git/PDF_Office/PDF%20Office/PDF%20Master/KMClass/KMPDFViewController/KMMainViewController.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "4154"
-                  endingLineNumber = "4154"
+                  startingLineNumber = "4200"
+                  endingLineNumber = "4200"
                   offsetFromSymbolStart = "544">
                </Location>
             </Locations>