Revision: 6697
http://playerstage.svn.sourceforge.net/playerstage/?rev=6697&view=rev
Author: jeremy_asher
Date: 2008-06-26 15:40:34 -0700 (Thu, 26 Jun 2008)
Log Message:
-----------
More Option/OptionDlg updates
Modified Paths:
--------------
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstage/option.hh
code/stage/trunk/libstage/options_dlg.cc
code/stage/trunk/libstage/options_dlg.hh
code/stage/trunk/libstage/stage.hh
code/stage/trunk/libstage/world.cc
code/stage/trunk/libstage/worldgui.cc
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-06-26 21:04:18 UTC (rev 6696)
+++ code/stage/trunk/libstage/model.cc 2008-06-26 22:40:34 UTC (rev 6697)
@@ -162,7 +162,6 @@
this->parent = parent;
this->world = world;
- this->debug = false;
this->type = type;
this->id = StgModel::count++; // assign a unique ID and increment
// the global model counter
@@ -1003,7 +1002,7 @@
if( gui_grid && (flags & STG_SHOW_GRID) )
DrawGrid();
- if( ShowFlags )
+ if( flag_list && ShowFlags )
DrawFlagList();
if( ShowBlinken )
Modified: code/stage/trunk/libstage/option.hh
===================================================================
--- code/stage/trunk/libstage/option.hh 2008-06-26 21:04:18 UTC (rev 6696)
+++ code/stage/trunk/libstage/option.hh 2008-06-26 22:40:34 UTC (rev 6697)
@@ -10,11 +10,10 @@
std::string optName;
bool value;
public:
- Option() { }
Option( std::string n, bool v ) : optName( n ), value( v ) { }
Option( const Option& o ) : optName( o.optName ), value(
o.value ) { }
const std::string name() const { return optName; }
- inline const bool val() const { return value; }
+ inline bool val() const { return value; }
inline operator bool() { return val(); }
inline bool operator<( const Option& rhs ) const
{ return optName<rhs.optName; }
Modified: code/stage/trunk/libstage/options_dlg.cc
===================================================================
--- code/stage/trunk/libstage/options_dlg.cc 2008-06-26 21:04:18 UTC (rev
6696)
+++ code/stage/trunk/libstage/options_dlg.cc 2008-06-26 22:40:34 UTC (rev
6697)
@@ -4,22 +4,29 @@
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, "Model Options" ),
changedItem( NULL ),
+ showAll( NULL ),
status( NO_EVENT ),
hm( w/6 ) {
- scroll = new Fl_Scroll( 0, 0, w, h-btnH-2*vm );
+ showAllCheck = new Fl_Check_Button( 0,0, w,boxH );
+ showAllCheck->callback( checkChanged, this );
+ showAllCheck->deactivate();
+
+ scroll = new Fl_Scroll( 0,boxH+vm, w,h-boxH-btnH-3*vm );
scroll->type( Fl_Scroll::VERTICAL );
scroll->end();
+
- button = new Fl_Button( hm, h-btnH-vm, w-2*hm, btnH, "Apply to
all" );
- button->callback( applyAllPress, this );
+ button = new Fl_Button( hm, h-btnH-vm, w-2*hm, btnH, "&Close" );
+ button->callback( closePress, this );
this->end();
}
OptionsDlg::~OptionsDlg() {
delete button;
delete scroll; // deletes members
+ delete showAllCheck;
}
@@ -27,19 +34,27 @@
Fl_Check_Button* check = static_cast<Fl_Check_Button*>( w );
OptionsDlg* oDlg = static_cast<OptionsDlg*>( p );
- int item = oDlg->scroll->find( check );
- oDlg->options[ item ]->set( check->value() );
- oDlg->changedItem = oDlg->options[ item ];
- oDlg->status = CHANGE;
- oDlg->do_callback();
- oDlg->changedItem = NULL;
- oDlg->status = NO_EVENT;
+ if ( check == oDlg->showAllCheck && oDlg->showAll ) {
+ oDlg->status = CHANGE_ALL;
+ oDlg->showAll->set( check->value() );
+ oDlg->do_callback();
+ oDlg->status = NO_EVENT;
+ }
+ else {
+ int item = oDlg->scroll->find( check );
+ oDlg->options[ item ]->set( check->value() );
+ oDlg->changedItem = oDlg->options[ item ];
+ oDlg->status = CHANGE;
+ oDlg->do_callback();
+ oDlg->changedItem = NULL;
+ oDlg->status = NO_EVENT;
+ }
}
- void OptionsDlg::applyAllPress( Fl_Widget* w, void* p ) {
+ void OptionsDlg::closePress( Fl_Widget* w, void* p ) {
OptionsDlg* oDlg = static_cast<OptionsDlg*>( p );
- oDlg->status = CHANGE_ALL;
+ oDlg->status = CLOSE;
oDlg->do_callback();
oDlg->status = NO_EVENT;
}
@@ -77,5 +92,11 @@
options.insert( options.begin(), opts.begin(), opts.end() );
updateChecks();
}
+
+ void OptionsDlg::showAllOpt( Option* opt ) {
+ showAll = opt;
+ showAllCheck->label( opt->name().c_str() );
+ showAllCheck->value( opt->val() );
+ }
} // namespace Stg
\ No newline at end of file
Modified: code/stage/trunk/libstage/options_dlg.hh
===================================================================
--- code/stage/trunk/libstage/options_dlg.hh 2008-06-26 21:04:18 UTC (rev
6696)
+++ code/stage/trunk/libstage/options_dlg.hh 2008-06-26 22:40:34 UTC (rev
6697)
@@ -16,22 +16,24 @@
class OptionsDlg : protected Fl_Window {
public:
- enum event_t { NO_EVENT, CHANGE, CHANGE_ALL };
+ enum event_t { NO_EVENT, CHANGE, CHANGE_ALL, CLOSE };
private:
std::vector<Option*> options;
Option* changedItem;
+ Option* showAll;
event_t status;
Fl_Scroll* scroll;
Fl_Button* button;
+ Fl_Check_Button* showAllCheck;
void updateChecks();
virtual int handle( int event );
static void checkChanged( Fl_Widget* w, void* p );
- static void applyAllPress( Fl_Widget* w, void* p );
+ static void closePress( Fl_Widget* w, void* p );
// constants
- static const int vm = 2;
+ static const int vm = 4;
const int hm;
static const int btnH = 25;
static const int boxH = 30;
@@ -46,6 +48,7 @@
void setOptions( const std::vector<Option*>& opts );
void setOptions( const std::set<Option*, optComp>& opts );
void clearOptions() { options.clear(); }
+ void showAllOpt( Option* opt );
const event_t event() const { return status; }
Option* changed() { return changedItem; }
};
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2008-06-26 21:04:18 UTC (rev 6696)
+++ code/stage/trunk/libstage/stage.hh 2008-06-26 22:40:34 UTC (rev 6697)
@@ -870,7 +870,7 @@
//GHashTable* child_types;
- char* token;
+ char* token;
bool debug;
public:
@@ -2015,6 +2015,8 @@
stg_usec_t real_time_of_last_update;
stg_usec_t interval_real; ///< real-time interval between updates - set
this to zero for 'as fast as possible
+
+ Option ShowAll;
public:
static const stg_msec_t DEFAULT_INTERVAL_REAL = 100; ///< real time between
updates
Modified: code/stage/trunk/libstage/world.cc
===================================================================
--- code/stage/trunk/libstage/world.cc 2008-06-26 21:04:18 UTC (rev 6696)
+++ code/stage/trunk/libstage/world.cc 2008-06-26 22:40:34 UTC (rev 6697)
@@ -113,9 +113,9 @@
this->ray_list = NULL;
this->quit_time = 0;
- assert(token);
- this->token = (char*)g_malloc(Stg::TOKEN_MAX);
- snprintf( this->token, Stg::TOKEN_MAX, "%s", token );//this->id );
+ //assert(token);
+ //this->token = (char*)g_malloc(Stg::TOKEN_MAX);
+ //snprintf( this->token, Stg::TOKEN_MAX, "%s", token );//this->id );
this->quit = false;
this->updates = 0;
@@ -333,9 +333,7 @@
g_hash_table_foreach( superregions, (GHFunc)destroy_sregion, NULL );
g_hash_table_remove_all( superregions );
- g_free( token );
- this->token = (char*)g_malloc(Stg::TOKEN_MAX); // necessary?
-
+ token = NULL;
}
stg_usec_t StgWorld::RealTimeNow()
Modified: code/stage/trunk/libstage/worldgui.cc
===================================================================
--- code/stage/trunk/libstage/worldgui.cc 2008-06-26 21:04:18 UTC (rev
6696)
+++ code/stage/trunk/libstage/worldgui.cc 2008-06-26 22:40:34 UTC (rev
6697)
@@ -132,7 +132,8 @@
-StgWorldGui::StgWorldGui(int W,int H,const char* L) : Fl_Window(W,H,L)
+StgWorldGui::StgWorldGui(int W,int H,const char* L) : Fl_Window(W,H,L),
+ShowAll( "Visualize all models", true )
{
//size_range( 100,100 ); // set minimum window size
oDlg = NULL;
@@ -550,7 +551,6 @@
void StgWorldGui::viewOptionsCb( Fl_Widget* w, void* p ) {
StgWorldGui* worldGui = static_cast<StgWorldGui*>( p );
-// std::set<Option*, bool(*)(const Option*,const Option*)> options(
compare );
std::set<Option*, optComp> options;
std::vector<Option*> modOpts;
for( GList* it=worldGui->update_list; it; it=it->next ) {
@@ -558,17 +558,12 @@
options.insert( modOpts.begin(), modOpts.end() );
}
-// std::vector<Option> options;
-// std::set<Option*>::iterator it;
-// for( it=optSet.begin(); it!=optSet.end(); it++ ) {
-// options.push_back( **it );
-// }
-
if ( !worldGui->oDlg ) {
- OptionsDlg* oDlg = new OptionsDlg( 0, 0, 180, 250 );
- // TODO - move initial coords to right edge of window
- //printf("width: %d\n", worldGui->w());
+ int x = worldGui->w()+worldGui->x() + 10;
+ int y = worldGui->y();
+ OptionsDlg* oDlg = new OptionsDlg( x,y, 180,250 );
oDlg->callback( optionsDlgCb, worldGui );
+ oDlg->showAllOpt( &worldGui->ShowAll );
oDlg->setOptions( options );
oDlg->show();
@@ -583,32 +578,39 @@
OptionsDlg* oDlg = static_cast<OptionsDlg*>( w );
StgWorldGui* worldGui = static_cast<StgWorldGui*>( p );
+ // get event from dialog
+ OptionsDlg::event_t event;
+ event = oDlg->event();
+
+ // Check FLTK events first
switch ( Fl::event() ) {
case FL_SHORTCUT:
if ( Fl::event_key() != FL_Escape )
- break;
+ break; //return
// otherwise, ESC pressed-> do as below
case FL_CLOSE: // clicked close button
+ // override event to close
+ event = OptionsDlg::CLOSE;
+ break;
+ }
+
+ switch ( event ) {
+ case OptionsDlg::CHANGE:
+ {
+ //Option* o = oDlg->changed();
+ //printf( "\"%s\" changed to %d!\n", o->name().c_str(),
o->val() );
+ break;
+ }
+ case OptionsDlg::CLOSE:
// invalidate the oDlg pointer from the WorldGui
// instance before the dialog is destroyed
worldGui->oDlg = NULL;
oDlg->hide();
Fl::delete_widget( oDlg );
- return;
- default:
- switch ( oDlg->event() ) {
- case OptionsDlg::CHANGE:
- {
- //Option* o = oDlg->changed();
- //printf( "\"%s\" changed to %d!\n",
o->name().c_str(), o->val() );
- break;
- }
- case OptionsDlg::CHANGE_ALL:
- break;
- case OptionsDlg::NO_EVENT:
- break;
- }
-
+ return;
+ case OptionsDlg::NO_EVENT:
+ case OptionsDlg::CHANGE_ALL:
+ break;
}
}
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit