#include "Chat.h" #include #include #include #include #include #include #include // Inhalt der SpielChat Klasse aus Chat.h // Konstruktor SpielChat::SpielChat(UIInit& uiFactory) : ReferenceCounter() { rahmen = new LRahmen(); rahmen->setFarbe(0xFF909090); rahmen->setRamenBreite(1); rahmen->setSize(450, 200); verlauf = uiFactory.createTextFeld(uiFactory.initParam); verlauf->setStyle(TextFeld::Style::TextGebiet & ~(TextFeld::Style::Erlaubt | TextFeld::Style::Rahmen | TextFeld::Style::Hintergrund)); verlauf->setText(""); verlauf->setSize(446, 174); nachricht = uiFactory.createTextFeld(uiFactory.initParam); nachricht->setStyle(TextFeld::Style::TextFeld & ~TextFeld::Style::Buffered); nachricht->setText("Drücke TAB um die Bestenliste anzuzeigen.\n"); nachricht->setSchriftFarbe(0xFF909090); nachricht->setRahmenBreite(1); nachricht->setRahmenFarbe(0xFF909090); nachricht->setSize(446, 20); } // Destruktor SpielChat::~SpielChat() { rahmen->release(); verlauf->release(); nachricht->release(); } // nicht constant void SpielChat::addNachricht(const char* nachricht) { verlauf->addZeile(nachricht, 0xFFFFFFFF); verlauf->updateVScroll(); } void SpielChat::addNachricht(const char* nachricht, int farbe) { verlauf->addZeile(nachricht, farbe); verlauf->updateVScroll(); } void SpielChat::doPublicMausEreignis(MausEreignis& me) { bool vera = me.verarbeitet; verlauf->doPublicMausEreignis(me); nachricht->doPublicMausEreignis(me); if (!vera && me.verarbeitet) { nachricht->setRahmenFarbe(0xFFFFFFFF); nachricht->setSchriftFarbe(0xFFFFFFFF); verlauf->setVertikalScrollFarbe(0xFF808080, 0); rahmen->setFarbe(0xFFFFFFFF); } else { nachricht->setRahmenFarbe(0xFF909090); nachricht->setSchriftFarbe(0xFF909090); verlauf->setVertikalScrollFarbe(0xFF404040, 0); rahmen->setFarbe(0xFF909090); } } void SpielChat::doTastaturEreignis(TastaturEreignis& te, KSGClient::SpielServerClient* zKlient) { if (te.taste == T_Esc) nachricht->removeStyle(TextFeld::Style::Fokus); if (te.id == TE_Release && te.taste == T_Enter && !te.verarbeitet) { if (nachricht->hatStyle(TextFeld::Style::Fokus)) { if (nachricht->zText()->getLength()) { short län = 1 + nachricht->zText()->getLength(); char* bytes = new char[län + 1]; *bytes = 8; for (int i = 1; i <= län; i++) bytes[i] = nachricht->zText()->getText()[i - 1]; nachricht->setText(""); nachricht->setAuswahl(0, 0); nachricht->removeStyle(TextFeld::Style::Fokus); zKlient->spielNachricht(län, bytes); delete[] bytes; te.verarbeitet = 1; } } else { nachricht->addStyle(TextFeld::Style::Fokus); nachricht->setAuswahl(0, nachricht->zText()->getLength()); te.verarbeitet = 1; } } if (!te.verarbeitet) nachricht->doTastaturEreignis(te); if (nachricht->hatStyle(TextFeld::Style::Fokus)) { nachricht->setRahmenFarbe(0xFFFFFFFF); nachricht->setSchriftFarbe(0xFFFFFFFF); verlauf->setVertikalScrollFarbe(0xFF808080, 0); rahmen->setFarbe(0xFFFFFFFF); } else { nachricht->setRahmenFarbe(0xFF909090); nachricht->setSchriftFarbe(0xFF909090); verlauf->setVertikalScrollFarbe(0xFF404040, 0); rahmen->setFarbe(0xFF909090); } } void SpielChat::tick(double z) { nachricht->tick(z); } void SpielChat::render(Bild& zRObj) { rahmen->setPosition(Punkt(10, zRObj.getHeight() - 210)); verlauf->setPosition(rahmen->getX() + 2, rahmen->getY() + 2); nachricht->setPosition(rahmen->getX() + 2, rahmen->getY() + 178); rahmen->render(zRObj); verlauf->render(zRObj); nachricht->render(zRObj); } // constant bool SpielChat::istAktiv() const { return nachricht->hatStyle(TextFeld::Style::Fokus); }