option.hh
Go to the documentation of this file.
00001 #ifndef _OPTION_H_
00002 #define _OPTION_H_
00003 
00004 #include <string>
00005 #include "worldfile.hh"
00006 
00007 #include <FL/Fl_Menu_Bar.H>
00008 #include <FL/Fl_Menu_Item.H>
00009 
00010 namespace Stg {
00011     class World;
00019     class Option {
00020     private:
00021         friend bool compare( const Option* lhs, const Option* rhs );
00022 
00023         std::string optName;
00024         bool value;
00026         std::string wf_token; 
00027         std::string shortcut;
00028         Fl_Menu_* menu;
00029         int menuIndex;
00030         Fl_Callback* menuCb;
00031         Fl_Widget* menuCbWidget;
00032         World* _world;
00033       
00034     public:
00035         Option( const std::string& n, 
00036                         const std::string& tok,
00037                         const std::string& key, 
00038                         bool v, 
00039                         World *world );   
00040 
00041         const std::string name() const { return optName; }
00042         inline bool isEnabled() const { return value; }
00043         inline bool val() const { return value; }
00044         inline operator bool() { return val(); }
00045         inline bool operator<( const Option& rhs ) const
00046             {
00047               puts( "comparing" );
00048               return optName<rhs.optName; 
00049             } 
00050         void set( bool val );
00051         void invert() { set( !value ); }
00052 
00053 //      // Comparator to dereference Option pointers and compare their strings
00054 //      struct optComp {
00055 //          inline bool operator()( const Option* a, const Option* b ) const
00056 //          //{ return lhs->operator<(*rhs); } 
00057 //              { return a->optName < b->optName; } 
00058 //      };
00059 
00060 
00061         void createMenuItem( Fl_Menu_Bar* menu, std::string path );
00062         void menuCallback( Fl_Callback* cb, Fl_Widget* w );
00063         static void toggleCb( Fl_Widget* w, void* p );
00064         void Load( Worldfile* wf, int section );
00065         void Save( Worldfile* wf, int section );      
00066 
00067         std::string htname;
00068     };
00069 }
00070     
00071 #endif