diff options
-rw-r--r-- | ZeroTier One.xcodeproj/project.pbxproj | 1 | ||||
-rw-r--r-- | ZeroTier One/JoinNetworkViewController.swift | 72 | ||||
-rw-r--r-- | ZeroTier One/JoinNetworkViewController.xib | 35 |
3 files changed, 103 insertions, 5 deletions
diff --git a/ZeroTier One.xcodeproj/project.pbxproj b/ZeroTier One.xcodeproj/project.pbxproj index 2730b987..4fb0a76e 100644 --- a/ZeroTier One.xcodeproj/project.pbxproj +++ b/ZeroTier One.xcodeproj/project.pbxproj @@ -287,6 +287,7 @@ 93326BE71CE7C816005CA2AC /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/ZeroTier One/JoinNetworkViewController.swift b/ZeroTier One/JoinNetworkViewController.swift index d071ce91..0aaaf10f 100644 --- a/ZeroTier One/JoinNetworkViewController.swift +++ b/ZeroTier One/JoinNetworkViewController.swift @@ -8,11 +8,77 @@ import Cocoa -class JoinNetworkViewController: NSViewController { +extension String { + func contains(find: String) -> Bool { + return self.rangeOfString(find) != nil + } + + func trunc(length: Int, trailing: String? = "...") -> String { + if self.characters.count > length { + return self.substringToIndex(self.startIndex.advancedBy(length)) + (trailing ?? "") + } else { + return self + } + } +} + +class JoinNetworkViewController: NSViewController, NSComboBoxDelegate { + + @IBOutlet var network: NSComboBox! + @IBOutlet var joinButton: NSButton! override func viewDidLoad() { super.viewDidLoad() - // Do view setup here. + network.setDelegate(self) + } + + @IBAction func onJoinClicked(sender: AnyObject?) { + let networkId = UInt64(network.stringValue, radix: 16) + + // TODO: Execute join network call + + network.stringValue = "" + } + + + // NSComboBoxDelegate Methods + + override func controlTextDidChange(obj: NSNotification) { + let cb = obj.object as! NSComboBox + let value = cb.stringValue + + + let allowedCharacters = "abcdefABCDEF0123456789" + + var outValue = "" + + for char in value.characters { + if !allowedCharacters.contains(String(char)) { + NSBeep() + } + else { + outValue += String(char) + } + } + + + + if outValue.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) == 16 { + joinButton.enabled = true + } + else { + + if outValue.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 16 { + outValue = outValue.trunc(16, trailing: "") + NSBeep() + joinButton.enabled = true + } + else { + joinButton.enabled = false + } + } + + cb.stringValue = outValue } - + // end NSComboBoxDelegate Methods } diff --git a/ZeroTier One/JoinNetworkViewController.xib b/ZeroTier One/JoinNetworkViewController.xib index 7f3f1329..2de44c9d 100644 --- a/ZeroTier One/JoinNetworkViewController.xib +++ b/ZeroTier One/JoinNetworkViewController.xib @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct"> <dependencies> <deployment identifier="macosx"/> <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/> @@ -7,14 +7,45 @@ <objects> <customObject id="-2" userLabel="File's Owner" customClass="JoinNetworkViewController" customModule="ZeroTier_One" customModuleProvider="target"> <connections> + <outlet property="joinButton" destination="BGy-vd-NQX" id="LGE-2G-7ND"/> + <outlet property="network" destination="BQy-d9-BNg" id="Yf7-BG-c84"/> <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/> </connections> </customObject> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/> <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="369" height="101"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <subviews> + <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="puT-Yk-CWC"> + <rect key="frame" x="18" y="61" width="107" height="17"/> + <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Enter Network ID" id="oYH-gS-BX5"> + <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> + <comboBox verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BQy-d9-BNg"> + <rect key="frame" x="131" y="57" width="221" height="26"/> + <comboBoxCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" drawsBackground="YES" completes="NO" numberOfVisibleItems="5" id="n71-4S-AaI"> + <font key="font" metaFont="system"/> + <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> + </comboBoxCell> + </comboBox> + <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="BGy-vd-NQX"> + <rect key="frame" x="274" y="13" width="81" height="32"/> + <buttonCell key="cell" type="push" title="Join" bezelStyle="rounded" alignment="center" enabled="NO" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="6Rp-TA-XLl"> + <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="system"/> + </buttonCell> + <connections> + <action selector="onJoinClicked:" target="-2" id="kzC-GT-JKb"/> + </connections> + </button> + </subviews> + <point key="canvasLocation" x="249.5" y="361.5"/> </customView> </objects> </document> |