Implement jump to issue
This commit is contained in:
parent
9fbd4b9d91
commit
bc77af7a80
|
@ -28,6 +28,8 @@ func pushToFront(inout list: [String], front: String) {
|
|||
|
||||
class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePanelDelegate, ACEViewDelegate {
|
||||
@IBOutlet weak var editor : ACEView!
|
||||
@IBOutlet weak var auxEdit : ACEView!
|
||||
@IBOutlet weak var editors : NSStackView!
|
||||
@IBOutlet weak var outline : NSOutlineView!
|
||||
@IBOutlet weak var boardTool: NSPopUpButton!
|
||||
@IBOutlet weak var progTool : NSPopUpButton!
|
||||
|
@ -53,6 +55,8 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
|||
var printModDate : NSDate?
|
||||
var printRevision : String?
|
||||
var printShowPanel = false
|
||||
var jumpingToIssue = false
|
||||
var currentIssueLine = -1
|
||||
|
||||
let kVersionKey = "Version"
|
||||
let kCurVersion = 1.0
|
||||
|
@ -115,6 +119,13 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
|||
editor.setFontSize(fontSize)
|
||||
editor.delegate = self
|
||||
|
||||
auxEdit.setShowPrintMargin(false)
|
||||
auxEdit.setTheme(currentTheme)
|
||||
auxEdit.setKeyboardHandler(keyboardHandler)
|
||||
auxEdit.setFontSize(fontSize)
|
||||
|
||||
editors.setViews([editor], inGravity: .Top)
|
||||
|
||||
outline.setDataSource(files)
|
||||
files.apply() { node in
|
||||
if let group = node as? ASFileGroup {
|
||||
|
@ -253,6 +264,7 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
|||
editor.gotoLine(1000000000, column: 0, animated: true)
|
||||
logModified = modified as! NSDate
|
||||
logSize = size as! Int
|
||||
currentIssueLine = -1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -448,6 +460,9 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
|||
|
||||
func outlineViewSelectionDidChange(notification: NSNotification) {
|
||||
willChangeValueForKey("hasSelection")
|
||||
if !jumpingToIssue {
|
||||
editors.setViews([], inGravity: .Bottom)
|
||||
}
|
||||
if outline.numberOfSelectedRows < 2 {
|
||||
selectNode(outline.itemAtRow(outline.selectedRow) as! ASFileNode?)
|
||||
}
|
||||
|
@ -689,6 +704,64 @@ class ASProjDoc: NSDocument, NSOutlineViewDelegate, NSMenuDelegate, NSOpenSavePa
|
|||
}
|
||||
}
|
||||
|
||||
// MARK: Issues
|
||||
@IBAction func jumpToIssue(sender: AnyObject) {
|
||||
let direction : Int = (sender as! NSMenuItem).tag
|
||||
if editors.viewsInGravity(.Bottom).count == 0 {
|
||||
editors.addView(auxEdit, inGravity: .Bottom)
|
||||
|
||||
let url = fileURL?.URLByDeletingLastPathComponent?.URLByAppendingPathComponent(files.buildLog.path)
|
||||
if url == nil {
|
||||
return
|
||||
}
|
||||
var enc : UInt = 0
|
||||
auxEdit.setString(NSString(contentsOfURL:url!, usedEncoding:&enc, error:nil) as? String ?? "")
|
||||
editor.setMode(.Text)
|
||||
editor.alphaValue = 1.0
|
||||
}
|
||||
let buildLog = auxEdit.string().componentsSeparatedByString("\n")
|
||||
let issueRe = NSRegularExpression(pattern: "(\\S+?):(\\d+):.*", options: nil, error: nil)!
|
||||
|
||||
currentIssueLine += direction
|
||||
while currentIssueLine > -1 && currentIssueLine < buildLog.count {
|
||||
let line = buildLog[currentIssueLine]
|
||||
let range = NSMakeRange(0, count(line.utf16))
|
||||
if let match = issueRe.firstMatchInString(line, options:.Anchored, range:range) {
|
||||
let file = match.rangeAtIndex(1)
|
||||
let lineTxt = match.rangeAtIndex(2)
|
||||
let nsline = line as NSString
|
||||
let lineNo = nsline.substringWithRange(lineTxt).toInt()!
|
||||
let fileName = nsline.substringWithRange(file) as NSString
|
||||
let fileURL : NSURL
|
||||
|
||||
if fileName.hasPrefix("../../") {
|
||||
fileURL = files.dir.URLByAppendingPathComponent(fileName.substringFromIndex(6))
|
||||
} else {
|
||||
fileURL = NSURL(fileURLWithPath:fileName as String)!.URLByStandardizingPath!
|
||||
}
|
||||
|
||||
jumpingToIssue = true
|
||||
var resourceID : AnyObject?
|
||||
fileURL.getResourceValue(&resourceID, forKey:NSURLFileResourceIdentifierKey, error:nil)
|
||||
files.apply {(node) in
|
||||
if let file = node as? ASFileItem {
|
||||
var thisID : AnyObject?
|
||||
file.url.getResourceValue(&thisID, forKey:NSURLFileResourceIdentifierKey, error:nil)
|
||||
if thisID != nil && resourceID!.isEqual(thisID!) {
|
||||
self.selectNodeInOutline(node)
|
||||
self.editor.gotoLine(lineNo, column:0, animated:true)
|
||||
}
|
||||
}
|
||||
}
|
||||
jumpingToIssue = false
|
||||
|
||||
auxEdit.gotoLine(currentIssueLine+1, column:0, animated: true)
|
||||
break
|
||||
}
|
||||
currentIssueLine += direction
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Build / Upload
|
||||
|
||||
@IBAction func buildProject(AnyObject) {
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7702" systemVersion="14F4" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<development version="6200" identifier="xcode"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7702"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="ASProjDoc" customModule="AVRsack">
|
||||
<connections>
|
||||
<outlet property="auxEdit" destination="Kfh-Ag-J3X" id="D7H-fk-9rL"/>
|
||||
<outlet property="boardTool" destination="xO5-xB-HHj" id="xzX-eY-Ofe"/>
|
||||
<outlet property="editor" destination="Nhg-qn-6A8" id="eUR-Gk-IBw"/>
|
||||
<outlet property="editor" destination="Nhg-qn-6A8" id="gcr-ED-Eil"/>
|
||||
<outlet property="editors" destination="M6t-Fu-HMa" id="Bpq-O7-xMr"/>
|
||||
<outlet property="outline" destination="nij-C2-Fna" id="sVi-eL-hqZ"/>
|
||||
<outlet property="portTool" destination="4rZ-U5-AH6" id="8Nb-iI-pJH"/>
|
||||
<outlet property="printView" destination="HFe-2c-jeW" id="dh0-q5-QVW"/>
|
||||
<outlet property="progTool" destination="08n-xg-fNl" id="959-as-OtP"/>
|
||||
<outlet property="window" destination="xOd-HO-29H" id="JIz-fz-R2o"/>
|
||||
</connections>
|
||||
|
@ -33,10 +33,10 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="1001" height="500"/>
|
||||
<subviews>
|
||||
<box autoresizesSubviews="NO" title="Box" boxType="custom" borderType="none" titlePosition="noTitle" id="0X4-Im-JAh">
|
||||
<rect key="frame" x="0.0" y="0.0" width="229" height="500"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="228.5" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<view key="contentView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="229" height="500"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="228.5" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<scrollView misplaced="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ObX-J0-NIB">
|
||||
|
@ -125,17 +125,11 @@
|
|||
<color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
|
||||
<color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</box>
|
||||
<customView id="Nhg-qn-6A8" customClass="ACEView">
|
||||
<rect key="frame" x="230" y="0.0" width="771" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="dHZ-ac-XrM"/>
|
||||
</constraints>
|
||||
</customView>
|
||||
<stackView orientation="vertical" alignment="centerX" spacing="2" horizontalHuggingPriority="249" verticalHuggingPriority="249" fixedFrame="YES" id="M6t-Fu-HMa">
|
||||
<rect key="frame" x="229.5" y="0.0" width="771.5" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="0X4-Im-JAh" firstAttribute="width" relation="lessThanOrEqual" secondItem="Nhg-qn-6A8" secondAttribute="width" multiplier="0.25" constant="50" id="A29-q0-dcn"/>
|
||||
</constraints>
|
||||
<holdingPriorities>
|
||||
<real value="250"/>
|
||||
<real value="250"/>
|
||||
|
@ -280,9 +274,16 @@
|
|||
<point key="canvasLocation" x="408" y="438"/>
|
||||
</window>
|
||||
<userDefaultsController representsSharedInstance="YES" id="fpc-q0-yYy"/>
|
||||
<customView id="HFe-2c-jeW" customClass="ACEView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="163" height="96"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Nhg-qn-6A8" customClass="ACEView">
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="dHZ-ac-XrM"/>
|
||||
</constraints>
|
||||
</customView>
|
||||
<customView misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Kfh-Ag-J3X" customClass="ACEView">
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="bnV-eX-5lg"/>
|
||||
<constraint firstAttribute="height" constant="100" id="s9M-vL-e15"/>
|
||||
</constraints>
|
||||
</customView>
|
||||
</objects>
|
||||
<resources>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7702" systemVersion="14F4" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<development version="6200" identifier="xcode"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7702"/>
|
||||
|
@ -375,6 +375,17 @@ CA
|
|||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="qYd-6T-XvV"/>
|
||||
<menuItem title="Jump to Next Issue" tag="1" keyEquivalent="'" id="7s3-uG-LWo">
|
||||
<connections>
|
||||
<action selector="jumpToIssue:" target="-1" id="0Ql-DF-4Yw"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Jump to Previous Issue" tag="-1" keyEquivalent=""" id="qEF-oa-KMu">
|
||||
<connections>
|
||||
<action selector="jumpToIssue:" target="-1" id="hlw-Mu-L20"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="qtx-oJ-5yi"/>
|
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
|
|
Loading…
Reference in New Issue
Block a user