void Dialog::askRocket(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/launch_rocket_yn.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display message 'launch_rocket_yn': " << e.what() << "\n"; return; } Paragraph* p = getParagraph( *myDialogComponent, "DialogTitle" ); std::stringstream title; title << _("Launchsite") << " ( " << pointX <<" , " << pointY << " )"; p->setText( title.str() ); // connect signals Button* yesButton = getButton( *myDialogComponent, "Yes" ); yesButton->clicked.connect( makeCallback(*this, &Dialog::okayLaunchRocketButtonClicked ) ); Button* noButton = getButton( *myDialogComponent, "No" ); noButton->clicked.connect( makeCallback( *this, &Dialog::closeDialogButtonClicked ) ); Button* gotoButton = getButton( *myDialogComponent, "goto" ); gotoButton->clicked.connect( makeCallback( *this, &Dialog::gotoButtonClicked ) ); }
void MainMenu::fillLoadMenu( bool save /*= false*/ ) { const std::string buttonNames[]={"File0","File1","File2","File3","File4","File5"}; char** rc = PHYSFS_enumerateFiles("/"); char* curfile; CheckButton *button; for(int i=0;i<6;i++) { char* recentfile = NULL; PHYSFS_sint64 t = 0; std::stringstream filestart; filestart << i+1 << "_"; if( save ){ button = getCheckButton(*saveGameMenu.get(),buttonNames[i]); } else { button = getCheckButton(*loadGameMenu.get(),buttonNames[i]); } //make sure Button is connected only once button->clicked.clear(); if( save ) button->clicked.connect(makeCallback(*this,&MainMenu::selectSaveGameButtonClicked)); else { button->clicked.connect(makeCallback(*this,&MainMenu::selectLoadGameButtonClicked)); } for(char** i = rc; *i != 0; i++){ curfile = *i; if(std::string( curfile ).find( filestart.str() ) == 0 ) { // && !( curfile->d_type & DT_DIR ) ) is not portable. So // don't create a directoy named 2_ in a savegame-directory or // you can no longer load from slot 2. if (t == 0) { recentfile = curfile; t = PHYSFS_getLastModTime(recentfile); } else { if (PHYSFS_getLastModTime(curfile) > t) { /*#ifdef DEBUG fprintf(stderr," %s is more recent than previous %s\n", curfile, recentfile); #endif*/ recentfile = curfile; t = PHYSFS_getLastModTime(recentfile); } } } } #ifdef DEBUG fprintf(stderr,"Most recent file: %s\n\n",recentfile); #endif if(t != 0) { std::string f= recentfile; button->setCaptionText(f); } else { button->setCaptionText(_("empty")); } } }
void ScriptingCameraTexture::removeFromWorld (void) { Camera::getFrameCapturedCB().remove(makeCallback(this, &type::gotFrame)); getWorld()->unregisterForTick(this, makeCallback(this, &type::tick)); ScriptingBase::removeFromWorld(); }
void ScriptingCameraTexture::addToWorld (World *world) { ScriptingBase::addToWorld(world); world->registerForTick(this, makeCallback(this, &type::tick)); Camera::getFrameCapturedCB().add(makeCallback(this, &type::gotFrame)); }
void Dialog::editMarket(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/tradedialog.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display dialog 'tradedialog.xml': " << e.what() << "\n"; return; } // set Dialog to Market-Data Paragraph* p = getParagraph( *myDialogComponent, "DialogTitle" ); std::stringstream title; title << _("Market") << " ( " << pointX <<" , " << pointY << " )"; p->setText( title.str() ); Market * market = static_cast <Market *> (world(pointX, pointY)->reportingConstruction); CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyJobs" ); if( market->commodityRuleCount[Construction::STUFF_JOBS].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellJobs" ); if( market->commodityRuleCount[Construction::STUFF_JOBS].give ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( market->commodityRuleCount[Construction::STUFF_FOOD].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellFood" ); if( market->commodityRuleCount[Construction::STUFF_FOOD].give ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( market->commodityRuleCount[Construction::STUFF_COAL].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( market->commodityRuleCount[Construction::STUFF_COAL].give ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( market->commodityRuleCount[Construction::STUFF_ORE].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellOre" ); if( market->commodityRuleCount[Construction::STUFF_ORE].give ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( market->commodityRuleCount[Construction::STUFF_GOODS].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( market->commodityRuleCount[Construction::STUFF_GOODS].give ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( market->commodityRuleCount[Construction::STUFF_STEEL].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( market->commodityRuleCount[Construction::STUFF_STEEL].give) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyWaste" ); if( market->commodityRuleCount[Construction::STUFF_WASTE].take ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellWaste" ); if( market->commodityRuleCount[Construction::STUFF_WASTE].give) cb->check(); else cb->uncheck(); // connect signals Button* applyButton = getButton( *myDialogComponent, "Apply" ); applyButton->clicked.connect( makeCallback(*this, &Dialog::applyMarketButtonClicked ) ); Button* gotoButton = getButton( *myDialogComponent, "goto" ); gotoButton->clicked.connect( makeCallback( *this, &Dialog::gotoButtonClicked ) ); }
void Dialog::editMarket(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/tradedialog.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display dialog 'tradedialog.xml': " << e.what() << "\n"; return; } // set Dialog to Market-Data Paragraph* p = getParagraph( *myDialogComponent, "DialogTitle" ); std::stringstream title; title << _("Market") << " ( " << pointX <<" , " << pointY << " )"; p->setText( title.str() ); CheckButton* cb; cb = getCheckButton( *myDialogComponent, "BuyJobs" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_JOBS ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellJobs" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_JOBS ) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyFood" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_FOOD) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellFood" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_FOOD) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyCoal" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_COAL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellCoal" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_COAL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyOre" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_ORE) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellOre" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_ORE) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuyGoods" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_GOODS) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellGoods" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_GOODS) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "BuySteel" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MB_STEEL) cb->check(); else cb->uncheck(); cb = getCheckButton( *myDialogComponent, "SellSteel" ); if( MP_INFO( pointX,pointY ).flags & FLAG_MS_STEEL) cb->check(); else cb->uncheck(); // connect signals Button* applyButton = getButton( *myDialogComponent, "Apply" ); applyButton->clicked.connect( makeCallback(*this, &Dialog::applyMarketButtonClicked ) ); Button* gotoButton = getButton( *myDialogComponent, "goto" ); gotoButton->clicked.connect( makeCallback( *this, &Dialog::gotoButtonClicked ) ); }
void ComponentGUIToggleButton::addToOwner (ObjectBase *owner) { ComponentBase::addToOwner(owner); GUIObject *gui = checkedCast<GUIObject*>(owner); if (gui) { gui->getTouchesBeganCallbacks().add(makeCallback(this, &type::touchesBegan)); gui->getTouchesMovedCallbacks().add(makeCallback(this, &type::touchesMoved)); gui->getTouchesEndedCallbacks().add(makeCallback(this, &type::touchesEnded)); gui->getTouchesCancelledCallbacks().add(makeCallback(this, &type::touchesCancelled)); } }
void ComponentGUIToggleButton::removeFromOwner (void) { GUIObject *gui = checkedCast<GUIObject*>(getOwner()); if (gui) { gui->getTouchesBeganCallbacks().remove(makeCallback(this, &type::touchesBegan)); gui->getTouchesMovedCallbacks().remove(makeCallback(this, &type::touchesMoved)); gui->getTouchesEndedCallbacks().remove(makeCallback(this, &type::touchesEnded)); gui->getTouchesCancelledCallbacks().remove(makeCallback(this, &type::touchesCancelled)); } ComponentBase::removeFromOwner(); }
void Cache::queueObject(QVariant dataurl, QVariant callback) { //qDebug() << "QueueObject callback: " << callback; QString namelocal; QString url = dataurl.toString(); if (url.size()) { m_cachemap_lock.lockForRead(); QMap<QString,QString>::iterator it = m_cachemap.find(url); if (it!=m_cachemap.end()) { //qDebug() << "cache hit" << url; namelocal = it.value(); m_cachemap_lock.unlock(); makeCallback(callback,true,namelocal); } else { //qDebug() << "cache miss" << url; namelocal = makeCachedURL(url); //qDebug() << "Hash:" << name << "Status:" << file.exists() << "URL:" << url; #ifndef Q_WS_SIMULATOR { QFileInfo fileinfo(namelocal); QDateTime modif = fileinfo.lastModified(); if (modif.daysTo(QDateTime::currentDateTime()) > CACHE_DAY_DURATION) { QFile(fileinfo.absoluteFilePath()).remove(); } } #endif QFileInfo file(namelocal); if (file.exists()) { m_cachemap_lock.unlock(); m_cachemap_lock.lockForWrite(); m_cachemap.insert(url,namelocal); m_cachemap_lock.unlock(); makeCallback(callback,true,namelocal); } else { m_cachemap_lock.unlock(); if (m_cacheonly) { dataurl = QVariant(""); } else { //add to queue, post and download query if (queueCacheUpdate(dataurl, callback)) { //qDebug() << "download " << url; manager->get(QNetworkRequest(QUrl(url))); } } } } } else { makeCallback(callback,false,dataurl); } }
void ComponentPhysicsSetVelocity::removeFromOwner (void) { World *w = getOwner()->getWorld(); w->unregisterForTick(getOwner(), makeCallback(this, &type::tick)); ComponentBase::removeFromOwner(); }
void ComponentDrawCamera::removeFromOwner (void) { World *w = getOwner()->getWorld(); w->unregisterForDraw(getOwner(), makeCallback(this, &type::draw)); ComponentBase::removeFromOwner(); }
void ComponentDrawCamera::addToOwner (ObjectBase *owner) { ComponentBase::addToOwner(owner); World *w = getOwner()->getWorld(); w->registerForDraw(getOwner(), makeCallback(this, &type::draw)); }
void Document::addParagraph(Paragraph* paragraph) { paragraph->linkClicked.connect( makeCallback(*this, &Document::paragraphLinkClicked)); addChild(paragraph); resize(width, height); }
void MainMenu::loadMainMenu() { if(mainMenu.get() == 0) { mainMenu.reset(loadGUIFile("gui/mainmenu.xml")); // connect signals Button* quitButton = getButton(*mainMenu, "QuitButton"); quitButton->clicked.connect( makeCallback(*this, &MainMenu::quitButtonClicked)); Button* continueButton = getButton(*mainMenu, "ContinueButton"); continueButton->clicked.connect( makeCallback(*this, &MainMenu::continueButtonClicked)); Button* newGameButton = getButton(*mainMenu, "NewGameButton"); newGameButton->clicked.connect( makeCallback(*this, &MainMenu::newGameButtonClicked)); Button* loadGameButton = getButton(*mainMenu, "LoadButton"); loadGameButton->clicked.connect( makeCallback(*this, &MainMenu::loadGameButtonClicked)); Button* saveGameButton = getButton(*mainMenu, "SaveButton"); saveGameButton->clicked.connect( makeCallback(*this, &MainMenu::saveGameButtonClicked)); Button* creditsButton = getButton(*mainMenu, "CreditsButton"); creditsButton->clicked.connect( makeCallback(*this, &MainMenu::creditsButtonClicked)); Button* optionsButton = getButton(*mainMenu, "OptionsButton"); optionsButton->clicked.connect( makeCallback(*this, &MainMenu::optionsButtonClicked)); } mainMenu->resize(getConfig()->videoX, getConfig()->videoY); //(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); }
void MainMenu::loadSaveGameMenu() { if(saveGameMenu.get() == 0) { saveGameMenu.reset(loadGUIFile("gui/savegame.xml")); // connect signals Button* saveButton = getButton(*saveGameMenu, "SaveButton"); saveButton->clicked.connect( makeCallback(*this, &MainMenu::loadGameSaveButtonClicked)); Button* backButton = getButton(*saveGameMenu, "BackButton"); backButton->clicked.connect( makeCallback(*this, &MainMenu::loadGameBackButtonClicked)); // fill in file-names into slots fillLoadMenu( true ); } saveGameMenu->resize(getConfig()->videoX, getConfig()->videoY); //(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); }
void MainMenu::loadNewGameMenu() { if(newGameMenu.get() == 0) { newGameMenu.reset(loadGUIFile("gui/newgame.xml")); // connect signals Button* startButton = getButton(*newGameMenu, "StartButton"); startButton->clicked.connect(makeCallback(*this, &MainMenu::newGameStartButtonClicked)); Button* backButton = getButton(*newGameMenu, "BackButton"); backButton->clicked.connect(makeCallback(*this, &MainMenu::newGameBackButtonClicked)); fillNewGameMenu(); } newGameMenu->resize(getConfig()->videoX, getConfig()->videoY); //(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); }
Game::Game() { gui.reset(loadGUIFile("gui/app.xml")); gui->resize(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); Button* gameMenu = getButton( *gui, "GameMenuButton" ); gameMenu->clicked.connect( makeCallback(*this, &Game::gameButtonClicked )); Button* helpButton = getButton( *gui, "HelpButton" ); helpButton->clicked.connect( makeCallback(*this, &Game::gameButtonClicked )); Button* statButton = getButton( *gui, "StatButton" ); statButton->clicked.connect( makeCallback(*this, &Game::gameButtonClicked )); Desktop* desktop = dynamic_cast<Desktop*> (gui.get()); if(desktop == 0) throw std::runtime_error("Game UI is not a Desktop Component"); helpWindow.reset(new HelpWindow(desktop)); gameptr = this; }
void MainMenu::loadCreditsMenu() { if(creditsMenu.get() == 0) { creditsMenu.reset(loadGUIFile("gui/credits.xml")); Button* backButton = getButton(*creditsMenu, "BackButton"); backButton->clicked.connect( makeCallback(*this, &MainMenu::creditsBackButtonClicked)); } creditsMenu->resize(getConfig()->videoX, getConfig()->videoY); //(SDL_GetVideoSurface()->w, SDL_GetVideoSurface()->h); }
void ComponentPhysicsSetVelocity::addToOwner (ObjectBase *owner) { ComponentBase::addToOwner(owner); World *w = getOwner()->getWorld(); w->registerForTick(getOwner(), makeCallback(this, &type::tick)); PlaceableObject *placeable = checkedCast<PlaceableObject*>(getOwner()); if (!placeable) return; _last_transform = placeable->getTransform(); }
void Dialog::coalSurvey(){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } try { myDialogComponent = loadGUIFile( "gui/coal_survey_yn.xml" ); assert( myDialogComponent != 0); registerDialog(); blockingDialogIsOpen = true; iAmBlocking = true; } catch(std::exception& e) { std::cerr << "Couldn't display message 'coal_survey_yn': " << e.what() << "\n"; return; } // connect signals Button* yesButton = getButton( *myDialogComponent, "Yes" ); yesButton->clicked.connect( makeCallback(*this, &Dialog::okayCoalSurveyButtonClicked ) ); Button* noButton = getButton( *myDialogComponent, "No" ); noButton->clicked.connect( makeCallback( *this, &Dialog::closeDialogButtonClicked ) ); }
void Document::parse(XmlReader& reader) { XmlReader::AttributeIterator iter(reader); while(iter.next()) { const char* attribute = (const char*) iter.getName(); const char* value = (const char*) iter.getValue(); if(parseAttribute(attribute, value)) { continue; } else if(style.parseAttribute(attribute, value)) { continue; } else if(strcmp(attribute, "src") == 0) { XmlReader fileReader(value); parse(fileReader); return; } else { std::cerr << "Skipping unknown attribute '" << attribute << "'.\n"; } } int depth = reader.getDepth(); while(reader.read() && reader.getDepth() > depth) { if(reader.getNodeType() == XML_READER_TYPE_ELEMENT) { std::string node = (const char*) reader.getName(); if(node == "p" || node=="Paragraph" || node == "li") { std::auto_ptr<Paragraph> paragraph (new Paragraph()); if(node != "li") { paragraph->parse(reader, style); } else { paragraph->parseList(reader, style); } paragraph->linkClicked.connect( makeCallback(*this, &Document::paragraphLinkClicked)); addChild(paragraph.release()); } else if(node == "img") { std::auto_ptr<DocumentImage> image (new DocumentImage()); image->parse(reader, style); addChild(image.release()); } else { std::cerr << "Skipping unknown node type '" << node << "'.\n"; reader.nextNode(); } } else if(reader.getNodeType() == XML_READER_TYPE_TEXT) { // TODO create anonymous paragraph... std::cerr << "Warning: text outside paragraph not allowed (yet).\n"; } } }
void Service::backToService(const Tracing & trace, const char * block, unsigned int len, ServiceCallback cb) { Tracing trc; trc.routing.fromServiceType = getServiceType(); trc.routing.fromServiceID = getServiceID(); trc.routing.traceID = 0; trc.routing.traceBackID = trace.routing.traceID; trc.routing.toServiceType = trace.routing.fromServiceType; trc.routing.toServiceID = trace.routing.fromServiceID; trc.oob = trace.oob; if (cb) { trc.routing.traceID = makeCallback(cb); } Docker::getRef().toService(trc, block, len, false); }
void ScrollView::parse(XmlReader& reader) { // parse xml attributes XmlReader::AttributeIterator iter(reader); while(iter.next()) { const char* attribute = (const char*) iter.getName(); const char* value = (const char*) iter.getValue(); if(parseAttribute(attribute, value)) { continue; } else { std::cerr << "Skipping unknown attribute '" << attribute << "'.\n"; } } // we need 2 child components childs.assign(2, Child()); // parse xml contents int depth = reader.getDepth(); while(reader.read() && reader.getDepth() > depth) { if(reader.getNodeType() == XML_READER_TYPE_ELEMENT) { std::string element = (const char*) reader.getName(); if(element == "scrollbar") { std::auto_ptr<ScrollBar> scrollbar (new ScrollBar()); scrollbar->parse(reader); resetChild(scrollBar(), scrollbar.release()); } else if(element == "contents") { resetChild(contents(), parseEmbeddedComponent(reader)); } else { std::cerr << "Skipping unknown element '" << element << "'.\n"; } } } if(scrollBar().getComponent() == 0) { throw std::runtime_error("No ScrollBar specified in ScrollView"); } ScrollBar* scrollBarComponent = (ScrollBar*) scrollBar().getComponent(); scrollBarComponent->valueChanged.connect( makeCallback(*this, &ScrollView::scrollBarChanged)); setFlags(FLAG_RESIZABLE); }
void Service::toService(ServiceType serviceType, ServiceID serviceID, const OutOfBand &oob, const char * block, unsigned int len, ServiceCallback cb) { Tracing trace; trace.routing.fromServiceType = getServiceType(); trace.routing.fromServiceID = getServiceID(); trace.routing.traceBackID = 0; trace.routing.traceID = 0; trace.routing.toServiceType = serviceType; trace.routing.toServiceID = serviceID; trace.oob = oob; if (cb) { trace.routing.traceID = makeCallback(cb); } if (trace.routing.toServiceType == STClient && trace.routing.toServiceID == InvalidServiceID) { if ((trace.oob.clientDockerID == InvalidDockerID && trace.oob.clientSessionID != InvalidSessionID) || (trace.oob.clientDockerID != InvalidDockerID && trace.oob.clientSessionID == InvalidSessionID)) { LOGE("toService STClient via session ID but param had some wrong. the condition is clientDockerID and clientSessionID need all valid. trace=" << trace); return; } if (trace.oob.clientDockerID == InvalidDockerID && trace.oob.clientAvatarID == InvalidAvatarID && getServiceType() != STAvatar) { LOGE("toService STClient but can not get the avatar ID. trace=" << trace << ", this service=" << getServiceType()); return; } if (trace.oob.clientDockerID == InvalidDockerID && trace.oob.clientAvatarID == InvalidAvatarID && getServiceType() == STAvatar) { trace.routing.toServiceID = getServiceID(); } if (trace.oob.clientDockerID == InvalidDockerID && trace.oob.clientAvatarID != InvalidAvatarID) { trace.routing.toServiceID = trace.oob.clientAvatarID; } } else if (::getServiceTrait(trace.routing.toServiceType) == STrait_Multi && trace.routing.toServiceID == InvalidServiceID) { LOGE("toService STrait_Multi but can not get the toServiceID. trace=" << trace << ", this service=" << getServiceType()); return; } Docker::getRef().toService(trace, block, len, false); }
void ComponentGUIScroller::removeFromOwner (void) { GUIObject *gui = checkedCast<GUIObject*>(getOwner()); if (gui) { gui->getHitObjectCallbacks().remove(makeCallback(this, &ComponentGUIScroller::hitTest)); gui->getTouchesBeganCallbacks().remove(makeCallback(this, &type::touchesBegan)); gui->getTouchesMovedCallbacks().remove(makeCallback(this, &type::touchesMoved)); gui->getTouchesEndedCallbacks().remove(makeCallback(this, &type::touchesEnded)); gui->getTouchesCancelledCallbacks().remove(makeCallback(this, &type::touchesCancelled)); gui->getPostDrawGUICallbacks().remove(makeCallback(this, &ComponentGUIScroller::draw)); } World *w = getOwner()->getWorld(); w->unregisterForTick(getOwner(), makeCallback(this, &type::tick)); ComponentBase::removeFromOwner(); }
void ComponentGUIVideoPlayer::addToOwner (ObjectBase *owner) { ComponentBase::addToOwner(owner); getOwner()->getWorld()->registerForTick(owner, makeCallback(this, &type::tick)); GUIObject *gui = checkedCast<GUIObject*>(owner); if (gui) { gui->getTouchesBeganCallbacks().add(makeCallback(this, &type::touchesBegan)); gui->getTouchesMovedCallbacks().add(makeCallback(this, &type::touchesMoved)); gui->getTouchesEndedCallbacks().add(makeCallback(this, &type::touchesEnded)); gui->getTouchesCancelledCallbacks().add(makeCallback(this, &type::touchesCancelled)); gui->getDrawGUICallbacks().add(makeCallback(this, &ComponentGUIVideoPlayer::draw)); } }
void ComponentGUIScroller::addToOwner (ObjectBase *owner) { ComponentBase::addToOwner(owner); GUIObject *gui = checkedCast<GUIObject*>(owner); if (gui) { gui->getHitObjectCallbacks().add(makeCallback(this, &ComponentGUIScroller::hitTest)); gui->getTouchesBeganCallbacks().add(makeCallback(this, &type::touchesBegan)); gui->getTouchesMovedCallbacks().add(makeCallback(this, &type::touchesMoved)); gui->getTouchesEndedCallbacks().add(makeCallback(this, &type::touchesEnded)); gui->getTouchesCancelledCallbacks().add(makeCallback(this, &type::touchesCancelled)); gui->getPostDrawGUICallbacks().add(makeCallback(this, &ComponentGUIScroller::draw)); } World *w = getOwner()->getWorld(); w->registerForTick(getOwner(), makeCallback(this, &ComponentGUIScroller::tick)); }
//no Signals caught here, so ScreenInterface has to catch them. void Dialog::msgDialog( std::string message, std::string extraString){ if( !desktop ) { std::cerr << "No desktop found.\n"; return; } //generate filename. foo.mes => gui/foo.xml std::string filename = "gui/"; filename += message; std::string::size_type pos = filename.rfind( ".mes" ); if( pos != std::string::npos ){ filename.replace( pos, 4 ,".xml"); } std::auto_ptr<Component> myDialogComponent (loadGUIFile( filename )); //set Extra-String getParagraph( *myDialogComponent, "ExtraText" )->setText( extraString ); // connect signals Button* noButton = getButton( *myDialogComponent, "Ok" ); noButton->clicked.connect( makeCallback( *this, &Dialog::closeDialogButtonClicked ) ); this->myDialogComponent = myDialogComponent.release(); registerDialog(); }
void Cache::makeCallbackAll(bool status, QVariant url) { //qDebug() << "make all callback" << url; CCacheQueue::iterator it; m_cachequeue_lock.lockForRead(); it = m_cachequeue.find(url.toString()); if (it == m_cachequeue.end()) { m_cachequeue_lock.unlock(); return; } QString namelocal = makeCachedURL(url.toString()); CCallbackList callbacks = *it; //Make a copy of list m_cachequeue_lock.unlock(); m_cachequeue_lock.lockForWrite(); m_cachequeue.remove(url.toString()); m_cachequeue_lock.unlock(); //Make callbacks CCallbackList::iterator itc = callbacks.begin(); while(itc!=callbacks.end()) { makeCallback(*itc,status,namelocal); itc++; } }
void CxxNativeModule::invoke(unsigned int reactMethodId, folly::dynamic&& params) { if (reactMethodId >= methods_.size()) { throw std::invalid_argument(folly::to<std::string>("methodId ", reactMethodId, " out of range [0..", methods_.size(), "]")); } if (!params.isArray()) { throw std::invalid_argument( folly::to<std::string>("method parameters should be array, but are ", params.typeName())); } CxxModule::Callback first; CxxModule::Callback second; const auto& method = methods_[reactMethodId]; if (!method.func) { throw std::runtime_error(folly::to<std::string>("Method ", method.name, " is synchronous but invoked asynchronously")); } if (params.size() < method.callbacks) { throw std::invalid_argument(folly::to<std::string>("Expected ", method.callbacks, " callbacks, but only ", params.size(), " parameters provided")); } if (method.callbacks == 1) { first = convertCallback(makeCallback(instance_, params[params.size() - 1])); } else if (method.callbacks == 2) { first = convertCallback(makeCallback(instance_, params[params.size() - 2])); second = convertCallback(makeCallback(instance_, params[params.size() - 1])); } params.resize(params.size() - method.callbacks); // I've got a few flawed options here. I can let the C++ exception // propogate, and the registry will log/convert them to java exceptions. // This lets all the java and red box handling work ok, but the only info I // can capture about the C++ exception is the what() string, not the stack. // I can std::terminate() the app. This causes the full, accurate C++ // stack trace to be added to logcat by debuggerd. The java state is lost, // but in practice, the java stack is always the same in this case since // the javascript stack is not visible, and the crash is unfriendly to js // developers, but crucial to C++ developers. The what() value is also // lost. Finally, I can catch, log the java stack, then rethrow the C++ // exception. In this case I get java and C++ stack data, but the C++ // stack is as of the rethrow, not the original throw, both the C++ and // java stacks always look the same. // // I am going with option 2, since that seems like the most useful // choice. It would be nice to be able to get what() and the C++ // stack. I'm told that will be possible in the future. TODO // mhorowitz #7128529: convert C++ exceptions to Java messageQueueThread_->runOnQueue([method, params=std::move(params), first, second] () { try { method.func(std::move(params), first, second); } catch (const facebook::xplat::JsArgumentException& ex) { throw; } catch (...) { // This means some C++ code is buggy. As above, we fail hard so the C++ // developer can debug and fix it. std::terminate(); } }); }