This commit is contained in:
Gerrit Linnemann 2015-09-10 09:28:17 +02:00
parent 0752fe0547
commit baba7de448
9 changed files with 279 additions and 8 deletions

View File

@ -13,6 +13,9 @@
ECEBE1991BA0639500E5B4E3 /* ipbc_ClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */; }; ECEBE1991BA0639500E5B4E3 /* ipbc_ClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */; };
ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */; }; ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */; };
ECEBE1A51BA0690B00E5B4E3 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */; }; ECEBE1A51BA0690B00E5B4E3 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */; };
ECEBE1A91BA0752600E5B4E3 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1A81BA0752600E5B4E3 /* EventMonitor.swift */; };
ECEBE1AB1BA07DD600E5B4E3 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1AA1BA07DD600E5B4E3 /* Constants.swift */; };
ECEBE1AE1BA0C61100E5B4E3 /* WebserviceClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1AD1BA0C61100E5B4E3 /* WebserviceClient.swift */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -36,6 +39,9 @@
ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ipbc_ClientTests.swift; sourceTree = "<group>"; }; ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ipbc_ClientTests.swift; sourceTree = "<group>"; };
ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainViewController.swift; path = Controller/MainViewController.swift; sourceTree = "<group>"; }; ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainViewController.swift; path = Controller/MainViewController.swift; sourceTree = "<group>"; };
ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainViewController.xib; path = Controller/MainViewController.xib; sourceTree = "<group>"; }; ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainViewController.xib; path = Controller/MainViewController.xib; sourceTree = "<group>"; };
ECEBE1A81BA0752600E5B4E3 /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = "<group>"; };
ECEBE1AA1BA07DD600E5B4E3 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
ECEBE1AD1BA0C61100E5B4E3 /* WebserviceClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebserviceClient.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -77,11 +83,14 @@
ECEBE1841BA0639500E5B4E3 /* ipbc-Client */ = { ECEBE1841BA0639500E5B4E3 /* ipbc-Client */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
ECEBE1AC1BA0C60000E5B4E3 /* WebService */,
ECEBE1A71BA0693200E5B4E3 /* control */, ECEBE1A71BA0693200E5B4E3 /* control */,
ECEBE1A61BA0692000E5B4E3 /* view */, ECEBE1A61BA0692000E5B4E3 /* view */,
ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */, ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */,
ECEBE1891BA0639500E5B4E3 /* Images.xcassets */, ECEBE1891BA0639500E5B4E3 /* Images.xcassets */,
ECEBE1851BA0639500E5B4E3 /* Supporting Files */, ECEBE1851BA0639500E5B4E3 /* Supporting Files */,
ECEBE1A81BA0752600E5B4E3 /* EventMonitor.swift */,
ECEBE1AA1BA07DD600E5B4E3 /* Constants.swift */,
); );
path = "ipbc-Client"; path = "ipbc-Client";
sourceTree = "<group>"; sourceTree = "<group>";
@ -128,6 +137,14 @@
name = control; name = control;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
ECEBE1AC1BA0C60000E5B4E3 /* WebService */ = {
isa = PBXGroup;
children = (
ECEBE1AD1BA0C61100E5B4E3 /* WebserviceClient.swift */,
);
name = WebService;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
@ -228,8 +245,11 @@
isa = PBXSourcesBuildPhase; isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
ECEBE1A91BA0752600E5B4E3 /* EventMonitor.swift in Sources */,
ECEBE1AE1BA0C61100E5B4E3 /* WebserviceClient.swift in Sources */,
ECEBE1881BA0639500E5B4E3 /* AppDelegate.swift in Sources */, ECEBE1881BA0639500E5B4E3 /* AppDelegate.swift in Sources */,
ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */, ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */,
ECEBE1AB1BA07DD600E5B4E3 /* Constants.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -420,6 +440,7 @@
ECEBE19E1BA0639500E5B4E3 /* Release */, ECEBE19E1BA0639500E5B4E3 /* Release */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
}; };
ECEBE19F1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */ = { ECEBE19F1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */ = {
isa = XCConfigurationList; isa = XCConfigurationList;
@ -428,6 +449,7 @@
ECEBE1A11BA0639500E5B4E3 /* Release */, ECEBE1A11BA0639500E5B4E3 /* Release */,
); );
defaultConfigurationIsVisible = 0; defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
}; };
/* End XCConfigurationList section */ /* End XCConfigurationList section */
}; };

View File

@ -7,14 +7,14 @@
<key>IDESourceControlProjectIdentifier</key> <key>IDESourceControlProjectIdentifier</key>
<string>B4996E80-3257-4F7C-86EA-7424113FB751</string> <string>B4996E80-3257-4F7C-86EA-7424113FB751</string>
<key>IDESourceControlProjectName</key> <key>IDESourceControlProjectName</key>
<string>project</string> <string>ipbc-Client</string>
<key>IDESourceControlProjectOriginsDictionary</key> <key>IDESourceControlProjectOriginsDictionary</key>
<dict> <dict>
<key>41A46EC74341898613642098E6535621FD117950</key> <key>41A46EC74341898613642098E6535621FD117950</key>
<string>ssh://services.adawim.com:7999/ipbc/statusbar-app-osx.git</string> <string>ssh://services.adawim.com:7999/ipbc/statusbar-app-osx.git</string>
</dict> </dict>
<key>IDESourceControlProjectPath</key> <key>IDESourceControlProjectPath</key>
<string>ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace</string> <string>ipbc-Client/ipbc-Client.xcodeproj</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key> <key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict> <dict>
<key>41A46EC74341898613642098E6535621FD117950</key> <key>41A46EC74341898613642098E6535621FD117950</key>

View File

@ -12,19 +12,31 @@ import Cocoa
class AppDelegate: NSObject, NSApplicationDelegate { class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow! @IBOutlet weak var window: NSWindow!
let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
let popover = NSPopover() let popover = NSPopover()
var eventMonitor: EventMonitor?
let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2)
func applicationDidFinishLaunching(aNotification: NSNotification) { func applicationDidFinishLaunching(aNotification: NSNotification) {
// Insert code here to initialize your application // Insert code here to initialize your application
// Icon
if let button = statusItem.button { if let button = statusItem.button {
button.image = NSImage(named: "statusbar-icon") button.image = NSImage(named: "statusbar-icon")
button.action = Selector("togglePopover:") button.action = Selector("togglePopover:")
} }
popover.contentViewController = MainViewController(nibName: "MainViewController", bundle: nil) popover.contentViewController = MainViewController(nibName: "MainViewController", bundle: nil)
// EventMonitor
eventMonitor = EventMonitor(mask: .LeftMouseDownMask | .RightMouseDownMask) { [unowned self] event in
if self.popover.shown {
self.closePopover(event)
}
}
eventMonitor?.start()
} }
func applicationWillTerminate(aNotification: NSNotification) { func applicationWillTerminate(aNotification: NSNotification) {

View File

@ -0,0 +1,26 @@
//
// Constants.swift
// ipbc-Client
//
// Created by Gerrit Linnemann on 09.09.15.
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
//
import Foundation
struct Constants {
struct Web {
static let REGISTER = "https://www.ip-bc.org/login.xhtml"
}
struct WebService {
static let BASE = "www.ip-bc.org"
static let UPDATE = "https://www.ip-bc.org/ws/update/ip"
static let GET_USERS_IP = "https://www.ip-bc.org/ws/info/ip"
}
struct UserDefaults {
static let HOST = "USERDEFAULT_HOST"
static let TOKEN = "USERDEFAULT_TOKEN"
}
}

View File

@ -10,9 +10,43 @@ import Cocoa
class MainViewController: NSViewController { class MainViewController: NSViewController {
@IBOutlet weak var btnQuit: NSButton!
@IBOutlet weak var btnRegister: NSButton!
@IBOutlet weak var btnSave: NSButton!
@IBOutlet weak var btnCancel: NSButton!
@IBOutlet weak var lblCurrentIP: NSTextField!
@IBOutlet weak var txtName: NSTextField!
@IBOutlet weak var txtToken: NSTextField!
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
// Do view setup here. // Do view setup here.
self.lblCurrentIP.stringValue = ""
let defaults = NSUserDefaults.standardUserDefaults()
if let udHost = defaults.stringForKey(Constants.UserDefaults.HOST) {
txtName.stringValue = udHost
}
if let udToken = defaults.stringForKey(Constants.UserDefaults.TOKEN) {
txtToken.stringValue = udToken
}
} }
// MARK: Actions
@IBAction func actionQuit(sender: NSButton) {
NSApplication.sharedApplication().terminate(self)
}
@IBAction func actionOpenRegister(sender: NSButton) {
}
@IBAction func actionSaveSettings(sender: NSButton) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(txtName.stringValue, forKey: Constants.UserDefaults.HOST)
defaults.setObject(txtToken.stringValue, forKey: Constants.UserDefaults.TOKEN)
}
} }

View File

@ -1,19 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5023" systemVersion="13A603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
<dependencies> <dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5023"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
</dependencies> </dependencies>
<objects> <objects>
<customObject id="-2" userLabel="File's Owner" customClass="MainViewController" customModuleProvider="target"> <customObject id="-2" userLabel="File's Owner" customClass="MainViewController" customModule="ipbc_Client" customModuleProvider="target">
<connections> <connections>
<outlet property="btnCancel" destination="jbP-qx-AVu" id="8Kt-SW-cho"/>
<outlet property="btnQuit" destination="PD1-7B-cXi" id="nZP-fa-Wgn"/>
<outlet property="btnRegister" destination="1iz-w3-phH" id="SJg-gH-Plq"/>
<outlet property="btnSave" destination="ypT-pC-8JJ" id="db6-84-UOc"/>
<outlet property="lblCurrentIP" destination="xnC-6n-NBZ" id="uc5-yd-nbs"/>
<outlet property="txtName" destination="kFw-34-cr2" id="v6N-Nf-bKE"/>
<outlet property="txtToken" destination="RhG-a4-uFI" id="OhO-HR-fDd"/>
<outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/> <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
</connections> </connections>
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="Hz6-mo-xeY"> <customView id="Hz6-mo-xeY">
<rect key="frame" x="0.0" y="0.0" width="480" height="272"/> <rect key="frame" x="0.0" y="0.0" width="597" height="343"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Zgv-WW-lzf">
<rect key="frame" x="20" y="275" width="48" height="48"/>
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSInfo" id="69M-w8-Yqu"/>
</imageView>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5ZC-Az-Hgm">
<rect key="frame" x="74" y="261" width="505" height="62"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" id="5sC-hz-jDG">
<font key="font" metaFont="system"/>
<string key="title">This is an application that updates your hostnames with the latest IP address of your computer assuring that you will always have an updated hostname allowing you to connect to your computer from everywhere.</string>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gIr-Nl-sTM">
<rect key="frame" x="21" y="190" width="41" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Name" id="Yz3-k0-ZM4">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="kFw-34-cr2">
<rect key="frame" x="76" y="187" width="501" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="cz0-SV-1Tq">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RhG-a4-uFI">
<rect key="frame" x="76" y="155" width="501" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="kEe-YG-kxT">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fP5-Fr-0oH">
<rect key="frame" x="22" y="158" width="41" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Token" id="ORa-Yu-LTZ">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xnC-6n-NBZ">
<rect key="frame" x="20" y="20" width="17" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="IP" id="GON-6q-6yN">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1iz-w3-phH">
<rect key="frame" x="127" y="94" width="343" height="32"/>
<buttonCell key="cell" type="push" title="Get your always free ip-breadcrump.org account!" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="HTL-vW-GVk">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="actionOpenRegister:" target="-2" id="WZH-Tf-a4j"/>
</connections>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zRh-L1-zB5">
<rect key="frame" x="290" y="130" width="17" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="or" id="GCF-L7-vwQ">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PD1-7B-cXi">
<rect key="frame" x="517" y="13" width="66" height="32"/>
<buttonCell key="cell" type="push" title="Quit" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="vSc-pb-WWX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="actionQuit:" target="-2" id="Sjv-pX-H2r"/>
</connections>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jbP-qx-AVu">
<rect key="frame" x="434" y="13" width="83" height="32"/>
<buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="noM-tn-LGF">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES">
Gw
</string>
</buttonCell>
</button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ypT-pC-8JJ">
<rect key="frame" x="363" y="13" width="71" height="32"/>
<buttonCell key="cell" type="push" title="Save" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="aQB-ul-YJ5">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="actionSaveSettings:" target="-2" id="cG5-OX-aEb"/>
</connections>
</button>
</subviews>
<point key="canvasLocation" x="503.5" y="515.5"/>
</customView> </customView>
</objects> </objects>
<resources>
<image name="NSInfo" width="32" height="32"/>
</resources>
</document> </document>

View File

@ -0,0 +1,37 @@
//
// EventMonitor.swift
// ipbc-Client
//
// Created by Gerrit Linnemann on 09.09.15.
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
//
// More infos to EventMonitor: http://www.raywenderlich.com/98178/os-x-tutorial-menus-popovers-menu-bar-apps
//
import Cocoa
public class EventMonitor {
private var monitor: AnyObject?
private let mask: NSEventMask
private let handler: NSEvent? -> ()
public init(mask: NSEventMask, handler: NSEvent? -> ()) {
self.mask = mask
self.handler = handler
}
deinit {
stop()
}
public func start() {
monitor = NSEvent.addGlobalMonitorForEventsMatchingMask(mask, handler: handler)
}
public func stop() {
if monitor != nil {
NSEvent.removeMonitor(monitor!)
monitor = nil
}
}
}

View File

@ -0,0 +1,26 @@
//
// WebserviceClient.swift
// ipbc-Client
//
// Created by Gerrit Linnemann on 09.09.15.
// Copyright (c) 2015 Adawim UG (haftungsbeschränkt). All rights reserved.
//
import Foundation
private let x_SomeManagerSharedInstance = WebserviceClient()
class WebserviceClient {
private var isNetworkAvailable : Bool = false
private var isRequestRunning : Bool = false
class var sharedInstance: WebserviceClient {
return x_SomeManagerSharedInstance
}
init() {
}
}