瀏覽代碼

页面编辑-新增插入文件、插入空白页以及插入自定义页面和菜单部分功能

tangchao 2 年之前
父節點
當前提交
b7fcdb4359

+ 96 - 32
PDF Office/PDF Office.xcodeproj/project.pbxproj

@@ -1012,15 +1012,6 @@
 		BB1EC8112967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC80F2967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m */; };
 		BB1EC8122967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC80F2967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m */; };
 		BB1EC8132967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC80F2967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m */; };
-		BB1EC8162967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8152967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift */; };
-		BB1EC8172967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8152967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift */; };
-		BB1EC8182967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8152967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift */; };
-		BB1EC81B2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8192967F69800EC0BC3 /* KMPageEditThumbnailItem.swift */; };
-		BB1EC81C2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8192967F69800EC0BC3 /* KMPageEditThumbnailItem.swift */; };
-		BB1EC81D2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1EC8192967F69800EC0BC3 /* KMPageEditThumbnailItem.swift */; };
-		BB1EC81E2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC81A2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib */; };
-		BB1EC81F2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC81A2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib */; };
-		BB1EC8202967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB1EC81A2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib */; };
 		BB246DA428F6B492005E8F52 /* NSBezierPath_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = BB246DA328F6B492005E8F52 /* NSBezierPath_SKExtensions.m */; };
 		BB246DA528F6B492005E8F52 /* NSBezierPath_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = BB246DA328F6B492005E8F52 /* NSBezierPath_SKExtensions.m */; };
 		BB246DA628F6B492005E8F52 /* NSBezierPath_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = BB246DA328F6B492005E8F52 /* NSBezierPath_SKExtensions.m */; };
@@ -1036,6 +1027,33 @@
 		BB2EDF46296E4618003BCF58 /* KMPageEditTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF45296E4618003BCF58 /* KMPageEditTools.swift */; };
 		BB2EDF47296E4618003BCF58 /* KMPageEditTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF45296E4618003BCF58 /* KMPageEditTools.swift */; };
 		BB2EDF48296E4618003BCF58 /* KMPageEditTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF45296E4618003BCF58 /* KMPageEditTools.swift */; };
+		BB2EDF4C296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */; };
+		BB2EDF4D296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */; };
+		BB2EDF4E296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */; };
+		BB2EDF4F296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */; };
+		BB2EDF50296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */; };
+		BB2EDF51296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */; };
+		BB2EDF54296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */; };
+		BB2EDF55296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */; };
+		BB2EDF56296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */; };
+		BB2EDF6A296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */; };
+		BB2EDF6B296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */; };
+		BB2EDF6C296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */; };
+		BB2EDF6D296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
+		BB2EDF6E296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
+		BB2EDF6F296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */; };
+		BB2EDF70296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
+		BB2EDF71296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
+		BB2EDF72296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */; };
+		BB2EDF73296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
+		BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
+		BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */; };
+		BB2EDF76296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */; };
+		BB2EDF77296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */; };
+		BB2EDF78296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */; };
+		BB2EDF79296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */; };
+		BB2EDF7A296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */; };
+		BB2EDF7B296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */; };
 		BB2F61502966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2F614E2966A91D001CB369 /* KMBackgroundPropertyHomeController.swift */; };
 		BB2F61512966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2F614E2966A91D001CB369 /* KMBackgroundPropertyHomeController.swift */; };
 		BB2F61522966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2F614E2966A91D001CB369 /* KMBackgroundPropertyHomeController.swift */; };
@@ -2215,9 +2233,6 @@
 		BB1EC80B2967DFE800EC0BC3 /* NSNumber_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSNumber_SKExtensions.m; sourceTree = "<group>"; };
 		BB1EC80F2967EB5A00EC0BC3 /* KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KMPageEditThumbnailViewKMPageEditThumbnailView_OC.m; sourceTree = "<group>"; };
 		BB1EC8102967EB5A00EC0BC3 /* KMPageEditThumbnailView_OC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMPageEditThumbnailView_OC.h; sourceTree = "<group>"; };
-		BB1EC8152967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailView.swift; sourceTree = "<group>"; };
-		BB1EC8192967F69800EC0BC3 /* KMPageEditThumbnailItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailItem.swift; sourceTree = "<group>"; };
-		BB1EC81A2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPageEditThumbnailItem.xib; sourceTree = "<group>"; };
 		BB246DA228F6B492005E8F52 /* NSBezierPath_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSBezierPath_SKExtensions.h; sourceTree = "<group>"; };
 		BB246DA328F6B492005E8F52 /* NSBezierPath_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSBezierPath_SKExtensions.m; sourceTree = "<group>"; };
 		BB2C6A7828F26A1500478A33 /* ComPDFKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ComPDFKit.framework; sourceTree = "<group>"; };
@@ -2227,6 +2242,15 @@
 		BB2C6AC728F4085200478A33 /* CPDFListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CPDFListView.h; sourceTree = "<group>"; };
 		BB2C6AC828F4085200478A33 /* CPDFListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPDFListView.m; sourceTree = "<group>"; };
 		BB2EDF45296E4618003BCF58 /* KMPageEditTools.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditTools.swift; sourceTree = "<group>"; };
+		BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertCustomPageWindowController.swift; sourceTree = "<group>"; };
+		BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMPageEditInsertCustomPageWindowController.xib; sourceTree = "<group>"; };
+		BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPageEditBaseItemView.swift; sourceTree = "<group>"; };
+		BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertTypeItemView.swift; sourceTree = "<group>"; };
+		BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertDirectionItemView.swift; sourceTree = "<group>"; };
+		BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailView.swift; sourceTree = "<group>"; };
+		BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPageEditThumbnailItem.xib; sourceTree = "<group>"; };
+		BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditInsertPageSizeItemView.swift; sourceTree = "<group>"; };
+		BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMPageEditThumbnailItem.swift; sourceTree = "<group>"; };
 		BB2F614E2966A91D001CB369 /* KMBackgroundPropertyHomeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBackgroundPropertyHomeController.swift; sourceTree = "<group>"; };
 		BB2F614F2966A91D001CB369 /* KMBackgroundPropertyHomeController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMBackgroundPropertyHomeController.xib; sourceTree = "<group>"; };
 		BB2F61562966B69D001CB369 /* KMWatermarkPropertyHomeController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMWatermarkPropertyHomeController.swift; sourceTree = "<group>"; };
@@ -3729,8 +3753,10 @@
 		BB1EC7FA2967B24100EC0BC3 /* PageEdit */ = {
 			isa = PBXGroup;
 			children = (
+				BB2EDF63296ECE17003BCF58 /* View */,
+				BB2EDF52296E8140003BCF58 /* Base */,
+				BB2EDF49296E6373003BCF58 /* Window */,
 				BB2EDF44296E45FD003BCF58 /* Tools */,
-				BB1EC8142967F4A700EC0BC3 /* View */,
 				BB1EC8042967D32700EC0BC3 /* OCPart */,
 				BB1EC7FB2967B24100EC0BC3 /* Controller */,
 			);
@@ -3757,16 +3783,6 @@
 			path = OCPart;
 			sourceTree = "<group>";
 		};
-		BB1EC8142967F4A700EC0BC3 /* View */ = {
-			isa = PBXGroup;
-			children = (
-				BB1EC8152967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift */,
-				BB1EC8192967F69800EC0BC3 /* KMPageEditThumbnailItem.swift */,
-				BB1EC81A2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib */,
-			);
-			path = View;
-			sourceTree = "<group>";
-		};
 		BB2C6A7128F2652500478A33 /* Class */ = {
 			isa = PBXGroup;
 			children = (
@@ -3848,6 +3864,36 @@
 			path = Tools;
 			sourceTree = "<group>";
 		};
+		BB2EDF49296E6373003BCF58 /* Window */ = {
+			isa = PBXGroup;
+			children = (
+				BB2EDF4A296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift */,
+				BB2EDF4B296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib */,
+			);
+			path = Window;
+			sourceTree = "<group>";
+		};
+		BB2EDF52296E8140003BCF58 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				BB2EDF53296E815E003BCF58 /* KMPageEditBaseItemView.swift */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
+		BB2EDF63296ECE17003BCF58 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				BB2EDF64296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift */,
+				BB2EDF65296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift */,
+				BB2EDF66296ECE17003BCF58 /* KMPageEditThumbnailView.swift */,
+				BB2EDF67296ECE17003BCF58 /* KMPageEditThumbnailItem.xib */,
+				BB2EDF68296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift */,
+				BB2EDF69296ECE17003BCF58 /* KMPageEditThumbnailItem.swift */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
 		BB3EAEA9293E3BA200D92407 /* Convert */ = {
 			isa = PBXGroup;
 			children = (
@@ -5006,6 +5052,7 @@
 				AD44D656292C9E8C00A94554 /* KMImageToPDFChooseView.xib in Resources */,
 				9F1FE4E729406E4700E952CA /* COPYING in Resources */,
 				BB897237294B38DC0045787C /* KMWatermarkAdjectivePropertyBaseController.xib in Resources */,
+				BB2EDF4F296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				89E4E7412964160F002DBA6F /* KMAnnotationLinkViewController.xib in Resources */,
 				9F1FE3F4293F4F0F00E952CA /* Info.plist in Resources */,
 				89D9896F28FD50EF003A3E87 /* KMAnnotationCollectionViewItem.xib in Resources */,
@@ -5059,6 +5106,7 @@
 				89752DB02936F505003FF08E /* KMCustomButtonPopMenuViewController.xib in Resources */,
 				89316825296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
 				9FBA0EE928FFC2FE001117AF /* Image.xcassets in Resources */,
+				BB2EDF73296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB49ED09293F461500C82CA2 /* KMConvertCSVWindowController.xib in Resources */,
 				9F1F82D5292F6D510092C4B4 /* KMPDFInsertPreviewViewController.xib in Resources */,
 				ADD1B6BF2942DD3D00C3FFF7 /* KMPrintChooseView.xib in Resources */,
@@ -5087,7 +5135,6 @@
 				9F8539CE29430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				9F0CB49229683DEE00007028 /* KMPropertiesPanelLineSubVC.xib in Resources */,
 				BB8B17362907B64D001C5EA5 /* CipherTextView.xib in Resources */,
-				BB1EC81E2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */,
 				BBC348562958465C008D2CD1 /* KMBackgroundFilePropertyInfoController.xib in Resources */,
 				9F1F82B7292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
 				9F853A022947137500DF644E /* default-icon.pdf in Resources */,
@@ -5182,7 +5229,6 @@
 				89E4E76529656A88002DBA6F /* KMAnnotationStampViewController.xib in Resources */,
 				BB49ED02293F459500C82CA2 /* KMConvertPPTsWindowController.xib in Resources */,
 				BB8F455B295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.xib in Resources */,
-				BB1EC81F2967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */,
 				F3A9DC82294309D80074E5D2 /* CPDFListEditAnnotationViewController.xib in Resources */,
 				8942F7F42926087200389627 /* KMSearchViewController.xib in Resources */,
 				9FAAA336290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.xib in Resources */,
@@ -5235,6 +5281,7 @@
 				AD4B4551294072B90076FA14 /* KMOCRWindowController.xib in Resources */,
 				F359917C292B7B8A000D25DE /* InitialUserDefaults.plist in Resources */,
 				BBFBE74A28DD7DDD008B2335 /* Main.storyboard in Resources */,
+				BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB897232294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				9FBA0EE528FEC253001117AF /* KMProductPromotionViewController.xib in Resources */,
 				ADD1B6AF2941E97F00C3FFF7 /* KMPrintWindowController.xib in Resources */,
@@ -5303,6 +5350,7 @@
 				ADD1B6FD2946C0D400C3FFF7 /* KMPrintChoosePageSizePamphletView.xib in Resources */,
 				8942F7B32921D28200389627 /* Quick Start Guide.pdf in Resources */,
 				89316826296D73CC0073EA59 /* KMSignatureAnnotationViewController.xib in Resources */,
+				BB2EDF50296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				9F1F82B8292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
 				BBFE6E612930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
 				BB89723E294B3C840045787C /* KMWatermarkPropertyController.xib in Resources */,
@@ -5448,6 +5496,7 @@
 				89E4E77E2967B370002DBA6F /* KMDynamicStampViewController.xib in Resources */,
 				ADC25DFE2923BA710080A3F6 /* KMImageToPDFWindowController.xib in Resources */,
 				BBC2BCCB295DA8F30036B983 /* KMCropPreviewController.xib in Resources */,
+				BB2EDF51296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.xib in Resources */,
 				BB99ACD4292E2AEF0048AFD9 /* KMMergeCollectionViewItem.xib in Resources */,
 				9F0CB4A429683E2600007028 /* KMPropertiesPanelSizeSubVC.xib in Resources */,
 				9F8539FE2947137500DF644E /* throbber_waiting.png in Resources */,
@@ -5465,10 +5514,10 @@
 				9FDD0FA42952FF4D000C4DAD /* $themes.json in Resources */,
 				BB99ACC7292DE22E0048AFD9 /* KMMergeViewController.xib in Resources */,
 				9F1F82CF292F6CF90092C4B4 /* KMPDFInsertPageWindow.xib in Resources */,
-				BB1EC8202967F69800EC0BC3 /* KMPageEditThumbnailItem.xib in Resources */,
 				9FAAA32F290BD01D0046FFCE /* KMHomeHistoryFileViewController.xib in Resources */,
 				89D2D300294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				AD4B4552294072B90076FA14 /* KMOCRWindowController.xib in Resources */,
+				BB2EDF75296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB8F4554295A9FA50037EA22 /* KMCreateHeaderFooterController.xib in Resources */,
 				BB897263294C5DDA0045787C /* KMWatermarkPropertyInfoController.xib in Resources */,
 				9F8539F82947137500DF644E /* sadfavicon.png in Resources */,
@@ -5552,6 +5601,7 @@
 				F373230E292DF9410013862C /* CPDFInkAnnotation+PDFListView.m in Sources */,
 				F359916929261F0D000D25DE /* CPDFListView+Tool.m in Sources */,
 				9F0CB47F2967F64D00007028 /* KMPropertiesPanelReadOnlySubVC.swift in Sources */,
+				BB2EDF76296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */,
 				9F1FE49F29406E4700E952CA /* HoverButton.m in Sources */,
 				F37322F0292DF9410013862C /* CPDFButtonWidgetAnnotation+PDFListView.m in Sources */,
 				F34BF93029530559002C25A2 /* NSBitmapImageRep+PDFListView.m in Sources */,
@@ -5646,6 +5696,7 @@
 				9F1FE4BD29406E4700E952CA /* URLDropTarget.m in Sources */,
 				8942F80329262B2E00389627 /* KMSideViewController.swift in Sources */,
 				899700FE28F40710009AF911 /* KMBookMarkViewController.swift in Sources */,
+				BB2EDF6D296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */,
 				F34BF94E29531213002C25A2 /* NSGraphics+PDFListView.m in Sources */,
 				9F1FE4A829406E4700E952CA /* CTBrowserWindowController.m in Sources */,
 				89D9897828FE895A003A3E87 /* KMOutlineCellView.swift in Sources */,
@@ -5720,6 +5771,7 @@
 				BBC348432956A638008D2CD1 /* KMEditBackgroundController.swift in Sources */,
 				89E4E74B2964216F002DBA6F /* NSString_SKExtensions.m in Sources */,
 				9F0CB49F29683E2600007028 /* KMPropertiesPanelSizeSubVC.swift in Sources */,
+				BB2EDF54296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */,
 				9F1FE4EA29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
 				89752DB32936F505003FF08E /* KMCustomButtonPopMenuViewController.m in Sources */,
 				ADD1B6BB29420B4A00C3FFF7 /* KMPrintPreviewView.swift in Sources */,
@@ -5734,7 +5786,6 @@
 				ADB2D6ED2947415E0029D2B3 /* KMPrintPaperSetView.swift in Sources */,
 				BB3EAEAD293E3D6000D92407 /* KMConvertBaseWindowController.swift in Sources */,
 				BB2F61582966B69D001CB369 /* KMWatermarkPropertyHomeController.swift in Sources */,
-				BB1EC8162967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */,
 				9F1FE4A529406E4700E952CA /* CTToolbarView.m in Sources */,
 				BB162E92294FFE020088E9D1 /* KMWatermarkModel.swift in Sources */,
 				9FDD0F842952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
@@ -5783,11 +5834,11 @@
 				BBC3483B2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				ADB2D6E6294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				BB897271294DB6BE0045787C /* KMWatermarkAdjectivePlainView.swift in Sources */,
-				BB1EC81B2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */,
 				BB6B4C0C292F62B20071CA06 /* KMPDFThumbnialPageView.swift in Sources */,
 				BB2EDF46296E4618003BCF58 /* KMPageEditTools.swift in Sources */,
 				BB162E8E294FFC0C0088E9D1 /* KMWatermarkPDFView.swift in Sources */,
 				BB49ED15293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
+				BB2EDF79296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				89E4E6FB2963D341002DBA6F /* KMPopUpButton.m in Sources */,
 				899700E828F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				F3732302292DF9410013862C /* CPDFLinkAnnotation+PDFListView.m in Sources */,
@@ -5862,6 +5913,7 @@
 				89E4E6E32963CD82002DBA6F /* KMGeneralAnnotationViewController.m in Sources */,
 				ADC25DF92923BA710080A3F6 /* KMImageToPDFWindowController.swift in Sources */,
 				9F1FE4F029406E4700E952CA /* BackgroundGradientView.m in Sources */,
+				BB2EDF70296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				89752DBD2936FAD0003FF08E /* NSWindow+PopOver.m in Sources */,
 				9F1FE4A229406E4700E952CA /* CTToolbarController.m in Sources */,
 				ADCB98C52924730000B51A03 /* KMBatchProcessingTableViewModel.swift in Sources */,
@@ -5892,6 +5944,7 @@
 				AD9527C2295294EF0039D2BC /* KMPrintPaperModel.swift in Sources */,
 				BB86C20A28F5569F005AD968 /* NSGeometry_SKExtensions.m in Sources */,
 				AD4B45712940B0000076FA14 /* KMOCRModel.swift in Sources */,
+				BB2EDF6A296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
 				89E4E7002963D4A0002DBA6F /* KMComboBox.m in Sources */,
 				ADCB98D92924774F00B51A03 /* KMBatchProcessingOrderTableCell.swift in Sources */,
 				F34BF93529530708002C25A2 /* NSImage+PDFListView.m in Sources */,
@@ -5908,6 +5961,7 @@
 				9F1FE4AB29406E4700E952CA /* CTBrowserWindow.m in Sources */,
 				89E4E76929656B35002DBA6F /* KMButton.m in Sources */,
 				BBFE6E65293097A600142C01 /* KMPageRangePickerWindowController.swift in Sources */,
+				BB2EDF4C296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */,
 				8997010E28F40842009AF911 /* KMOutlineViewController.swift in Sources */,
 				BB2F61502966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */,
 				9F1FE3DE293EE51F00E952CA /* KMMainDocument.swift in Sources */,
@@ -5982,6 +6036,7 @@
 				BB99ACD0292E2AEF0048AFD9 /* KMMergeCollectionViewItem.swift in Sources */,
 				BB89DD7F2953F863007C3FFA /* KMWatermarkFileOutsideView.swift in Sources */,
 				9F0CB4802967F64D00007028 /* KMPropertiesPanelReadOnlySubVC.swift in Sources */,
+				BB2EDF77296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */,
 				9F1F82DB292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				BB86C1EE28F544F4005AD968 /* CPDFListView+Event.m in Sources */,
 				9F1FE4A029406E4700E952CA /* HoverButton.m in Sources */,
@@ -6076,6 +6131,7 @@
 				89D9897928FE895A003A3E87 /* KMOutlineCellView.swift in Sources */,
 				9F1FE4D629406E4700E952CA /* NSPasteboard+Utils.m in Sources */,
 				9F1FE4B229406E4700E952CA /* CTTabWindowController.m in Sources */,
+				BB2EDF6E296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */,
 				F3732334292F7B8D0013862C /* CStampSignatureObject.m in Sources */,
 				9F1FE4BE29406E4700E952CA /* URLDropTarget.m in Sources */,
 				9F705F8A291E576D005199AD /* KMTableView.swift in Sources */,
@@ -6150,6 +6206,7 @@
 				BBC348442956A638008D2CD1 /* KMEditBackgroundController.swift in Sources */,
 				89E4E74C2964216F002DBA6F /* NSString_SKExtensions.m in Sources */,
 				9F0CB4A029683E2600007028 /* KMPropertiesPanelSizeSubVC.swift in Sources */,
+				BB2EDF55296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */,
 				BB89727A294DFD1E0045787C /* KMWatermarkTextView.swift in Sources */,
 				9F1F82D3292F6D510092C4B4 /* KMPDFInsertPreviewViewController.swift in Sources */,
 				9F78EFBC28F7C1CC001E66F4 /* KMHomeViewController.swift in Sources */,
@@ -6164,7 +6221,6 @@
 				BBFE6E592930724B00142C01 /* KMMergePageModel.swift in Sources */,
 				9F1F82F8293D8F9D0092C4B4 /* KMDocumentController.swift in Sources */,
 				BB2F61592966B69D001CB369 /* KMWatermarkPropertyHomeController.swift in Sources */,
-				BB1EC8172967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */,
 				BBA8B7B0293600D70097D183 /* KMPasswordInputWindow.swift in Sources */,
 				F3732309292DF9410013862C /* CPDFLineAnnotation+PDFListView.m in Sources */,
 				F34BF927295303E8002C25A2 /* NSCursor+PDFListView.m in Sources */,
@@ -6213,11 +6269,11 @@
 				BBC3483C2955A60B008D2CD1 /* KMBackgroundPropertyInfoController.swift in Sources */,
 				BB49ED07293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				9FDD0F852952FC9C000C4DAD /* KMAliasLightParser.swift in Sources */,
-				BB1EC81C2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */,
 				ADB2D6E7294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				BB2EDF47296E4618003BCF58 /* KMPageEditTools.swift in Sources */,
 				9FAAA32B290BD01D0046FFCE /* KMHomeHistoryFileViewController.swift in Sources */,
 				BB49ED16293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
+				BB2EDF7A296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				89E4E6FC2963D341002DBA6F /* KMPopUpButton.m in Sources */,
 				9FBA0EF628FFC8A0001117AF /* KMCollectionView.swift in Sources */,
 				F37322DC292DF9410013862C /* CPDFPage+PDFListView.m in Sources */,
@@ -6292,6 +6348,7 @@
 				89E4E6E42963CD82002DBA6F /* KMGeneralAnnotationViewController.m in Sources */,
 				89752DBE2936FAD0003FF08E /* NSWindow+PopOver.m in Sources */,
 				9F1FE4A329406E4700E952CA /* CTToolbarController.m in Sources */,
+				BB2EDF71296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				9F78EFC328F7E395001E66F4 /* KMHomeViewController+Action.swift in Sources */,
 				9F1FE50029406E4700E952CA /* CTTabStripModel.m in Sources */,
 				9F1FE4CA29406E4700E952CA /* CTTabContents.m in Sources */,
@@ -6322,6 +6379,7 @@
 				ADD1B70B29471FA500C3FFF7 /* KMPrintChoosePresenter.swift in Sources */,
 				ADCB98E22924776F00B51A03 /* KMBatchProcessingSizeTableCell.swift in Sources */,
 				89752DF329389F82003FF08E /* KMToolbarItem.m in Sources */,
+				BB2EDF6B296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
 				89E4E7012963D4A0002DBA6F /* KMComboBox.m in Sources */,
 				F34BF93129530559002C25A2 /* NSBitmapImageRep+PDFListView.m in Sources */,
 				BB49ECEA293F32A400C82CA2 /* KMConvertWordSettingView.swift in Sources */,
@@ -6338,6 +6396,7 @@
 				ADCB98E22924776F00B51A03 /* KMBatchProcessingSizeTableCell.swift in Sources */,
 				89E4E76A29656B35002DBA6F /* KMButton.m in Sources */,
 				8942F80F29277BAF00389627 /* NSMenu+Category.m in Sources */,
+				BB2EDF4D296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */,
 				8997010F28F40842009AF911 /* KMOutlineViewController.swift in Sources */,
 				BB2F61512966A91D001CB369 /* KMBackgroundPropertyHomeController.swift in Sources */,
 				9F1FE3DF293EE51F00E952CA /* KMMainDocument.swift in Sources */,
@@ -6373,7 +6432,6 @@
 				F3732307292DF9410013862C /* CPDFSquareAnnotation+PDFListView.m in Sources */,
 				9F78EFC828F7E965001E66F4 /* KMHomeViewController+UI.swift in Sources */,
 				9FBA0EFB2900188F001117AF /* KMFastToolCollectionView.swift in Sources */,
-				BB1EC81D2967F69800EC0BC3 /* KMPageEditThumbnailItem.swift in Sources */,
 				9F1F82DC292F84D60092C4B4 /* KMHomeInsertActionViewController.swift in Sources */,
 				9F1FE51329407B4000E952CA /* KMFileSearchView.swift in Sources */,
 				BBEC00B1295C2AF300A26C98 /* KMBatesPreviewController.swift in Sources */,
@@ -6426,6 +6484,7 @@
 				9F1F82F429373D6E0092C4B4 /* String+KMExtensions.swift in Sources */,
 				F3B7DF9C2948565000333201 /* CPDFListHoverAnnotationViewController.m in Sources */,
 				9FDD0FB429534FEA000C4DAD /* KMGlobal.swift in Sources */,
+				BB2EDF78296ECE17003BCF58 /* KMPageEditInsertPageSizeItemView.swift in Sources */,
 				BB6DD823293497B6001F0544 /* KMSecureEncryptModel.swift in Sources */,
 				89D2D2E0294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
 				9FAAA334290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
@@ -6479,6 +6538,7 @@
 				89752E1B2941FD48003FF08E /* KMSearchCellView.swift in Sources */,
 				BB6DD81E29348F31001F0544 /* KMSecureTextFiled.swift in Sources */,
 				89E4E752296427C8002DBA6F /* NSURL_SKExtensions.m in Sources */,
+				BB2EDF7B296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				BB49ED10293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				BBF38A60294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				89E4E76329656A88002DBA6F /* KMAnnotationStampViewController.m in Sources */,
@@ -6494,6 +6554,7 @@
 				AD9527CC295297B70039D2BC /* KMPrintModel.swift in Sources */,
 				9F1FE4B929406E4700E952CA /* CTBrowserFrameView.m in Sources */,
 				BB2C6ACF28F41BA000478A33 /* CPDFListView.m in Sources */,
+				BB2EDF6C296ECE17003BCF58 /* KMPageEditInsertTypeItemView.swift in Sources */,
 				9F1FE4D729406E4700E952CA /* NSPasteboard+Utils.m in Sources */,
 				9F1FE4B329406E4700E952CA /* CTTabWindowController.m in Sources */,
 				BBFE6E812930EBD400142C01 /* KMCompressWindowController.swift in Sources */,
@@ -6603,6 +6664,7 @@
 				BB8F4588295B19AC0037EA22 /* KMHeaderFooterDateInfoView.swift in Sources */,
 				F37322E3292DF9410013862C /* CPDFChoiceWidgetAnnotation+PDFListView.m in Sources */,
 				89D2D2BF29486D2400BFF5FE /* KMSignatureCellView.swift in Sources */,
+				BB2EDF56296E815E003BCF58 /* KMPageEditBaseItemView.swift in Sources */,
 				9F1FE49829406E4700E952CA /* common.c in Sources */,
 				F3599224292CA27B000D25DE /* CPDFListViewRuntime.m in Sources */,
 				ADD1B6E12946BFD500C3FFF7 /* KMPrintChoosePageSizeSizeView.swift in Sources */,
@@ -6637,7 +6699,6 @@
 				BB49ED08293F461500C82CA2 /* KMConvertCSVWindowController.swift in Sources */,
 				ADB2D6E8294740F30029D2B3 /* KMPrintPaperSetWindowController.swift in Sources */,
 				89E4E7372964148E002DBA6F /* KMAnnotationPropertiesViewController.m in Sources */,
-				BB1EC8182967F4CA00EC0BC3 /* KMPageEditThumbnailView.swift in Sources */,
 				F37322F8292DF9410013862C /* CSelfSignAnnotation.m in Sources */,
 				BB8F457C295AFB330037EA22 /* KMHeaderFooterFontInfoView.swift in Sources */,
 				BB8F4584295B0F900037EA22 /* KMHeaderFooterMarginInfoView.swift in Sources */,
@@ -6667,6 +6728,7 @@
 				89E4E7152963D7FF002DBA6F /* NSFont_SKExtensions.m in Sources */,
 				AD9527D92952ED970039D2BC /* KMPrintPresenter_C.swift in Sources */,
 				BB1AF3F42938AD8B00EEC459 /* KMCustomAlertView.swift in Sources */,
+				BB2EDF6F296ECE17003BCF58 /* KMPageEditInsertDirectionItemView.swift in Sources */,
 				8942F80529262B2E00389627 /* KMSideViewController.swift in Sources */,
 				8942F819292B678100389627 /* KMAnnotationTableCellView.swift in Sources */,
 				BB162E99295062CD0088E9D1 /* KMPageRangeTools.swift in Sources */,
@@ -6691,6 +6753,7 @@
 				BB49ED00293F459500C82CA2 /* KMConvertPPTsWindowController.swift in Sources */,
 				BB0542172965705D00F2665C /* KMCropTipView.swift in Sources */,
 				BB89726F294DB67D0045787C /* KMWatermarkAdjectiveBaseView.swift in Sources */,
+				BB2EDF4E296E63E5003BCF58 /* KMPageEditInsertCustomPageWindowController.swift in Sources */,
 				9FBA0EF728FFC8A0001117AF /* KMCollectionView.swift in Sources */,
 				BB897226294B07960045787C /* KMWatermarkAdjectiveTopBarItemView.swift in Sources */,
 				89D2D2C7294972B900BFF5FE /* KMFormCellView.swift in Sources */,
@@ -6769,6 +6832,7 @@
 				BB6DD8272934D056001F0544 /* KMSecureEncryptSuccessTipView.swift in Sources */,
 				BBEC00C1295C306400A26C98 /* KMBatesPropertyController.swift in Sources */,
 				89E4E7242963FB23002DBA6F /* KMGeneralButton.m in Sources */,
+				BB2EDF72296ECE17003BCF58 /* KMPageEditThumbnailView.swift in Sources */,
 				9F1FE3E0293EE51F00E952CA /* KMMainDocument.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

二進制
PDF Office/PDF Office.xcodeproj/project.xcworkspace/xcuserdata/kdanmobile.xcuserdatad/UserInterfaceState.xcuserstate


+ 0 - 16
PDF Office/PDF Office.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -244,21 +244,5 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "640577FD-D917-4E54-A602-5A4E5D77D2EB"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "183"
-            endingLineNumber = "183"
-            landmarkName = "pastePages(at:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 59 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Base/KMPageEditBaseItemView.swift

@@ -0,0 +1,59 @@
+//
+//  KMPageEditBaseItemView.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/11.
+//
+
+import Cocoa
+
+typealias KMPageEditItemViewItemClick = (_ index: Int, _ value: Any) -> ()
+class KMPageEditBaseItemView: NSView {
+
+    lazy var titleLabel: NSTextField = {
+        let label = NSTextField(labelWithString: "")
+        label.font = NSFont.systemFont(ofSize: 14)
+        return label
+    }()
+    
+    private var myContentInset: NSEdgeInsets = NSEdgeInsetsMake(8, 16, 0, 0)
+    var contentInset: NSEdgeInsets {
+        get {
+            return myContentInset
+        }
+        set {
+            self.myContentInset = newValue
+            
+            self.layoutSubtreeIfNeeded()
+        }
+    }
+    
+    var itemClick: KMPageEditItemViewItemClick!
+    
+    override var isFlipped: Bool {
+        return true
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        
+        initSubviews()
+    }
+    
+    required init?(coder: NSCoder) {
+        super.init(coder: coder)
+        
+        initSubviews()
+    }
+    
+    public func initSubviews() {
+        self.addSubview(self.titleLabel)
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        self.titleLabel.frame = NSMakeRect(self.contentInset.left, self.contentInset.top, NSWidth(self.bounds)-self.contentInset.left-self.contentInset.right, 22)
+    }
+    
+}

+ 84 - 3
PDF Office/PDF Office/Class/PDFTools/PageEdit/Controller/KMPDFEditViewController.swift

@@ -71,6 +71,8 @@ class KMPDFEditViewController: NSViewController, KMPDFThumbnailViewDelegate {
     var itemClick: KMPDFEditViewItemClick!
     var copysPages: Array<CPDFPage> = []
     
+    var windowController: NSWindowController!
+    
     required init?(coder: NSCoder) {
         super.init(coder: coder)
     }
@@ -252,8 +254,81 @@ class KMPDFEditViewController: NSViewController, KMPDFThumbnailViewDelegate {
         self.thumbnailView.refreshUI()
     }
     
-    @objc func item_customPage(sender: NSMenuItem?) {
+    @objc func item_insertCustomPage(sender: NSMenuItem?) {
+        let windowController = KMPageEditInsertCustomPageWindowController(windowNibName: "KMPageEditInsertCustomPageWindowController")
+        if (self.thumbnailView.getSelectedPages().count > 0) {
+            windowController.selectedPageSize = self.getSelectedPage().bounds.size
+        }
         
+        self.windowController = windowController
+        self.view.window?.beginSheet(windowController.window!, completionHandler: { response in})
+        
+        windowController.itemClick = {
+            [weak self] (index: Int) in
+            
+            if (index == 1) { /// 取消
+                self?.view.window?.endSheet((self?.windowController.window)!)
+                self?.windowController = nil
+                return
+            }
+            
+            /// 插入
+            /// 样式
+            let windowController_Insert: KMPageEditInsertCustomPageWindowController = self?.windowController as! KMPageEditInsertCustomPageWindowController
+            let type = windowController_Insert.typeIndex
+            
+            /// 页面大小
+            let pageSize = windowController_Insert.pageSize
+            
+            /// 方向
+            let direction = windowController_Insert.direction
+            
+            /// 插入位置
+            let insertIndex: Int = (self?.getSelecteIndex())!
+            if (type == 1) { /// 空白页
+//                let page = CPDFPage()
+//                page.setBounds(NSMakeRect(0, 0, pageSize.width, pageSize.height), for: .cropBox)
+
+//                if (direction == 1) { /// 横向
+//                    page.rotation = 90
+//                }
+                let document = CPDFDocument()
+                document?.insertPage(pageSize, at: 0)
+                let page = document?.page(at: 0)
+                
+                if (direction == 1) { /// 横向
+                    page!.rotation = 90
+                }
+                
+
+//                let result = self?.listView?.document.insertPageObject(page, at: UInt(insertIndex))
+                let result = self!.listView?.document.importPages(IndexSet(integer: 0), from: document, at: UInt(insertIndex))
+                self?.listView?.layoutDocumentView()
+                self?.thumbnailView.refreshUI()
+            } else {
+//                let page = CPDFPage(image: nil)
+//                page!.setBounds(NSMakeRect(0, 0, pageSize.width, pageSize.height), for: .cropBox)
+
+//                if (direction == 1) { /// 横向
+//                    page!.rotation = 90
+//                }
+                
+                let document = CPDFDocument()
+                document?.insertPage(pageSize, withImage: nil, at: 0)
+                let page = document?.page(at: 0)
+                
+                if (direction == 1) { /// 横向
+                    page!.rotation = 90
+                }
+
+                self?.listView?.document.insertPageObject(page, at: UInt(insertIndex))
+                self?.listView?.layoutDocumentView()
+                self?.thumbnailView.refreshUI()
+            }
+            
+            self?.view.window?.endSheet((self?.windowController.window)!)
+            self?.windowController = nil
+        }
     }
     
     // MARK: toolBar 菜单事件
@@ -276,7 +351,7 @@ class KMPDFEditViewController: NSViewController, KMPDFThumbnailViewDelegate {
         menu.addItem(insertFileItem!)
         let insertBlankPageItem = NSMenuItem(title: "插入空白页", action: #selector(item_insertBlankPage), target: self)
         menu.addItem(insertBlankPageItem!)
-        let insertCustomPageItem = NSMenuItem(title: "插入自定义页面", action: #selector(item_customPage), target: self)
+        let insertCustomPageItem = NSMenuItem(title: "插入自定义页面", action: #selector(item_insertCustomPage), target: self)
         menu.addItem(insertCustomPageItem!)
         menu.popUp(positioning: nil, at: NSPoint(x: 0, y: 40), in: sender)
     }
@@ -451,7 +526,13 @@ extension KMPDFEditViewController: KMNewToolbarDelegate {
     //MARK: menu Action
     
     @objc func insertPageItemAction(menu:NSMenuItem) {
-        
+        if (menu.tag == 0) {
+            self.item_insertFile(sender: nil)
+        } else if (menu.tag == 1) {
+            self.item_insertBlankPage(sender: nil)
+        } else if (menu.tag == 2) {
+            self.item_insertCustomPage(sender: nil)
+        }
     }
     
     @objc func rotatePageItemAction(menu:NSMenuItem) {

+ 51 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Tools/KMPageEditTools.swift

@@ -7,6 +7,12 @@
 
 import Cocoa
 
+enum KMPageSizeUint: String {
+case mm = "mm"
+case cm = "cm"
+case km_in = "in"
+}
+
 class KMPageEditTools: NSObject {
     class func insert(_ document: CPDFDocument, _ index: Int, _ pages: Array<CPDFPage>) -> Bool {
 //        for i in 0 ..< pages.count {
@@ -19,4 +25,49 @@ class KMPageEditTools: NSObject {
     class func showInsertMenu(callback: (_ index: Int) -> ()) {
         
     }
+    
+    class func getPageSize() -> Array<String> {
+        return KMCropTools.getPageSize()
+    }
+    
+    class func getPageSizeValue(_ pageSize: String) -> NSSize {
+        return KMCropTools.getPageSizeValue(pageSize)
+    }
+    
+    class func getAllPageSizeUnit() -> Array<String> {
+        return [KMPageSizeUint.mm.rawValue, KMPageSizeUint.cm.rawValue,KMPageSizeUint.km_in.rawValue]
+    }
+    
+    class func convertSize(with fromUnit: KMPageSizeUint, to toUnit: KMPageSizeUint, value: CGFloat) -> String {
+        var result: CGFloat = value
+        if (fromUnit == toUnit) {
+            
+        } else if (toUnit == .cm) {
+            if (fromUnit == .mm) {
+                result = value / 10.0
+            } else if (fromUnit == .km_in) {
+                result = value * 25.4
+            }
+        } else if (toUnit == .mm) {
+            if (fromUnit == .cm) {
+                result = value * 10
+            } else if (fromUnit == .km_in) {
+                result = value * 10 * 25.4
+            }
+        } else if (toUnit == .km_in) {
+            if (fromUnit == .cm) {
+                result = value / 25.4
+            } else if (fromUnit == .mm) {
+                result = value/10.0/25.4
+            }
+        }
+        
+        if (fmodf(Float(result), 1) == 0) { /// 如果有一位小数点
+            return String(format: "%.0f", result)
+        } else if (fmodf(Float(result*10), 1) == 0) { //如果有两位小数点
+            return String(format: "%.1f", result)
+        } else {
+            return String(format: "%.2f", result)
+        }
+    }
 }

+ 86 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/View/KMPageEditInsertDirectionItemView.swift

@@ -0,0 +1,86 @@
+//
+//  KMPageEditInsertDirectionItemView.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/11.
+//
+
+import Cocoa
+
+class KMPageEditInsertDirectionItemView: KMPageEditBaseItemView {
+
+    private lazy var horRadio: NSButton = {
+        let button = NSButton(radioButtonWithTitle: "横向页面", target: self, action: #selector(radioButtonAction))
+        return button
+    }()
+    private lazy var verRadio: NSButton = {
+        let button = NSButton(radioButtonWithTitle: "纵向页面", target: self, action: #selector(radioButtonAction))
+        return button
+    }()
+    
+    override func initSubviews() {
+        super.initSubviews()
+        
+        self.addSubview(self.horRadio)
+        self.addSubview(self.verRadio)
+        
+        self.titleLabel.stringValue = "方向"
+        
+        self.horRadio.state = .on
+        self.verRadio.state = .off
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let raidoY: CGFloat = self.titleLabel.frame.maxY+12
+        let radioSize = NSSize(width: 100, height: 22)
+        self.verRadio.frame = NSMakeRect(self.contentInset.left, raidoY, radioSize.width, radioSize.height)
+        
+        self.horRadio.frame = NSMakeRect(self.horRadio.frame.maxX,raidoY , radioSize.width, radioSize.height)
+    }
+    
+    @objc func radioButtonAction(sender: NSButton) {
+        for radio in [self.horRadio, self.verRadio] {
+            if (radio.isEqual(to: sender)) {
+                radio.state = .on
+            } else {
+                radio.state = .off
+            }
+        }
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        var index: Int = 0
+        if (sender == self.horRadio) {
+            index = 1
+        } else if (sender == self.verRadio) {
+            index = 2
+        }
+        if (index > 0) {
+            callback(index, "")
+        }
+    }
+    
+    public func switchDirection(isHor: Bool) {
+        for radio in [self.horRadio, self.verRadio] {
+            radio.state = .off
+        }
+        
+        if (isHor) {
+            self.horRadio.state = .on
+        } else {
+            self.verRadio.state = .on
+        }
+    }
+    
+    public func getDirection() -> Int {
+        if (self.horRadio.state == .on) {
+            return 1
+        }
+        
+        return 0
+    }
+}

+ 282 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/View/KMPageEditInsertPageSizeItemView.swift

@@ -0,0 +1,282 @@
+//
+//  KMPageEditInsertPageSizeItemView.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/11.
+//
+
+import Cocoa
+
+class KMPageEditInsertPageSizeItemView: KMPageEditBaseItemView {
+
+    private lazy var currentPageRadio: NSButton = {
+        let button = NSButton(radioButtonWithTitle: "当前页(208 x 294mm)", target: self, action: #selector(radioButtonAction))
+        return button
+    }()
+    private lazy var standardRadio: NSButton = {
+        let button = NSButton(radioButtonWithTitle: "标准", target: self, action: #selector(radioButtonAction))
+        return button
+    }()
+    private lazy var customRadio: NSButton = {
+        let button = NSButton(radioButtonWithTitle: "自定义", target: self, action: #selector(radioButtonAction))
+        return button
+    }()
+    
+    private var standardComboBox = NSComboBox()
+    
+    private var customWidthView = NSView()
+    private var customWidthTextField = NSTextField()
+    private var customXLabel = NSTextField(labelWithString: "X")
+    private var customHeightView = NSView()
+    private var customHeightTextField = NSTextField()
+    private var customComboBox = NSComboBox()
+    
+    private var customSize: NSSize = NSZeroSize
+    var getCustomSize: NSSize {
+        get {
+            return self.customSize
+        }
+    }
+    
+    private var mySelectedPageSize: NSSize = NSZeroSize
+    var selectedPageSize: NSSize {
+        get {
+            return mySelectedPageSize
+        }
+        set {
+            mySelectedPageSize = newValue
+            if (newValue.width == 0 || newValue.height == 0) { /// 没有选中页面
+                self.currentPageRadio.isEnabled = false
+            } else {
+                self.currentPageRadio.isEnabled = true
+                self.currentPageRadio.title = "当前页(\(newValue.width) x \(newValue.height)mm)"
+                
+                for radio in [self.currentPageRadio, self.standardRadio, self.customRadio] {
+                    radio.state = .off
+                }
+                self.currentPageRadio.state = .on
+            }
+        }
+    }
+    
+    var getPageSize: NSSize {
+        get {
+            if (self.currentPageRadio.state == .on) { /// 当前页面
+                return self.selectedPageSize
+            } else if (self.standardRadio.state == .on) { /// 标准
+                return KMPageEditTools.getPageSizeValue(self.standardComboBox.stringValue)
+            } else if (self.customRadio.state == .on) {
+                return self.customSize
+            }
+            return NSZeroSize
+        }
+    }
+    
+    override func initSubviews() {
+        super.initSubviews()
+        
+        self.addSubview(self.currentPageRadio)
+        self.addSubview(self.standardRadio)
+        self.addSubview(self.customRadio)
+        
+        self.addSubview(self.standardComboBox)
+        
+        self.addSubview(self.customWidthView)
+        self.addSubview(self.customWidthTextField)
+        self.addSubview(self.customXLabel)
+        self.addSubview(self.customHeightView)
+        self.addSubview(self.customHeightTextField)
+        self.addSubview(self.customComboBox)
+        
+        self.titleLabel.stringValue = "页面大小"
+        
+        self.standardComboBox.addItems(withObjectValues: KMPageEditTools.getPageSize())
+        self.standardComboBox.stringValue = "A4"
+        self.standardComboBox.delegate = self
+        
+        for whView in [self.customWidthView, self.customHeightView] {
+            whView.wantsLayer = true
+            whView.layer?.backgroundColor = NSColor(white: 238.0/255.0, alpha: 1.0).cgColor
+        }
+        
+        for textField in [self.customWidthTextField, self.customHeightTextField] {
+            textField.focusRingType = .none
+            textField.drawsBackground = false
+            textField.isBordered = false
+            textField.delegate = self
+        }
+        self.customSize = NSSize(width: 210, height: 297)
+        self.customWidthTextField.stringValue = "\(self.customSize.width)"
+        self.customHeightTextField.stringValue = "\(self.customSize.height)"
+        
+        
+        self.customXLabel.alignment = .center
+        self.customXLabel.font = NSFont.systemFont(ofSize: 14)
+        
+        self.customComboBox.addItems(withObjectValues: KMPageEditTools.getAllPageSizeUnit())
+        self.customComboBox.stringValue = KMPageEditTools.getAllPageSizeUnit().first!
+        self.customComboBox.delegate = self
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let leftMargin = self.contentInset.left
+        let contentWidth = NSWidth(self.bounds)-leftMargin-self.contentInset.right
+        self.currentPageRadio.frame = NSMakeRect(leftMargin, self.titleLabel.frame.maxY+12, contentWidth, 32)
+        
+        self.standardRadio.frame = NSMakeRect(leftMargin, self.currentPageRadio.frame.maxY+12, 70, 32)
+        
+        self.standardComboBox.frame = NSMakeRect(self.standardRadio.frame.maxX+10, self.currentPageRadio.frame.maxY+12, 228, 32)
+        
+        self.customRadio.frame = NSMakeRect(leftMargin, self.standardRadio.frame.maxY+8, 70, 32)
+        
+        let customY: CGFloat = self.standardRadio.frame.maxY+8
+        self.customWidthView.frame = NSMakeRect(self.customRadio.frame.maxX+10, customY, 80, 32)
+        self.customWidthTextField.frame = NSMakeRect(self.customRadio.frame.maxX+10, customY+5, 80, 22)
+        self.customXLabel.frame = NSMakeRect(self.customWidthView.frame.maxX, customY+7, 24, 18)
+        self.customHeightView.frame = NSMakeRect(self.customXLabel.frame.maxX, customY, 80, 32)
+        self.customHeightTextField.frame = NSMakeRect(self.customXLabel.frame.maxX, customY+5, 80, 22)
+        self.customComboBox.frame = NSMakeRect(self.customHeightView.frame.maxX+8, customY, 80, 32)
+    }
+    
+    @objc func radioButtonAction(sender: NSButton) {
+        for radio in [self.currentPageRadio, self.standardRadio, self.customRadio] {
+            if (radio.isEqual(to: sender)) {
+                radio.state = .on
+            } else {
+                radio.state = .off
+            }
+        }
+        
+        if (self.standardRadio.state == .on) {
+            self.standardComboBox.isEnabled = true
+        } else {
+            self.standardComboBox.isEnabled = false
+        }
+        
+        if (self.customRadio.state == .on) {
+            self.customWidthTextField.isEditable = true
+            self.customHeightTextField.isEditable = true
+            self.customComboBox.isEnabled = true
+        } else {
+            self.customWidthTextField.isEditable = false
+            self.customHeightTextField.isEditable = false
+            self.customComboBox.isEnabled = false
+        }
+        
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        var index: Int = 0
+        if (sender == self.currentPageRadio) {
+            index = 1
+        } else if (sender == self.standardRadio) {
+            index = 2
+        } else if (sender == self.customRadio) {
+            index = 3
+        }
+        if (index > 0) {
+            callback(1, index)
+        }
+    }
+    
+    // MARK: publick Methods
+    
+    public func changeDirection(isHor: Bool) {
+        let height: CGFloat = CGFloat(self.customHeightTextField.floatValue)
+        let width: CGFloat = CGFloat(self.customWidthTextField.floatValue)
+        
+        if (isHor) { /// 横向
+            if (width > height) {
+                return
+            }
+            
+            self.exchangeCustomTextFieldValue()
+        } else { /// 纵向
+            if (width < height) {
+                return
+            }
+            
+            self.exchangeCustomTextFieldValue()
+        }
+    }
+    
+    // MARK: Private Methods
+    
+    private func exchangeCustomTextFieldValue() {
+        let tmp = self.customWidthTextField.stringValue
+        
+        self.customWidthTextField.stringValue = self.customHeightTextField.stringValue
+        self.customHeightTextField.stringValue = tmp
+        
+        updateCustomSize()
+    }
+    
+    private func updateCustomSize() {
+        let width: CGFloat = CGFloat(self.customWidthTextField.floatValue)
+        let height: CGFloat = CGFloat(self.customHeightTextField.floatValue)
+        
+        self.customSize = NSSize(width: width, height: height)
+    }
+}
+
+extension KMPageEditInsertPageSizeItemView: NSComboBoxDelegate {
+    func comboBoxSelectionDidChange(_ notification: Notification) {
+        if (self.standardComboBox.isEqual(to: notification.object)) {
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            var index: Int = self.standardComboBox.indexOfSelectedItem
+            if (index < 0) {
+                index = 0
+            }
+            callback(2, index)
+        } else if (self.customComboBox.isEqual(to: notification.object)) {
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            var index: Int = self.customComboBox.indexOfSelectedItem
+            if (index < 0) {
+                index = 0
+            }
+            
+            let fromUnit: String = self.customComboBox.stringValue
+            let toUnit: String = KMPageEditTools.getAllPageSizeUnit()[index]
+            
+            let height: CGFloat = CGFloat(self.customHeightTextField.floatValue)
+            let width: CGFloat = CGFloat(self.customWidthTextField.floatValue)
+            self.customHeightTextField.stringValue = KMPageEditTools.convertSize(with: KMPageSizeUint(rawValue: fromUnit)!, to: KMPageSizeUint(rawValue: toUnit)!, value: height)
+            self.customWidthTextField.stringValue = KMPageEditTools.convertSize(with: KMPageSizeUint(rawValue: fromUnit)!, to: KMPageSizeUint(rawValue: toUnit)!, value: width)
+            
+            updateCustomSize()
+            
+            callback(5, index)
+        }
+    }
+}
+
+extension KMPageEditInsertPageSizeItemView: NSTextFieldDelegate {
+    func controlTextDidChange(_ obj: Notification) {
+        if (self.customWidthTextField.isEqual(to: obj.object)) {
+            updateCustomSize()
+            
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(3, self.customWidthTextField.stringValue)
+        } else if (self.customHeightTextField.isEqual(to: obj.object)) {
+            updateCustomSize()
+            
+            guard let callback = self.itemClick else {
+                return
+            }
+            
+            callback(4, self.customHeightTextField.stringValue)
+        }
+    }
+}

+ 177 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/View/KMPageEditInsertTypeItemView.swift

@@ -0,0 +1,177 @@
+//
+//  KMPageEditInsertTypeItemView.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/11.
+//
+
+import Cocoa
+
+typealias KMPageEditInsertTypeSubItemViewItemClick = (_ itemID: Int) -> ()
+private class KMPageEditInsertTypeSubItemView: NSView {
+    
+    var imageView = NSImageView()
+    var nameLabel = NSTextField(labelWithString: "")
+    
+    var button = NSButton()
+    
+    var itemID: Int = 0
+    var itemClick: KMPageEditInsertTypeSubItemViewItemClick!
+    
+    override var isFlipped: Bool {
+        return true
+    }
+    
+    override init(frame frameRect: NSRect) {
+        super.init(frame: frameRect)
+        
+        initSubviews()
+    }
+    
+    required init?(coder: NSCoder) {
+        super.init(coder: coder)
+        
+        initSubviews()
+    }
+    
+    private var mySelected: Bool = false
+    var selected: Bool {
+        get {
+           return mySelected
+        }
+        set {
+            self.mySelected = newValue
+            
+            if (newValue) {
+                self.imageView.layer?.borderColor = NSColor(red: 17.0/255.0, green: 138.0/255.0, blue: 1.0, alpha: 1.0).cgColor
+                self.nameLabel.textColor = NSColor(red: 17.0/255.0, green: 138.0/255.0, blue: 1.0, alpha: 1.0)
+            } else {
+                self.imageView.layer?.borderColor = NSColor(red: 160.0/255.0, green: 162.0/255.0, blue: 174.0/255.0, alpha: 1.0).cgColor
+                self.nameLabel.textColor = NSColor.black
+            }
+        }
+    }
+    
+    func initSubviews() {
+        self.addSubview(self.imageView)
+        self.addSubview(self.nameLabel)
+        
+        self.addSubview(self.button)
+        
+        self.imageView.wantsLayer = true
+        self.imageView.layer?.cornerRadius = 4
+        self.imageView.layer?.masksToBounds = true
+        self.imageView.layer?.borderWidth = 0.5
+        self.imageView.layer?.borderColor = NSColor(red: 160.0/255.0, green: 162.0/255.0, blue: 174.0/255.0, alpha: 1.0).cgColor
+        
+        self.nameLabel.alignment = .center
+        
+        self.button.isBordered = false
+        self.button.title = ""
+        self.button.target = self
+        self.button.action = #selector(buttonAction)
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let width: CGFloat = NSWidth(self.bounds)
+        
+        self.imageView.frame = NSMakeRect(0, 0, width, NSHeight(self.bounds)-24)
+        self.nameLabel.frame = NSMakeRect(0, self.imageView.frame.maxY+4, width, 16)
+        
+        self.button.frame = self.imageView.frame
+    }
+    
+    @objc func buttonAction() {
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        callback(self.itemID)
+    }
+}
+
+class KMPageEditInsertTypeItemView: KMPageEditBaseItemView {
+    
+    private var itemViews: Array<KMPageEditInsertTypeSubItemView> = []
+    
+    var selectedIndex: Int = 0
+    private var myItems: Array<(String, String)> = []
+    var items: Array<(String, String)> {
+        get {
+            return myItems
+        }
+        set {
+            self.myItems = newValue
+            
+            for itemView in self.itemViews {
+                itemView.removeFromSuperview()
+            }
+            self.itemViews.removeAll()
+            
+            var index: Int = 0
+            for (name, imageName) in newValue {
+                let subItemView = KMPageEditInsertTypeSubItemView()
+                self.addSubview(subItemView)
+                self.itemViews.append(subItemView)
+                
+                subItemView.itemID = index+1
+                subItemView.imageView.image = NSImage(named: imageName)
+                subItemView.nameLabel.stringValue = name
+                
+                subItemView.itemClick = { [weak self] (itemID: Int) in
+                    self?.selectItem(itemID)
+                    
+                    guard let callback = self?.itemClick else {
+                        return
+                    }
+                    
+                    callback(itemID, "")
+                }
+                index += 1
+            }
+            
+            /// 默认选中第一个
+            self.selectItem(self.itemViews.first!.itemID)
+            
+            self.layoutSubtreeIfNeeded()
+        }
+    }
+    
+    override func initSubviews() {
+        super.initSubviews()
+        
+    }
+    
+    override func layout() {
+        super.layout()
+        
+        let margin: CGFloat = 16
+        let space: CGFloat = 10
+        let itemSize: NSSize = NSMakeSize(104, 88)
+        let itemY: CGFloat = 8
+        var preItemView: KMPageEditInsertTypeSubItemView?
+        for itemView in self.itemViews {
+            if (preItemView == nil) {
+                itemView.frame = NSMakeRect(margin, itemY, itemSize.width, itemSize.height)
+            } else {
+                itemView.frame = NSMakeRect((preItemView?.frame.maxX)!+space, itemY, itemSize.width, itemSize.height)
+            }
+            
+            preItemView = itemView
+        }
+    }
+    
+    private func selectItem(_ itemID: Int) {
+        for itemView in self.itemViews {
+            if (itemView.itemID == itemID) {
+                itemView.selected = true
+                
+                self.selectedIndex = itemID
+            } else {
+                itemView.selected = false
+            }
+        }
+    }
+}

+ 7 - 4
PDF Office/PDF Office/Class/PDFTools/PageEdit/View/KMPageEditThumbnailItem.xib

@@ -1,10 +1,12 @@
-<?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="21225" 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="21225"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPageEditThumbnailItem" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPageEditThumbnailItem" customModule="PDF_Office" customModuleProvider="target">
             <connections>
                 <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
             </connections>
@@ -14,6 +16,7 @@
         <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"/>
+            <point key="canvasLocation" x="52" y="-36"/>
         </customView>
     </objects>
 </document>

+ 142 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Window/KMPageEditInsertCustomPageWindowController.swift

@@ -0,0 +1,142 @@
+//
+//  KMPageEditInsertCustomPageWindowController.swift
+//  PDF Office
+//
+//  Created by tangchao on 2023/1/11.
+//
+
+import Cocoa
+
+typealias KMPageEditInsertCustomPageItemClick = (_ index: Int) -> ()
+class KMPageEditInsertCustomPageWindowController: NSWindowController {
+    
+    @IBOutlet weak var titleLabel: NSTextField!
+    
+    @IBOutlet weak var typeBox: NSBox!
+    @IBOutlet weak var pageSizeBox: NSBox!
+    @IBOutlet weak var directionBox: NSBox!
+    
+    var typeView = KMPageEditInsertTypeItemView()
+    var pageSizeView = KMPageEditInsertPageSizeItemView()
+    var directionView = KMPageEditInsertDirectionItemView()
+    
+    @IBOutlet weak var cancelButton: NSButton!
+    @IBOutlet weak var insertButton: NSButton!
+    
+    var selectedPageSize: NSSize = NSZeroSize
+    
+    var itemClick: KMPageEditInsertCustomPageItemClick!
+    
+    var typeIndex: Int {
+        get {
+            self.typeView.selectedIndex
+        }
+    }
+    
+    var pageSize: NSSize {
+        get {
+            self.pageSizeView.getPageSize
+        }
+    }
+    
+    var direction: Int {
+        get {
+            return self.directionView.getDirection()
+        }
+    }
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        self.titleLabel.stringValue = "插入自定义页面"
+        
+        self.typeBox.contentView?.addSubview(self.typeView)
+        self.typeView.frame = self.typeBox.contentView!.bounds
+        self.typeView.autoresizingMask = [.width, .height]
+        self.typeView.items = [("空白页", ""),
+                               ("横线", ""),
+                               ("五线谱", ""),
+                               ("格子表", "")]
+        
+        self.pageSizeBox.contentView?.addSubview(self.pageSizeView)
+        self.pageSizeView.frame = self.pageSizeBox.contentView!.bounds
+        self.pageSizeView.autoresizingMask = [.width, .height]
+        self.pageSizeView.selectedPageSize = self.selectedPageSize
+        self.pageSizeView.itemClick = { [weak self] (index: Int, value: Any) in
+            if (index == 1) { /// 当前页
+                let radioIndex: Int = value as! Int
+                if (radioIndex == 1) { // 当前页
+                    
+                } else if (radioIndex == 2) { /// 标准
+                    
+                } else if (radioIndex == 3) { /// 自定义
+                    
+                }
+            } else if (index == 2) { /// 标准[下拉框]
+                
+            } else if (index == 3) { /// 自定义[宽度]
+                let size = self?.pageSizeView.getCustomSize
+                if (size!.width > size!.height) {
+                    self?.directionView.switchDirection(isHor: true)
+                } else {
+                    self?.directionView.switchDirection(isHor: false)
+                }
+            } else if (index == 4) { /// 自定义[高度]
+                let size = self?.pageSizeView.getCustomSize
+                if (size!.height > size!.width) {
+                    self?.directionView.switchDirection(isHor: false)
+                } else {
+                    self?.directionView.switchDirection(isHor: true)
+                }
+            } else if (index == 5) { /// 自定义[下拉框]
+                
+            }
+        }
+        
+        self.directionBox.contentView?.addSubview(self.directionView)
+        self.directionView.frame = self.directionBox.contentView!.bounds
+        self.directionView.autoresizingMask = [.width, .height]
+        self.directionView.itemClick = { [weak self] (index: Int, value: Any) in
+            if (index == 1) { /// 横向页面
+                self?.pageSizeView.changeDirection(isHor: true)
+            } else if (index == 2) { /// 纵向页面
+                self?.pageSizeView.changeDirection(isHor: false)
+            }
+        }
+        
+        cancelButton.title = NSLocalizedString("取消", comment: "")
+        cancelButton.isBordered = false
+        cancelButton.wantsLayer = true
+        cancelButton.layer?.borderWidth = 1
+        cancelButton.layer?.borderColor = NSColor.black.cgColor
+        cancelButton.layer?.cornerRadius = 4
+        cancelButton.target = self
+        cancelButton.action = #selector(cancelButtonAction)
+        
+        insertButton.title = NSLocalizedString("转换", comment: "")
+        insertButton.isBordered = false
+        insertButton.wantsLayer = true
+        insertButton.layer?.cornerRadius = 4
+        insertButton.target = self
+        insertButton.action = #selector(insertButtonAction)
+        insertButton.layer?.backgroundColor = NSColor.black.cgColor
+        insertButton.attributedTitle = NSMutableAttributedString(string: insertButton.title, attributes: [NSAttributedString.Key.foregroundColor : NSColor.white])
+    }
+    
+    @objc func cancelButtonAction() {
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        callback(1)
+    }
+    
+    @objc func insertButtonAction() {
+        guard let callback = self.itemClick else {
+            return
+        }
+        
+        callback(2)
+    }
+    
+}

+ 181 - 0
PDF Office/PDF Office/Class/PDFTools/PageEdit/Window/KMPageEditInsertCustomPageWindowController.xib

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21225" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21225"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPageEditInsertCustomPageWindowController" customModule="PDF_Office" customModuleProvider="target">
+            <connections>
+                <outlet property="cancelButton" destination="4cj-OT-sW5" id="C83-De-McV"/>
+                <outlet property="directionBox" destination="1ZI-0B-Fjr" id="eog-x1-aTN"/>
+                <outlet property="insertButton" destination="Efd-Bh-2xf" id="Acj-xw-aOy"/>
+                <outlet property="pageSizeBox" destination="W7M-tU-rLU" id="HNs-W1-dMA"/>
+                <outlet property="titleLabel" destination="kPe-bW-pc7" id="QTh-hf-nfm"/>
+                <outlet property="typeBox" destination="lbE-ay-3tD" id="dCs-Zm-Rna"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="480" height="472"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
+            <value key="minSize" type="size" width="480" height="472"/>
+            <value key="maxSize" type="size" width="480" height="472"/>
+            <value key="minFullScreenContentSize" type="size" width="480" height="472"/>
+            <value key="maxFullScreenContentSize" type="size" width="480" height="472"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="480" height="472"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="jbb-h1-b2I">
+                        <rect key="frame" x="0.0" y="428" width="480" height="44"/>
+                        <view key="contentView" id="FrA-2C-suQ">
+                            <rect key="frame" x="0.0" y="0.0" width="480" height="44"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="kPe-bW-pc7">
+                                    <rect key="frame" x="14" y="13" width="44" height="19"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ucb-oO-dKY">
+                                        <font key="font" metaFont="system" size="16"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="EC4-y1-rsj">
+                                    <rect key="frame" x="0.0" y="-2" width="480" height="5"/>
+                                </box>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="EC4-y1-rsj" firstAttribute="leading" secondItem="FrA-2C-suQ" secondAttribute="leading" id="5M9-gV-69V"/>
+                                <constraint firstAttribute="bottom" secondItem="EC4-y1-rsj" secondAttribute="bottom" id="Xgo-ha-V9j"/>
+                                <constraint firstItem="kPe-bW-pc7" firstAttribute="leading" secondItem="FrA-2C-suQ" secondAttribute="leading" constant="16" id="f6b-5k-FAc"/>
+                                <constraint firstItem="kPe-bW-pc7" firstAttribute="top" secondItem="FrA-2C-suQ" secondAttribute="top" constant="12" id="hd1-Uq-Kog"/>
+                                <constraint firstAttribute="trailing" secondItem="EC4-y1-rsj" secondAttribute="trailing" id="s1A-43-6zR"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="44" id="xFl-iG-0sY"/>
+                        </constraints>
+                    </box>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="BhI-dn-ccf">
+                        <rect key="frame" x="0.0" y="60" width="480" height="368"/>
+                        <view key="contentView" id="IoM-xa-xvF">
+                            <rect key="frame" x="0.0" y="0.0" width="480" height="368"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="lbE-ay-3tD">
+                                    <rect key="frame" x="0.0" y="256" width="480" height="112"/>
+                                    <view key="contentView" id="LhI-m6-Qcn">
+                                        <rect key="frame" x="0.0" y="0.0" width="480" height="112"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    </view>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="112" id="N32-rH-2Qe"/>
+                                    </constraints>
+                                </box>
+                                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="W7M-tU-rLU">
+                                    <rect key="frame" x="0.0" y="94" width="480" height="162"/>
+                                    <view key="contentView" id="Yrs-jv-6Bp">
+                                        <rect key="frame" x="0.0" y="0.0" width="480" height="162"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    </view>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="162" id="E8c-PG-ymJ"/>
+                                    </constraints>
+                                </box>
+                                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="1ZI-0B-Fjr">
+                                    <rect key="frame" x="0.0" y="4" width="480" height="90"/>
+                                    <view key="contentView" id="5VQ-xe-Xhz">
+                                        <rect key="frame" x="0.0" y="0.0" width="480" height="90"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    </view>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="90" id="FeB-2L-esq"/>
+                                    </constraints>
+                                </box>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="W7M-tU-rLU" firstAttribute="top" secondItem="lbE-ay-3tD" secondAttribute="bottom" id="6TG-Xc-Nyj"/>
+                                <constraint firstItem="W7M-tU-rLU" firstAttribute="leading" secondItem="IoM-xa-xvF" secondAttribute="leading" id="JIS-j9-Yxk"/>
+                                <constraint firstItem="1ZI-0B-Fjr" firstAttribute="top" secondItem="W7M-tU-rLU" secondAttribute="bottom" id="Mok-aE-l0u"/>
+                                <constraint firstItem="lbE-ay-3tD" firstAttribute="top" secondItem="IoM-xa-xvF" secondAttribute="top" id="X8Q-jt-8Wl"/>
+                                <constraint firstAttribute="trailing" secondItem="lbE-ay-3tD" secondAttribute="trailing" id="Z3A-0U-8hC"/>
+                                <constraint firstItem="lbE-ay-3tD" firstAttribute="leading" secondItem="IoM-xa-xvF" secondAttribute="leading" id="ZrY-vL-O5f"/>
+                                <constraint firstAttribute="trailing" secondItem="W7M-tU-rLU" secondAttribute="trailing" id="y9d-0M-6Cb"/>
+                            </constraints>
+                        </view>
+                    </box>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="blA-eV-7oC">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="60"/>
+                        <view key="contentView" id="URc-dd-3go">
+                            <rect key="frame" x="0.0" y="0.0" width="480" height="60"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="8F1-vy-Iit">
+                                    <rect key="frame" x="0.0" y="57" width="480" height="5"/>
+                                </box>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Efd-Bh-2xf">
+                                    <rect key="frame" x="375" y="13" width="98" height="32"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="98" id="Kbn-uA-Lhy"/>
+                                        <constraint firstAttribute="height" constant="32" id="hcw-nd-63k"/>
+                                    </constraints>
+                                    <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="Ud5-fW-hZO">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                </button>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4cj-OT-sW5">
+                                    <rect key="frame" x="265" y="13" width="98" height="32"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="98" id="OIP-0f-BHi"/>
+                                        <constraint firstAttribute="height" constant="32" id="ces-jZ-Zuy"/>
+                                    </constraints>
+                                    <buttonCell key="cell" type="bevel" title="Button" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="dH5-Ku-hto">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                </button>
+                            </subviews>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="Efd-Bh-2xf" secondAttribute="bottom" constant="13" id="4CC-ua-lNw"/>
+                                <constraint firstItem="8F1-vy-Iit" firstAttribute="top" secondItem="URc-dd-3go" secondAttribute="top" id="AF7-gC-pIk"/>
+                                <constraint firstAttribute="trailing" secondItem="Efd-Bh-2xf" secondAttribute="trailing" constant="7" id="qGh-kM-6u9"/>
+                                <constraint firstAttribute="trailing" secondItem="8F1-vy-Iit" secondAttribute="trailing" id="rr5-Kn-wDa"/>
+                                <constraint firstItem="Efd-Bh-2xf" firstAttribute="leading" secondItem="4cj-OT-sW5" secondAttribute="trailing" constant="12" id="ucY-ay-Cyl"/>
+                                <constraint firstItem="4cj-OT-sW5" firstAttribute="centerY" secondItem="Efd-Bh-2xf" secondAttribute="centerY" id="urj-W6-66x"/>
+                                <constraint firstItem="8F1-vy-Iit" firstAttribute="leading" secondItem="URc-dd-3go" secondAttribute="leading" id="yCG-kX-Yor"/>
+                            </constraints>
+                        </view>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="60" id="DfC-YK-oNC"/>
+                        </constraints>
+                    </box>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="jbb-h1-b2I" secondAttribute="trailing" id="3MP-Rr-Rn9"/>
+                    <constraint firstAttribute="trailing" secondItem="BhI-dn-ccf" secondAttribute="trailing" id="3nW-7B-XT8"/>
+                    <constraint firstAttribute="trailing" secondItem="blA-eV-7oC" secondAttribute="trailing" id="5uS-84-Qpv"/>
+                    <constraint firstItem="jbb-h1-b2I" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="Gxc-YS-Pnb"/>
+                    <constraint firstItem="blA-eV-7oC" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="Q9q-qa-56e"/>
+                    <constraint firstItem="BhI-dn-ccf" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="T9d-Gj-se6"/>
+                    <constraint firstItem="BhI-dn-ccf" firstAttribute="top" secondItem="jbb-h1-b2I" secondAttribute="bottom" id="TVr-Tb-seg"/>
+                    <constraint firstItem="blA-eV-7oC" firstAttribute="top" secondItem="BhI-dn-ccf" secondAttribute="bottom" id="a5b-f5-JfH"/>
+                    <constraint firstAttribute="trailing" secondItem="1ZI-0B-Fjr" secondAttribute="trailing" id="cqo-f2-tet"/>
+                    <constraint firstItem="1ZI-0B-Fjr" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="fLG-WP-l65"/>
+                    <constraint firstItem="jbb-h1-b2I" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="nFP-is-kfe"/>
+                    <constraint firstAttribute="bottom" secondItem="blA-eV-7oC" secondAttribute="bottom" id="oum-6a-G1o"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="-4" y="144"/>
+        </window>
+    </objects>
+</document>