Login.cpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. #include "..\..\Global\Variablen.h"
  2. #include "Login.h"
  3. #include "..\..\Global\Initialisierung.h"
  4. #include <Punkt.h>
  5. #include <Text.h>
  6. // Inhalt der Login Klasse aus Login.h
  7. // Konstruktor
  8. Login::Login( Schrift *zSchrift, Fenster *vorLoginFenster )
  9. {
  10. Punkt bildschirmGröße = BildschirmGröße();
  11. login = initKnopf( 10, 50, 130, 30, zSchrift, Knopf::Style::Sichtbar, "Login" );
  12. login->setMausEreignisParameter( this );
  13. login->setMausEreignis( loginLoginME );
  14. initToolTip( login, "Einloggen.", zSchrift->getThis(), hauptScreen );
  15. vorLoginFenster->addMember( login );
  16. fenster = initFenster( bildschirmGröße.x / 2 - 125, bildschirmGröße.y / 2 - 75, 250, 150, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Erlaubt | Fenster::Style::Rahmen | Fenster::Style::Titel | Fenster::Style::TitelBuffered, "Login" );
  17. name = initTextFeld( 20, 20, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Name" );
  18. name->setTastaturEreignisParameter( this );
  19. name->setTastaturEreignis( loginNameTE );
  20. initToolTip( name, "Account Name.", zSchrift->getThis(), hauptScreen );
  21. fenster->addMember( name );
  22. passwort = initTextFeld( 20, 55, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Passwort" );
  23. passwort->setTastaturEreignisParameter( this );
  24. passwort->setTastaturEreignis( loginPasswortTE );
  25. initToolTip( passwort, "Account Passwort.", zSchrift->getThis(), hauptScreen );
  26. fenster->addMember( passwort );
  27. weiter = initKnopf( 75, 90, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Login" );
  28. weiter->setMausEreignisParameter( this );
  29. weiter->setMausEreignis( loginWeiterME );
  30. fenster->addMember( weiter );
  31. nachricht = initTextFeld( 5, 5, 238, 50, zSchrift, TextFeld::Style::HCenter | TextFeld::Style::Mehrzeilig, "" );
  32. fenster->addMember( nachricht );
  33. geheimnis = initTextFeld( 20, 55, 208, 20, zSchrift, TextFeld::Style::TextFeld, "Geheimnis" );
  34. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  35. geheimnis->setTastaturEreignisParameter( this );
  36. geheimnis->setTastaturEreignis( loginGeheimnisTE );
  37. initToolTip( geheimnis, "Account Geheimnis.", zSchrift->getThis(), hauptScreen );
  38. fenster->addMember( geheimnis );
  39. abbrechen = initKnopf( 10, 98, 100, 20, zSchrift, 0, "Abbrechen" );
  40. abbrechen->setMausEreignisParameter( this );
  41. abbrechen->setMausEreignis( loginAbbrechenME );
  42. fenster->addMember( abbrechen );
  43. ok = initKnopf( 138, 98, 100, 20, zSchrift, 0, "Ok" );
  44. ok->setMausEreignisParameter( this );
  45. ok->setMausEreignis( loginOkME );
  46. fenster->addMember( ok );
  47. vorLoginFenster->addMember( fenster );
  48. MausEreignis me;
  49. me.id = ME_RLinks;
  50. loginME( 0, me );
  51. ref = 1;
  52. }
  53. // Destruktor
  54. Login::~Login()
  55. {
  56. if( fenster )
  57. fenster = fenster->release();
  58. if( name )
  59. name = name->release();
  60. if( passwort )
  61. passwort = passwort->release();
  62. if( nachricht )
  63. nachricht = nachricht->release();
  64. if( geheimnis )
  65. geheimnis = geheimnis->release();
  66. if( weiter )
  67. weiter = weiter->release();
  68. if( abbrechen )
  69. abbrechen = abbrechen->release();
  70. if( ok )
  71. ok = ok->release();
  72. if( login )
  73. login = login->release();
  74. }
  75. // Knopfdruck
  76. void Login::druckFremdKnopf() // Ein anderer Bereich des Programms wurde ausgewählt
  77. {
  78. fenster->removeStyle( Fenster::Style::Sichtbar );
  79. loginKlient->trenne();
  80. login->setLinienRahmenBreite( 2 );
  81. login->setAlphaFeldFarbe( 0x5500FF00 );
  82. login->setAlphaFeldStrength( -5 );
  83. }
  84. bool Login::nameTE( void *obj, TastaturEreignis te ) // Tastaturereignis im Textfeld name
  85. {
  86. if( te.id == TE_Press && te.taste == T_Enter )
  87. return 0;
  88. if( te.id == TE_Release && ( te.taste == T_Enter || te.taste == T_Tab ) )
  89. {
  90. name->removeStyle( TextFeld::Style::Fokus );
  91. passwort->addStyle( TextFeld::Style::Fokus );
  92. passwort->setAuswahl( passwort->zText()->getLength(), 0 );
  93. }
  94. if( name->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
  95. return 0;
  96. return 1;
  97. }
  98. bool Login::passwortTE( void *obj, TastaturEreignis te ) // TastaturEreignis im Textfeld passwort
  99. {
  100. if( te.id == TE_Press )
  101. passwort->setSchowChar( '*' );
  102. if( te.id == TE_Press && te.taste == T_Enter )
  103. return 0;
  104. if( te.id == TE_Release && te.taste == T_Enter )
  105. {
  106. passwort->removeStyle( TextFeld::Style::Fokus );
  107. MausEreignis me;
  108. me.id = ME_RLinks;
  109. weiterME( 0, me );
  110. }
  111. if( passwort->zText()->getLength() >= 25 && istSchreibbar( te.taste ) )
  112. return 0;
  113. return 1;
  114. }
  115. bool Login::geheimnisTE( void *obj, TastaturEreignis te ) // TastaturEreignis im Textfeld geheimnis
  116. {
  117. if( te.id == TE_Press && te.taste == T_Enter )
  118. return 0;
  119. if( te.id == TE_Press )
  120. geheimnis->setSchowChar( '*' );
  121. if( te.id == TE_Release && te.taste == T_Enter )
  122. {
  123. geheimnis->removeStyle( TextFeld::Style::Fokus );
  124. MausEreignis me;
  125. me.id = ME_RLinks;
  126. okME( 0, me );
  127. }
  128. if( geheimnis->zText()->getLength() >= 50 && istSchreibbar( te.taste ) )
  129. return 0;
  130. return 1;
  131. }
  132. bool Login::weiterME( void *obj, MausEreignis me ) // MausEreignis im Knopf weiter
  133. {
  134. if( me.id == ME_RLinks )
  135. {
  136. if( name->zText()->getLength() == 0 )
  137. {
  138. name->removeStyle( TextFeld::Style::Sichtbar );
  139. passwort->removeStyle( TextFeld::Style::Sichtbar );
  140. weiter->removeStyle( Knopf::Style::Sichtbar );
  141. nachricht->setText( "Bitte trage deinen Accountnamen\nein." );
  142. nachricht->addStyle( TextFeld::Style::Sichtbar );
  143. ok->addStyle( Knopf::Style::Sichtbar );
  144. return 1;
  145. }
  146. if( passwort->zText()->getLength() == 0 )
  147. {
  148. name->removeStyle( TextFeld::Style::Sichtbar );
  149. passwort->removeStyle( TextFeld::Style::Sichtbar );
  150. weiter->removeStyle( Knopf::Style::Sichtbar );
  151. nachricht->setText( "Bitte trage dein Passwort ein." );
  152. nachricht->addStyle( TextFeld::Style::Sichtbar );
  153. ok->addStyle( Knopf::Style::Sichtbar );
  154. return 1;
  155. }
  156. new AktionsThread( 1, name->zText()->getText(), passwort->zText()->getText(), 0, 0, 0 );
  157. }
  158. return 1;
  159. }
  160. bool Login::okME( void *obj, MausEreignis me ) // MausEreignis im Knopf ok
  161. {
  162. if( me.id == ME_RLinks )
  163. {
  164. if( geheimnis->hatStyle( TextFeld::Style::Sichtbar ) )
  165. new AktionsThread( 3, geheimnis->zText()->getText(), 0, 0, 0, 0 );
  166. else
  167. {
  168. nachricht->removeStyle( TextFeld::Style::Sichtbar );
  169. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  170. ok->removeStyle( Knopf::Style::Sichtbar );
  171. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  172. name->addStyle( TextFeld::Style::Sichtbar );
  173. passwort->addStyle( TextFeld::Style::Sichtbar );
  174. weiter->addStyle( TextFeld::Style::Sichtbar );
  175. name->addStyle( TextFeld::Style::Fokus );
  176. name->setAuswahl( name->zText()->getLength(), 0 );
  177. }
  178. }
  179. return 1;
  180. }
  181. bool Login::abbrechenME( void *obj, MausEreignis me ) // MausEreignis im Knopf abbrechen
  182. {
  183. if( me.id == ME_RLinks )
  184. {
  185. nachricht->removeStyle( TextFeld::Style::Sichtbar );
  186. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  187. ok->removeStyle( Knopf::Style::Sichtbar );
  188. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  189. name->addStyle( TextFeld::Style::Sichtbar );
  190. passwort->addStyle( TextFeld::Style::Sichtbar );
  191. weiter->addStyle( TextFeld::Style::Sichtbar );
  192. name->addStyle( TextFeld::Style::Fokus );
  193. name->setAuswahl( name->zText()->getLength(), 0 );
  194. }
  195. return 1;
  196. }
  197. bool Login::loginME( void *obj, MausEreignis me ) // MausEreignis im Knopf login
  198. {
  199. if( me.id == ME_RLinks )
  200. {
  201. vorLogin->setLogin( 1 );
  202. nachricht->removeStyle( TextFeld::Style::Sichtbar );
  203. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  204. ok->removeStyle( Knopf::Style::Sichtbar );
  205. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  206. fenster->addStyle( Fenster::Style::Sichtbar );
  207. name->addStyle( TextFeld::Style::Sichtbar );
  208. passwort->addStyle( TextFeld::Style::Sichtbar );
  209. weiter->addStyle( TextFeld::Style::Sichtbar );
  210. login->setLinienRahmenBreite( 3 );
  211. login->setAlphaFeldFarbe( 0xFF000000 );
  212. login->setAlphaFeldStrength( 20 );
  213. name->addStyle( TextFeld::Style::Fokus );
  214. name->setAuswahl( name->zText()->getLength(), 0 );
  215. }
  216. return 1;
  217. }
  218. void Login::setLoginReturn( int ret ) // setzt den Returnwert vom login
  219. {
  220. if( ret == 1 )
  221. new AktionsThread( 2, 0, 0, 0, 0, 0 );
  222. else if( ret == 2 )
  223. {
  224. name->removeStyle( TextFeld::Style::Sichtbar );
  225. passwort->removeStyle( TextFeld::Style::Sichtbar );
  226. weiter->removeStyle( Knopf::Style::Sichtbar );
  227. nachricht->setText( "Der Account ist bereits online.\nGebe dein Account Geheimnis ein,\num den anderen Benutzer zu kicken." );
  228. nachricht->addStyle( TextFeld::Style::Sichtbar );
  229. geheimnis->addStyle( TextFeld::Style::Sichtbar );
  230. ok->addStyle( Knopf::Style::Sichtbar );
  231. abbrechen->addStyle( Knopf::Style::Sichtbar );
  232. geheimnis->addStyle( TextFeld::Style::Fokus );
  233. geheimnis->setAuswahl( geheimnis->zText()->getLength(), 0 );
  234. }
  235. else if( !ret && loginKlient->getLetzterFehler() )
  236. {
  237. name->removeStyle( TextFeld::Style::Sichtbar );
  238. passwort->removeStyle( TextFeld::Style::Sichtbar );
  239. weiter->removeStyle( Knopf::Style::Sichtbar );
  240. nachricht->setText( loginKlient->getLetzterFehler() );
  241. if( nachricht->zText()->getLength() > 30 )
  242. {
  243. int pos = -1;
  244. bool set = 0;
  245. int lastp = 0;
  246. for( int i = 20; i < nachricht->zText()->getLength(); )
  247. {
  248. char *tmp = &nachricht->zText()->getText()[ i ];
  249. while( *tmp != ' ' && i < nachricht->zText()->getLength() )
  250. {
  251. tmp++;
  252. i++;
  253. if( i - 30 >= lastp )
  254. {
  255. if( set )
  256. {
  257. lastp = pos;
  258. set = 0;
  259. nachricht->zText()->getText()[ pos ] = '\n';
  260. }
  261. else
  262. lastp += 5;
  263. }
  264. }
  265. if( i < nachricht->zText()->getLength() )
  266. {
  267. pos = i;
  268. set = 1;
  269. tmp++;
  270. i++;
  271. }
  272. }
  273. }
  274. nachricht->addStyle( TextFeld::Style::Sichtbar );
  275. ok->addStyle( Knopf::Style::Sichtbar );
  276. }
  277. }
  278. void Login::setKickReturn( int ret ) // setzt den returnwert vom kick
  279. {
  280. if( ret == 1 )
  281. new AktionsThread( 2, 0, 0, 0, 0, 0 );
  282. else if( ret == 2 )
  283. {
  284. nachricht->setText( loginKlient->getLetzterFehler() );
  285. if( nachricht->zText()->getLength() > 30 )
  286. {
  287. int pos = -1;
  288. bool set = 0;
  289. int lastp = 0;
  290. for( int i = 20; i < nachricht->zText()->getLength(); )
  291. {
  292. char *tmp = &nachricht->zText()->getText()[ i ];
  293. while( *tmp != ' ' && i < nachricht->zText()->getLength() )
  294. {
  295. tmp++;
  296. i++;
  297. if( i - 30 >= lastp )
  298. {
  299. if( set )
  300. {
  301. lastp = pos;
  302. set = 0;
  303. nachricht->zText()->getText()[ pos ] = '\n';
  304. }
  305. else
  306. lastp += 5;
  307. }
  308. }
  309. if( i < nachricht->zText()->getLength() )
  310. {
  311. pos = i;
  312. set = 1;
  313. tmp++;
  314. i++;
  315. }
  316. }
  317. }
  318. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  319. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  320. }
  321. else if( !ret )
  322. {
  323. nachricht->setText( "Das Geheimnis stimmt nicht mit dem des Accounts\nüberein. Achte auf Groß - und Kleinschreibung." );
  324. geheimnis->removeStyle( TextFeld::Style::Sichtbar );
  325. abbrechen->removeStyle( Knopf::Style::Sichtbar );
  326. }
  327. }
  328. // Reference Counting
  329. Login *Login::getThis()
  330. {
  331. ref++;
  332. return this;
  333. }
  334. Login *Login::release()
  335. {
  336. ref--;
  337. if( !ref )
  338. delete this;
  339. return 0;
  340. }
  341. // Ereignisse
  342. bool loginNameTE( void *p, void *obj, TastaturEreignis te )
  343. {
  344. if( !p )
  345. return 0;
  346. return ( (Login*)p )->nameTE( obj, te );
  347. }
  348. bool loginPasswortTE( void *p, void *obj, TastaturEreignis te )
  349. {
  350. if( !p )
  351. return 0;
  352. return ( (Login*)p )->passwortTE( obj, te );
  353. }
  354. bool loginGeheimnisTE( void *p, void *obj, TastaturEreignis te )
  355. {
  356. if( !p )
  357. return 0;
  358. return ( (Login*)p )->geheimnisTE( obj, te );
  359. }
  360. bool loginWeiterME( void *p, void *obj, MausEreignis me )
  361. {
  362. if( !p )
  363. return 0;
  364. return ( (Login*)p )->weiterME( obj, me );
  365. }
  366. bool loginAbbrechenME( void *p, void *obj, MausEreignis me )
  367. {
  368. if( !p )
  369. return 0;
  370. return ( (Login*)p )->abbrechenME( obj, me );
  371. }
  372. bool loginOkME( void *p, void *obj, MausEreignis me )
  373. {
  374. if( !p )
  375. return 0;
  376. return ( (Login*)p )->okME( obj, me );
  377. }
  378. bool loginLoginME( void *p, void *obj, MausEreignis me )
  379. {
  380. if( !p )
  381. return 0;
  382. return ( (Login*)p )->loginME( obj, me );
  383. }