// Created by Jaime O. Rios
import AppKit
var sharedPlugin: XcodePerforcePlugin?
class XcodePerforcePlugin: NSObject
{
var bundle: NSBundle
var p4Functionatlity: P4Functionality = P4Functionality()
class func pluginDidLoad(bundle: NSBundle)
{
let appName = NSBundle.mainBundle().infoDictionary?["CFBundleName"] as? NSString
if appName == "Xcode"
{
sharedPlugin = XcodePerforcePlugin(bundle: bundle)
}
}
init(bundle: NSBundle)
{
self.bundle = bundle
super.init()
createMenuItems()
}
deinit
{
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func createMenuItems()
{
var item = NSApp.mainMenu!!.itemWithTitle("Source Control")
if item != nil
{
p4SettingsSetUpMenu(item)
p4InfoSetUpMenu(item)
p4CheckOutSetUpMenu(item)
p4AddSetUpMenu(item)
p4vcRevGraphSetUpMenu(item)
p4vcTimeLapseSetUpMenu(item)
}
}
// MARK: -
func p4SettingsSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4plugin settings", action:"p4Settings", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(NSMenuItem.separatorItem())
item!.submenu!.addItem(menuItem)
}
func p4Settings()
{
p4Functionatlity.checkSettings()
var attr = p4Functionatlity.p4Installed
let p4Installed = String("p4 installed: \t" + (attr ? "YES": "NO") + "\n")
var value = p4Functionatlity.p4Path
var valueStr = (value != nil ? value : "Unknown")
let p4Path = String("p4 path: \t\t" + valueStr + "\n")
attr = p4Functionatlity.p4vcInstalled
let p4vcInstalled = String("p4vc installed: \t" + (attr ? "YES": "NO") + "\n")
value = p4Functionatlity.p4vcPath
valueStr = (value != nil ? value : "Unknown")
let p4vcPath = String("p4vc path: \t" + valueStr + "\n")
attr = p4Functionatlity.P4CONFIG_Set
let p4ConfigSet = String("P4CONFIG set: " + (attr ? "YES": "NO") + "\n")
value = p4Functionatlity.p4ClientName
let p4ClientName = String("P4CLIENT name: " + value + "\n")
var settingsAlertBox = NSAlert()
settingsAlertBox.messageText = "plugin settings"
settingsAlertBox.informativeText = p4Installed + p4Path + p4vcInstalled + p4vcPath + p4ConfigSet + p4ClientName
settingsAlertBox.runModal()
}
func displayDefaultP4NotSetError()
{
let error = NSError(domain: "Either P4CONFIG not set or a p4 config file is not available in the project root", code:1, userInfo:nil)
NSAlert(error: error).runModal()
}
func p4CheckOutSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4 - edit", action:"p4CheckOut", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(menuItem)
}
func p4CheckOut()
{
if (p4Functionatlity.p4ClientSet())
{
let msg = p4Functionatlity.p4CheckOutCurrentFile()
var settingsAlertBox = NSAlert()
settingsAlertBox.messageText = "p4 edit"
settingsAlertBox.informativeText = msg
settingsAlertBox.runModal()
}
else
{
displayDefaultP4NotSetError()
}
}
func p4AddSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4 - add", action:"p4Add", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(menuItem)
}
func p4Add()
{
if (p4Functionatlity.p4ClientSet())
{
let msg = p4Functionatlity.p4Add()
var settingsAlertBox = NSAlert()
settingsAlertBox.messageText = "p4 add"
settingsAlertBox.informativeText = msg
settingsAlertBox.runModal()
}
else
{
displayDefaultP4NotSetError()
}
}
func p4InfoSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4 - info", action:"p4Info", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(menuItem)
}
func p4Info()
{
let msg = p4Functionatlity.p4Info()
var settingsAlertBox = NSAlert()
settingsAlertBox.messageText = "p4 info"
settingsAlertBox.informativeText = msg
settingsAlertBox.runModal()
}
// MARK: -
func p4vcRevGraphSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4vc - revgraph", action:"p4vcRevGraph", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(menuItem)
}
func p4vcRevGraph()
{
if (p4Functionatlity.p4ClientSet())
{
p4Functionatlity.p4vcRevGraph();
}
else
{
displayDefaultP4NotSetError()
}
}
func p4vcTimeLapseSetUpMenu(let item : NSMenuItem?)
{
var menuItem = NSMenuItem(title:"p4vc - timelapse", action:"p4vcTimeLapse", keyEquivalent:"")
menuItem.target = self
item!.submenu!.addItem(menuItem)
}
func p4vcTimeLapse()
{
if (p4Functionatlity.p4ClientSet())
{
p4Functionatlity.p4vcRevGraph();
}
else
{
displayDefaultP4NotSetError()
}
}
}
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #12 | 20141 | Jaime Rios | Merging using M_robc_apple-to_jaime_rios_XcodePerforcePlugin | ||
| #11 | 19863 | Jaime Rios | Fixed warning generated by Xcode regarding deprecated selector call usage in Swift | ||
| #10 | 15948 | Jaime Rios | Added p4vc submit functionality; violated rule 0; updated plist for xcode 7 uuid; fixed errors encountered by xcode related to optionals and interoperability with Obj-C++ code. | ||
| #9 | 15115 | Jaime Rios | Modified plist for Xcode 6.4 and Xcode 7 Beta; updated code changes in Swift; added notes about UUID for self. | ||
| #8 | 13723 | Jaime Rios | Fixed problem with menu items not being created because mainMenu is not available at startup for Xcode 6.3.2. | ||
| #7 | 13687 | Jaime Rios | Added Xcode 6.3.2 support; minor editing changes; fixes for Swift compiler errors. | ||
| #6 | 12123 | Jaime Rios | Added compatibility for Xcode 6.2; modified the menu layout; added additional screenshot; updated URL for Alcatraz Package Manager. | ||
| #5 | 11740 | Jaime Rios | Updated readme text with additional known issues; refactored p4 revert function; added perforce icon to alert message. | ||
| #4 | 11739 | Jaime Rios |
Merging //guest/matt_attaway/XcodePerforcePlugin/... to //guest/jaime_rios/XcodePerforcePlugin/... |
||
| #3 | 11734 | Jaime Rios | Modified p4vc functions in Swift code to only show a dialog box if there is an error. | ||
| #2 | 11733 | Jaime Rios | Refactored code to have more functionality within Swift code; fixed perforce connection bugs. | ||
| #1 | 11694 | Jaime Rios | Initial add of XcodePerforcePlugin project to guest depot. |