123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #include "Chat.h"
- #include <Rahmen.h>
- #include <MausEreignis.h>
- #include <TastaturEreignis.h>
- #include <Text.h>
- #include <Schrift.h>
- #include <Punkt.h>
- #include <Bild.h>
- // 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);
- }
|