00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef IMG_GUI_OVERLAY_MANAGER_HH
00026 #define IMG_GUI_OVERLAY_MANAGER_HH
00027
00028 #include <vector>
00029 #include <list>
00030
00031
00032
00033 #include <ost/base.hh>
00034 #include <ost/gui/module_config.hh>
00035
00036
00037 #include "overlay_base_fw.hh"
00038 #include "overlay_manager_fw.hh"
00039 #include "overlay_manager_observer.hh"
00040
00041 #include <QWidget>
00042 #include <QPainter>
00043 #include <QEvent>
00044 namespace ost { namespace img { namespace gui {
00045
00046 class DataViewerPanel;
00047
00048 class DLLEXPORT_OST_GUI OverlayManager
00049 {
00050 struct OverlayInfo {
00051 OverlayInfo():
00052 ov(),id(0),visible(true),locked(false) {}
00053
00054 OverlayInfo(const OverlayPtr& o, int i, bool v):
00055 ov(o), id(i), visible(v),locked(false) {}
00056
00057 OverlayPtr ov;
00058 int id;
00059 bool visible;
00060 bool locked;
00061 };
00062
00063 typedef std::vector<OverlayInfo> OverlayList;
00064
00065 typedef std::list<OverlayManagerObserver*> ObserverList;
00066
00067 public:
00068 OverlayManager(QWidget* ref=0);
00069 ~OverlayManager();
00070
00072 void Attach(OverlayManagerObserver* obs);
00073
00075 void Detach(OverlayManagerObserver* obs);
00076
00078 int AddOverlay(const OverlayPtr& ov, bool make_active=true);
00079
00081 void ActivateOverlay(const String& name);
00083 void ActivateOverlay(int id);
00084
00086 void SetOverlayVisibility(const String& name, bool visible);
00088 void SetOverlayVisibility(int id, bool visible);
00089
00091 void SetOverlayLock(const String& name, bool visible);
00093 void SetOverlayLock(int id, bool visible);
00094
00096 OverlayPtr GetActiveOverlay() const;
00097
00099 OverlayPtr RetrieveOverlay(const String& name);
00101 OverlayPtr RetrieveOverlay(int id);
00102
00104 std::vector<int> GetIDList() const;
00105
00107 void DeleteOverlay(const String& name);
00109 void DeleteOverlay(int id);
00110
00111 void DeleteAllOverlays();
00112
00113 void DeleteActiveOverlay();
00114
00115 void OnDraw(QPainter& pnt, DataViewerPanel* dvp) const;
00116
00117 bool OnMouseEvent(QMouseEvent* e, DataViewerPanel* dvp, const QPoint& lastmouse) const;
00118
00119 bool OnKeyEvent(QKeyEvent* e, DataViewerPanel* dvp) const;
00120
00121 bool IsVisible(const String& name);
00122 bool IsVisible(int id);
00123 bool IsLocked(const String& name);
00124 bool IsLocked(int id);
00125 bool IsActive(const String& name);
00126 bool IsActive(int id);
00127 String GetOverlayName(int id);
00128 int GetOverlayId(const String& name);
00129
00130 void RequestRedraw();
00131
00132 private:
00133 QWidget* ref_;
00134 OverlayList ov_list_;
00135 int next_id_;
00136
00137 OverlayPtr active_ov_;
00138
00139 ObserverList obs_list_;
00140
00141 OverlayList::iterator find_ov(int id);
00142 OverlayList::iterator find_ov(const String& name);
00143 OverlayList::iterator find_ov(OverlayPtr anoverlay);
00144 };
00145
00146
00147 }}}
00148
00149 #endif