Browse Source

【BOTA】大纲列表,父级大纲应该是要点击左侧三角icon才能展开/收起

lizhe 1 year ago
parent
commit
9acbc14665

+ 1 - 1
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/KMOutlineEditViewController.xib

@@ -6,7 +6,7 @@
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMOutlineEditViewController" customModule="PDF_Office" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMOutlineEditViewController" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="mailAddressTextField" destination="LfL-VK-ame" id="iwx-Zv-ExL"/>
                 <outlet property="mailButton" destination="gIo-HB-6zF" id="Kcm-XV-ved"/>

+ 12 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/KMBOTAOutlineView.swift

@@ -161,6 +161,15 @@ extension KMBOTAOutlineView : NSOutlineViewDataSource,NSOutlineViewDelegate {
     func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {
         let cell : KMBOTAOutlineCellView = KMBOTAOutlineCellView.init()
         cell.model = item as? KMBOTAOutlineItem
+        cell.iconAction = { [unowned self] view in
+            let rowIndex = outlineView.row(forItem: item)
+            let rowView = outlineView.rowView(atRow: rowIndex, makeIfNecessary: false)
+            self.didSelectItem(view: (rowView as? KMBOTAOutlineRowView), event: NSEvent())
+            
+            if self.selectItems?.count == 1 {
+                self.needOpenOrCloseItem(oulineItem: (self.selectItems?.first)!)
+            }
+        }
         return cell
     }
     
@@ -295,9 +304,9 @@ extension KMBOTAOutlineView {
             }
         }
         self.selectItems = items
-        if self.selectItems?.count == 1 {
-            self.needOpenOrCloseItem(oulineItem: (self.selectItems?.first)!)
-        }
+//        if self.selectItems?.count == 1 {
+//            self.needOpenOrCloseItem(oulineItem: (self.selectItems?.first)!)
+//        }
         if self.selectItems != nil && isNeedDelegate {
             self.delegate?.BOTAOutlineView(self, didSelectItem: self.selectItems!)
         }

+ 1 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/KMBOTAOutlineView.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 14 - 5
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/View/KMBOTAOutlineCellView.swift

@@ -7,12 +7,15 @@
 
 import Cocoa
 
+typealias KMBOTAOutlineCellViewIconAction = (_ view: KMBOTAOutlineCellView ) -> ()
 class KMBOTAOutlineCellView: NSTableCellView {
     @IBOutlet var contentView: NSView!
-    @IBOutlet weak var iconImageView: NSImageView!
     @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var iconButton: NSButton!
     
     @IBOutlet weak var iconImageWidthConstrailnt: NSLayoutConstraint!
+    
+    var iconAction: KMBOTAOutlineCellViewIconAction?
     var model: KMBOTAOutlineItem? {
         didSet {
             self.reloadData()
@@ -56,16 +59,16 @@ class KMBOTAOutlineCellView: NSTableCellView {
         
         self.titleLabel.stringValue = data.outline.label ?? ""
         if data.isItemExpanded {
-            self.iconImageView.image = NSImage(named: "icon_outline_close")
+            self.iconButton.image = NSImage(named: "icon_outline_close")
         } else {
-            self.iconImageView.image = NSImage(named: "icon_outline_expand")
+            self.iconButton.image = NSImage(named: "icon_outline_expand")
         }
         
         if data.outline.numberOfChildren > 0 {
-            self.iconImageView.isHidden = false
+            self.iconButton.isHidden = false
 //            self.iconImageWidthConstrailnt.constant = 22
         } else {
-            self.iconImageView.isHidden = true
+            self.iconButton.isHidden = true
 //            self.iconImageWidthConstrailnt.constant = 0
         }
     }
@@ -78,4 +81,10 @@ class KMBOTAOutlineCellView: NSTableCellView {
     func updateLanguage() {
         self.reloadData()
     }
+    
+    
+    @IBAction func iconButtonAction(_ sender: Any) {
+        guard let callBack = iconAction else { return }
+        callBack(self)
+    }
 }

+ 20 - 14
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/Outline/OutlineView/View/KMBOTAOutlineCellView.xib

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
+        <deployment identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -8,8 +9,7 @@
         <customObject id="-2" userLabel="File's Owner" customClass="KMBOTAOutlineCellView" customModule="PDF_Master" customModuleProvider="target">
             <connections>
                 <outlet property="contentView" destination="c22-O7-iKe" id="RjV-fa-1Ne"/>
-                <outlet property="iconImageView" destination="ro3-FU-Blg" id="12F-r0-Osb"/>
-                <outlet property="iconImageWidthConstrailnt" destination="OWK-R9-gqA" id="Ici-tg-db9"/>
+                <outlet property="iconButton" destination="oX7-Le-Qnh" id="gI4-OT-Wa6"/>
                 <outlet property="titleLabel" destination="qgr-rq-q7D" id="zv5-2Z-weT"/>
             </connections>
         </customObject>
@@ -19,29 +19,35 @@
             <rect key="frame" x="0.0" y="0.0" width="480" height="40"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ro3-FU-Blg">
-                    <rect key="frame" x="0.0" y="9" width="22" height="22"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="22" id="OWK-R9-gqA"/>
-                        <constraint firstAttribute="height" constant="22" id="rOI-AH-jdq"/>
-                    </constraints>
-                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="icon_outline_expand" id="Xfa-U8-Yzw"/>
-                </imageView>
                 <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qgr-rq-q7D">
-                    <rect key="frame" x="22" y="12" width="444" height="16"/>
+                    <rect key="frame" x="20" y="12" width="446" height="16"/>
                     <textFieldCell key="cell" lineBreakMode="truncatingTail" title="Label" id="GUU-ti-yMJ">
                         <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="oX7-Le-Qnh">
+                    <rect key="frame" x="0.0" y="9" width="22" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="22" id="hKW-TA-kaD"/>
+                        <constraint firstAttribute="height" constant="22" id="o5n-A4-9Gl"/>
+                    </constraints>
+                    <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="icon_outline_expand" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="kCY-iL-cPI">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system"/>
+                    </buttonCell>
+                    <connections>
+                        <action selector="iconButtonAction:" target="-2" id="YLZ-qD-8P3"/>
+                    </connections>
+                </button>
             </subviews>
             <constraints>
-                <constraint firstItem="qgr-rq-q7D" firstAttribute="leading" secondItem="ro3-FU-Blg" secondAttribute="trailing" constant="2" id="8se-mm-uTg"/>
                 <constraint firstItem="qgr-rq-q7D" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="9Vb-F1-KQM"/>
+                <constraint firstItem="oX7-Le-Qnh" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="JvF-tZ-PnT"/>
+                <constraint firstItem="qgr-rq-q7D" firstAttribute="leading" secondItem="oX7-Le-Qnh" secondAttribute="trailing" id="VGD-gU-9Ju"/>
                 <constraint firstAttribute="trailing" secondItem="qgr-rq-q7D" secondAttribute="trailing" constant="16" id="VT6-zt-H1n"/>
-                <constraint firstItem="ro3-FU-Blg" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="izw-ba-3DM"/>
-                <constraint firstItem="ro3-FU-Blg" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="ySS-Vq-kt9"/>
+                <constraint firstItem="oX7-Le-Qnh" firstAttribute="centerY" secondItem="c22-O7-iKe" secondAttribute="centerY" id="hwc-vQ-gYr"/>
             </constraints>
             <point key="canvasLocation" x="-34" y="154"/>
         </customView>