From baba7de448a331e1d1caf2452253aa699936753b Mon Sep 17 00:00:00 2001 From: Gerrit Linnemann Date: Thu, 10 Sep 2015 09:28:17 +0200 Subject: [PATCH] GUI --- .../ipbc-Client.xcodeproj/project.pbxproj | 22 ++++ .../xcshareddata/ipbc-Client.xccheckout | 4 +- .../UserInterfaceState.xcuserstate | Bin 15042 -> 20379 bytes ipbc-Client/ipbc-Client/AppDelegate.swift | 14 +- ipbc-Client/ipbc-Client/Constants.swift | 26 ++++ .../Controller/MainViewController.swift | 34 +++++ .../Controller/MainViewController.xib | 124 +++++++++++++++++- ipbc-Client/ipbc-Client/EventMonitor.swift | 37 ++++++ .../ipbc-Client/WebserviceClient.swift | 26 ++++ 9 files changed, 279 insertions(+), 8 deletions(-) create mode 100644 ipbc-Client/ipbc-Client/Constants.swift create mode 100644 ipbc-Client/ipbc-Client/EventMonitor.swift create mode 100644 ipbc-Client/ipbc-Client/WebserviceClient.swift diff --git a/ipbc-Client/ipbc-Client.xcodeproj/project.pbxproj b/ipbc-Client/ipbc-Client.xcodeproj/project.pbxproj index deba11e..c39146d 100644 --- a/ipbc-Client/ipbc-Client.xcodeproj/project.pbxproj +++ b/ipbc-Client/ipbc-Client.xcodeproj/project.pbxproj @@ -13,6 +13,9 @@ ECEBE1991BA0639500E5B4E3 /* ipbc_ClientTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */; }; ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */; }; 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 */ /* Begin PBXContainerItemProxy section */ @@ -36,6 +39,9 @@ ECEBE1981BA0639500E5B4E3 /* ipbc_ClientTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ipbc_ClientTests.swift; sourceTree = ""; }; ECEBE1A21BA0690B00E5B4E3 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MainViewController.swift; path = Controller/MainViewController.swift; sourceTree = ""; }; ECEBE1A31BA0690B00E5B4E3 /* MainViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MainViewController.xib; path = Controller/MainViewController.xib; sourceTree = ""; }; + ECEBE1A81BA0752600E5B4E3 /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = ""; }; + ECEBE1AA1BA07DD600E5B4E3 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + ECEBE1AD1BA0C61100E5B4E3 /* WebserviceClient.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebserviceClient.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -77,11 +83,14 @@ ECEBE1841BA0639500E5B4E3 /* ipbc-Client */ = { isa = PBXGroup; children = ( + ECEBE1AC1BA0C60000E5B4E3 /* WebService */, ECEBE1A71BA0693200E5B4E3 /* control */, ECEBE1A61BA0692000E5B4E3 /* view */, ECEBE1871BA0639500E5B4E3 /* AppDelegate.swift */, ECEBE1891BA0639500E5B4E3 /* Images.xcassets */, ECEBE1851BA0639500E5B4E3 /* Supporting Files */, + ECEBE1A81BA0752600E5B4E3 /* EventMonitor.swift */, + ECEBE1AA1BA07DD600E5B4E3 /* Constants.swift */, ); path = "ipbc-Client"; sourceTree = ""; @@ -128,6 +137,14 @@ name = control; sourceTree = ""; }; + ECEBE1AC1BA0C60000E5B4E3 /* WebService */ = { + isa = PBXGroup; + children = ( + ECEBE1AD1BA0C61100E5B4E3 /* WebserviceClient.swift */, + ); + name = WebService; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -228,8 +245,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + ECEBE1A91BA0752600E5B4E3 /* EventMonitor.swift in Sources */, + ECEBE1AE1BA0C61100E5B4E3 /* WebserviceClient.swift in Sources */, ECEBE1881BA0639500E5B4E3 /* AppDelegate.swift in Sources */, ECEBE1A41BA0690B00E5B4E3 /* MainViewController.swift in Sources */, + ECEBE1AB1BA07DD600E5B4E3 /* Constants.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -420,6 +440,7 @@ ECEBE19E1BA0639500E5B4E3 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; ECEBE19F1BA0639500E5B4E3 /* Build configuration list for PBXNativeTarget "ipbc-ClientTests" */ = { isa = XCConfigurationList; @@ -428,6 +449,7 @@ ECEBE1A11BA0639500E5B4E3 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcshareddata/ipbc-Client.xccheckout b/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcshareddata/ipbc-Client.xccheckout index d960e65..68f8f42 100644 --- a/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcshareddata/ipbc-Client.xccheckout +++ b/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcshareddata/ipbc-Client.xccheckout @@ -7,14 +7,14 @@ IDESourceControlProjectIdentifier B4996E80-3257-4F7C-86EA-7424113FB751 IDESourceControlProjectName - project + ipbc-Client IDESourceControlProjectOriginsDictionary 41A46EC74341898613642098E6535621FD117950 ssh://services.adawim.com:7999/ipbc/statusbar-app-osx.git IDESourceControlProjectPath - ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace + ipbc-Client/ipbc-Client.xcodeproj IDESourceControlProjectRelativeInstallPathDictionary 41A46EC74341898613642098E6535621FD117950 diff --git a/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcuserdata/gerrit.xcuserdatad/UserInterfaceState.xcuserstate b/ipbc-Client/ipbc-Client.xcodeproj/project.xcworkspace/xcuserdata/gerrit.xcuserdatad/UserInterfaceState.xcuserstate index 316ef3bc01fb65d58bcedddf3d21db7a6e1b3617..4b386d8ecd1ee635adefaa686636538158c7c23a 100644 GIT binary patch delta 12064 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 delta 7783 zcma)A33yXQ*S=?F+O$a1r-EjlO0(V5J5l$5d;JUk>$ThDaz;f|Ign%y}5Vh%*;7w-uFF|`~G6sIbx2Q zkelRJJ~`Gw*2$rKZo77(5zJ_2921!PX8XV`<}P!OdBFS$VGs@?h=52Cg9M@=8gx(} z8h{>b-~u5?VoPXamX69y&k|=n1_b75cyc7zi0q0K=dVil7)upcIC~D3}bh zfrq!@9asv>U^#pUYhW#`hfiS(d;v!S@HHHTV{jZ!z)3g-XW%THhYRon{0P_K7q|tt z;WxMo_u(--fu~4~G$;mXkq*^I4UirgP%JVc6EY(UvLY7wkRQdPW~eP{hf+{`)B(MW zI-*`E6{Vqcl!*qTER>CkP%$b&lEI^f}s$ zwxBQ2Rl{fMrkTj)M|fEf%p5{t0}H^6#q zz_HkfP1uZ`*oA%AkDKCVxH)c*JK&dbN8Anf3gA@S4`<>$T!@QsIUbEE=I}H;9nZr& zo{vAk3-Kbn7;nUz@Td4Q{5jr?x8N`ER=f@G#(VHVduIg>U0K_&0nP z-^0J-Kk$8m2_a!5oXCir#1I3CB^Kf!al}LXB%U-T{hE>Hq$NovZAmxMo%A3*NiQ;p zWRk%oi)53bq=1x?3NoHdAd|@yGM&sJ3&=vUh%6>6$V#$`tS4K@4ziaVBwv#gcuq24+OD9o#rp(E&3)k1=ho1m! zqjsK)P(`M;@6x_qTBq*a_z4kqeo%y!uZpk)jx%CL!jv-=mCSHzrqQVN$ny|2s)||3tfC3DDYewFk{*cth4EG~ zKQq_q%d}G!bA!1_U!iH#euC*Gc$>F;iB-gDi*dUQZvv+z+*N=AYD? z!A6E6d&oRxyi1wCm`BWG<_YaWyV7p7`%+*4m^i?+2kj{&FO_d4pAc9wENuA5`~89r zCp2!{XhKBaaZQ^w4|;!s3C#vlQ2y81RG=1Si=pYXw=i2DYPTkDSyE8ZZOf>>!Py!$ zZaATLZ64}oGJr`45n{ne`_TbaU{I{z0E!r~0 zmC%mnQe*#)V-wlpQg(D+zdGk$hF2JGHFShd(3uXQ`E+PCbb+qWjTX>hw2MhLnwRhRNbT%Fyh5kM#IGaEmkHMXeid#Xe=ESign!I?oEN||B5Lv z17^aTbTl19$Np_O2j;%G=6qOC+hA=|_5&0At8?#NSoB|GT?|X05~}EUI)P54oPdYc zw?hM&{^LS1H)$M1yfuFD`6E4P|DwoF*b*fVBL!jY=BP~Zza^w*D7Hno%|w3 zHirQ5dZui62oPPQg>|wksU>j_QFJTAlgk7+kPN7rj8+00-PG``WE8r{G3;SR{ z9Dsvxh`vc@)46mW<>@>0UH++-lfXBED8RRL7Pay-bY=;B7koZP=Y*d1{0W`Y3>V?j zi>_XQt3g+PqVp@^8ePCQsISw(4fwSZZqm2t+dX}?)Sn1#C6(#WAPp z$MkF3j@Rf*J0vipmZ65I5o(N@phUW!en!8bU(!9)@(cl}Icgc4B?-NRTF?!&hJI3w zTA|jc4c$mL(NBX~?BIKtWBH%;Q;eNZ*MAvzL)}pi`Z?W9xA3zJ4UD}}|9{yGKm$<* z-AcF7?fgE2B`F8x|I215DnP^N4!V=>`Ul){7?T|_rsJrTk)Sg4YK<*+G|Jl@+5|Kl zRb)Ju?v$*GtZJcY1e4LbTWavBF2qqtpxkmH#4%_rYJtY12|}P>(Y^E&x{vN(jsl1x z4owoSlpdf5=^=VVxE|!eyf*NruV}TrK64v^oeS`W-#T!K=dhr-C@De#Z*onowQiD{b0AXeT<%cvqucXgAt}zCwG^ zKC~YlKnKww`aL~QFVG+8MS6)|ra#gv^rzK~jj^Dk=omVVPN0**{Ws`aL9Oc1tMnTE zl>-R}Dq4?&7!I^T?Y?1eV3Ku8X`ec@bX2#jkp=l#6{Y0^god=N>@Hc^c}1BrmY-|a z@%i@2fefL&eQtqZkzAgal_`@amzAaD73B$o@_fTb6%47U%fb~DBq~!${gvn%{h8Wp zQ~L`ustVmeH|ceH<8PGTMt2!S6|MB=uhGrVL}PS7!!Jn-mby~i|B27M+o_8a}B?}xtU+rO7s$r!a~hm zj-#;@*TXU_#|ruzy-V-W-{~Lp{&K8h;;=^e*J2%gKzngQQ5P;@9E9`ZlXU#1q;h^i zk~yYsRSUKW;)1R8&q{2k5BcPm8U(N#dxT`*IQmy5_R>exKA@m1JBMvoRFGFvmoXfV z8wLGMzzykR`lJds7H*!>CodZJs9Prqw-!nRZirjpmbevt!U4kpaDaksp^q@M_R~cW z30dlhva-_hih`1SQ-^}0yy1OvN=qurON-J*7UYepo3s;t<+<}+I3P5!uBSWhQ7fYS z{g+|`I1TrHZrFzd(cgys@xbSyW^fSkyzb$_I6K&rKp$7)91bG??iqrI27B^35LXI8 z3nBj>$il@qP%4;*poPmghbkyf6UR|kphct>#8zU07KiFa~fwt!q|6N!_T! z_!y(8#z*ki_$UWX4qP0#tMPHc>ysSB1wDP4f6belc~&^A;qN%`P-ETL^Y|x0S@8w@ z1HOna;mi0(e1!uq2P_9Z4*VR%bCAG6!xi`{zJ`Cs*Kt160^j7I5eJPqXvRT%0b^9j zK?nY2_M-t0@MA{t@6$Vef}b*RL|{`B4ibY|Y%1)%aO55qRuMko?*shv^ZO|xA`y&) zL=rKPkSG#Oqt8NgSkb(3}?WrxF@=4T&I8FvZnGNmN9D#7i8s;-IwfCRK}#75RW@QICO*q;#8t%1XSyw2o{dgm zY(y{UhmgjW&t@dfU>gT*LX9sf&p}4Q93Wo8GHD#N<%APE^Y;%Pd1UQU38W!k8W%%I zBPK(*(eO*+!U$({Fwe`x5gf0qzsLs*ungB4D2F4Pmk zeXxK%0~SdoeS@o|k#y3V2znONor4}6^yHw|QsJm)V{!%7_7e7RTjJ{hl0)(Yh?86n z(kdC7z^M3X64mUZ%-=$knIc-Zx`83_HZzi zg8~kQ{Ri=$^Q?}J|BX;bYYA1D^Z#Si3o(#0LKL6FKqf7y#U;TwODR+9-uWO0)(L@A zV=eP8k;{Ct$3w`E0>_d)anA_(6S>MC@i+wTU*ivXT+-Un*M-q&H9f`OPF4rVEpj_u zQ1FU83QPo}6AFWeX~HBit%bK*EKb60aaW;=_rn8l2F}L0Sg64`Ae5OJybm7`UQZpt zNAYodQg}^u8lT1IgcnqIg_l$J@t^oF{1`taAiSgs6J#%zyd8xb3k7|}W+Jz`))LBz<2 zF%jb;CPvVRNfEOn=0@-l3nIfJ6_E`h4Uxu3bEGxW8|jOTk8Bv(I5IIZD{@Zc_Q-3I zzehfZd>HvS@~IfaYH_UCDz=NAVz)R^{F1n(xV1P%+(Fz?+*#aLTqvF`en%Xr6fYOo zh(8l=7Jnh$A>Jk4Bi<|CCq5?rNqkHEoA{pi4~a-3mo$(#C2omF!b<#-#gdhhjgrlh zFC^O}yCi!gdnNlNMHId@#vG$-$!4Fz8HNu`bzXwDU!OS zO{JOAq0(~caOrsIH0eC)eCb=#cckx0tEJ1NE2OKWA4=CsH%YfkzmlGio|c}Ko|9gb zUY1^wUX|XH{vmxJeOQmHH>=*9dh_bdm&s+ZGPlelV`Y9>f~=9Ol`POk)>f7x>mchW z>ns~0dqeh>?5ymr?2+uL9OPIol{b)Em5PmuFBIDpUn+Jg z_A3r54lBM^98;WETu}U=xTLtHxUIOOxT|=ij8rO=Dy2rLRn}Kpm3F05=~jA_tTIuV ztn94puI#ByRi-NkD+`sQm1C4+mE)DulrxpHlyj8&suWcRRYz4HRX^1LRfZ~4m8Hs2<*D*joa#;064ghl9jX(mi>m9Yo2px?JL+h) zMy*pfP#e_E)&0~%)cNY6>S5|p>apta>VTS4zouTGUZk#6SF4w)SExT$Z&dGAA5$L> zs86U*sV}LosIRK8t8b`(RX@^1Xw({)CQjqk_%!jFhMLBjL`^eIlBTPsyQZfmRgn)fvuGthbZT#5NL=FgbFVjjl?o@zmhwP9L?R;O*CHE4}mht{Qy(|WZ&Z6EDq z?RxEI?GEi>?OE+b?Pcv1?N#ls+S}USwD+`sXrJmpC(@~O4Ri*bQD@eas2J5nQ1-e3Av9472s&1@~(@odS(}N!CqxAIydb8f8Z=!FjPtkYK zchq;*chPs#571}mGxb^e9DSZXUtge~rLWO{Zx9(|28E%4!D{dte1@imR)%(lUWPP7 zhGDQF+mLH0HjFn+G*H7N!|R4AhBpk;4Koez8s0Z7G%Pl(F>EnxHEcKRFzhnyG3+($ zH=H({HJmd9E*LHvE*q{Gt{Q$eJcw-`n-M!R_M_MXu~%ZB7$ruN(PFe29Y&Wi&geDz zjPb^X#>U1@##fA8jopnsjj6`o#(u^D#zDp`V~%mWaklY&<3ZzjQ?#kRi8Zw_bv6w$ z6`D#+Wv1b#5vEZlYMN}CYMN%6VS2~3(6rc8889t3tu(DRtubvh?KJH*?Kd4X9W@;{ zoiu%8x?s9tx?{R)`rY)<^vLwY%$QZ?rsfoLPjjj{-Q36A&pg1KVIF2KGMAWNH4itB zG>6P|YYmPO~I@DTdEw+xePOt{7ldO}iQ?2u@Z(HB9 zF0?MTR$4b&cUt#Y_gW8F4_m(uSWjCoST9+xSg%>HTkl&RS)T~Mi^6Ooo7fg*Q`;;y zr_F8i*y3#sZB1-VZEb8_ZM|%1w%)b@wn4TmTaIm{Enu5zn`@hId)xMbZINw>t;+VL z?UKERJ;PpRA8sFMA7dYH57;N!C)?k!&#*7DFR@qKm)Td?SJ~It1MBP?>>KT$+7H+- z+wV9c97>1V(Zw;?QRo=$80VPi;2f_zrZ_%wY;kOJ>~QRM>~-vS9C3W-xa7FvxaRo9 z@tfm!$9=~`$0Mi9*~Zz|ndQuN<~s|VBb}3-Z#ZW-XF2CO=R4nazUN%!T;p8l+~C~k z{LH!8xz)MddB}M>;JoV+xvZ{aS65e#tIRdVHO@7`6>xE`>8>|jb6oRW3tVrzmbg~C zYFztV-?^^49=mmJz1!%vxb1GIyPrGTUEnTqm%7W{6>iQw(>>3rL@?@OJce_IB|O^G@}y_U`f?^`7v4<2~d3&ilRhj`s-*EM~*mNLIqC z0<4bJvqsj;`q)Nn6SgVaf^E&VWmDL$Y=1VB&0=%dp==>r!j`dP*eUE(_6>GA`!@R? z`vJR{tzwt5YuOF#M)osyGrN~P#2#UfvZvV7?04+<>{a$Q``Cwk#24<9_@q9$PwBJ! ze7@GcG+&8tns26WmM<{ZH{Z9`x5>BFx8HZe_rUki_t?+)v0v+N;E(m2{WibD@AoJA zoBLb%TllXNP=BF+w11p`f}i?l`rq|`;9u;o^l$cW^>6p@^zZf` z_8;}1@SpOZkB^9tj&B;@CVohKVf@_q_u?1EFOIK_uZjQ662C2U24@he{Uzw55? GU;YoZYXyJ+ diff --git a/ipbc-Client/ipbc-Client/AppDelegate.swift b/ipbc-Client/ipbc-Client/AppDelegate.swift index f962f5f..e134ed2 100644 --- a/ipbc-Client/ipbc-Client/AppDelegate.swift +++ b/ipbc-Client/ipbc-Client/AppDelegate.swift @@ -12,19 +12,31 @@ import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { @IBOutlet weak var window: NSWindow! - let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2) + let popover = NSPopover() + var eventMonitor: EventMonitor? + let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-2) func applicationDidFinishLaunching(aNotification: NSNotification) { // Insert code here to initialize your application + // Icon if let button = statusItem.button { button.image = NSImage(named: "statusbar-icon") button.action = Selector("togglePopover:") } 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) { diff --git a/ipbc-Client/ipbc-Client/Constants.swift b/ipbc-Client/ipbc-Client/Constants.swift new file mode 100644 index 0000000..5d94b9c --- /dev/null +++ b/ipbc-Client/ipbc-Client/Constants.swift @@ -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" + } +} \ No newline at end of file diff --git a/ipbc-Client/ipbc-Client/Controller/MainViewController.swift b/ipbc-Client/ipbc-Client/Controller/MainViewController.swift index d0006ec..5a8e901 100644 --- a/ipbc-Client/ipbc-Client/Controller/MainViewController.swift +++ b/ipbc-Client/ipbc-Client/Controller/MainViewController.swift @@ -9,10 +9,44 @@ import Cocoa 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() { super.viewDidLoad() // 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) + } } diff --git a/ipbc-Client/ipbc-Client/Controller/MainViewController.xib b/ipbc-Client/ipbc-Client/Controller/MainViewController.xib index 5c94ef3..6d40a75 100644 --- a/ipbc-Client/ipbc-Client/Controller/MainViewController.xib +++ b/ipbc-Client/ipbc-Client/Controller/MainViewController.xib @@ -1,19 +1,133 @@ - + - + - + + + + + + + + - + - + + + + + + + + + + + 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. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ipbc-Client/ipbc-Client/EventMonitor.swift b/ipbc-Client/ipbc-Client/EventMonitor.swift new file mode 100644 index 0000000..c3c829c --- /dev/null +++ b/ipbc-Client/ipbc-Client/EventMonitor.swift @@ -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 + } + } +} \ No newline at end of file diff --git a/ipbc-Client/ipbc-Client/WebserviceClient.swift b/ipbc-Client/ipbc-Client/WebserviceClient.swift new file mode 100644 index 0000000..e506d95 --- /dev/null +++ b/ipbc-Client/ipbc-Client/WebserviceClient.swift @@ -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() { + + } +} \ No newline at end of file