Login.cpp 13 KB

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