void createLayerItem( Grid* grid, int gridRow, int layerIndex, int numLayers, TerrainLayer* layer, bool isActive ) { // a checkbox to enable/disable the layer: CheckBoxControl* enabled = new CheckBoxControl( layer->getVisible() ); enabled->addEventHandler( new LayerVisibleHandler(layer) ); grid->setControl( 0, gridRow, enabled ); // the layer name LabelControl* name = new LabelControl( layer->getName() ); grid->setControl( 1, gridRow, name ); ImageLayer* imageLayer = dynamic_cast< ImageLayer* > (layer ); if (imageLayer) { // an opacity slider HSliderControl* opacity = new HSliderControl( 0.0f, 1.0f, imageLayer->getOpacity() ); opacity->setWidth( 125 ); opacity->setHeight( 12 ); opacity->addEventHandler( new LayerOpacityHandler(imageLayer) ); grid->setControl( 2, gridRow, opacity ); } // move buttons if ( layerIndex < numLayers-1 && isActive ) { LabelControl* upButton = new LabelControl( "UP", 14 ); upButton->setBackColor( .4,.4,.4,1 ); upButton->setActiveColor( .8,0,0,1 ); upButton->addEventHandler( new MoveLayerHandler( layer, layerIndex+1 ) ); grid->setControl( 3, gridRow, upButton ); } if ( layerIndex > 0 && isActive) { LabelControl* upButton = new LabelControl( "DOWN", 14 ); upButton->setBackColor( .4,.4,.4,1 ); upButton->setActiveColor( .8,0,0,1 ); upButton->addEventHandler( new MoveLayerHandler( layer, layerIndex-1 ) ); grid->setControl( 4, gridRow, upButton ); } // add/remove button: LabelControl* addRemove = new LabelControl( isActive? "REMOVE" : "ADD", 14 ); addRemove->setHorizAlign( Control::ALIGN_CENTER ); addRemove->setBackColor( .4,.4,.4,1 ); addRemove->setActiveColor( .8,0,0,1 ); if ( isActive ) addRemove->addEventHandler( new RemoveLayerHandler(layer) ); else addRemove->addEventHandler( new AddLayerHandler(layer) ); grid->setControl( 5, gridRow, addRemove ); }
void MacCreadySetupPanel::OnAction(int id) { TaskBehaviour &task_behaviour = CommonInterface::SetComputerSettings().task; task_behaviour.auto_mc = auto_mc.GetState(); Profile::Set(ProfileKeys::AutoMc, task_behaviour.auto_mc); }
virtual void Show(const PixelRect &rc) override { Layout layout(rc); expert.SetState(CommonInterface::GetUISettings().dialog.expert); expert.MoveAndShow(layout.expert); if (borrowed2) button2.MoveAndShow(layout.button2); else button2.Move(layout.button2); if (borrowed1) button1.MoveAndShow(layout.button1); else button1.Move(layout.button1); }
static void OnOptimized(CheckBoxControl &control) { is_locked = !control.GetState(); protected_task_manager->TargetLock(target_point, is_locked); RefreshCalculator(); }
static void OnUserLevel(CheckBoxControl &control) { const bool expert = control.GetState(); CommonInterface::SetUISettings().dialog.expert = expert; Profile::Set(ProfileKeys::UserLevel, expert); tab_menu->UpdateLayout(); }
static void OnUserLevel(CheckBoxControl &control) { const bool expert = control.GetState(); CommonInterface::SetUISettings().dialog.expert = expert; Profile::Set(szProfileUserLevel, expert); wf->FilterAdvanced(expert); wTabMenu->UpdateLayout(); }
void createModelLayerItem( Grid* grid, int gridRow, ModelLayer* layer, bool isActive ) { // a checkbox to enable/disable the layer: CheckBoxControl* enabled = new CheckBoxControl( layer->getVisible() ); enabled->addEventHandler( new ModelLayerVisibleHandler(layer) ); grid->setControl( 0, gridRow, enabled ); // the layer name LabelControl* name = new LabelControl( layer->getName() ); grid->setControl( 1, gridRow, name ); // an opacity slider HSliderControl* opacity = new HSliderControl( 0.0f, 1.0f, layer->getOpacity() ); opacity->setWidth( 125 ); opacity->setHeight( 12 ); opacity->addEventHandler( new ModelLayerOpacityHandler(layer) ); grid->setControl( 2, gridRow, opacity ); }
static void OnUserLevel(CheckBoxControl &control) { const bool expert = control.GetState(); CommonInterface::SetUISettings().dialog.expert = expert; Profile::Set(ProfileKeys::UserLevel, expert); /* force layout update */ pager->PagerWidget::Move(pager->GetPosition()); }
void MacCreadySetupPanel::Prepare(ContainerWindow &parent, const PixelRect &rc) { WindowStyle style; style.Hide(); style.TabStop(); auto_mc.Create(parent, UIGlobals::GetDialogLook(), _("Auto"), rc, style, *this, 1); SetWindow(&auto_mc); }
void MoveChildren(const Layout &layout) { waypoint_name.Move(layout.waypoint_name); waypoint_details.Move(layout.waypoint_details); waypoint_remove.Move(layout.waypoint_remove); waypoint_relocate.Move(layout.waypoint_relocate); type_label.Move(layout.type_label); change_type.Move(layout.change_type); map.Move(layout.map); properties_dock.Move(layout.properties); optional_starts.Move(layout.optional_starts); score_exit.Move(layout.score_exit); }
void TaskPointWidget::Prepare(ContainerWindow &parent, const PixelRect &rc) { const Layout layout(rc, look); WindowStyle panel_style; panel_style.Hide(); panel_style.Border(); panel_style.ControlParent(); ButtonWindowStyle button_style; button_style.TabStop(); CheckBoxStyle check_box_style; check_box_style.TabStop(); WindowStyle dock_style; dock_style.ControlParent(); waypoint_panel.Create(parent, look, layout.waypoint_panel, panel_style); waypoint_name.Create(waypoint_panel, layout.waypoint_name); waypoint_details.Create(waypoint_panel, look.button, _("Details"), layout.waypoint_details, button_style, *this, DETAILS); waypoint_remove.Create(waypoint_panel, look.button, _("Remove"), layout.waypoint_remove, button_style, *this, REMOVE); waypoint_relocate.Create(waypoint_panel, look.button, _("Relocate"), layout.waypoint_relocate, button_style, *this, RELOCATE); tp_panel.Create(parent, look, layout.tp_panel, panel_style); type_label.Create(tp_panel, layout.type_label); change_type.Create(tp_panel, look.button, _("Change Type"), layout.change_type, button_style, *this, CHANGE_TYPE); map.Create(tp_panel, layout.map, WindowStyle(), [this](Canvas &canvas, const PixelRect &rc){ PaintMap(canvas, rc); }); properties_dock.Create(tp_panel, layout.properties, dock_style); optional_starts.Create(tp_panel, look.button, _("Enable Alternate Starts"), layout.optional_starts, button_style, *this, OPTIONAL_STARTS); score_exit.Create(tp_panel, look, _("Score exit"), layout.score_exit, check_box_style, *this, SCORE_EXIT); RefreshView(); }
/* virtual methods from Widget */ virtual void Prepare(ContainerWindow &parent, const PixelRect &rc) override { Layout layout(rc); WindowStyle style; style.Hide(); style.TabStop(); expert.Create(parent, look, _("Expert"), layout.expert, style, *this, EXPERT); button2.Create(parent, _T(""), layout.button2, style); button1.Create(parent, _T(""), layout.button1, style); }
bool TaskPointWidget::ReadValues() { OrderedTaskPoint &tp = ordered_task.GetPoint(active_index); if (tp.GetType() == TaskPointType::AST) { const bool new_score_exit = score_exit.GetState(); ASTPoint &ast = (ASTPoint &)tp; if (new_score_exit != ast.GetScoreExit()) { ast.SetScoreExit(new_score_exit); ordered_task.ClearName(); task_modified = true; } } return properties_dock.SaveWidget(task_modified); }
static void OnNorthUp(CheckBoxControl &control) { wdf->SetNorthUp(control.get_checked()); }
static void OnAutoZoom(CheckBoxControl &control) { wdf->SetAutoZoom(control.get_checked()); }
int main(int argc, char** argv) { osg::Group* root = new osg::Group(); // try to load an earth file. osg::ArgumentParser arguments(&argc,argv); osgViewer::Viewer viewer(arguments); viewer.setCameraManipulator( new EarthManipulator() ); // load an earth file and parse demo arguments osg::Node* node = MapNodeHelper().load(arguments, &viewer); if ( !node ) return usage(argv); root->addChild( node ); // find the map node that we loaded. MapNode* mapNode = MapNode::findMapNode(node); if ( !mapNode ) return usage(argv); // Group to hold all our annotation elements. osg::Group* annoGroup = new osg::Group(); root->addChild( annoGroup ); //A group for all the editors osg::Group* editorGroup = new osg::Group; root->addChild( editorGroup ); editorGroup->setNodeMask( 0 ); HBox* box = ControlCanvas::getOrCreate(&viewer)->addControl( new HBox() ); box->setChildSpacing( 5 ); //Add a toggle button to toggle editing CheckBoxControl* editCheckbox = new CheckBoxControl( false ); editCheckbox->addEventHandler( new ToggleNodeHandler( editorGroup ) ); box->addControl( editCheckbox ); LabelControl* labelControl = new LabelControl( "Edit Annotations" ); labelControl->setFontSize( 24.0f ); box->addControl( labelControl ); // Make a group for 2D items, and activate the decluttering engine. Decluttering // will migitate overlap between elements that occupy the same screen real estate. osg::Group* labelGroup = new osg::Group(); Decluttering::setEnabled( labelGroup->getOrCreateStateSet(), true ); annoGroup->addChild( labelGroup ); // Style our labels: Style labelStyle; labelStyle.getOrCreate<TextSymbol>()->alignment() = TextSymbol::ALIGN_CENTER_CENTER; labelStyle.getOrCreate<TextSymbol>()->fill()->color() = Color::Yellow; // A lat/long SRS for specifying points. const SpatialReference* geoSRS = mapNode->getMapSRS()->getGeographicSRS(); //-------------------------------------------------------------------- // A series of place nodes (an icon with a text label) { Style pin; pin.getOrCreate<IconSymbol>()->url()->setLiteral( "../data/placemark32.png" ); // bunch of pins: labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -74.00, 40.71), "New York" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -77.04, 38.85), "Washington, DC", pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS,-118.40, 33.93), "Los Angeles" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -71.03, 42.37), "Boston" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS,-157.93, 21.35), "Honolulu" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, 139.75, 35.68), "Tokyo" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -90.25, 29.98), "New Orleans" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -80.28, 25.82), "Miami" , pin)); labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS,-117.17, 32.72), "San Diego" , pin)); // test with an LOD: osg::LOD* lod = new osg::LOD(); lod->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, 14.68, 50.0), "Prague", pin), 0.0, 1e6); labelGroup->addChild( lod ); // absolute altitude: labelGroup->addChild( new PlaceNode(mapNode, GeoPoint(geoSRS, -87.65, 41.90, 1000, ALTMODE_ABSOLUTE), "Chicago" , pin)); } //-------------------------------------------------------------------- // a box that follows lines of latitude (rhumb line interpolation, the default) { Geometry* geom = new Polygon(); geom->push_back( osg::Vec3d(0, 40, 0) ); geom->push_back( osg::Vec3d(-60, 40, 0) ); geom->push_back( osg::Vec3d(-60, 60, 0) ); geom->push_back( osg::Vec3d(0, 60, 0) ); Style geomStyle; geomStyle.getOrCreate<LineSymbol>()->stroke()->color() = Color::Cyan; geomStyle.getOrCreate<LineSymbol>()->stroke()->width() = 5.0f; geomStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; geomStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_GPU; FeatureNode* gnode = new FeatureNode(mapNode, new Feature(geom, geoSRS, geomStyle)); annoGroup->addChild( gnode ); labelGroup->addChild( new LabelNode(mapNode, GeoPoint(geoSRS,-30, 50), "Rhumb line polygon", labelStyle) ); } //-------------------------------------------------------------------- // another rhumb box that crosses the antimeridian { Geometry* geom = new Polygon(); geom->push_back( -160., -30. ); geom->push_back( 150., -20. ); geom->push_back( 160., -45. ); geom->push_back( -150., -40. ); Style geomStyle; geomStyle.getOrCreate<LineSymbol>()->stroke()->color() = Color::Lime; geomStyle.getOrCreate<LineSymbol>()->stroke()->width() = 3.0f; geomStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; geomStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_GPU; FeatureNode* gnode = new FeatureNode(mapNode, new Feature(geom, geoSRS, geomStyle)); annoGroup->addChild( gnode ); labelGroup->addChild( new LabelNode(mapNode, GeoPoint(geoSRS, -175, -35), "Antimeridian polygon", labelStyle) ); } //-------------------------------------------------------------------- // A path using great-circle interpolation. { Geometry* path = new LineString(); path->push_back( osg::Vec3d(-74, 40.714, 0) ); // New York path->push_back( osg::Vec3d(139.75, 35.68, 0) ); // Tokyo Style pathStyle; pathStyle.getOrCreate<LineSymbol>()->stroke()->color() = Color::Red; pathStyle.getOrCreate<LineSymbol>()->stroke()->width() = 3.0f; pathStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; pathStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_GPU; Feature* pathFeature = new Feature(path, geoSRS, pathStyle); pathFeature->geoInterp() = GEOINTERP_GREAT_CIRCLE; //OE_INFO << "Path extent = " << pathFeature->getExtent().toString() << std::endl; FeatureNode* pathNode = new FeatureNode(mapNode, pathFeature); annoGroup->addChild( pathNode ); labelGroup->addChild( new LabelNode(mapNode, GeoPoint(geoSRS,-170, 61.2), "Great circle path", labelStyle) ); } //-------------------------------------------------------------------- // Two circle segments around New Orleans. { Style circleStyle; circleStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::Cyan, 0.5); circleStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; circleStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_DRAPE; CircleNode* circle = new CircleNode( mapNode, GeoPoint(geoSRS, -90.25, 29.98, 1000., ALTMODE_RELATIVE), Distance(300, Units::KILOMETERS), circleStyle, Angle(-45.0, Units::DEGREES), Angle(45.0, Units::DEGREES), true); annoGroup->addChild( circle ); editorGroup->addChild( new CircleNodeEditor( circle ) ); } { Style circleStyle; circleStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::Red, 0.5); circleStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; circleStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_DRAPE; CircleNode* circle = new CircleNode( mapNode, GeoPoint(geoSRS, -90.25, 29.98, 1000., ALTMODE_RELATIVE), Distance(300, Units::KILOMETERS), circleStyle, Angle(45.0, Units::DEGREES), Angle(360.0 - 45.0, Units::DEGREES), true); annoGroup->addChild( circle ); editorGroup->addChild( new CircleNodeEditor( circle ) ); } //-------------------------------------------------------------------- // An extruded ellipse around Miami. { Style ellipseStyle; ellipseStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::Orange, 0.75); ellipseStyle.getOrCreate<ExtrusionSymbol>()->height() = 250000.0; // meters MSL EllipseNode* ellipse = new EllipseNode( mapNode, GeoPoint(geoSRS, -80.28, 25.82, 0.0, ALTMODE_RELATIVE), Distance(250, Units::MILES), Distance(100, Units::MILES), Angle (0, Units::DEGREES), ellipseStyle, Angle(45.0, Units::DEGREES), Angle(360.0 - 45.0, Units::DEGREES), true); annoGroup->addChild( ellipse ); editorGroup->addChild( new EllipseNodeEditor( ellipse ) ); } { Style ellipseStyle; ellipseStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::Blue, 0.75); ellipseStyle.getOrCreate<ExtrusionSymbol>()->height() = 250000.0; // meters MSL EllipseNode* ellipse = new EllipseNode( mapNode, GeoPoint(geoSRS, -80.28, 25.82, 0.0, ALTMODE_RELATIVE), Distance(250, Units::MILES), Distance(100, Units::MILES), Angle (0, Units::DEGREES), ellipseStyle, Angle(-40.0, Units::DEGREES), Angle(40.0, Units::DEGREES), true); annoGroup->addChild( ellipse ); editorGroup->addChild( new EllipseNodeEditor( ellipse ) ); } //-------------------------------------------------------------------- { // A rectangle around San Diego Style rectStyle; rectStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::Green, 0.5); rectStyle.getOrCreate<AltitudeSymbol>()->clamping() = AltitudeSymbol::CLAMP_TO_TERRAIN; rectStyle.getOrCreate<AltitudeSymbol>()->technique() = AltitudeSymbol::TECHNIQUE_DRAPE; RectangleNode* rect = new RectangleNode( mapNode, GeoPoint(geoSRS, -117.172, 32.721), Distance(300, Units::KILOMETERS ), Distance(600, Units::KILOMETERS ), rectStyle); annoGroup->addChild( rect ); editorGroup->addChild( new RectangleNodeEditor( rect ) ); } //-------------------------------------------------------------------- // An extruded polygon roughly the shape of Utah. Here we demonstrate the // FeatureNode, where you create a geographic geometry and use it as an // annotation. { Geometry* utah = new Polygon(); utah->push_back( -114.052, 37.0 ); utah->push_back( -109.054, 37.0 ); utah->push_back( -109.054, 41.0 ); utah->push_back( -111.040, 41.0 ); utah->push_back( -111.080, 42.059 ); utah->push_back( -114.080, 42.024 ); Style utahStyle; utahStyle.getOrCreate<ExtrusionSymbol>()->height() = 250000.0; // meters MSL utahStyle.getOrCreate<PolygonSymbol>()->fill()->color() = Color(Color::White, 0.8); Feature* utahFeature = new Feature(utah, geoSRS, utahStyle); FeatureNode* featureNode = new FeatureNode(mapNode, utahFeature); annoGroup->addChild( featureNode ); } //-------------------------------------------------------------------- // an image overlay. { ImageOverlay* imageOverlay = 0L; osg::Image* image = osgDB::readImageFile( "../data/USFLAG.TGA" ); if ( image ) { imageOverlay = new ImageOverlay(mapNode, image); imageOverlay->setBounds( Bounds( -100.0, 35.0, -90.0, 40.0) ); annoGroup->addChild( imageOverlay ); editorGroup->addChild( new ImageOverlayEditor( imageOverlay ) ); } } //-------------------------------------------------------------------- // install decoration. These change the appearance of an Annotation // based on some user action. // highlight annotation upon hover by default: DecorationInstaller highlightInstaller("hover", new HighlightDecoration()); annoGroup->accept( highlightInstaller ); // scale labels when hovering: DecorationInstaller scaleInstaller("hover", new ScaleDecoration(1.1f)); labelGroup->accept( scaleInstaller ); // install an event handler for picking and hovering. AnnotationEventCallback* cb = new AnnotationEventCallback(); cb->addHandler( new MyAnnoEventHandler() ); annoGroup->addEventCallback( cb ); //-------------------------------------------------------------------- // initialize the viewer: viewer.setSceneData( root ); viewer.getCamera()->addCullCallback( new AutoClipPlaneCullCallback(mapNode) ); viewer.addEventHandler(new osgViewer::StatsHandler()); viewer.addEventHandler(new osgViewer::WindowSizeHandler()); viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet())); return viewer.run(); }
int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); osg::DisplaySettings::instance()->setMinimumNumStencilBits( 8 ); std::vector< std::string > imageFiles; std::vector< Bounds > imageBounds; //Read in the image files std::string filename; Bounds bounds; while (arguments.read("--image", filename, bounds.xMin(), bounds.yMin(), bounds.xMax(), bounds.yMax())) { imageFiles.push_back( filename ); imageBounds.push_back( bounds ); } if (imageFiles.empty()) { imageFiles.push_back("../data/osgearth.gif"); imageBounds.push_back( Bounds(-100, 30, -90, 40) ); } bool moveVert = arguments.read("--vert"); // load the .earth file from the command line. osg::Node* earthNode = osgDB::readNodeFiles( arguments ); if (!earthNode) return usage( "Unable to load earth model." ); osgViewer::Viewer viewer(arguments); EarthManipulator* manip = new EarthManipulator(); viewer.setCameraManipulator( manip ); osg::Group* root = new osg::Group(); root->addChild( earthNode ); //Create the control panel root->addChild( createControlPanel(&viewer) ); viewer.setSceneData( root ); osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode( earthNode ); if ( mapNode ) { for (unsigned int i = 0; i < imageFiles.size(); i++) { std::string imageFile = imageFiles[i]; //Read the image file and play it if it's a movie osg::Image* image = osgDB::readImageFile(imageFile); if (image) { osg::ImageStream* is = dynamic_cast<osg::ImageStream*>(image); if (is) { is->play(); } } //Create a new ImageOverlay and set it's bounds //ImageOverlay* overlay = new ImageOverlay(mapNode->getMap()->getProfile()->getSRS()->getEllipsoid(), image); ImageOverlay* overlay = new ImageOverlay(mapNode); overlay->setImage( image ); overlay->setBounds(imageBounds[i]); root->addChild( overlay ); //Create a new ImageOverlayEditor and set it's node mask to 0 to hide it initially #if OSG_MIN_VERSION_REQUIRED(2,9,6) osg::Node* editor = new ImageOverlayEditor( overlay); #else //Just make an empty group for pre-2.9.6 osg::Node* editor = new osg::Group; #endif editor->setNodeMask( 0 ); root->addChild( editor ); // Add an image preview ImageControl* imageCon = new ImageControl( image ); imageCon->setSize( 64, 64 ); imageCon->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 0, i, imageCon ); //Add some controls CheckBoxControl* enabled = new CheckBoxControl( true ); enabled->addEventHandler( new EnabledHandler(overlay) ); enabled->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 1, i, enabled ); //The overlay name LabelControl* name = new LabelControl( osgDB::getSimpleFileName( imageFile) ); name->setVertAlign( Control::ALIGN_CENTER ); s_layerBox->setControl( 2, i, name ); // an opacity slider HSliderControl* opacity = new HSliderControl( 0.0f, 1.0f, overlay->getAlpha() ); opacity->setWidth( 125 ); opacity->setHeight( 12 ); opacity->setVertAlign( Control::ALIGN_CENTER ); opacity->addEventHandler( new OpacityHandler(overlay) ); s_layerBox->setControl( 3, i, opacity ); // Add a text label: LabelControl* edit = new LabelControl( "Edit" ); edit->setVertAlign( Control::ALIGN_CENTER ); edit->addEventHandler(new EditHandler(overlay, &viewer, editor)); s_layerBox->setControl(4, i, edit ); } } // osgEarth benefits from pre-compilation of GL objects in the pager. In newer versions of // OSG, this activates OSG's IncrementalCompileOpeartion in order to avoid frame breaks. viewer.getDatabasePager()->setDoPreCompile( true ); // add some stock OSG handlers: viewer.addEventHandler(new osgViewer::StatsHandler()); viewer.addEventHandler(new osgViewer::WindowSizeHandler()); viewer.addEventHandler(new osgViewer::LODScaleHandler()); viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet())); viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage())); return viewer.run(); }
virtual void Hide() override { expert.FastHide(); button2.FastHide(); button1.FastHide(); }
void MacCreadySetupPanel::Show(const PixelRect &rc) { auto_mc.SetState(CommonInterface::GetComputerSettings().task.auto_mc); WindowWidget::Show(rc); }
virtual void Move(const PixelRect &rc) override { Layout layout(rc); expert.Move(layout.expert); button2.Move(layout.button2); button1.Move(layout.button1); }
int main(int argc, char** argv) { osg::ArgumentParser arguments(&argc,argv); osg::DisplaySettings::instance()->setMinimumNumStencilBits( 8 ); osgViewer::Viewer viewer(arguments); // load the .earth file from the command line. osg::Node* earthNode = MapNodeHelper().load( arguments, &viewer ); if (!earthNode) { OE_NOTICE << "Unable to load earth model." << std::endl; return 1; } MapNode* mapNode = MapNode::findMapNode( earthNode ); if ( !mapNode ) { OE_NOTICE << "Input file was not a .earth file" << std::endl; return 1; } earthNode->setNodeMask( 0x1 ); osgEarth::Util::EarthManipulator* earthManip = new EarthManipulator(); viewer.setCameraManipulator( earthManip ); osg::Group* root = new osg::Group(); root->addChild( earthNode ); //Create the MeasureToolHandler MeasureToolHandler* measureTool = new MeasureToolHandler(root, mapNode); measureTool->setIntersectionMask( 0x1 ); viewer.addEventHandler( measureTool ); //Create some controls to interact with the measuretool ControlCanvas* canvas = new ControlCanvas( &viewer ); root->addChild( canvas ); canvas->setNodeMask( 0x1 << 1 ); Grid* grid = new Grid(); grid->setBackColor(0,0,0,0.5); grid->setMargin( 10 ); grid->setPadding( 10 ); grid->setChildSpacing( 10 ); grid->setChildVertAlign( Control::ALIGN_CENTER ); grid->setAbsorbEvents( true ); grid->setVertAlign( Control::ALIGN_BOTTOM ); canvas->addControl( grid ); //Add a label to display the distance // Add a text label: grid->setControl( 0, 0, new LabelControl("Distance:") ); LabelControl* label = new LabelControl(); label->setFont( osgEarth::Registry::instance()->getDefaultFont() ); label->setFontSize( 24.0f ); label->setHorizAlign( Control::ALIGN_LEFT ); label->setText("click to measure"); grid->setControl( 1, 0, label ); //Add a callback to update the label when the distance changes measureTool->addEventHandler( new MyMeasureToolCallback(label) ); Style style = measureTool->getLineStyle(); style.getOrCreate<LineSymbol>()->stroke()->color() = Color::Red; style.getOrCreate<LineSymbol>()->stroke()->width() = 4.0f; measureTool->setLineStyle(style); //Add a checkbox to control if we are doing path based measurement or just point to point grid->setControl( 0, 1, new LabelControl("Path")); CheckBoxControl* checkBox = new CheckBoxControl(false); checkBox->setHorizAlign(Control::ALIGN_LEFT); checkBox->addEventHandler( new TogglePathHandler(measureTool)); grid->setControl( 1, 1, checkBox); //Add a toggle to set the mode of the measuring tool grid->setControl( 0, 2, new LabelControl("Great Circle")); CheckBoxControl* mode = new CheckBoxControl(true); mode->setHorizAlign(Control::ALIGN_LEFT); mode->addEventHandler( new ToggleModeHandler(measureTool)); grid->setControl( 1, 2, mode); //Add a mouse coords readout: LabelControl* mouseLabel = new LabelControl(); grid->setControl( 0, 3, new LabelControl("Mouse:")); grid->setControl( 1, 3, mouseLabel ); viewer.addEventHandler(new MouseCoordsTool(mapNode, mouseLabel) ); viewer.setSceneData( root ); // add some stock OSG handlers: viewer.addEventHandler(new osgViewer::StatsHandler()); viewer.addEventHandler(new osgViewer::WindowSizeHandler()); viewer.addEventHandler(new osgViewer::ThreadingHandler()); viewer.addEventHandler(new osgViewer::LODScaleHandler()); viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet())); viewer.addEventHandler(new osgViewer::HelpHandler(arguments.getApplicationUsage())); return viewer.run(); }
void TaskPointWidget::RefreshView() { map.Invalidate(); OrderedTaskPoint &tp = ordered_task.GetPoint(active_index); properties_dock.DeleteWidget(); ObservationZonePoint &oz = tp.GetObservationZone(); const bool is_fai_general = ordered_task.GetFactoryType() == TaskFactoryType::FAI_GENERAL; auto *properties_widget = CreateObservationZoneEditWidget(oz, is_fai_general); if (properties_widget != nullptr) { properties_widget->SetListener(this); properties_dock.SetWidget(properties_widget); } else properties_dock.SetWidget(new PanelWidget()); type_label.SetCaption(OrderedTaskPointName(ordered_task.GetFactory().GetType(tp))); previous_button->SetEnabled(active_index > 0); next_button->SetEnabled(active_index < (ordered_task.TaskSize() - 1)); optional_starts.SetVisible(active_index == 0); if (!ordered_task.HasOptionalStarts()) optional_starts.SetCaption(_("Enable Alternate Starts")); else { StaticString<50> tmp; tmp.Format(_T("%s (%d)"), _("Edit Alternates"), ordered_task.GetOptionalStartPointCount()); optional_starts.SetCaption(tmp); } if (tp.GetType() == TaskPointType::AST) { const ASTPoint &ast = (const ASTPoint &)tp; score_exit.Show(); score_exit.SetState(ast.GetScoreExit()); } else score_exit.Hide(); StaticString<100> name_prefix_buffer, type_buffer; switch (tp.GetType()) { case TaskPointType::START: type_buffer = _("Start point"); name_prefix_buffer = _T("Start: "); break; case TaskPointType::AST: type_buffer = _("Task point"); name_prefix_buffer.Format(_T("%d: "), active_index); break; case TaskPointType::AAT: type_buffer = _("Assigned area point"); name_prefix_buffer.Format(_T("%d: "), active_index); break; case TaskPointType::FINISH: type_buffer = _("Finish point"); name_prefix_buffer = _T("Finish: "); break; default: gcc_unreachable(); } dialog.SetCaption(type_buffer); { StaticString<100> buffer; buffer.Format(_T("%s %s"), name_prefix_buffer.c_str(), tp.GetWaypoint().name.c_str()); waypoint_name.SetCaption(buffer); } }
static void OnNorthUp(CheckBoxControl &control) { wdf->SetNorthUp(control.GetState()); }
static void OnAutoZoom(CheckBoxControl &control) { wdf->SetAutoZoom(control.GetState()); }
static void OnUserLevel(CheckBoxControl &control) { Profile::Set(szProfileUserLevel, control.get_checked()); wf->FilterAdvanced(control.get_checked()); }
void addLayerItem( Grid* grid, int layerIndex, int numLayers, Layer* layer, bool isActive ) { int gridCol = 0; int gridRow = grid->getNumRows(); VisibleLayer* visibleLayer = dynamic_cast<VisibleLayer*>(layer); // only show layers that derive from VisibleLayer if (!visibleLayer) return; ImageLayer* imageLayer = dynamic_cast<ImageLayer*>(layer); // don't show hidden coverage layers if (imageLayer && imageLayer->isCoverage() && !imageLayer->getVisible()) return; ElevationLayer* elevationLayer = dynamic_cast<ElevationLayer*>(layer); // a checkbox to toggle the layer's visibility: if (visibleLayer && layer->getEnabled() && !(imageLayer && imageLayer->isCoverage())) { CheckBoxControl* visibility = new CheckBoxControl( visibleLayer->getVisible() ); visibility->addEventHandler( new ToggleLayerVisibility(visibleLayer) ); grid->setControl( gridCol, gridRow, visibility ); } gridCol++; // the layer name LabelControl* name = new LabelControl( layer->getName() ); if (!layer->getEnabled()) name->setForeColor(osg::Vec4f(1,1,1,0.35)); grid->setControl( gridCol, gridRow, name ); gridCol++; // layer type std::string typeName = typeid(*layer).name(); typeName = typeName.substr(typeName.find_last_of(":")+1); LabelControl* typeLabel = new LabelControl(typeName, osg::Vec4(.5,.7,.5,1)); grid->setControl( gridCol, gridRow, typeLabel ); gridCol++; // status indicator LabelControl* statusLabel = layer->getStatus().isError() ? new LabelControl("[error]", osg::Vec4(1,0,0,1)) : !layer->getEnabled()? new LabelControl("[disabled]", osg::Vec4(1,1,1,0.35)) : new LabelControl("[ok]", osg::Vec4(0,1,0,1)) ; grid->setControl( gridCol, gridRow, statusLabel ); gridCol++; if (visibleLayer && !elevationLayer && visibleLayer->getEnabled()) { // an opacity slider HSliderControl* opacity = new HSliderControl( 0.0f, 1.0f, visibleLayer->getOpacity() ); opacity->setWidth( 125 ); opacity->setHeight( 12 ); opacity->addEventHandler( new LayerOpacityHandler(visibleLayer) ); grid->setControl( gridCol, gridRow, opacity ); } gridCol++; // zoom button if (layer->getExtent().isValid()) { LabelControl* zoomButton = new LabelControl("GO", 14); zoomButton->setBackColor( .4,.4,.4,1 ); zoomButton->setActiveColor( .8,0,0,1 ); zoomButton->addEventHandler( new ZoomLayerHandler(layer) ); grid->setControl( gridCol, gridRow, zoomButton ); } gridCol++; // move buttons if ( layerIndex < numLayers-1 && isActive ) { LabelControl* upButton = new LabelControl( "UP", 14 ); upButton->setBackColor( .4,.4,.4,1 ); upButton->setActiveColor( .8,0,0,1 ); upButton->addEventHandler( new MoveLayerHandler( layer, layerIndex+1 ) ); grid->setControl( gridCol, gridRow, upButton ); } gridCol++; if ( layerIndex > 0 && isActive) { LabelControl* upButton = new LabelControl( "DOWN", 14 ); upButton->setBackColor( .4,.4,.4,1 ); upButton->setActiveColor( .8,0,0,1 ); upButton->addEventHandler( new MoveLayerHandler( layer, layerIndex-1 ) ); grid->setControl( gridCol, gridRow, upButton ); } gridCol++; // add/remove button: LabelControl* addRemove = new LabelControl( isActive? "REMOVE" : "ADD", 14 ); addRemove->setHorizAlign( Control::ALIGN_CENTER ); addRemove->setBackColor( .4,.4,.4,1 ); addRemove->setActiveColor( .8,0,0,1 ); addRemove->addEventHandler( new RemoveLayerHandler(layer) ); grid->setControl( gridCol, gridRow, addRemove ); gridCol++; // enable/disable button LabelControl* enableDisable = new LabelControl(layer->getEnabled() ? "DISABLE" : "ENABLE", 14); enableDisable->setHorizAlign( Control::ALIGN_CENTER ); enableDisable->setBackColor( .4,.4,.4,1 ); enableDisable->setActiveColor( .8,0,0,1 ); enableDisable->addEventHandler( new EnableDisableHandler(layer) ); grid->setControl( gridCol, gridRow, enableDisable ); gridCol++; if (layer->getStatus().isError()) { grid->setControl(gridCol, gridRow, new LabelControl(layer->getStatus().message(), osg::Vec4(1,.2,.2,1))); } }