00001
00002
00003
00004
00005
00006 #ifndef DISPLAYCONTROL_H
00007 #define DISPLAYCONTROL_H
00008
00009
00010 #include <string>
00011 #include <vector>
00012
00013 #include "gui/Command.h"
00014 #include "gui/Menu.h"
00015
00016 #include "gui/DisplayRep.h"
00017 #include "gui/DisplayRep2D.h"
00018
00019 namespace gui {
00020
00021 class Scene;
00022 class SceneControl;
00023 class Draw2D;
00024
00025 class DisplayControl {
00026
00027
00028
00029
00030 public:
00031
00032 DisplayControl(Menu& menu, SceneControl* control);
00033
00034
00035 ~DisplayControl();
00036
00037 GUI::Toggle* add(DisplayRep* arep, const std::string& name=std::string(""), int state=1);
00038
00039
00040
00041
00042
00043
00044 void add(DisplayRep2D* arep, const std::string& name=std::string(""), int state=1);
00045
00046
00047 void setTitle(const std::string& title);
00048
00049
00050 void setAxisSize(float size=1);
00051
00052 GraphicsVector& reference_point();
00053 const GraphicsVector& reference_point()const;
00054
00055
00056 void postScript();
00057
00058
00059 void vrml(std::ostream& out);
00060
00061
00062 void update();
00063
00064
00065 void redisplay();
00066
00067
00068 void set_running(bool s){m_running=s;}
00069
00070
00071
00072 void clear();
00073
00074
00075 Scene& scene();
00076 const Scene& scene()const;
00077
00078
00079 SubMenu& menu();
00080
00081
00082 void useMenu(SubMenu* s=0);
00083
00084
00085
00086
00087 void finishSetup();
00088 void quit(){};
00089
00090
00091
00092 class DisplaySubMenu {
00093
00094
00095 public:
00096 ~DisplaySubMenu();
00097
00098 DisplaySubMenu& subMenu(const std::string& label, DisplayRep* rep=0);
00099
00100
00101
00102
00103 void add(DisplayRep * rep, const std::string& name="");
00104
00105
00106 private:
00107 friend class DisplayControl;
00108 void hide();
00109 void hide(bool update);
00110 void show();
00111 void show(bool update);
00112 DisplaySubMenu(DisplayControl* display, DisplaySubMenu* parent, DisplayRep * rep, const std::string& name);
00113 DisplayRep* _rep;
00114 gui::SubMenu* _menu;
00115 DisplayControl* _display;
00116 std::vector<DisplaySubMenu*> _submenus;
00117 std::vector<GUI::Toggle*> _rep_list;
00118 };
00119
00120
00121 DisplaySubMenu& subMenu(const std::string& label, DisplayRep* rep=0);
00122
00123
00124
00125 private:
00126 void setRefPt();
00127 void setScale();
00128 GUI::Toggle* addButton(DisplayRep* arep, const std::string& name, int state);
00129
00130
00131 gui::SubMenu* m_sub_menu;
00132 gui::SubMenu* m_user_menu;
00133 Menu* m_menu_bar;
00134
00135 Scene* m_scene;
00136 Scene* m_2d_scene;
00137 SceneControl* m_control;
00138
00139 float m_axis_size;
00140 bool m_running;
00141
00142 Draw2D* m_canvas;
00143
00144 std::vector<DisplaySubMenu*> _submenus;
00145 };
00146
00147 inline gui::SubMenu& DisplayControl::menu(){return *m_sub_menu;}
00148 inline gui::Scene& DisplayControl::scene(){return *m_scene;}
00149 inline const gui::Scene& DisplayControl::scene()const{return *m_scene;}
00150
00151 }
00152 #endif
00153
00154