void WPushButton::toggled() { // FIXME: later, make it a true EventSignal flags_.set(BIT_IS_CHECKED, !isChecked()); if (isChecked()) checked().emit(); else unChecked().emit(); }
void WAbstractToggleButton::setChecked(bool how) { checked_ = how; checkedChanged_ = true; if (how) emit checked(); else emit unChecked(); repaint(); }
void WAbstractToggleButton::updateDom(DomElement& element, bool all) { if (checkedChanged_ || all) { element.setProperty(Wt::PropertyChecked, checked_ ? "true" : "false"); checkedChanged_ = false; } const WSignalInstance_ *changeS = getSignal(SIGNAL(changed())); const WSignalInstance_ *checkedS = getSignal(SIGNAL(checked())); const WSignalInstance_ *unCheckedS = getSignal(SIGNAL(unChecked())); bool needUpdateChangeSignal = (changeS->connectivityChanged() || checkedS->connectivityChanged() || unCheckedS->connectivityChanged() || changeS->staticCodeChanged() || checkedS->staticCodeChanged() || unCheckedS->staticCodeChanged()); WFormWidget::updateDom(element, all); if (needUpdateChangeSignal || all) { element.removeEventSignal("change"); DomElement *e = DomElement::getForUpdate(this, DomElement::INPUT); if (isConnected(changeS)) element.addEventSignal("change", *changeS, 0, 0); if (isConnected(checkedS)) element.addEventSignal("change", *checkedS, 0, (e->createReference() + ".checked == true").c_str()); if (isConnected(unCheckedS)) element.addEventSignal("change", *unCheckedS, 0, (e->createReference() + ".checked == false").c_str()); delete e; } }
GoogleMapExample() : WContainerWidget() { auto layout = setLayout(cpp14::make_unique<WHBoxLayout>()); setHeight(400); auto map = cpp14::make_unique<WGoogleMap>(GoogleMapsVersion::v3); map_ = map.get(); layout->addWidget(std::move(map), 1); map_->setMapTypeControl(MapTypeControl::Default); map_->enableScrollWheelZoom(); auto controls = cpp14::make_unique<WTemplate>(tr("graphics-GoogleMap-controls")); auto controls_ = controls.get(); layout->addWidget(std::move(controls)); auto zoomIn = cpp14::make_unique<WPushButton>("+"); auto zoomIn_ = controls_->bindWidget("zoom-in", std::move(zoomIn)); zoomIn_->addStyleClass("zoom"); zoomIn_->clicked().connect([=] { map_->zoomIn(); }); auto zoomOut = cpp14::make_unique<WPushButton>("-"); auto zoomOut_ = controls_->bindWidget("zoom-out", std::move(zoomOut)); zoomOut_->addStyleClass("zoom"); zoomOut_->clicked().connect([=] { map_->zoomOut(); }); std::string cityNames[] = { "Brussels", "Lisbon", "Paris" }; WGoogleMap::Coordinate cityCoords[] = { WGoogleMap::Coordinate(50.85034,4.35171), WGoogleMap::Coordinate(38.703731,-9.135475), WGoogleMap::Coordinate(48.877474, 2.312579) }; for (unsigned i = 0; i < 3; ++i) { auto city = cpp14::make_unique<WPushButton>(cityNames[i]); auto city_ = controls_->bindWidget(cityNames[i], std::move(city)); WGoogleMap::Coordinate coord = cityCoords[i]; city_->clicked().connect([=] { map_->panTo(coord); }); } auto reset = cpp14::make_unique<WPushButton>("Reset"); auto reset_ = controls_->bindWidget("emweb", std::move(reset)); reset_->clicked().connect([=] { this->panToEmWeb(); }); auto savePosition = cpp14::make_unique<WPushButton>("Save current position"); auto savePosition_ = controls_->bindWidget("save-position", std::move(savePosition)); savePosition_->clicked().connect([=] { this->savePosition(); }); auto returnToPosition = cpp14::make_unique<WPushButton>("Return to saved position"); returnToPosition_ = controls_->bindWidget("return-to-saved-position", std::move(returnToPosition)); returnToPosition_->setEnabled(false); returnToPosition_->clicked().connect([=] { map_->returnToSavedPosition(); }); mapTypeModel_ = std::make_shared<WStringListModel>(); addMapTypeControl("No control", MapTypeControl::None); addMapTypeControl("Default", MapTypeControl::Default); addMapTypeControl("Menu", MapTypeControl::Menu); if (map_->apiVersion() == GoogleMapsVersion::v2) addMapTypeControl("Hierarchical", MapTypeControl::Hierarchical); if (map_->apiVersion() == GoogleMapsVersion::v3) addMapTypeControl("Horizontal bar", MapTypeControl::HorizontalBar); auto menuControls = cpp14::make_unique<WComboBox>(); auto menuControls_ = controls_->bindWidget("control-menu-combo", std::move(menuControls)); menuControls_->setModel(mapTypeModel_); menuControls_->setCurrentIndex(1); menuControls_->activated().connect([=] (int mapType) { this->setMapTypeControl(mapType); }); auto draggingCB = cpp14::make_unique<WCheckBox>("Enable dragging"); auto draggingCB_ = controls_->bindWidget("dragging-cb", std::move(draggingCB)); draggingCB_->setChecked(true); map_->enableDragging(); draggingCB_->checked().connect([=] { map_->enableDragging(); }); draggingCB_->unChecked().connect([=] { map_->disableDragging(); }); auto enableDoubleClickZoomCB = cpp14::make_unique<WCheckBox>("Enable double click zoom"); auto enableDoubleClickZoomCB_ = controls_->bindWidget("double-click-zoom-cb", std::move(enableDoubleClickZoomCB)); enableDoubleClickZoomCB_->setChecked(false); map_->disableDoubleClickZoom(); enableDoubleClickZoomCB_->checked().connect([=] { map_->enableDoubleClickZoom(); }); enableDoubleClickZoomCB_->unChecked().connect([=] { map_->disableDoubleClickZoom(); }); auto enableScrollWheelZoomCB = cpp14::make_unique<WCheckBox>("Enable scroll wheel zoom"); auto enableScrollWheelZoomCB_ = controls_->bindWidget("scroll-wheel-zoom-cb", std::move(enableScrollWheelZoomCB)); enableScrollWheelZoomCB_->setChecked(true); map_->enableScrollWheelZoom(); enableScrollWheelZoomCB_->checked().connect([=] { map_->enableScrollWheelZoom(); }); enableScrollWheelZoomCB_->unChecked().connect([=] { map_->disableScrollWheelZoom(); }); std::vector<WGoogleMap::Coordinate> road = roadDescription(); map_->addPolyline(road, WColor(0, 191, 255)); //Koen's favourite bar! map_->addMarker(WGoogleMap::Coordinate(50.885069,4.71958)); map_->setCenter(road[road.size()-1]); map_->openInfoWindow(road[0], "<img src=\"http://www.emweb.be/css/emweb_small.jpg\" />" "<p><strong>Emweb office</strong></p>"); map_->clicked().connect([=] (WGoogleMap::Coordinate c) { this->googleMapClicked(c); }); map_->doubleClicked().connect([=] (WGoogleMap::Coordinate c) { this->googleMapDoubleClicked(c); }); }