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
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit