#include "Dialog.h" #include "AsynchronCall.h" #include "AuswahlBox.h" #include "Bildschirm.h" #include "Fenster.h" #include "Knopf.h" #include "RenderThread.h" #include "Schrift.h" #include "Text.h" using namespace Framework; // Inhalt der MultiplChoiceDialog Klasse aus Dialog.h MultiplChoiceDialog::MultiplChoiceDialog() : ReferenceCounter() { entrys = new RCArray(); ids = new Array(); } MultiplChoiceDialog::~MultiplChoiceDialog() { entrys->release(); ids->release(); } // Fügt eine Auswahlmöglichkeit hinzu void MultiplChoiceDialog::addChoice(const char* text, void* id) { entrys->add(new Text(text)); ids->add(id); } // Zeigt den dialog an und wartet auf benutzereingabe void* MultiplChoiceDialog::anzeigen(Schrift* zSchrift) { void* result = 0; bool ex = 0; WNDCLASS wc = F_Normal(0); wc.lpszClassName = "Dialog"; WFenster* f = new WFenster(); f->setVSchließAktion([&ex](void* p, void* o) { ex = true; }); f->setMausAktion(_ret1ME); f->setTastaturAktion(_ret1TE); f->erstellen(WS_OVERLAPPEDWINDOW, wc); f->setSize(200, 200); f->setPosition(Bildschirmmitte(dynamic_cast(f->getThis()))); f->setVerschiebbar(1); f->setAnzeigeModus(1); Bildschirm* b = new Bildschirm2D(dynamic_cast(f->getThis())); f->setBildschirm(dynamic_cast(b->getThis())); b->update(); RenderTh* r = new RenderTh(); r->setBildschirm(dynamic_cast(b->getThis())); r->beginn(); AuswahlBox* ab = new AuswahlBox(); ab->setPosition(10, 10); ab->setSize(180, 20); ab->setHintergrundFarbe(0xFF000000); ab->setRahmenBreite(1); ab->setRahmenFarbe(0xFFFFFFFF); ab->setMaxAuskappHeight(120); ab->setMausRahmenBreite(1); ab->setMausRahmenFarbe(0xFF005500); ab->setMausAlphaFeldFarbe(0x00008700); ab->setMausAlphaFeldStrength(-8); ab->setAuswRahmenBreite(1); ab->setAuswRahmenFarbe(0xFF00FF00); ab->setAuswAlphaFeldFarbe(0x0000FF00); ab->setAuswAlphaFeldStrength(-8); ab->setStyle(AuswahlBox::Style::Normal); ab->setSchriftZ(dynamic_cast(zSchrift->getThis())); for (Text* i : *entrys) ab->addEintrag(i->getText()); ab->setMausEreignis(_ret1ME); b->addMember(ab); Knopf* ok = new Knopf(); ok->setStyle(Knopf::Style::Normal); ok->setPosition(50, 150); ok->setSize(100, 20); ok->setSchriftZ(dynamic_cast(zSchrift->getThis())); ok->setText("Ok"); ok->setMausEreignis( [this, &ex, &result, ab](void* p, void* o, MausEreignis me) { if (me.id == ME_RLinks) { result = ids->get(ab->getAuswahl()); ex = true; } return 1; }); b->addMember(ok); MSG msg; while (GetMessage(&msg, NULL, 0, 0) > 0 && !ex) { if (!ex) { TranslateMessage(&msg); DispatchMessage(&msg); } } r->beenden(); r->release(); b->release(); f->setBildschirm(0); f->setAnzeigeModus(0); f->zerstören(); f->release(); ok->release(); ab->release(); return result; }