Revision: 6704 http://playerstage.svn.sourceforge.net/playerstage/?rev=6704&view=rev Author: jeremy_asher Date: 2008-06-27 14:10:16 -0700 (Fri, 27 Jun 2008)
Log Message: ----------- Options registration system, allows instance level options, updating of options list on world load Modified Paths: -------------- code/stage/trunk/libstage/model.cc code/stage/trunk/libstage/model_camera.cc code/stage/trunk/libstage/model_laser.cc code/stage/trunk/libstage/option.hh code/stage/trunk/libstage/options_dlg.cc code/stage/trunk/libstage/stage.hh code/stage/trunk/libstage/worldgui.cc Modified: code/stage/trunk/libstage/model.cc =================================================================== --- code/stage/trunk/libstage/model.cc 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/model.cc 2008-06-27 21:10:16 UTC (rev 6704) @@ -238,6 +238,13 @@ // now we can add the basic square shape this->AddBlockRect( -0.5,-0.5,1,1 ); + + + RegisterOption( &ShowFlags ); + RegisterOption( &ShowFlags ); + RegisterOption( &ShowVisData ); + RegisterOption( &ShowBlinken ); + RegisterOption( &ShowStatus ); PRINT_DEBUG2( "finished model %s @ %p", this->token, this ); @@ -1719,15 +1726,3 @@ return mod; } - -const std::vector<Option*> StgModel::getOptions() { - std::vector<Option*> drawOptions; - drawOptions.push_back( &ShowFlags ); - drawOptions.push_back( &ShowVisData ); - drawOptions.push_back( &ShowBlinken ); - drawOptions.push_back( &ShowStatus ); - - return drawOptions; -} - - Modified: code/stage/trunk/libstage/model_camera.cc =================================================================== --- code/stage/trunk/libstage/model_camera.cc 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/model_camera.cc 2008-06-27 21:10:16 UTC (rev 6704) @@ -69,6 +69,8 @@ memset( &geom, 0, sizeof(geom)); // no size //TODO can't draw this as it blocks the laser SetGeom( geom ); + + RegisterOption( &ShowCamera ); Startup(); } @@ -288,11 +290,3 @@ { StgModel::Draw( flags, canvas ); } - - -const std::vector<Option*> StgModelCamera::getOptions() { - std::vector<Option*> drawOptions; - drawOptions.push_back( &ShowCamera ); - - return drawOptions; -} \ No newline at end of file Modified: code/stage/trunk/libstage/model_laser.cc =================================================================== --- code/stage/trunk/libstage/model_laser.cc 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/model_laser.cc 2008-06-27 21:10:16 UTC (rev 6704) @@ -102,6 +102,8 @@ // don't allocate sample buffer memory until Update() is called samples = NULL; + + RegisterOption( &ShowLaserData ); } @@ -359,10 +361,3 @@ glDepthMask( GL_TRUE ); glPopMatrix(); } - -const std::vector<Option*> StgModelLaser::getOptions() { - std::vector<Option*> drawOptions; - drawOptions.push_back( &ShowLaserData ); - - return drawOptions; -} Modified: code/stage/trunk/libstage/option.hh =================================================================== --- code/stage/trunk/libstage/option.hh 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/option.hh 2008-06-27 21:10:16 UTC (rev 6704) @@ -2,11 +2,15 @@ #define _OPTION_H_ #include <string> +#include <iostream> namespace Stg { class Option { private: + friend bool compare( const Option* lhs, const Option* rhs ); + friend std::ostream& operator<<( std::ostream& os, const Option& opt ); + std::string optName; bool value; public: @@ -17,10 +21,17 @@ inline operator bool() { return val(); } inline bool operator<( const Option& rhs ) const { return optName<rhs.optName; } - friend bool compare( const Option* lhs, const Option* rhs ); void set( bool val ) { value = val; } }; +// std::ostream& operator<<( std::ostream& os, const Option& opt ) { +// os<<opt.optName; +// os<<": "; +// os<<opt.value; +// return os; +// } +// + // Comparator to dereference Option pointers and compare their strings struct optComp { inline bool operator()( const Option* lhs, const Option* rhs ) const { return lhs->operator<(*rhs); } Modified: code/stage/trunk/libstage/options_dlg.cc =================================================================== --- code/stage/trunk/libstage/options_dlg.cc 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/options_dlg.cc 2008-06-27 21:10:16 UTC (rev 6704) @@ -4,7 +4,7 @@ namespace Stg { OptionsDlg::OptionsDlg( int x, int y, int w, int h ) : - Fl_Window( x,y, w,h, "Model Options" ), + Fl_Window( x,y, w,h, "Sensor Options" ), changedItem( NULL ), showAll( NULL ), status( NO_EVENT ), @@ -69,7 +69,8 @@ void OptionsDlg::updateChecks() { - scroll->clear(); + if (scroll->children()) + scroll->clear(); scroll->begin(); Fl_Check_Button* check; for ( unsigned int i=0; i<options.size(); i++ ) { Modified: code/stage/trunk/libstage/stage.hh =================================================================== --- code/stage/trunk/libstage/stage.hh 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/stage.hh 2008-06-27 21:10:16 UTC (rev 6704) @@ -1166,6 +1166,7 @@ static GHashTable* modelsbyid; // Draw options + std::vector<Option*> drawOptions; static Option ShowFlags; static Option ShowVisData; static Option ShowBlinken; @@ -1239,7 +1240,9 @@ int gui_outline; int gui_mask; + void RegisterOption( Option* opt ) { drawOptions.push_back( opt ); } + StgModel* parent; //< the model that owns this one, possibly NULL /** GData datalist can contain arbitrary named data items. Can be used @@ -1709,7 +1712,7 @@ // iff true, model may output some debugging visualizations and other info bool debug; - virtual const std::vector<Option*> getOptions(); + const std::vector<Option*>& getOptions() const { return drawOptions; } }; // BLOCKS @@ -2014,6 +2017,8 @@ StgCanvas* canvas; Fl_Menu_Bar* mbar; OptionsDlg* oDlg; + std::vector<Option*> drawOptions; + void updateOptions(); stg_usec_t interval_log[INTERVAL_LOG_LEN]; stg_usec_t real_time_of_last_update; @@ -2254,8 +2259,6 @@ // Set the user-tweakable configuration of the laser void SetConfig( stg_laser_cfg_t cfg ); - - virtual const std::vector<Option*> getOptions(); }; // \todo GRIPPER MODEL -------------------------------------------------------- @@ -2544,8 +2547,6 @@ ///get a reference to camera color image. 3 bytes (RGB) per pixel inline const GLubyte* FrameColor() const { return _frame_color_data; } - - virtual const std::vector<Option*> getOptions(); }; // POSITION MODEL -------------------------------------------------------- Modified: code/stage/trunk/libstage/worldgui.cc =================================================================== --- code/stage/trunk/libstage/worldgui.cc 2008-06-27 18:43:35 UTC (rev 6703) +++ code/stage/trunk/libstage/worldgui.cc 2008-06-27 21:10:16 UTC (rev 6704) @@ -110,7 +110,7 @@ #include <set> -static const char* MITEM_VIEW_DATA = "&View/&Data"; +static const char* MITEM_VIEW_DATA = "&View/&Display Sensor Data"; static const char* MITEM_VIEW_BLOCKS = "&View/&Blocks"; static const char* MITEM_VIEW_GRID = "&View/&Grid"; static const char* MITEM_VIEW_OCCUPANCY = "&View/&Occupancy"; @@ -162,6 +162,7 @@ mbar->add( "&View", 0, 0, 0, FL_SUBMENU ); mbar->add( MITEM_VIEW_DATA, 'd', StgWorldGui::viewToggleCb, canvas, FL_MENU_TOGGLE| (canvas->showflags & STG_SHOW_DATA ? FL_MENU_VALUE : 0 )); + mbar->add( "View/&Sensor options...", FL_CTRL + 'o', StgWorldGui::viewOptionsCb, this, FL_MENU_DIVIDER ); mbar->add( MITEM_VIEW_BLOCKS, 'b', StgWorldGui::viewToggleCb, canvas, FL_MENU_TOGGLE| (canvas->showflags & STG_SHOW_BLOCKS ? FL_MENU_VALUE : 0 )); mbar->add( MITEM_VIEW_GRID, 'g', StgWorldGui::viewToggleCb, canvas, @@ -187,13 +188,14 @@ mbar->add( MITEM_VIEW_BLOCKSRISING, FL_CTRL+'t', StgWorldGui::viewToggleCb, canvas, FL_MENU_TOGGLE| (canvas->showflags & STG_SHOW_TRAILRISE ? FL_MENU_VALUE : 0 )); - mbar->add( "View/&Options", FL_CTRL + 'o', StgWorldGui::viewOptionsCb, this ); + mbar->add( "&Help", 0, 0, 0, FL_SUBMENU ); mbar->add( "Help/&About Stage...", 0, StgWorldGui::helpAboutCb, this ); //mbar->add( "Help/HTML Documentation", FL_CTRL + 'g', (Fl_Callback *)dummy_cb ); callback( StgWorldGui::windowCb, this ); + show(); } @@ -207,7 +209,6 @@ - void StgWorldGui::Load( const char* filename ) { PRINT_DEBUG1( "%s.Load()", token ); @@ -292,7 +293,7 @@ item = (Fl_Menu_Item*)mbar->find_item( MITEM_VIEW_STATUS ); (flags & STG_SHOW_STATUS) ? item->check() : item->clear(); - + updateOptions(); // TODO - per model visualizations load } @@ -550,13 +551,6 @@ void StgWorldGui::viewOptionsCb( Fl_Widget* w, void* p ) { StgWorldGui* worldGui = static_cast<StgWorldGui*>( p ); - - std::set<Option*, optComp> options; - std::vector<Option*> modOpts; - for( GList* it=worldGui->update_list; it; it=it->next ) { - modOpts = ((StgModel*)it->data)->getOptions(); - options.insert( modOpts.begin(), modOpts.end() ); - } if ( !worldGui->oDlg ) { int x = worldGui->w()+worldGui->x() + 10; @@ -564,7 +558,7 @@ OptionsDlg* oDlg = new OptionsDlg( x,y, 180,250 ); oDlg->callback( optionsDlgCb, worldGui ); oDlg->showAllOpt( &worldGui->ShowAll ); - oDlg->setOptions( options ); + oDlg->setOptions( worldGui->drawOptions ); oDlg->show(); worldGui->oDlg = oDlg; @@ -606,7 +600,7 @@ // instance before the dialog is destroyed worldGui->oDlg = NULL; oDlg->hide(); - Fl::delete_widget( oDlg ); + //Fl::delete_widget( oDlg ); return; case OptionsDlg::NO_EVENT: case OptionsDlg::CHANGE_ALL: @@ -743,3 +737,18 @@ return true; } } + +void StgWorldGui::updateOptions() { + std::set<Option*, optComp> options; + std::vector<Option*> modOpts; + for( GList* it=update_list; it; it=it->next ) { + modOpts = ((StgModel*)it->data)->getOptions(); + options.insert( modOpts.begin(), modOpts.end() ); + } + + drawOptions.assign( options.begin(), options.end() ); + + if ( oDlg ) { + oDlg->setOptions( drawOptions ); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ Playerstage-commit mailing list Playerstage-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/playerstage-commit