Control* OceanControlFactory::create(OceanNode* ocean) const { VBox* main = new VBox(); HBox* sealLevelBox = main->addControl(new HBox()); sealLevelBox->setChildVertAlign( Control::ALIGN_CENTER ); sealLevelBox->setChildSpacing( 10 ); sealLevelBox->setHorizFill( true ); sealLevelBox->addControl( new LabelControl("Sea Level: ", 16) ); HSliderControl* mslSlider = sealLevelBox->addControl(new HSliderControl( -250.0f, 250.0f, 0.0f )); mslSlider->setBackColor( Color::Gray ); mslSlider->setHeight( 12 ); mslSlider->setHorizFill( true, 200 ); mslSlider->addEventHandler( new ChangeSeaLevel(ocean) ); HBox* alphaBox = main->addControl(new HBox()); alphaBox->setChildVertAlign( Control::ALIGN_CENTER ); alphaBox->setChildSpacing( 10 ); alphaBox->setHorizFill( true ); alphaBox->addControl( new LabelControl("Sea Alpha: ", 16) ); HSliderControl* alphaSlider = alphaBox->addControl(new HSliderControl( 0.0, 1.0, 1.0)); alphaSlider->setBackColor( Color::Gray ); alphaSlider->setHeight( 12 ); alphaSlider->setHorizFill( true, 200 ); alphaSlider->addEventHandler( new ChangeSeaAlpha(ocean) ); return main; }
Control* SkyControlFactory::create(SkyNode* sky, osgViewer::View* view) const { HBox* skyBox = new HBox(); skyBox->setChildVertAlign( Control::ALIGN_CENTER ); skyBox->setChildSpacing( 10 ); skyBox->setHorizFill( true ); skyBox->addControl( new LabelControl("Time: ", 16) ); HSliderControl* skySlider = skyBox->addControl(new HSliderControl( 0.0f, 24.0f, 18.0f )); skySlider->setBackColor( Color::Gray ); skySlider->setHeight( 12 ); skySlider->setHorizFill( true, 200 ); skySlider->addEventHandler( new SkySliderHandler(sky) ); return skyBox; }
// Build a slider to adjust the vertical scale osgEarth::Util::Controls::Control* createUI( osg::Uniform* scaler ) { using namespace osgEarth::Util::Controls; struct ApplyVerticalScale : public ControlEventHandler { osg::Uniform* _u; ApplyVerticalScale(osg::Uniform* u) : _u(u) { } void onValueChanged(Control*, float value) { _u->set( value ); } }; HBox* hbox = new HBox(); hbox->setChildVertAlign( Control::ALIGN_CENTER ); hbox->addControl( new LabelControl("Scale:") ); HSliderControl* slider = hbox->addControl( new HSliderControl(0.0, 5.0, 1.0, new ApplyVerticalScale(scaler)) ); slider->setHorizFill( true, 200 ); hbox->addControl( new LabelControl(slider) ); return hbox; }
void createControls( ControlCanvas* cs ) { // a container centered on the screen, containing an image and a text label. { VBox* center = new VBox(); center->setFrame( new RoundedFrame() ); center->getFrame()->setBackColor( 1,1,1,0.5 ); center->setPadding( 10 ); center->setHorizAlign( Control::ALIGN_CENTER ); center->setVertAlign( Control::ALIGN_CENTER ); // Add an image: osg::ref_ptr<osg::Image> image = osgDB::readImageFile("http://demo.pelicanmapping.com/rmweb/readymap_logo.png"); if ( image.valid() ) { s_imageControl = new ImageControl( image.get() ); s_imageControl->setHorizAlign( Control::ALIGN_CENTER ); s_imageControl->setFixSizeForRotation( true ); //imageCon->addEventHandler( new ImageRotationHandler ); center->addControl( s_imageControl ); center->setHorizAlign( Control::ALIGN_CENTER ); } // Add a text label: LabelControl* label = new LabelControl( "osgEarth Controls Toolkit" ); label->setFont( osgEarth::Registry::instance()->getDefaultFont() ); label->setFontSize( 24.0f ); label->setHorizAlign( Control::ALIGN_CENTER ); label->setMargin( 5 ); center->addControl( label ); // Rotation slider HBox* rotateBox = new HBox(); rotateBox->setChildVertAlign( Control::ALIGN_CENTER ); rotateBox->setHorizFill( true ); rotateBox->setBackColor( Color::Blue ); { rotateBox->addControl( new LabelControl("Rotate: ") ); HSliderControl* rotateSlider = new HSliderControl( -180.0, 180.0, 0.0 ); rotateSlider->addEventHandler( new RotateImage() ); rotateSlider->setHeight( 8.0f ); rotateSlider->setHorizFill( true ); rotateBox->addControl( rotateSlider ); } center->addControl( rotateBox ); cs->addControl( center ); } // a simple vbox with absolute positioning in the upper left with two text labels. { VBox* ul = new VBox(); ul->setPosition( 20, 20 ); ul->setPadding( 10 ); { LabelControl* title = new LabelControl( "Upper left control", 22, osg::Vec4f(1,1,0,1) ); ul->addControl( title ); LabelControl* content = new LabelControl( "Here is some text in the upper left control" ); ul->addControl( content ); HBox* c2 = new HBox(); c2->setChildSpacing( 10 ); { HSliderControl* slider = new HSliderControl( 0, 100 ); slider->setBackColor( .6,0,0,1 ); slider->setHeight( 25 ); slider->setWidth( 300 ); slider->addEventHandler( new MySliderHandler() ); c2->addControl( slider ); s_sliderLabel = new LabelControl(); s_sliderLabel->setVertAlign( Control::ALIGN_CENTER ); c2->addControl( s_sliderLabel ); } ul->addControl( c2 ); HBox* c3 = new HBox(); c3->setHorizAlign( Control::ALIGN_CENTER ); c3->setChildSpacing( 10 ); { HBox* c4 = new HBox(); c4->setChildSpacing( 5 ); { c4->addControl( new CheckBoxControl( true ) ); c4->addControl( new LabelControl( "Checkbox 1" ) ); } c3->addControl( c4 ); HBox* c5 = new HBox(); c5->setChildSpacing( 5 ); { c5->addControl( new CheckBoxControl( false ) ); c5->addControl( new LabelControl( "Checkbox 2" ) ); } c3->addControl( c5 ); } ul->addControl( c3 ); } cs->addControl( ul ); ul->addEventHandler( new MyClickHandler ); } // a centered hbox container along the bottom on the screen. { HBox* bottom = new HBox(); bottom->setFrame( new RoundedFrame() ); bottom->getFrame()->setBackColor(0,0,0,0.5); bottom->setMargin( 10 ); bottom->setChildSpacing( 145 ); bottom->setVertAlign( Control::ALIGN_BOTTOM ); bottom->setHorizAlign( Control::ALIGN_CENTER ); for( int i=0; i<4; ++i ) { LabelControl* label = new LabelControl(); std::stringstream buf; buf << "Label_" << i; std::string str; str = buf.str(); label->setText( str ); label->setMargin( 10 ); label->setBackColor( 1,1,1,0.4 ); bottom->addControl( label ); label->setActiveColor(1,.3,.3,1); label->addEventHandler( new MyClickHandler ); } cs->addControl( bottom ); } }