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

Reply via email to