00001
00002
00003
00004
00005 #ifndef __GUI_H
00006 #define __GUI_H
00007
00008 #include "gui/Command.h"
00009
00010 namespace gui { class SceneControl; }
00011
00012 #include <iostream>
00013
00014 namespace gui {
00015
00016 class GUI
00017
00018
00019
00020
00021
00022 {
00023 public:
00024 virtual ~GUI();
00025
00026 virtual void addToMenu(const char* title, Command* command);
00027
00028
00029
00030 class Toggle : public Command
00031
00032
00033
00034
00035 {
00036 public:
00037 void set() { if(!state()) execute();}
00038 void unset(){ if( state()) execute();}
00039 virtual bool state()const=0;
00040 };
00041
00042 virtual Toggle* addToggleToMenu(const char* title, bool state, Command* set, Command* unset);
00043
00044
00045
00046 class Menu;
00047
00048 virtual Menu* beginPullDownMenu(const char* title, Menu* m=0);
00049
00050
00051
00052
00053 virtual void restorePullDownMenu(Menu* m);
00054
00055
00056 virtual void endPullDownMenu();
00057
00058
00059 virtual void menuSeparator();
00060
00061
00062 virtual gui::SceneControl* graphicsWindow(float size=100, int initial_view=1)=0;
00063
00064
00065
00066 virtual std::ostream* textWindow(const char*)=0;
00067
00068
00069 virtual void start();
00070 virtual void run(int pause_interval=-1);
00071
00072
00073 virtual void quit();
00074
00075
00076 virtual void setTitle(const char* newtitle);
00077
00078
00079 virtual void processMessages();
00080
00081
00082 virtual char * askForFileName(const char* a, const char* b, const char* c);
00083
00084
00085 virtual char * askUser(const char* promptString,const char* defaultString);
00086
00087
00088 virtual void inform(const char* msg);
00089
00090
00091 static GUI* createGUI(const char* appname=0, const char* title=0);
00092
00093
00094
00095 static GUI* instance(GUI* i=0);
00096 static bool running;
00097
00098 protected:
00099 GUI(const char* title);
00100 const char* _winTitle;
00101 private:
00102 static GUI* s_instance;
00103
00104 };
00105
00106 inline GUI::GUI(const char* title):_winTitle(title){}
00107 inline GUI::~GUI(){}
00108 inline void GUI::addToMenu(const char* , Command* ){}
00109 inline GUI::Toggle* GUI::addToggleToMenu(const char*, bool, Command*, Command* ){return 0;}
00110 inline GUI::Menu* GUI::beginPullDownMenu(const char*, GUI::Menu*){return 0;}
00111 inline void GUI::restorePullDownMenu(GUI::Menu* ){}
00112 inline void GUI::endPullDownMenu(){}
00113 inline void GUI::menuSeparator(){}
00114 inline void GUI::start(){}
00115 inline void GUI::run(int){}
00116 inline void GUI::quit(){}
00117 inline void GUI::setTitle(const char*){}
00118 inline void GUI::processMessages(){}
00119 inline char * GUI::askForFileName(const char*, const char*, const char* ){return 0;}
00120 inline char * GUI::askUser(const char* ,const char* ){return 0;}
00121 inline void GUI::inform(const char* ){}
00122
00123
00124 }
00125
00126 #endif
00127