Просмотр исходного кода

【PDF工具 - 图片转PDF】UI完善

lizhe 2 лет назад
Родитель
Сommit
4135a82c9c
14 измененных файлов с 779 добавлено и 254 удалено
  1. 24 0
      PDF Office/PDF Office.xcodeproj/project.pbxproj
  2. 103 39
      PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  3. 1 1
      PDF Office/PDF Office/Class/PDFTools/Batch/KMBatchWindowController.swift
  4. 8 0
      PDF Office/PDF Office/Class/PDFTools/Batch/Tool/KMImageTitleButton/KMImageTitleButton.swift
  5. 7 1
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/KMImageToPDFWindowController.swift
  6. 1 1
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Manager/KMImageToPDFManager.swift
  7. 25 0
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift
  8. 1 0
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.xib
  9. 97 0
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMDeviceBrowserWindowController/KMDeviceBrowserWindowController.swift
  10. 90 0
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMDeviceBrowserWindowController/KMDeviceBrowserWindowController.xib
  11. 70 55
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/KMBatchProcessingTableView.swift
  12. 16 2
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/Views/Tableview/Views/KMBatchProcessingTableRowView.swift
  13. 119 44
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.swift
  14. 217 111
      PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.xib

+ 24 - 0
PDF Office/PDF Office.xcodeproj/project.pbxproj

@@ -1037,6 +1037,12 @@
 		AD8F06172999DB5900D93CBC /* KMPrintDrawPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F06162999DB5900D93CBC /* KMPrintDrawPage.swift */; };
 		AD8F06182999DB5900D93CBC /* KMPrintDrawPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F06162999DB5900D93CBC /* KMPrintDrawPage.swift */; };
 		AD8F06192999DB5900D93CBC /* KMPrintDrawPage.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F06162999DB5900D93CBC /* KMPrintDrawPage.swift */; };
+		AD8F061D299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F061B299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift */; };
+		AD8F061E299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F061B299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift */; };
+		AD8F061F299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD8F061B299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift */; };
+		AD8F0620299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD8F061C299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib */; };
+		AD8F0621299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD8F061C299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib */; };
+		AD8F0622299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AD8F061C299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib */; };
 		AD9527B229503D620039D2BC /* Untitled.pdf in Resources */ = {isa = PBXBuildFile; fileRef = AD9527B129503D620039D2BC /* Untitled.pdf */; };
 		AD9527B329503D620039D2BC /* Untitled.pdf in Resources */ = {isa = PBXBuildFile; fileRef = AD9527B129503D620039D2BC /* Untitled.pdf */; };
 		AD9527B429503D620039D2BC /* Untitled.pdf in Resources */ = {isa = PBXBuildFile; fileRef = AD9527B129503D620039D2BC /* Untitled.pdf */; };
@@ -2973,6 +2979,8 @@
 		AD4B45702940B0000076FA14 /* KMOCRModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMOCRModel.swift; sourceTree = "<group>"; };
 		AD71E7C32990A8A4001C5D3F /* KMBatchRemoveViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMBatchRemoveViewModel.swift; sourceTree = "<group>"; };
 		AD8F06162999DB5900D93CBC /* KMPrintDrawPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintDrawPage.swift; sourceTree = "<group>"; };
+		AD8F061B299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMDeviceBrowserWindowController.swift; sourceTree = "<group>"; };
+		AD8F061C299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KMDeviceBrowserWindowController.xib; sourceTree = "<group>"; };
 		AD9527B129503D620039D2BC /* Untitled.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = Untitled.pdf; sourceTree = "<group>"; };
 		AD9527B9295291F20039D2BC /* KMPrintPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPage.swift; sourceTree = "<group>"; };
 		AD9527BD295294E20039D2BC /* KMPrintPageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPrintPageModel.swift; sourceTree = "<group>"; };
@@ -4586,6 +4594,15 @@
 			path = Model;
 			sourceTree = "<group>";
 		};
+		AD8F061A299B8C2800D93CBC /* KMDeviceBrowserWindowController */ = {
+			isa = PBXGroup;
+			children = (
+				AD8F061B299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift */,
+				AD8F061C299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib */,
+			);
+			path = KMDeviceBrowserWindowController;
+			sourceTree = "<group>";
+		};
 		AD9527B8295291BD0039D2BC /* Category */ = {
 			isa = PBXGroup;
 			children = (
@@ -4960,6 +4977,7 @@
 		ADC25DF32923BA0D0080A3F6 /* KMBatchProcessingView */ = {
 			isa = PBXGroup;
 			children = (
+				AD8F061A299B8C2800D93CBC /* KMDeviceBrowserWindowController */,
 				ADE614B829861CDF00F62ED7 /* SelectedFiles */,
 				ADCB98FB29274F0100B51A03 /* Tableview */,
 				ADCB98C82924741B00B51A03 /* KMBatchProcessingView.swift */,
@@ -6978,6 +6996,7 @@
 				ADB1FEB2297543CF00ED072D /* KMBatchSettingView.xib in Resources */,
 				89DB5DAA291B8DE70029624F /* KMOutlineEditViewController.xib in Resources */,
 				BB003029298CF7EC002DD1A0 /* KMPreferenceDisplayController.xib in Resources */,
+				AD8F0620299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */,
 				F3B6987B298B655100E0EB4D /* CDoucumnetAIResource.bundle in Resources */,
 				9F0CB5452986953A00007028 /* KMURLToPDFWindowController.xib in Resources */,
 				ADCB98FD292750A200B51A03 /* KMBatchProcessingTableView.xib in Resources */,
@@ -7164,6 +7183,7 @@
 				ADCB98FE292750A200B51A03 /* KMBatchProcessingTableView.xib in Resources */,
 				BBC2BCCA295DA8F30036B983 /* KMCropPreviewController.xib in Resources */,
 				BB24D4AB2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
+				AD8F0621299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */,
 				BB1EC8022967B26700EC0BC3 /* KMPDFEditViewController.xib in Resources */,
 				ADCB98EE2924779800B51A03 /* KMBatchProcessingStateTableCell.xib in Resources */,
 				89E4E7392964148E002DBA6F /* KMAnnotationPropertiesViewController.xib in Resources */,
@@ -7397,6 +7417,7 @@
 				8942F7F52926087200389627 /* KMSearchViewController.xib in Resources */,
 				BBFE6E7A2930E53000142C01 /* KMMergePopoverViewController.xib in Resources */,
 				89D9897128FD50EF003A3E87 /* KMAnnotationCollectionViewItem.xib in Resources */,
+				AD8F0622299B8CF000D93CBC /* KMDeviceBrowserWindowController.xib in Resources */,
 				9F1FE4E929406E4700E952CA /* COPYING in Resources */,
 				ADCB98D72924772200B51A03 /* KMBatchProcessingNameTableCell.xib in Resources */,
 				BBEC00B4295C2AF300A26C98 /* KMBatesPreviewController.xib in Resources */,
@@ -7751,6 +7772,7 @@
 				BB86C21928F561C7005AD968 /* NSColor_SKExtensions.m in Sources */,
 				BBD1F798296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				9FAAA33E290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
+				AD8F061D299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */,
 				9F0CB4D52986551600007028 /* KMDesignToken+Spacing.swift in Sources */,
 				89E4E70E2963D62C002DBA6F /* KMAnnotationFontWindowController.m in Sources */,
 				F37322E4292DF9410013862C /* CPDFCircleAnnotation+PDFListView.m in Sources */,
@@ -8332,6 +8354,7 @@
 				9F1FE4C729406E4700E952CA /* CTUtil.m in Sources */,
 				BBD1F799296FF78C00343885 /* KMPageEditSettingBaseModel.swift in Sources */,
 				9FAAA33F290FECA70046FFCE /* NSImage+QuickLook.swift in Sources */,
+				AD8F061E299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */,
 				9F0CB4D62986551600007028 /* KMDesignToken+Spacing.swift in Sources */,
 				89E4E70F2963D62C002DBA6F /* KMAnnotationFontWindowController.m in Sources */,
 				F3732324292DFFFE0013862C /* CPDFListView+Extension.m in Sources */,
@@ -8981,6 +9004,7 @@
 				BBC348452956A638008D2CD1 /* KMEditBackgroundController.swift in Sources */,
 				9FDD0F79294FEF64000C4DAD /* KMConvertPDFManager.swift in Sources */,
 				9FDD0F7E2952F2D8000C4DAD /* KMBaseParser.swift in Sources */,
+				AD8F061F299B8CF000D93CBC /* KMDeviceBrowserWindowController.swift in Sources */,
 				89E4E77B2967B370002DBA6F /* KMDynamicStampViewController.m in Sources */,
 				BB8115FD29924A5F0008F536 /* KMSecureEncryptCheckCellView.swift in Sources */,
 				9F78EFBD28F7C1CC001E66F4 /* KMHomeViewController.swift in Sources */,

+ 103 - 39
PDF Office/PDF Office.xcodeproj/xcuserdata/lizhe.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -94,8 +94,8 @@
             filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "138"
-            endingLineNumber = "138"
+            startingLineNumber = "221"
+            endingLineNumber = "221"
             landmarkName = "selectFileAction(_:)"
             landmarkType = "7">
          </BreakpointContent>
@@ -126,8 +126,8 @@
             filePath = "PDF Office/Class/PDFTools/ImageToPDF/KMImageToPDFWindowController.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "19"
-            endingLineNumber = "19"
+            startingLineNumber = "23"
+            endingLineNumber = "23"
             landmarkName = "KMImageToPDFWindowController"
             landmarkType = "3">
          </BreakpointContent>
@@ -142,8 +142,8 @@
             filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "33"
-            endingLineNumber = "33"
+            startingLineNumber = "39"
+            endingLineNumber = "39"
             landmarkName = "KMImageToPDFChooseView"
             landmarkType = "3">
          </BreakpointContent>
@@ -180,22 +180,6 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "25C7A7C7-6AFD-48C2-8F9E-6613E67CC94F"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChoosePresenter/KMImageToPDFChoosePresenter.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "88"
-            endingLineNumber = "88"
-            landmarkName = "export(filePath:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -633,8 +617,8 @@
             endingColumnNumber = "9223372036854775807"
             startingLineNumber = "108"
             endingLineNumber = "108"
-            landmarkName = "compressButtonAction()"
-            landmarkType = "7">
+            landmarkName = "KMCompressWindowController"
+            landmarkType = "3">
             <Locations>
                <Location
                   uuid = "DF4DEFF7-844C-478B-A7AE-F924608F4C76 - 721ccee254644ebd"
@@ -973,48 +957,128 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "4438A413-A5F2-4310-B944-9A64C9DF57F2"
+            uuid = "6206EE7D-B1C2-4C1D-B6E7-D43DA1B4837F"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/KMBatchProcessingTableView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "26"
-            endingLineNumber = "26"
-            landmarkName = "inputData"
-            landmarkType = "24">
+            startingLineNumber = "197"
+            endingLineNumber = "197"
+            landmarkName = "tableView(_:didClick:)"
+            landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "6206EE7D-B1C2-4C1D-B6E7-D43DA1B4837F"
+            uuid = "8DF1CC56-F66F-4B8D-A3CE-569140BC988C"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/KMBatchProcessingTableView.swift"
+            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "182"
-            endingLineNumber = "182"
-            landmarkName = "tableView(_:didClick:)"
+            startingLineNumber = "816"
+            endingLineNumber = "816"
+            landmarkName = "removeFile(outputFolderPath:data:filesData:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "8DF1CC56-F66F-4B8D-A3CE-569140BC988C"
+            uuid = "A43D99A6-CA37-4A68-8EA2-085475724BE1"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
-            filePath = "PDF Office/Class/PDFTools/Batch/View/Choose/KMBatchSettingView.swift"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/Manager/KMImageToPDFManager.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "816"
-            endingLineNumber = "816"
-            landmarkName = "removeFile(outputFolderPath:data:filesData:)"
+            startingLineNumber = "57"
+            endingLineNumber = "57"
+            landmarkName = "exportPDF(model:completion:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "9168312E-DF30-4E33-B4D6-3D8C2A19A156"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "137"
+            endingLineNumber = "137"
+            landmarkName = "addPhotos(sender:)"
+            landmarkType = "7">
+            <Locations>
+               <Location
+                  uuid = "9168312E-DF30-4E33-B4D6-3D8C2A19A156 - 65be2a480d1caadb"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "PDF_Office.KMBatchProcessingView.addPhotos(sender: Any) -&gt; ()"
+                  moduleName = "PDF Office"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "137"
+                  endingLineNumber = "137"
+                  offsetFromSymbolStart = "188">
+               </Location>
+               <Location
+                  uuid = "9168312E-DF30-4E33-B4D6-3D8C2A19A156 - 7ae1f0b65b3a0c2"
+                  shouldBeEnabled = "Yes"
+                  ignoreCount = "0"
+                  continueAfterRunningActions = "No"
+                  symbolName = "closure #1 (__C.NSOpenPanel) -&gt; () in PDF_Office.KMBatchProcessingView.addPhotos(sender: Any) -&gt; ()"
+                  moduleName = "PDF Office"
+                  usesParentBreakpointCondition = "Yes"
+                  urlString = "file:///Volumes/Data/Company/kdan/Projects/PDF%20Office/PDF%20Office/PDF%20Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
+                  startingColumnNumber = "9223372036854775807"
+                  endingColumnNumber = "9223372036854775807"
+                  startingLineNumber = "136"
+                  endingLineNumber = "136"
+                  offsetFromSymbolStart = "44">
+               </Location>
+            </Locations>
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "35E69FFC-23FC-4F9A-AF48-9FE83ADE3425"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "172"
+            endingLineNumber = "172"
+            landmarkName = "addPhotosFromScanner(sender:)"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "B163993B-E208-481E-ACF5-CB3666C8EA7F"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "161"
+            endingLineNumber = "161"
+            landmarkName = "addPhotosFromCamera(sender:)"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/Batch/KMBatchWindowController.swift

@@ -58,7 +58,7 @@ class KMBatchWindowController: NSWindowController {
         super.windowDidLoad()
 
         // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
-        self.window?.title = NSLocalizedString("Image to PDF", comment: "")
+        self.window?.title = NSLocalizedString("Batch", comment: "")
         self.setup()
         self.reloadData()
     }

+ 8 - 0
PDF Office/PDF Office/Class/PDFTools/Batch/Tool/KMImageTitleButton/KMImageTitleButton.swift

@@ -27,6 +27,14 @@ class KMImageTitleButton: NSView {
         }
     }
     
+    var isEnabled: Bool = true {
+        didSet {
+            self.iconImage.isEnabled = isEnabled
+            self.titleLabel.isEnabled = isEnabled
+            self.contentButton.isEnabled = isEnabled
+        }
+    }
+    
     
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)

+ 7 - 1
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/KMImageToPDFWindowController.swift

@@ -13,7 +13,11 @@ class KMImageToPDFWindowController: NSWindowController {
 
     var chooseData: KMImageToPDFChooseModel?
     var batchData: [KMBatchProcessingTableViewModel]?
-    var inputType: DataNavigationViewButtonActionType?
+    var inputType: DataNavigationViewButtonActionType? {
+        didSet {
+            self.batchPrecessingView.inputType = inputType
+        }
+    }
     
     deinit {
         print("KMImageToPDFWindowController 释放")
@@ -88,6 +92,8 @@ extension KMImageToPDFWindowController: KMImageToPDFChooseViewDelegate {
 extension KMImageToPDFWindowController: KMBatchProcessingViewDelegate {
     func reloadData(data: [KMBatchProcessingTableViewModel]) {
         self.batchData = data
+        self.chooseView.data.imageFilePaths = data
+        self.chooseView.reloadData()
     }
 }
 

+ 1 - 1
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/Manager/KMImageToPDFManager.swift

@@ -55,7 +55,7 @@ class KMImageToPDFManager: NSObject {
             
             if (options!.contains(.OCR)) {
                 //TODO: OCR部分待SDK提供
-                
+                print("OCR 暂未实现")
             } else if (options!.contains(.PDF)) {
                 if (exportPDFType == .new) {
                     self.creatPDF(model: self.model!, completion: completion)

+ 25 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.swift

@@ -13,11 +13,13 @@ class KMBatchProcessingView: NSView {
     @IBOutlet weak var addButton: NSButton!
     @IBOutlet weak var tableView: KMBatchProcessingTableView!
     @IBOutlet weak var selectedFilesView: KMBatchSelectedFilesView!
+    @IBOutlet weak var cleanButton: NSButton!
     
     weak var delegate: KMBatchProcessingViewDelegate?
     var inputType: DataNavigationViewButtonActionType? {
         didSet {
             self.selectedFilesView.inputType = inputType
+            self.tableView.inputType = inputType
         }
     }
     
@@ -71,6 +73,15 @@ class KMBatchProcessingView: NSView {
         self.addButton.contentTintColor = NSColor.init(hex: "#252629")
         self.addButton.font = NSFont.SFProTextRegular(14.0)
         self.addButton.title = NSLocalizedString("Add Files", comment: "")
+        self.addButton.layer?.cornerRadius = 4
+        self.addButton.layer?.borderColor = NSColor(hex: "#DFE1E5").cgColor
+        self.addButton.layer?.borderWidth = 1
+        
+        self.cleanButton.wantsLayer = true
+        self.cleanButton.layer?.cornerRadius = 4
+        self.cleanButton.layer?.borderColor = NSColor(hex: "#DFE1E5").cgColor
+        self.cleanButton.layer?.borderWidth = 1
+        
         
         self.tableView.delegate = self
         self.selectedFilesView.dragEnd = {[unowned self] (data) in
@@ -147,10 +158,24 @@ extension KMBatchProcessingView: KMBatchProcessingViewAction {
     
     @objc func addPhotosFromCamera(sender: AnyObject) {
         print("AddPhotosFromCamera")
+        let windowController = KMDeviceBrowserWindowController.init(windowNibName: "KMDeviceBrowserWindowController")
+        windowController.type = .camera
+        windowController.importCameraFileCallback = { [unowned self] (url) in
+//            NSDocumentController.shared.openDocumentWithContents(of: url, display: true)
+            print("获取照片成功")
+        }
+        windowController.showWindow(nil)
     }
     
     @objc func addPhotosFromScanner(sender: AnyObject) {
         print("AddPhotosFromScanner")
+        let windowController = KMDeviceBrowserWindowController.init(windowNibName: "KMDeviceBrowserWindowController")
+        windowController.type = .scanner
+        windowController.importScannerFileCallback = { [unowned self] (url) in
+            print("获取扫描成功")
+//            NSDocumentController.shared.openDocumentWithContents(of: url, display: true)
+        }
+        windowController.showWindow(nil)
     }
     
     /**

+ 1 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMBatchProcessingView.xib

@@ -9,6 +9,7 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMBatchProcessingView" customModule="PDF_Office" customModuleProvider="target">
             <connections>
                 <outlet property="addButton" destination="sDN-qN-YMZ" id="tM1-dB-oja"/>
+                <outlet property="cleanButton" destination="ZW9-hb-VaF" id="5kP-QY-Dep"/>
                 <outlet property="contentView" destination="c22-O7-iKe" id="9zF-lG-sD8"/>
                 <outlet property="selectedFilesView" destination="Btb-75-0Y1" id="UsJ-q1-h2h"/>
                 <outlet property="tableView" destination="OMY-wn-4ox" id="fPx-xC-NN0"/>

+ 97 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMDeviceBrowserWindowController/KMDeviceBrowserWindowController.swift

@@ -0,0 +1,97 @@
+//
+//  KMDeviceBrowserWindowController.swift
+//  PDF Office
+//
+//  Created by lizhe on 2023/2/14.
+//
+
+import Cocoa
+typealias ImportCameraFileCallback = (_ url: NSURL) -> ()
+typealias ImportScannerFileCallback = (_ url: NSURL) -> ()
+
+class KMDeviceBrowserWindowController: NSWindowController {
+    
+    @IBOutlet weak var splitView: NSSplitView!
+    @IBOutlet weak var deviceBrowserView: IKDeviceBrowserView!
+    @IBOutlet weak var scannerDeviceView: IKScannerDeviceView!
+    @IBOutlet weak var cameraDeviceView: IKCameraDeviceView!
+    
+    var type: ICDeviceType = .camera 
+    
+    var importCameraFileCallback: ImportCameraFileCallback?
+    var importScannerFileCallback: ImportScannerFileCallback?
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+        self.setup()
+        self.reloadData()
+    }
+    
+    func setup() {
+        self.cameraDeviceView.downloadSelectedControlLabel = NSLocalizedString("Import", comment: "")
+        self.cameraDeviceView.downloadAllControlLabel = NSLocalizedString("Import All", comment: "")
+        self.window!.title = NSLocalizedString("Import", comment: "")
+    }
+    
+    func reloadData() {
+        if (self.type == .camera) {
+            self.deviceBrowserView.displaysLocalScanners = false
+            self.deviceBrowserView.displaysNetworkScanners = false
+        } else if (self.type == .scanner) {
+            self.deviceBrowserView.displaysLocalCameras = false
+            self.deviceBrowserView.displaysNetworkCameras = false
+        }
+        
+    }
+}
+
+extension KMDeviceBrowserWindowController: NSSplitViewDelegate {
+    func splitView(_ splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
+        return 150
+    }
+    
+    func splitView(_ splitView: NSSplitView, constrainMaxCoordinate proposedMaximumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
+        return 300
+    }
+}
+
+extension KMDeviceBrowserWindowController: IKDeviceBrowserViewDelegate {
+    func deviceBrowserView(_ deviceBrowserView: IKDeviceBrowserView!, selectionDidChange device: ICDevice!) {
+        
+        if (device.type == .camera) {
+            self.cameraDeviceView.cameraDevice = device as? ICCameraDevice
+            self.cameraDeviceView.isHidden = false
+            self.scannerDeviceView.isHidden = true
+        } else if (device.type == .scanner) {
+            self.scannerDeviceView.scannerDevice = device as? ICScannerDevice
+            self.scannerDeviceView.isHidden = false
+            self.cameraDeviceView.isHidden = true
+        } else {
+            self.scannerDeviceView.isHidden = true
+            self.cameraDeviceView.isHidden = true
+        }
+    }
+}
+
+extension KMDeviceBrowserWindowController: IKCameraDeviceViewDelegate {
+    func cameraDeviceView(_ cameraDeviceView: IKCameraDeviceView!, didDownloadFile file: ICCameraFile!, location url: URL!, fileData data: Data!, error: Error!) {
+//        if (!error &&
+//            [file.UTI isEqualToString:(NSString *)kUTTypeImage]) {
+//            if (self.importCameraFileCallback) {
+//                self.importCameraFileCallback(url);
+//            }
+//        }
+        print("获取图片完成")
+    }
+}
+
+extension KMDeviceBrowserWindowController: IKScannerDeviceViewDelegate {
+    func scannerDeviceView(_ scannerDeviceView: IKScannerDeviceView!, didScanTo url: URL!, fileData data: Data!, error: Error!) {
+        if ((error == nil) &&
+            (url != nil)) {
+            if (self.importScannerFileCallback != nil) {
+                self.importScannerFileCallback!(url! as NSURL)
+            }
+        }
+    }
+}

+ 90 - 0
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/KMDeviceBrowserWindowController/KMDeviceBrowserWindowController.xib

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
+        <plugIn identifier="com.apple.imagekit.ibplugin" version="21507"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="KMDeviceBrowserWindowController" customModule="PDF_Office" customModuleProvider="target">
+            <connections>
+                <outlet property="cameraDeviceView" destination="uY0-YX-JO6" id="OsS-Ti-Bnz"/>
+                <outlet property="deviceBrowserView" destination="KKK-Er-gTY" id="Fff-cC-tA8"/>
+                <outlet property="scannerDeviceView" destination="o6w-gM-vsX" id="P5f-jE-heD"/>
+                <outlet property="splitView" destination="MZ0-mq-NJU" id="LFT-Oc-PCz"/>
+                <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="840" height="517"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="840" height="517"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <splitView arrangesAllSubviews="NO" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MZ0-mq-NJU">
+                        <rect key="frame" x="0.0" y="0.0" width="840" height="517"/>
+                        <subviews>
+                            <customView id="uik-LP-cTd">
+                                <rect key="frame" x="0.0" y="0.0" width="156" height="517"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                                <subviews>
+                                    <ikDeviceBrowserView displaysNetworkCameras="YES" displaysNetworkScanners="YES" mode="outline" translatesAutoresizingMaskIntoConstraints="NO" id="KKK-Er-gTY">
+                                        <rect key="frame" x="0.0" y="0.0" width="156" height="517"/>
+                                    </ikDeviceBrowserView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="KKK-Er-gTY" secondAttribute="bottom" id="I9J-Iu-aph"/>
+                                    <constraint firstItem="KKK-Er-gTY" firstAttribute="leading" secondItem="uik-LP-cTd" secondAttribute="leading" id="hzc-g1-CiS"/>
+                                    <constraint firstAttribute="trailing" secondItem="KKK-Er-gTY" secondAttribute="trailing" id="uLu-au-qkR"/>
+                                    <constraint firstItem="KKK-Er-gTY" firstAttribute="top" secondItem="uik-LP-cTd" secondAttribute="top" id="z1J-pL-Lmh"/>
+                                </constraints>
+                            </customView>
+                            <customView id="SOw-qP-okj">
+                                <rect key="frame" x="157" y="0.0" width="683" height="517"/>
+                                <autoresizingMask key="autoresizingMask"/>
+                                <subviews>
+                                    <ikScannerDeviceView hidden="YES" scanControlLabel="Scan" overviewControlLabel="Overview" documentName="Scan" translatesAutoresizingMaskIntoConstraints="NO" id="o6w-gM-vsX">
+                                        <rect key="frame" x="0.0" y="0.0" width="683" height="517"/>
+                                    </ikScannerDeviceView>
+                                    <ikCameraDeviceView hidden="YES" downloadAllControlLabel="Download All" downloadSelectedControlLabel="Download" translatesAutoresizingMaskIntoConstraints="NO" id="uY0-YX-JO6">
+                                        <rect key="frame" x="0.0" y="0.0" width="683" height="517"/>
+                                    </ikCameraDeviceView>
+                                </subviews>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="uY0-YX-JO6" secondAttribute="trailing" id="AES-ee-dnA"/>
+                                    <constraint firstAttribute="bottom" secondItem="o6w-gM-vsX" secondAttribute="bottom" id="D3T-Vf-7wH"/>
+                                    <constraint firstAttribute="bottom" secondItem="uY0-YX-JO6" secondAttribute="bottom" id="HYh-MZ-cFk"/>
+                                    <constraint firstItem="uY0-YX-JO6" firstAttribute="top" secondItem="SOw-qP-okj" secondAttribute="top" id="KOS-aA-dIp"/>
+                                    <constraint firstAttribute="trailing" secondItem="o6w-gM-vsX" secondAttribute="trailing" id="KoY-La-jaK"/>
+                                    <constraint firstItem="uY0-YX-JO6" firstAttribute="leading" secondItem="SOw-qP-okj" secondAttribute="leading" id="V0V-sr-oJ9"/>
+                                    <constraint firstItem="o6w-gM-vsX" firstAttribute="top" secondItem="SOw-qP-okj" secondAttribute="top" id="dxk-Ix-AuZ"/>
+                                    <constraint firstItem="o6w-gM-vsX" firstAttribute="leading" secondItem="SOw-qP-okj" secondAttribute="leading" id="mnn-nB-YYf"/>
+                                </constraints>
+                            </customView>
+                        </subviews>
+                        <holdingPriorities>
+                            <real value="250"/>
+                            <real value="250"/>
+                        </holdingPriorities>
+                    </splitView>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="MZ0-mq-NJU" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="0J5-Ik-nLu"/>
+                    <constraint firstItem="MZ0-mq-NJU" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="7iD-sZ-tca"/>
+                    <constraint firstAttribute="trailing" secondItem="MZ0-mq-NJU" secondAttribute="trailing" id="dT5-DO-iv3"/>
+                    <constraint firstAttribute="bottom" secondItem="MZ0-mq-NJU" secondAttribute="bottom" id="oW7-gL-oJn"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="188" y="258.5"/>
+        </window>
+    </objects>
+</document>

+ 70 - 55
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/KMBatchProcessingTableView.swift

@@ -17,7 +17,12 @@ class KMBatchProcessingTableView: NSView {
     lazy var presenter: KMBatchProcessingTableViewPresenter! = KMBatchProcessingTableViewPresenter()
     
     weak var delegate: KMBatchProcessingTableViewDelegate?
-    
+
+    var inputType: DataNavigationViewButtonActionType? {
+        didSet {
+            self.reloadData()
+        }
+    }
     /**
       @abstract 外部传入数据
       @param inputData 文件路劲
@@ -32,60 +37,7 @@ class KMBatchProcessingTableView: NSView {
     var data: [KMBatchProcessingTableViewModel]?
     fileprivate var options: KMBatchProcessingTableViewOptions? {
         didSet {
-            for _ in self.tableView.tableColumns {
-                self.tableView.removeTableColumn(self.tableView.tableColumns[0])
-            }
-            
-            if (options!.contains(KMBatchProcessingTableViewOptions.name)) {
-                let column = NSTableColumn()
-                column.headerCell = KMBatchProcessingColumnHeaderCell.init()
-                column.title = NSLocalizedString("File Name", comment: "")
-                column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.name.rawValue))
-                column.resizingMask = .userResizingMask
-                column.width = 218
-                self.tableView.addTableColumn(column)
-            }
-            
-            if (options!.contains(KMBatchProcessingTableViewOptions.order)) {
-                let column = NSTableColumn()
-                column.headerCell = KMBatchProcessingColumnHeaderCell.init()
-                column.title = NSLocalizedString("Page Range", comment: "")
-                column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.order.rawValue))
-                column.resizingMask = .userResizingMask
-                column.width = 156
-                self.tableView.addTableColumn(column)
-            }
-            
-            if (options!.contains(KMBatchProcessingTableViewOptions.size)) {
-                let column = NSTableColumn()
-                column.headerCell = KMBatchProcessingColumnHeaderCell.init()
-                column.title = NSLocalizedString("Size", comment: "")
-                column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.size.rawValue))
-                column.resizingMask = .userResizingMask
-                column.width = 68
-                self.tableView.addTableColumn(column)
-            }
-            
-            if (options!.contains(KMBatchProcessingTableViewOptions.state)) {
-                let column = NSTableColumn()
-                column.headerCell = KMBatchProcessingColumnHeaderCell.init()
-                column.title = NSLocalizedString("Status", comment: "")
-                column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.state.rawValue))
-                column.headerCell.textColor = NSColor.red
-                column.resizingMask = .userResizingMask
-                column.width = 76
-                self.tableView.addTableColumn(column)
-            }
-            
-            if (options!.contains(KMBatchProcessingTableViewOptions.delete)) {
-                let column = NSTableColumn()
-                column.headerCell = KMBatchProcessingColumnHeaderCell.init()
-                column.title = NSLocalizedString("", comment: "")
-                column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.delete.rawValue))
-                column.resizingMask = .userResizingMask
-                column.width = 30
-                self.tableView.addTableColumn(column)
-            }
+            self.reloadData()
         }
     }
     
@@ -135,6 +87,69 @@ class KMBatchProcessingTableView: NSView {
         self.presenter.initPresenter(view: self, data: [])
     }
     
+    func reloadData() {
+        for _ in self.tableView.tableColumns {
+            self.tableView.removeTableColumn(self.tableView.tableColumns[0])
+        }
+        
+        if (options!.contains(KMBatchProcessingTableViewOptions.name)) {
+            let column = NSTableColumn()
+            column.headerCell = KMBatchProcessingColumnHeaderCell.init()
+            column.title = NSLocalizedString("File Name", comment: "")
+            column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.name.rawValue))
+//            column.resizingMask = .userResizingMask
+            if self.inputType == .ImageToPDF {
+                column.width = 600
+            } else {
+                column.width = 218
+            }
+            self.tableView.addTableColumn(column)
+        }
+        
+        if (options!.contains(KMBatchProcessingTableViewOptions.order) && self.inputType != .ImageToPDF) {
+            let column = NSTableColumn()
+            column.headerCell = KMBatchProcessingColumnHeaderCell.init()
+            column.title = NSLocalizedString("Page Range", comment: "")
+            column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.order.rawValue))
+            column.resizingMask = .userResizingMask
+            column.width = 156
+            self.tableView.addTableColumn(column)
+        }
+        
+        if (options!.contains(KMBatchProcessingTableViewOptions.size)) {
+            let column = NSTableColumn()
+            column.headerCell = KMBatchProcessingColumnHeaderCell.init()
+            column.title = NSLocalizedString("Size", comment: "")
+            column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.size.rawValue))
+            column.resizingMask = .userResizingMask
+            column.width = 68
+            self.tableView.addTableColumn(column)
+        }
+        
+        if (options!.contains(KMBatchProcessingTableViewOptions.state)) {
+            let column = NSTableColumn()
+            column.headerCell = KMBatchProcessingColumnHeaderCell.init()
+            column.title = NSLocalizedString("Status", comment: "")
+            column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.state.rawValue))
+            column.headerCell.textColor = NSColor.red
+            column.resizingMask = .userResizingMask
+            column.width = 76
+            self.tableView.addTableColumn(column)
+        }
+        
+        if (options!.contains(KMBatchProcessingTableViewOptions.delete)) {
+            let column = NSTableColumn()
+            column.headerCell = KMBatchProcessingColumnHeaderCell.init()
+            column.title = NSLocalizedString("", comment: "")
+            column.identifier = NSUserInterfaceItemIdentifier(String(KMBatchProcessingTableViewOptions.delete.rawValue))
+            column.resizingMask = .userResizingMask
+            column.width = 30
+            self.tableView.addTableColumn(column)
+        }
+        
+        self.tableView.reloadData()
+    }
+    
 }
 
 extension KMBatchProcessingTableView: NSTableViewDelegate {

+ 16 - 2
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMBatchProcessingView/Tableview/Views/Tableview/Views/KMBatchProcessingTableRowView.swift

@@ -13,14 +13,28 @@ class KMBatchProcessingTableRowView: NSTableRowView {
     override func draw(_ dirtyRect: NSRect) {
         super.draw(dirtyRect)
         // Drawing code here.
-//        self.wantsLayer = true
+        self.wantsLayer = true
 //        self.layer?.borderColor = NSColor.init(hex: "#CED0D4").cgColor
 //        self.layer?.borderWidth = 1
+        self.drawLine(dirtyRect)
+    }
+    
+    func drawLine(_ dirtyRect: NSRect) {
+        // The line width is arbitrary, but our path really should be mitered.
+        let arrow = NSBezierPath()
+        arrow.lineWidth = 1
+        arrow.move(to: CGPoint(x: 0, y: 0))
+        arrow.line(to: CGPoint(x: dirtyRect.width, y: 0))
+        arrow.close()
+        NSColor.init(hex: "#000000").withAlphaComponent(0.1).set()
+        arrow.stroke()
+        NSColor.green.setFill()
+        arrow.fill()
     }
     
     override func drawSelection(in dirtyRect: NSRect) {
         NSColor.init(hex: "#CED0D4").withAlphaComponent(0.6).setFill()
-        let path = NSBezierPath(roundedRect: self.bounds, xRadius: 0, yRadius: 0)
+        let path = NSBezierPath(roundedRect: NSInsetRect(self.bounds, 1, 1), xRadius: 0, yRadius: 0)
         path.fill()
     }
 }

+ 119 - 44
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.swift

@@ -11,16 +11,22 @@ class KMImageToPDFChooseView: NSView {
 
     @IBOutlet var contentView: NSView!
     
+    @IBOutlet weak var titleLabel: NSTextField!
     @IBOutlet weak var exportTitleLable: NSTextField!
-    @IBOutlet weak var newPDFButton: NSButton!
-    @IBOutlet weak var mergePDFButton: NSButton!
-    @IBOutlet weak var insertPDFButton: NSButton!
+    @IBOutlet weak var newPDFButton: KMImageTitleButton!
+    @IBOutlet weak var mergePDFButton: KMImageTitleButton!
+    @IBOutlet weak var insertPDFButton: KMImageTitleButton!
     @IBOutlet weak var exportSelectFileButton: NSButton!
+    @IBOutlet weak var exportSelectFileLabel: NSTextField!
+    
     
     @IBOutlet weak var OCRTilteLable: NSTextField!
-    @IBOutlet weak var needRecognitionButton: NSButton!
+    @IBOutlet weak var needRecognitionButton: KMImageTitleButton!
+    
+    @IBOutlet weak var selectLanguageLabel: NSTextField!
     @IBOutlet weak var selectLanguageButton: NSButton!
-    @IBOutlet weak var saveTXTButton: NSButton!
+    
+    @IBOutlet weak var saveTXTButton: KMImageTitleButton!
     @IBOutlet weak var exportPDFButton: NSButton!
     
     var delegate: KMImageToPDFChooseViewDelegate?
@@ -68,62 +74,139 @@ class KMImageToPDFChooseView: NSView {
     }
     
     func setup() {
+        self.wantsLayer = true
+        self.layer?.backgroundColor = NSColor(hex: "#F7F8FA").cgColor
+        
         self.presenter.initPresenter(delegate: self, data: KMImageToPDFChooseModel())
         self.OCRPresenter.initPresenter(delegate: self, data: KMOCRModel())
+        
+        self.titleLabel.stringValue = NSLocalizedString("Settings", comment: "")
+        self.titleLabel.font = NSFont.SFProTextRegular(16.0)
+        self.titleLabel.textColor = NSColor.init(hex: "#252629")
+        
+        self.exportTitleLable.stringValue = NSLocalizedString("Export", comment: "")
+        self.exportTitleLable.font = NSFont.SFProTextRegular(12.0)
+        self.exportTitleLable.textColor = NSColor.init(hex: "#616469")
+        
+        self.OCRTilteLable.stringValue = NSLocalizedString("OCR Settings", comment: "")
+        self.OCRTilteLable.font = NSFont.SFProTextRegular(12.0)
+        self.OCRTilteLable.textColor = NSColor.init(hex: "#616469")
+        
+        self.exportSelectFileLabel.stringValue = NSLocalizedString("Select File", comment: "")
+        self.exportSelectFileLabel.font = NSFont.SFProTextRegular(14.0)
+        self.exportSelectFileLabel.textColor = NSColor.init(hex: "#252629")
+        
+        self.selectLanguageLabel.stringValue = NSLocalizedString("English", comment: "")
+        self.selectLanguageLabel.font = NSFont.SFProTextRegular(14.0)
+        self.selectLanguageLabel.textColor = NSColor.init(hex: "#252629")
+        
+        self.newPDFButton.title = NSLocalizedString("Creat PDF", comment: "")
+        self.newPDFButton.imageName = "btn_radio_unsel_on"
+        self.newPDFButton.titleLabel.font = NSFont.SFProTextRegular(14.0)
+        self.newPDFButton.titleLabel.textColor = NSColor.init(hex: "#252629")
+        self.newPDFButton.action = { [unowned self] (view, button) in
+            self.presenter.newPDF(state: button.state)
+        }
+        
+        self.mergePDFButton.title = NSLocalizedString("Merge as one PDF document", comment: "")
+        self.mergePDFButton.imageName = "btn_radio_unsel_on"
+        self.mergePDFButton.titleLabel.font = NSFont.SFProTextRegular(14.0)
+        self.mergePDFButton.titleLabel.textColor = NSColor.init(hex: "#252629")
+        self.mergePDFButton.action = { [unowned self] (view, button) in
+            self.presenter.mergePDF(state: button.state)
+        }
+        
+        self.insertPDFButton.title = NSLocalizedString("Insert existing PDF document", comment: "")
+        self.insertPDFButton.imageName = "btn_radio_unsel_on"
+        self.insertPDFButton.titleLabel.font = NSFont.SFProTextRegular(14.0)
+        self.insertPDFButton.titleLabel.textColor = NSColor.init(hex: "#252629")
+        self.insertPDFButton.action = { [unowned self] (view, button) in
+            self.presenter.insert(state: button.state)
+        }
+        
+        self.needRecognitionButton.title = NSLocalizedString("Recognize text if needed", comment: "")
+        self.needRecognitionButton.imageName = "btn_checkbox_unsel_on"
+        self.needRecognitionButton.titleLabel.font = NSFont.SFProTextRegular(14.0)
+        self.needRecognitionButton.titleLabel.textColor = NSColor.init(hex: "#252629")
+        self.needRecognitionButton.action = { [unowned self] (view, button) in
+            self.presenter.needRecognition(state: button.state)
+        }
+        
+        self.saveTXTButton.title = NSLocalizedString("Save as TXT", comment: "")
+        self.saveTXTButton.imageName = "btn_checkbox_unsel_on"
+        self.saveTXTButton.titleLabel.font = NSFont.SFProTextRegular(14.0)
+        self.saveTXTButton.titleLabel.textColor = NSColor.init(hex: "#252629")
+        self.saveTXTButton.action = { [unowned self] (view, button) in
+            self.OCRPresenter.saveTXT(sender: button)
+        }
+        
+        self.exportPDFButton.wantsLayer = true
+        self.exportPDFButton.layer?.cornerRadius = 4
+        self.exportPDFButton.contentTintColor = NSColor.init(hex: "#FFFFFF")
+        self.exportPDFButton.stringValue = NSLocalizedString("Export", comment: "")
+        self.exportPDFButton.font = NSFont.SFProTextRegular(14.0)
+        self.exportPDFButton.layer?.backgroundColor = NSColor(hex: "#BDDFFD").cgColor
+        
+        self.reloadData()
     }
     
     //刷新界面UI 和 数据
     func reloadData() {
-        let exporkOptions = self.data.options ?? .PDF
+        let exportOptions = self.data.options ?? .PDF
         let exportType = self.data.exportPDFType ?? .new
         
-        if exporkOptions.contains(.PDF) {
-            
-        }
-        
-        if exporkOptions.contains(.OCR) {
+        if exportOptions.contains(.OCR) {
+            self.needRecognitionButton.imageName = "btn_checkbox_sel_on"
             self.selectLanguageButton.isEnabled = true
             self.saveTXTButton.isEnabled = true
         } else {
+            self.needRecognitionButton.imageName = "btn_checkbox_unsel_on"
             self.selectLanguageButton.isEnabled = false
             self.saveTXTButton.isEnabled = false
         }
         
-        if exportType == .new {
-            self.newPDFButton.state = .on
-            self.mergePDFButton.isEnabled = true
-            
-            self.insertPDFButton.state = .off
-            self.exportSelectFileButton.isEnabled = false
-        } else if exportType == .insert {
-            self.newPDFButton.state = .off
-            self.mergePDFButton.isEnabled = false
-            
-            self.insertPDFButton.state = .on
+        if self.data.OCRModel.exportOptions.contains(.txt) {
+            self.saveTXTButton.imageName = "btn_checkbox_sel_on"
+        } else {
+            self.saveTXTButton.imageName = "btn_checkbox_unsel_on"
+        }
+        
+        
+        self.exportSelectFileButton.isEnabled = false
+        self.exportTitleLable.isEnabled = false
+        let array = [self.newPDFButton, self.insertPDFButton, self.mergePDFButton]
+        for button in array {
+            button?.imageName = "btn_radio_unsel_on"
+        }
+        switch exportType {
+        case .new:
+            self.newPDFButton.imageName = "btn_radio_sel_on"
+        case .insert:
+            self.insertPDFButton.imageName = "btn_radio_sel_on"
             self.exportSelectFileButton.isEnabled = true
+            self.exportTitleLable.isEnabled = true
+        case .merge:
+            self.mergePDFButton.imageName = "btn_radio_sel_on"
         }
         
-        self.selectLanguageButton.title = self.data.OCRModel.languageDic[KMGOCRLanguageStringKey] as! String
+        self.selectLanguageLabel.stringValue = self.data.OCRModel.languageDic[KMGOCRLanguageStringKey] as! String
         
-        self.exportSelectFileButton.title = self.data.insertFilePath
+        if self.data.insertFilePath != "" {
+            self.exportSelectFileLabel.stringValue = self.data.insertFilePath
+        }
         
+        if (self.data.imageFilePaths?.count != 0) {
+            self.exportPDFButton.layer?.backgroundColor = NSColor.init(hex: "#1770F4").cgColor
+            self.exportPDFButton.isEnabled = true
+        } else {
+            self.exportPDFButton.layer?.backgroundColor = NSColor.init(hex: "#BDDFFD").cgColor
+            self.exportPDFButton.isEnabled = false
+        }
     }
 }
 
 protocol KMImageToPDFChooseViewAction {}
 extension KMImageToPDFChooseView: KMImageToPDFChooseViewAction {
-    @IBAction func newPDFAction(_ sender: NSButton) {
-        self.presenter.newPDF(state: sender.state)
-    }
-    
-    @IBAction func mergePDFAction(_ sender: NSButton) {
-        self.presenter.mergePDF(state: sender.state)
-    }
-    
-    @IBAction func insertPDFAction(_ sender: NSButton) {
-        self.presenter.insert(state: sender.state)
-    }
-    
     @IBAction func selectFileAction(_ sender: NSButton) {
         self.presenter.selectFile(state: sender.state)
         
@@ -140,20 +223,12 @@ extension KMImageToPDFChooseView: KMImageToPDFChooseViewAction {
         }
     }
     
-    @IBAction func needRecognitionAction(_ sender: NSButton) {
-        self.presenter.needRecognition(state: sender.state)
-    }
-    
     @IBAction func selectLanguageAction(_ sender: NSButton) {
         if self.data.options.contains(.OCR) {
             self.OCRPresenter.selectLanguage(sender: sender)
         }
     }
     
-    @IBAction func saveTXTAction(_ sender: NSButton) {
-        self.OCRPresenter.saveTXT(sender: sender)
-    }
-    
     @IBAction func exportAction(_ sender: NSButton) {
         if self.data.exportFilePath == "" {
             KMBatchProcessingView.openfiles(window: self.window!) { openPanel in

+ 217 - 111
PDF Office/PDF Office/Class/PDFTools/ImageToPDF/View/KMImageToPDFChooseView/KMImageToPDFChooseView.xib

@@ -8,17 +8,20 @@
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="KMImageToPDFChooseView" customModule="PDF_Office" customModuleProvider="target">
             <connections>
-                <outlet property="OCRTilteLable" destination="jrX-yB-GG4" id="AAy-YI-zdr"/>
+                <outlet property="OCRTilteLable" destination="jrX-yB-GG4" id="Z0s-Wl-lhV"/>
                 <outlet property="contentView" destination="gTP-Bx-DSY" id="E3G-qy-Kg4"/>
                 <outlet property="exportPDFButton" destination="UVe-Ld-JJI" id="aCB-kp-bLh"/>
-                <outlet property="exportSelectFileButton" destination="8eQ-e1-hk0" id="3bl-hY-nBF"/>
+                <outlet property="exportSelectFileButton" destination="Nsr-mu-C2F" id="Hrl-4Y-4cq"/>
+                <outlet property="exportSelectFileLabel" destination="EvJ-eO-qrI" id="jcC-Fu-ohj"/>
                 <outlet property="exportTitleLable" destination="wnT-3F-g6I" id="4EI-OQ-THb"/>
-                <outlet property="insertPDFButton" destination="DGj-0A-vQu" id="ta9-Vg-LUj"/>
-                <outlet property="mergePDFButton" destination="IdZ-1k-1M3" id="h7d-cM-Kjn"/>
-                <outlet property="needRecognitionButton" destination="Dzi-7p-cRB" id="GWz-1o-Fgv"/>
-                <outlet property="newPDFButton" destination="Jts-7k-e3i" id="XdO-Fp-fZG"/>
-                <outlet property="saveTXTButton" destination="elU-cI-csD" id="eCP-Vz-NWJ"/>
-                <outlet property="selectLanguageButton" destination="qUj-8Z-jv1" id="CZx-U7-7yf"/>
+                <outlet property="insertPDFButton" destination="UJo-wM-Q8G" id="bx3-Fh-jRp"/>
+                <outlet property="mergePDFButton" destination="p19-DS-5aU" id="lKN-sE-9AA"/>
+                <outlet property="needRecognitionButton" destination="24O-b0-fHf" id="aoh-UC-4aR"/>
+                <outlet property="newPDFButton" destination="6OL-fG-Gjx" id="B06-Yl-NUA"/>
+                <outlet property="saveTXTButton" destination="H77-qf-Mx7" id="j1c-ug-jD8"/>
+                <outlet property="selectLanguageButton" destination="KIA-c2-OKO" id="SUq-sk-4kK"/>
+                <outlet property="selectLanguageLabel" destination="hNH-hD-Wiy" id="9dN-KI-clk"/>
+                <outlet property="titleLabel" destination="4Dk-M4-n9q" id="dqq-kt-nUx"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@@ -27,85 +30,126 @@
             <rect key="frame" x="0.0" y="0.0" width="260" height="554"/>
             <subviews>
                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="EzX-5j-ptZ">
-                    <rect key="frame" x="0.0" y="390" width="260" height="140"/>
+                    <rect key="frame" x="0.0" y="356" width="260" height="148"/>
                     <subviews>
                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wnT-3F-g6I">
-                            <rect key="frame" x="14" y="120" width="31" height="20"/>
+                            <rect key="frame" x="14" y="128" width="44" height="20"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="20" id="1By-Eb-vp0"/>
                             </constraints>
-                            <textFieldCell key="cell" lineBreakMode="clipping" title="导出" id="fGH-vs-iyI">
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Export" id="fGH-vs-iyI">
                                 <font key="font" metaFont="system"/>
                                 <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                 <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                             </textFieldCell>
                         </textField>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Jts-7k-e3i">
-                            <rect key="frame" x="14" y="91" width="80" height="22"/>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="YyB-Ut-BRv">
+                            <rect key="frame" x="0.0" y="98" width="260" height="22"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="6OL-fG-Gjx" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+                                    <rect key="frame" x="16" y="0.0" width="228" height="22"/>
+                                </customView>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="20" id="Nvs-3N-SwE"/>
+                                <constraint firstItem="6OL-fG-Gjx" firstAttribute="top" secondItem="YyB-Ut-BRv" secondAttribute="top" id="IOE-pZ-GFL"/>
+                                <constraint firstAttribute="trailing" secondItem="6OL-fG-Gjx" secondAttribute="trailing" constant="16" id="MNi-9v-9tL"/>
+                                <constraint firstAttribute="bottom" secondItem="6OL-fG-Gjx" secondAttribute="bottom" id="Orj-w0-Y6C"/>
+                                <constraint firstItem="6OL-fG-Gjx" firstAttribute="leading" secondItem="YyB-Ut-BRv" secondAttribute="leading" constant="16" id="Urh-xW-hIi"/>
+                                <constraint firstAttribute="height" constant="22" id="ZGS-eY-aBU"/>
                             </constraints>
-                            <buttonCell key="cell" type="radio" title="新建PDF" bezelStyle="regularSquare" imagePosition="left" state="on" allowsMixedState="YES" inset="2" id="Hfw-aV-C1V">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="newPDFAction:" target="-2" id="kEw-51-tzI"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="IdZ-1k-1M3">
-                            <rect key="frame" x="30" y="63" width="161" height="22"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="zrO-hg-jel">
+                            <rect key="frame" x="0.0" y="68" width="260" height="22"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="p19-DS-5aU" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+                                    <rect key="frame" x="16" y="0.0" width="228" height="22"/>
+                                </customView>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="20" id="hQf-5X-e13"/>
+                                <constraint firstItem="p19-DS-5aU" firstAttribute="leading" secondItem="zrO-hg-jel" secondAttribute="leading" constant="16" id="8zq-ux-2af"/>
+                                <constraint firstItem="p19-DS-5aU" firstAttribute="top" secondItem="zrO-hg-jel" secondAttribute="top" id="Tun-a8-yFa"/>
+                                <constraint firstAttribute="trailing" secondItem="p19-DS-5aU" secondAttribute="trailing" constant="16" id="WUX-dT-IHi"/>
+                                <constraint firstAttribute="bottom" secondItem="p19-DS-5aU" secondAttribute="bottom" id="zG3-YM-fa1"/>
+                                <constraint firstAttribute="height" constant="22" id="zvw-Pi-yaH"/>
                             </constraints>
-                            <buttonCell key="cell" type="check" title="合并为同一份PDF文档" bezelStyle="regularSquare" imagePosition="left" inset="2" id="t6X-Ix-VJt">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="mergePDFAction:" target="-2" id="oMG-Fs-jaO"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DGj-0A-vQu">
-                            <rect key="frame" x="14" y="35" width="134" height="22"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="z2a-zX-F3Z">
+                            <rect key="frame" x="0.0" y="38" width="260" height="22"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="UJo-wM-Q8G" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+                                    <rect key="frame" x="16" y="0.0" width="228" height="22"/>
+                                </customView>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="20" id="2ox-ht-w6N"/>
+                                <constraint firstAttribute="bottom" secondItem="UJo-wM-Q8G" secondAttribute="bottom" id="BO1-Lu-wAb"/>
+                                <constraint firstAttribute="height" constant="22" id="QzB-sj-R1C"/>
+                                <constraint firstItem="UJo-wM-Q8G" firstAttribute="top" secondItem="z2a-zX-F3Z" secondAttribute="top" id="Uch-m5-6L3"/>
+                                <constraint firstItem="UJo-wM-Q8G" firstAttribute="leading" secondItem="z2a-zX-F3Z" secondAttribute="leading" constant="16" id="bbh-25-9vh"/>
+                                <constraint firstAttribute="trailing" secondItem="UJo-wM-Q8G" secondAttribute="trailing" constant="16" id="kjk-H7-Eow"/>
                             </constraints>
-                            <buttonCell key="cell" type="radio" title="插入现有PDF文档" bezelStyle="regularSquare" imagePosition="left" inset="2" id="Djv-mh-lQn">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="insertPDFAction:" target="-2" id="y6K-vA-0ae"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8eQ-e1-hk0">
-                            <rect key="frame" x="16" y="0.0" width="228" height="32"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="JSv-Ig-FZf">
+                            <rect key="frame" x="16" y="-2" width="228" height="32"/>
+                            <subviews>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EvJ-eO-qrI">
+                                    <rect key="frame" x="6" y="8" width="192" height="16"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Creat single Worksheet for..." id="4DN-vF-0y3">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Te4-ca-d20">
+                                    <rect key="frame" x="208" y="10" width="12" height="12"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="12" id="AgK-O9-Dyg"/>
+                                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="12" id="DKQ-jV-Vdg"/>
+                                        <constraint firstAttribute="height" constant="12" id="aDB-fU-XeJ"/>
+                                        <constraint firstAttribute="width" constant="12" id="fin-XC-uZf"/>
+                                    </constraints>
+                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="KL1-ns-6yM"/>
+                                </imageView>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Nsr-mu-C2F">
+                                    <rect key="frame" x="0.0" y="0.0" width="228" height="32"/>
+                                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="Ocb-ko-yqi">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="selectFileAction:" target="-2" id="2Dt-jJ-P0h"/>
+                                    </connections>
+                                </button>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="32" id="FnT-nZ-rc6"/>
+                                <constraint firstAttribute="trailing" secondItem="Te4-ca-d20" secondAttribute="trailing" constant="8" id="2Jq-DK-Y74"/>
+                                <constraint firstAttribute="height" constant="32" id="9tN-54-2qO"/>
+                                <constraint firstItem="Nsr-mu-C2F" firstAttribute="top" secondItem="JSv-Ig-FZf" secondAttribute="top" id="BLK-bX-Pud"/>
+                                <constraint firstItem="EvJ-eO-qrI" firstAttribute="centerY" secondItem="JSv-Ig-FZf" secondAttribute="centerY" id="DTX-vB-MpB"/>
+                                <constraint firstAttribute="trailing" secondItem="EvJ-eO-qrI" secondAttribute="trailing" constant="32" id="Elp-Yh-bXZ"/>
+                                <constraint firstItem="Te4-ca-d20" firstAttribute="centerY" secondItem="JSv-Ig-FZf" secondAttribute="centerY" id="Ieb-IJ-YC7"/>
+                                <constraint firstItem="Nsr-mu-C2F" firstAttribute="leading" secondItem="JSv-Ig-FZf" secondAttribute="leading" id="XSd-6d-hyX"/>
+                                <constraint firstAttribute="trailing" secondItem="Nsr-mu-C2F" secondAttribute="trailing" id="ZZb-wL-2hT"/>
+                                <constraint firstItem="EvJ-eO-qrI" firstAttribute="leading" secondItem="JSv-Ig-FZf" secondAttribute="leading" constant="8" id="c8c-t4-r52"/>
+                                <constraint firstAttribute="bottom" secondItem="Nsr-mu-C2F" secondAttribute="bottom" id="fRC-qI-LTp"/>
                             </constraints>
-                            <buttonCell key="cell" type="square" title="选择文件" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="5PL-c8-yqM">
-                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="selectFileAction:" target="-2" id="1Fn-OX-fmw"/>
-                            </connections>
-                        </button>
+                        </customView>
                     </subviews>
                     <constraints>
-                        <constraint firstAttribute="height" constant="140" id="8vU-D8-l90"/>
+                        <constraint firstAttribute="height" constant="148" id="8vU-D8-l90"/>
+                        <constraint firstItem="zrO-hg-jel" firstAttribute="top" secondItem="YyB-Ut-BRv" secondAttribute="bottom" constant="8" id="ELA-JG-gqu"/>
+                        <constraint firstAttribute="trailing" secondItem="zrO-hg-jel" secondAttribute="trailing" id="EpP-cn-QGG"/>
+                        <constraint firstItem="z2a-zX-F3Z" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" id="GuV-1O-pGo"/>
                         <constraint firstItem="wnT-3F-g6I" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="16" id="JVe-Gf-733"/>
-                        <constraint firstItem="DGj-0A-vQu" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="16" id="UUQ-AQ-PLG"/>
-                        <constraint firstItem="8eQ-e1-hk0" firstAttribute="top" secondItem="DGj-0A-vQu" secondAttribute="bottom" constant="4" id="W81-6J-iPB"/>
-                        <constraint firstItem="IdZ-1k-1M3" firstAttribute="top" secondItem="Jts-7k-e3i" secondAttribute="bottom" constant="8" id="WEJ-X6-0UU"/>
+                        <constraint firstItem="YyB-Ut-BRv" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" id="KbJ-0S-VY9"/>
+                        <constraint firstItem="JSv-Ig-FZf" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="16" id="Sh8-oF-uUx"/>
+                        <constraint firstAttribute="trailing" secondItem="JSv-Ig-FZf" secondAttribute="trailing" constant="16" id="Wbb-uG-kYD"/>
                         <constraint firstItem="wnT-3F-g6I" firstAttribute="top" secondItem="EzX-5j-ptZ" secondAttribute="top" id="cjy-ou-q19"/>
-                        <constraint firstAttribute="trailing" secondItem="8eQ-e1-hk0" secondAttribute="trailing" constant="16" id="ecQ-td-w7h"/>
-                        <constraint firstItem="8eQ-e1-hk0" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="16" id="lRb-oH-WHv"/>
-                        <constraint firstItem="Jts-7k-e3i" firstAttribute="top" secondItem="wnT-3F-g6I" secondAttribute="bottom" constant="8" id="n4u-JB-ZZO"/>
-                        <constraint firstItem="Jts-7k-e3i" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="16" id="niz-m1-hWk"/>
-                        <constraint firstItem="DGj-0A-vQu" firstAttribute="top" secondItem="IdZ-1k-1M3" secondAttribute="bottom" constant="8" id="qlp-my-Zfw"/>
-                        <constraint firstItem="IdZ-1k-1M3" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" constant="32" id="tEP-AC-kZa"/>
+                        <constraint firstAttribute="trailing" secondItem="YyB-Ut-BRv" secondAttribute="trailing" id="ejp-D2-rg9"/>
+                        <constraint firstItem="zrO-hg-jel" firstAttribute="leading" secondItem="EzX-5j-ptZ" secondAttribute="leading" id="iIX-G1-SNs"/>
+                        <constraint firstItem="JSv-Ig-FZf" firstAttribute="top" secondItem="z2a-zX-F3Z" secondAttribute="bottom" constant="8" id="n3x-oa-aha"/>
+                        <constraint firstAttribute="trailing" secondItem="z2a-zX-F3Z" secondAttribute="trailing" id="oQA-eG-DQl"/>
+                        <constraint firstItem="YyB-Ut-BRv" firstAttribute="top" secondItem="wnT-3F-g6I" secondAttribute="bottom" constant="8" id="riX-JT-OZ5"/>
+                        <constraint firstItem="z2a-zX-F3Z" firstAttribute="top" secondItem="zrO-hg-jel" secondAttribute="bottom" constant="8" id="sgo-O7-JIs"/>
                     </constraints>
                 </customView>
                 <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UVe-Ld-JJI">
@@ -113,7 +157,7 @@
                     <constraints>
                         <constraint firstAttribute="height" constant="40" id="Brq-8r-9lt"/>
                     </constraints>
-                    <buttonCell key="cell" type="square" title="导出PDF" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Eks-bL-nEJ">
+                    <buttonCell key="cell" type="square" title="导出PDF" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="Eks-bL-nEJ">
                         <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
                         <font key="font" metaFont="system"/>
                     </buttonCell>
@@ -122,86 +166,148 @@
                     </connections>
                 </button>
                 <customView translatesAutoresizingMaskIntoConstraints="NO" id="3Wc-Ha-nYi">
-                    <rect key="frame" x="0.0" y="261" width="260" height="113"/>
+                    <rect key="frame" x="0.0" y="220" width="260" height="120"/>
                     <subviews>
                         <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jrX-yB-GG4">
-                            <rect key="frame" x="14" y="93" width="32" height="20"/>
+                            <rect key="frame" x="14" y="100" width="86" height="20"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="20" id="Ptb-in-9s9"/>
                             </constraints>
-                            <textFieldCell key="cell" lineBreakMode="clipping" title="OCR" id="FAO-UE-5mG">
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="OCR Settings" id="FAO-UE-5mG">
                                 <font key="font" metaFont="system"/>
                                 <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
                                 <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                             </textFieldCell>
                         </textField>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Dzi-7p-cRB">
-                            <rect key="frame" x="14" y="64" width="133" height="22"/>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="4rj-nG-Rc1">
+                            <rect key="frame" x="0.0" y="70" width="260" height="22"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="24O-b0-fHf" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+                                    <rect key="frame" x="16" y="0.0" width="228" height="22"/>
+                                </customView>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="20" id="pJK-9U-0hy"/>
+                                <constraint firstAttribute="trailing" secondItem="24O-b0-fHf" secondAttribute="trailing" constant="16" id="QK3-GX-qy1"/>
+                                <constraint firstItem="24O-b0-fHf" firstAttribute="leading" secondItem="4rj-nG-Rc1" secondAttribute="leading" constant="16" id="Tiw-Xq-APs"/>
+                                <constraint firstAttribute="height" constant="22" id="eWb-kR-tY7"/>
+                                <constraint firstItem="24O-b0-fHf" firstAttribute="top" secondItem="4rj-nG-Rc1" secondAttribute="top" id="xuO-1L-dqu"/>
+                                <constraint firstAttribute="bottom" secondItem="24O-b0-fHf" secondAttribute="bottom" id="yvT-yx-wMW"/>
                             </constraints>
-                            <buttonCell key="cell" type="check" title="在需要时识别文本" bezelStyle="regularSquare" imagePosition="left" inset="2" id="q9Z-uv-plN">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="needRecognitionAction:" target="-2" id="taP-rr-avD"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qUj-8Z-jv1">
-                            <rect key="frame" x="16" y="29" width="228" height="32"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="7Kh-IA-gpY">
+                            <rect key="frame" x="16" y="30" width="228" height="32"/>
+                            <subviews>
+                                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hNH-hD-Wiy">
+                                    <rect key="frame" x="6" y="8" width="192" height="16"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Creat single Worksheet for..." id="mrz-P0-tZg">
+                                        <font key="font" metaFont="system"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="aSA-nC-apz">
+                                    <rect key="frame" x="208" y="10" width="12" height="12"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="12" id="AYN-hQ-UK1"/>
+                                        <constraint firstAttribute="height" constant="12" id="K0m-N8-ii1"/>
+                                        <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="12" id="fob-AQ-6tZ"/>
+                                        <constraint firstAttribute="width" constant="12" id="h6p-Tk-XGm"/>
+                                    </constraints>
+                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="btn_arrow_gray_down_s_norm_on" id="Avv-k9-ztn"/>
+                                </imageView>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KIA-c2-OKO">
+                                    <rect key="frame" x="0.0" y="0.0" width="228" height="32"/>
+                                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" alignment="center" imageScaling="proportionallyDown" inset="2" id="r47-nY-lkW">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <connections>
+                                        <action selector="selectLanguageAction:" target="-2" id="lmq-Nb-GOx"/>
+                                    </connections>
+                                </button>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="32" id="EJm-b2-hmJ"/>
+                                <constraint firstAttribute="bottom" secondItem="KIA-c2-OKO" secondAttribute="bottom" id="2mH-Cd-K8u"/>
+                                <constraint firstItem="hNH-hD-Wiy" firstAttribute="centerY" secondItem="7Kh-IA-gpY" secondAttribute="centerY" id="B78-xt-LJI"/>
+                                <constraint firstAttribute="trailing" secondItem="hNH-hD-Wiy" secondAttribute="trailing" constant="32" id="Bu3-du-m44"/>
+                                <constraint firstItem="aSA-nC-apz" firstAttribute="centerY" secondItem="7Kh-IA-gpY" secondAttribute="centerY" id="EiP-Va-nRe"/>
+                                <constraint firstItem="KIA-c2-OKO" firstAttribute="leading" secondItem="7Kh-IA-gpY" secondAttribute="leading" id="Kkb-zx-FIb"/>
+                                <constraint firstItem="KIA-c2-OKO" firstAttribute="top" secondItem="7Kh-IA-gpY" secondAttribute="top" id="T51-Et-PTs"/>
+                                <constraint firstAttribute="trailing" secondItem="aSA-nC-apz" secondAttribute="trailing" constant="8" id="kBs-hl-7Kp"/>
+                                <constraint firstAttribute="trailing" secondItem="KIA-c2-OKO" secondAttribute="trailing" id="tz3-Dv-4cS"/>
+                                <constraint firstAttribute="height" constant="32" id="v3c-ck-ekR"/>
+                                <constraint firstItem="hNH-hD-Wiy" firstAttribute="leading" secondItem="7Kh-IA-gpY" secondAttribute="leading" constant="8" id="ypt-s3-ABi"/>
                             </constraints>
-                            <buttonCell key="cell" type="square" title="English" bezelStyle="shadowlessSquare" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="yK6-0x-MRj">
-                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="selectLanguageAction:" target="-2" id="hV5-tr-KeB"/>
-                            </connections>
-                        </button>
-                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="elU-cI-csD">
-                            <rect key="frame" x="14" y="0.0" width="93" height="22"/>
+                        </customView>
+                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="SEa-Rp-Ebr">
+                            <rect key="frame" x="0.0" y="0.0" width="260" height="22"/>
+                            <subviews>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="H77-qf-Mx7" customClass="KMImageTitleButton" customModule="PDF_Office" customModuleProvider="target">
+                                    <rect key="frame" x="16" y="0.0" width="228" height="22"/>
+                                </customView>
+                            </subviews>
                             <constraints>
-                                <constraint firstAttribute="height" constant="20" id="clA-mB-7P2"/>
+                                <constraint firstItem="H77-qf-Mx7" firstAttribute="leading" secondItem="SEa-Rp-Ebr" secondAttribute="leading" constant="16" id="G8U-WC-uvk"/>
+                                <constraint firstAttribute="height" constant="22" id="cFA-sK-7n5"/>
+                                <constraint firstAttribute="trailing" secondItem="H77-qf-Mx7" secondAttribute="trailing" constant="16" id="nRj-Bl-IQf"/>
+                                <constraint firstItem="H77-qf-Mx7" firstAttribute="top" secondItem="SEa-Rp-Ebr" secondAttribute="top" id="pFw-ej-rGp"/>
+                                <constraint firstAttribute="bottom" secondItem="H77-qf-Mx7" secondAttribute="bottom" id="uyF-XM-R55"/>
                             </constraints>
-                            <buttonCell key="cell" type="check" title="另存为TXT" bezelStyle="regularSquare" imagePosition="left" inset="2" id="58M-LL-wcG">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
-                            </buttonCell>
-                            <connections>
-                                <action selector="saveTXTAction:" target="-2" id="GNn-YU-cbA"/>
-                            </connections>
-                        </button>
+                        </customView>
                     </subviews>
                     <constraints>
-                        <constraint firstItem="qUj-8Z-jv1" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" constant="16" id="GYw-t9-4fQ"/>
+                        <constraint firstItem="SEa-Rp-Ebr" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" id="FbV-B5-BHd"/>
                         <constraint firstItem="jrX-yB-GG4" firstAttribute="top" secondItem="3Wc-Ha-nYi" secondAttribute="top" id="NDi-GZ-M7P"/>
-                        <constraint firstItem="Dzi-7p-cRB" firstAttribute="top" secondItem="jrX-yB-GG4" secondAttribute="bottom" constant="8" id="Pxb-Sd-CPU"/>
-                        <constraint firstItem="qUj-8Z-jv1" firstAttribute="top" secondItem="Dzi-7p-cRB" secondAttribute="bottom" constant="4" id="RZ8-pU-EZc"/>
-                        <constraint firstItem="elU-cI-csD" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" constant="16" id="TgZ-5E-Gam"/>
-                        <constraint firstAttribute="height" constant="113" id="gwD-CI-xP2"/>
-                        <constraint firstAttribute="trailing" secondItem="qUj-8Z-jv1" secondAttribute="trailing" constant="16" id="jSM-mY-DQ4"/>
-                        <constraint firstItem="elU-cI-csD" firstAttribute="top" secondItem="qUj-8Z-jv1" secondAttribute="bottom" constant="8" id="ncY-kx-2zf"/>
+                        <constraint firstItem="7Kh-IA-gpY" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" constant="16" id="QiV-22-ydC"/>
+                        <constraint firstItem="7Kh-IA-gpY" firstAttribute="top" secondItem="4rj-nG-Rc1" secondAttribute="bottom" constant="8" id="Vu7-dH-Ahw"/>
+                        <constraint firstItem="4rj-nG-Rc1" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" id="bgn-xj-UmW"/>
+                        <constraint firstAttribute="trailing" secondItem="4rj-nG-Rc1" secondAttribute="trailing" id="dah-hC-vRD"/>
+                        <constraint firstItem="SEa-Rp-Ebr" firstAttribute="top" secondItem="7Kh-IA-gpY" secondAttribute="bottom" constant="8" id="e5i-PK-tut"/>
+                        <constraint firstItem="4rj-nG-Rc1" firstAttribute="top" secondItem="jrX-yB-GG4" secondAttribute="bottom" constant="8" id="eLZ-e3-f6w"/>
+                        <constraint firstAttribute="height" constant="120" id="gwD-CI-xP2"/>
+                        <constraint firstAttribute="trailing" secondItem="7Kh-IA-gpY" secondAttribute="trailing" constant="16" id="hRq-Mg-TcJ"/>
+                        <constraint firstAttribute="trailing" secondItem="SEa-Rp-Ebr" secondAttribute="trailing" id="uf5-yf-vcr"/>
                         <constraint firstItem="jrX-yB-GG4" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" constant="16" id="xp1-Y6-BRo"/>
-                        <constraint firstItem="Dzi-7p-cRB" firstAttribute="leading" secondItem="3Wc-Ha-nYi" secondAttribute="leading" constant="16" id="zqb-XG-zre"/>
+                    </constraints>
+                </customView>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="lIk-3P-3cP">
+                    <rect key="frame" x="0.0" y="504" width="260" height="50"/>
+                    <subviews>
+                        <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4Dk-M4-n9q">
+                            <rect key="frame" x="14" y="17" width="48" height="16"/>
+                            <textFieldCell key="cell" lineBreakMode="clipping" title="Setting" id="9Be-F4-gAv">
+                                <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="4Dk-M4-n9q" firstAttribute="centerY" secondItem="lIk-3P-3cP" secondAttribute="centerY" id="BfE-NO-lS4"/>
+                        <constraint firstItem="4Dk-M4-n9q" firstAttribute="leading" secondItem="lIk-3P-3cP" secondAttribute="leading" constant="16" id="C5d-2R-ZAR"/>
+                        <constraint firstAttribute="height" constant="50" id="zom-hd-qgo"/>
                     </constraints>
                 </customView>
             </subviews>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="EzX-5j-ptZ" secondAttribute="trailing" id="9GD-AX-GqJ"/>
                 <constraint firstAttribute="width" constant="260" id="A6V-1q-kX1"/>
+                <constraint firstAttribute="trailing" secondItem="lIk-3P-3cP" secondAttribute="trailing" id="Nex-ax-Di6"/>
                 <constraint firstAttribute="trailing" secondItem="3Wc-Ha-nYi" secondAttribute="trailing" id="Qlj-aC-QZq"/>
                 <constraint firstAttribute="trailing" secondItem="UVe-Ld-JJI" secondAttribute="trailing" constant="16" id="Y8d-Em-dVD"/>
                 <constraint firstItem="3Wc-Ha-nYi" firstAttribute="leading" secondItem="gTP-Bx-DSY" secondAttribute="leading" id="ewX-fD-QbI"/>
                 <constraint firstAttribute="bottom" secondItem="UVe-Ld-JJI" secondAttribute="bottom" constant="16" id="gLY-Xn-sgd"/>
+                <constraint firstItem="lIk-3P-3cP" firstAttribute="leading" secondItem="gTP-Bx-DSY" secondAttribute="leading" id="h0r-eO-UdV"/>
+                <constraint firstItem="lIk-3P-3cP" firstAttribute="top" secondItem="gTP-Bx-DSY" secondAttribute="top" id="n2S-FE-bMg"/>
                 <constraint firstItem="3Wc-Ha-nYi" firstAttribute="top" secondItem="EzX-5j-ptZ" secondAttribute="bottom" constant="16" id="nM5-mq-QvO"/>
-                <constraint firstItem="EzX-5j-ptZ" firstAttribute="top" secondItem="gTP-Bx-DSY" secondAttribute="top" constant="24" id="pil-Hd-IFe"/>
                 <constraint firstItem="EzX-5j-ptZ" firstAttribute="leading" secondItem="gTP-Bx-DSY" secondAttribute="leading" id="w4b-zg-6GY"/>
                 <constraint firstItem="UVe-Ld-JJI" firstAttribute="leading" secondItem="gTP-Bx-DSY" secondAttribute="leading" constant="16" id="wSd-77-3gm"/>
+                <constraint firstItem="EzX-5j-ptZ" firstAttribute="top" secondItem="lIk-3P-3cP" secondAttribute="bottom" id="zgw-8T-O9I"/>
             </constraints>
             <point key="canvasLocation" x="-17" y="-19"/>
         </customView>
     </objects>
+    <resources>
+        <image name="btn_arrow_gray_down_s_norm_on" width="12" height="12"/>
+    </resources>
 </document>