Revision: 6647 http://playerstage.svn.sourceforge.net/playerstage/?rev=6647&view=rev Author: jeremy_asher Date: 2008-06-19 14:49:14 -0700 (Thu, 19 Jun 2008)
Log Message: ----------- Updated Options framework Modified Paths: -------------- code/stage/trunk/libstage/options_dlg.cc code/stage/trunk/libstage/options_dlg.hh code/stage/trunk/libstage/stage.hh code/stage/trunk/libstage/worldgui.cc Modified: code/stage/trunk/libstage/options_dlg.cc =================================================================== --- code/stage/trunk/libstage/options_dlg.cc 2008-06-19 16:13:34 UTC (rev 6646) +++ code/stage/trunk/libstage/options_dlg.cc 2008-06-19 21:49:14 UTC (rev 6647) @@ -1,12 +1,56 @@ #include "options_dlg.hh" #include <FL/Fl.H> -OptionsDlg::OptionsDlg( std::vector<Option> options ) : Fl_Window( 180, 250, "Options" ) { - end(); + +OptionsDlg::OptionsDlg( const std::vector<Option>& opts, Fl_Callback* cb, int w, int h ) : +Fl_Window( w, h, "Options" ), +options( opts ), +changedCb( cb ) { + const int hm = w/6; + const int vm = 2; + const int btnH = 25; + + scroll = new Fl_Scroll( 0, 0, w, h-btnH-2*vm ); + scroll->type( Fl_Scroll::VERTICAL ); + + Fl_Check_Button* check; + for ( unsigned int i=0; i<options.size(); i++ ) { + check = new Fl_Check_Button( 0,30*i, w, 30, options[ i ].name().c_str() ); + if ( options[ i ].val() ) + check->set(); + check->callback( checkChanged, this ); + } + scroll->end(); + + button = new Fl_Button( hm, h-btnH-vm, w-2*hm, btnH, "Apply to all" ); + button->callback( applyAllPress, this ); + this->end(); } +OptionsDlg::~OptionsDlg() { + delete button; + delete scroll; // deletes members +} + void OptionsDlg::display() { Fl_Window::show(); while ( shown() ) Fl::wait(); } + +void OptionsDlg::checkChanged( Fl_Widget* w, void* p ) { + 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->changedCb( oDlg, NULL ); +} + +void OptionsDlg::applyAllPress( Fl_Widget* w, void* p ) { + OptionsDlg* oDlg = static_cast<OptionsDlg*>( p ); + + oDlg->changedItem = Option( -1, "", false ); + oDlg->changedCb( oDlg, NULL ); +} Modified: code/stage/trunk/libstage/options_dlg.hh =================================================================== --- code/stage/trunk/libstage/options_dlg.hh 2008-06-19 16:13:34 UTC (rev 6646) +++ code/stage/trunk/libstage/options_dlg.hh 2008-06-19 21:49:14 UTC (rev 6647) @@ -2,6 +2,9 @@ #define _OPTIONS_DLG_H_ #include <FL/Fl_Window.H> +#include <FL/Fl_Scroll.H> +#include <FL/Fl_Check_Button.H> +#include <FL/Fl_Button.H> #include <string> #include <vector> @@ -9,21 +12,36 @@ class Option { private: - std::string name; + std::string optName; bool value; + int index; public: - Option( std::string n, bool v ) : name(n), value(v) { } - inline const bool get() const { return value; } - inline void set( bool val ) { value = val; } + Option() { } + Option( int i, std::string n, bool v ) : index( i ), optName( n ), value( v ) { } + Option( const Option& o ) : index( o.index ), optName( o.optName ), value( o.value ) { } + const std::string name() const { return optName; } + const int id() const { return index; } + const bool val() const { return value; } + void set( bool val ) { value = val; } }; -class OptionsDlg : private Fl_Window { +class OptionsDlg : protected Fl_Window { private: + std::vector<Option> options; + Fl_Scroll* scroll; + Fl_Button* button; + Fl_Callback* changedCb; + static void checkChanged( Fl_Widget* w, void* p ); + static void applyAllPress( Fl_Widget* w, void* p ); + Option changedItem; public: - OptionsDlg( std::vector<Option> options ); - - void display(); + OptionsDlg( const std::vector<Option>& opts, Fl_Callback* cb, int w, int h ); + //void setChangeCb( Fl_Callback* cb ) { changedCb=cb; } + virtual ~OptionsDlg(); + void display(); + + const Option changed() const { return changedItem; } }; -#endif \ No newline at end of file +#endif Modified: code/stage/trunk/libstage/stage.hh =================================================================== --- code/stage/trunk/libstage/stage.hh 2008-06-19 16:13:34 UTC (rev 6646) +++ code/stage/trunk/libstage/stage.hh 2008-06-19 21:49:14 UTC (rev 6647) @@ -76,6 +76,7 @@ #endif #include "file_manager.hh" +#include "options_dlg.hh" /** The Stage library uses its own namespace */ namespace Stg @@ -2037,7 +2038,8 @@ static void HelpAboutCallback( Fl_Widget* wid ); static void view_toggle_cb( Fl_Menu_Bar* menubar, StgCanvas* canvas ); static void WindowCallback( Fl_Widget* wid, StgWorldGui* world ); - static void optionsDlgCb( Fl_Widget*, StgCanvas* canvas ); + static void optionsDlgCb( Fl_Widget* w, StgCanvas* canvas ); + static void optionChangeCb( Fl_Widget* w, void* p ); bool SaveAsDialog(); bool CloseWindowQuery(); Modified: code/stage/trunk/libstage/worldgui.cc =================================================================== --- code/stage/trunk/libstage/worldgui.cc 2008-06-19 16:13:34 UTC (rev 6646) +++ code/stage/trunk/libstage/worldgui.cc 2008-06-19 21:49:14 UTC (rev 6647) @@ -105,8 +105,6 @@ #include <FL/Fl_Text_Display.H> #include <FL/Fl_File_Chooser.H> -#include "file_manager.hh" -#include "options_dlg.hh" static const char* MITEM_VIEW_DATA = "&View/&Data"; static const char* MITEM_VIEW_BLOCKS = "&View/&Blocks"; @@ -506,12 +504,25 @@ //printf( "value: %d\n", item->value() ); } -void StgWorldGui::optionsDlgCb( Fl_Widget*, StgCanvas* canvas ) { +void StgWorldGui::optionsDlgCb( Fl_Widget* w, StgCanvas* canvas ) { std::vector<Option> options; - OptionsDlg od( options ); - od.display(); + for (int i=0; i<10; i++) { + Option o( i, "Option", i%2*true ); + options.push_back(o); + } + + + OptionsDlg oDlg( options, optionChangeCb, 180, 250 ); + oDlg.display(); } +void StgWorldGui::optionChangeCb( Fl_Widget* w, void* p ) { + OptionsDlg* oDlg = static_cast<OptionsDlg*>( w ); + Option o = oDlg->changed(); + printf( "\"%s\"[%d] changed to %d!\n", o.name().c_str(), o.id(), o.val() ); + // update flag(s) +} + void StgWorldGui::About_cb( Fl_Widget*, StgWorldGui* world ) { fl_register_images(); 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