diff --git a/modules/gui/pymod/data_viewer_proxy.cc b/modules/gui/pymod/data_viewer_proxy.cc index 3ddf8339b9f10eb556ce464c1bc1695b85107cc5..d4d418e1f378588c09dfed18f7541788df47b07a 100644 --- a/modules/gui/pymod/data_viewer_proxy.cc +++ b/modules/gui/pymod/data_viewer_proxy.cc @@ -154,6 +154,11 @@ void DataViewerProxy::ClearOverlays() viewer()->ClearOverlays(); } +void DataViewerProxy::ClearActiveOverlay() +{ + viewer()->ClearActiveOverlay(); +} + OverlayManagerPtr DataViewerProxy::GetOverlayManager() const { return viewer()->GetOverlayManager(); @@ -185,6 +190,10 @@ void DataViewerProxy::Hide() viewer()->hide(); } +object DataViewerProxy::GetButtonGroup() +{ + return ost::gui::get_py_qobject<QButtonGroup>(viewer()->GetButtonGroup()); +} object DataViewerProxy::GetQObject(){ return ost::gui::get_py_qobject<DataViewer>(viewer()); diff --git a/modules/gui/pymod/data_viewer_proxy.hh b/modules/gui/pymod/data_viewer_proxy.hh index 49e764b65e15271db14331f2772c2f64969ead1c..096485b406fa07b36082936fa0c966e9e862e155 100644 --- a/modules/gui/pymod/data_viewer_proxy.hh +++ b/modules/gui/pymod/data_viewer_proxy.hh @@ -83,6 +83,7 @@ public: int AddOverlay(const OverlayPtr& ov, bool make_active=true); OverlayManagerPtr GetOverlayManager() const; void ClearOverlays(); + void ClearActiveOverlay(); void AddDockWidget(QWidget* w, const QString& name, bool shown=true, int area=2); void RemoveDockWidget(QWidget* w); @@ -96,7 +97,7 @@ public: //Vec3 GetClickedPosition(); void Hide(); - + object GetButtonGroup(); object GetQObject(); protected: QPointer<DataViewer> viewer_ptr_; diff --git a/modules/gui/pymod/export_data_viewer.cc b/modules/gui/pymod/export_data_viewer.cc index e1b047d84cd09022b75a953bbeb25fdf631304d5..d5e03fe5e3888bd86c74ba531f5e01afdcc4c796 100644 --- a/modules/gui/pymod/export_data_viewer.cc +++ b/modules/gui/pymod/export_data_viewer.cc @@ -66,6 +66,7 @@ void export_data_viewer() .def("Renormalize",&DataViewerProxy::Renormalize) .def("AddOverlay",&DataViewerProxy::AddOverlay,o_AddOverlay()) .def("ClearOverlays",&DataViewerProxy::ClearOverlays) + .def("ClearActiveOverlay",&DataViewerProxy::ClearActiveOverlay) .def("GetSelection",&DataViewerProxy::GetSelection) .def("SetSelection",&DataViewerProxy::SetSelection) .def("UpdateView",&DataViewerProxy::UpdateView) @@ -99,6 +100,7 @@ void export_data_viewer() .def("SetOffset", &DataViewerProxy::SetOffset) .def("GetOffset", &DataViewerProxy::GetOffset) .add_property("offset", &DataViewerProxy::GetOffset, &DataViewerProxy::SetOffset) + .def("GetButtonGroup", &DataViewerProxy::GetButtonGroup) .def("GetQObject",&DataViewerProxy::GetQObject) .add_property("qobject",&DataViewerProxy::GetQObject) diff --git a/modules/gui/pymod/export_gosty.cc b/modules/gui/pymod/export_gosty.cc index adc5594a8454dfb71042755a10c28e1818229e5d..ef7ee6777b43c63ad6c0e8ce0e296b6a0c73c48c 100644 --- a/modules/gui/pymod/export_gosty.cc +++ b/modules/gui/pymod/export_gosty.cc @@ -54,8 +54,11 @@ DataViewerProxyPtr app_create_data_viewer2(GostyApp* app, const ost::img::ImageH { return DataViewerProxyPtr(new DataViewerProxy(app->CreateDataViewer(d))); } +DataViewerProxyPtr app_create_data_viewer3(GostyApp* app, const ost::img::ImageHandle& d, const QString& name, int noparent) +{ + return DataViewerProxyPtr(new DataViewerProxy(app->CreateDataViewer(d,name,noparent))); +} #endif - } void app_add_widget_to_app_a(GostyApp* app, const QString& ident, @@ -115,6 +118,7 @@ void export_Gosty() #if OST_IMG_ENABLED .def("CreateDataViewer", &app_create_data_viewer1) .def("CreateDataViewer", &app_create_data_viewer2) + .def("CreateDataViewer", &app_create_data_viewer3) #endif .def("ProcessEvents", &GostyApp::ProcessEvents) .add_property("perspective", diff --git a/modules/gui/src/data_viewer/data_viewer.cc b/modules/gui/src/data_viewer/data_viewer.cc index d64e88df2a7dbae59c0df850edd78f449ece9827..0c157df37e550bdadbe07cab027f2a762c950f6f 100644 --- a/modules/gui/src/data_viewer/data_viewer.cc +++ b/modules/gui/src/data_viewer/data_viewer.cc @@ -205,6 +205,11 @@ geom::Vec2 DataViewer::GetOffset() const return panel_->GetOffset(); } +QButtonGroup* DataViewer::GetButtonGroup(void) +{ + return ov_manager_gui_->GetButtonGroup(); +} + int DataViewer::AddOverlay(const OverlayPtr& ov, bool make_active) { int retval= ov_manager_->AddOverlay(ov,make_active); @@ -217,6 +222,11 @@ void DataViewer::ClearOverlays() ov_manager_->DeleteAllOverlays(); } +void DataViewer::ClearActiveOverlay() +{ + ov_manager_->DeleteActiveOverlay(); +} + OverlayManagerPtr DataViewer::GetOverlayManager() const { return ov_manager_; diff --git a/modules/gui/src/data_viewer/data_viewer.hh b/modules/gui/src/data_viewer/data_viewer.hh index 902466a68c9b44ca0b7c4e1070b9dbf384de3c7d..ca6893edc34895fde6df19e2b1344ea11affcb98 100644 --- a/modules/gui/src/data_viewer/data_viewer.hh +++ b/modules/gui/src/data_viewer/data_viewer.hh @@ -95,6 +95,9 @@ public: //! remove all overlays void ClearOverlays(); + //! remove the active overlay + void ClearActiveOverlay(); + //! return the overlay manager for this viewer OverlayManagerPtr GetOverlayManager() const; @@ -142,6 +145,8 @@ public: //! get image offset geom::Vec2 GetOffset() const; + QButtonGroup* GetButtonGroup(void); + signals: void released(); diff --git a/modules/gui/src/data_viewer/overlay_manager.cc b/modules/gui/src/data_viewer/overlay_manager.cc index a9bc950284806a530d92687412e398deb7edf3be..ac2a709fbff4888096c6877a08b919e3e1dbc93d 100644 --- a/modules/gui/src/data_viewer/overlay_manager.cc +++ b/modules/gui/src/data_viewer/overlay_manager.cc @@ -103,6 +103,18 @@ void OverlayManager::DeleteAllOverlays() ov_list_.clear(); } +void OverlayManager::DeleteActiveOverlay() +{ + OverlayList::iterator pos=find_ov(active_ov_); + if (pos!=ov_list_.end()) { + for(ObserverList::iterator xit=obs_list_.begin();xit!=obs_list_.end();++xit) { + (*xit)->OnRemoveOverlay(this, pos->id); + } + pos=ov_list_.erase(pos); + active_ov_.reset(); + } + +} void OverlayManager::ActivateOverlay(const String& name) { @@ -351,4 +363,15 @@ OverlayManager::OverlayList::iterator OverlayManager::find_ov(const String& name return ov_list_.end(); } +OverlayManager::OverlayList::iterator OverlayManager::find_ov(OverlayPtr anoverlay) +{ + for(OverlayList::iterator it=ov_list_.begin();it!=ov_list_.end();++it) { + if(anoverlay==it->ov) { + return it; + break; + } + } + return ov_list_.end(); +} + }}} //ns diff --git a/modules/gui/src/data_viewer/overlay_manager.hh b/modules/gui/src/data_viewer/overlay_manager.hh index d1e9736093b20134e17ed2e573a4e001d44b8bd8..2a3bb76573b3052656a0533ec3798dc377bff1e6 100644 --- a/modules/gui/src/data_viewer/overlay_manager.hh +++ b/modules/gui/src/data_viewer/overlay_manager.hh @@ -110,6 +110,8 @@ public: void DeleteAllOverlays(); + void DeleteActiveOverlay(); + void OnDraw(QPainter& pnt, DataViewerPanel* dvp) const; bool OnMouseEvent(QMouseEvent* e, DataViewerPanel* dvp, const QPoint& lastmouse) const; @@ -138,6 +140,7 @@ private: OverlayList::iterator find_ov(int id); OverlayList::iterator find_ov(const String& name); + OverlayList::iterator find_ov(OverlayPtr anoverlay); }; diff --git a/modules/gui/src/data_viewer/overlay_manager_gui.cc b/modules/gui/src/data_viewer/overlay_manager_gui.cc index ba9d884cbd88b0f603c670a93dcfb995eb168177..69bb6a5dd91f740aec70fea1a4684fcbaed7a2da 100644 --- a/modules/gui/src/data_viewer/overlay_manager_gui.cc +++ b/modules/gui/src/data_viewer/overlay_manager_gui.cc @@ -209,6 +209,11 @@ void OverlayManagerGUI::OnEventMenu(QAction* e) { } +QButtonGroup* OverlayManagerGUI::GetButtonGroup(void) +{ + return active_group_; +} + void OverlayManagerGUI::UpdateView() { } diff --git a/modules/gui/src/data_viewer/overlay_manager_gui.hh b/modules/gui/src/data_viewer/overlay_manager_gui.hh index 437b0c3b72617d6ad2d213be3feadee2cf34997c..13ba39f87dedfcdeb5c78bdb5e633dd2ed7a77d6 100644 --- a/modules/gui/src/data_viewer/overlay_manager_gui.hh +++ b/modules/gui/src/data_viewer/overlay_manager_gui.hh @@ -120,6 +120,8 @@ public: void OnEventMenuPopup(QAction* e); void OnEventMenu(QAction* e); + QButtonGroup* GetButtonGroup(void); + public slots: void SetInfoText(const QString& t); diff --git a/modules/gui/src/gosty_app.cc b/modules/gui/src/gosty_app.cc index 66c612e94cb2484d17f51b8510d9276646298e81..949c764910e16d957ccec9bd1edba5e9c24b6ec5 100644 --- a/modules/gui/src/gosty_app.cc +++ b/modules/gui/src/gosty_app.cc @@ -109,20 +109,30 @@ SequenceViewer* GostyApp::GetSequenceViewer() } #if OST_IMG_ENABLED -ost::img::gui::DataViewer* GostyApp::CreateDataViewer(const ost::img::ImageHandle& d, const QString& name) +ost::img::gui::DataViewer* GostyApp::CreateDataViewer(const ost::img::ImageHandle& d, const QString& name, const int noparent) { - ost::img::gui::DataViewer* viewer=new ost::img::gui::DataViewer(main_,d,name); - QMdiSubWindow* mdi=new QMdiSubWindow(this->GetPerspective()->GetMainArea()); - mdi->setWindowTitle(name); - mdi->setWidget(viewer); - mdi->setFocusProxy(viewer); - viewer->setAttribute(Qt::WA_DeleteOnClose); - mdi->setAttribute(Qt::WA_DeleteOnClose); - viewer->setParent(mdi); - this->GetPerspective()->GetMainArea()->addSubWindow(mdi); - mdi->showMaximized(); - connect(viewer,SIGNAL(released()),mdi,SLOT(close())); - return viewer; + ost::img::gui::DataViewer* viewer=NULL; + if (noparent) + { + viewer=new ost::img::gui::DataViewer(NULL,d,name); + } + else + { + viewer=new ost::img::gui::DataViewer(main_,d,name); + QMdiSubWindow* mdi=new QMdiSubWindow(this->GetPerspective()->GetMainArea()); + mdi->setWindowTitle(name); + mdi->setWidget(viewer); + mdi->setFocusProxy(viewer); + viewer->setAttribute(Qt::WA_DeleteOnClose); + mdi->setAttribute(Qt::WA_DeleteOnClose); + viewer->setParent(mdi); + this->GetPerspective()->GetMainArea()->addSubWindow(mdi); + mdi->showMaximized(); + connect(viewer,SIGNAL(released()),mdi,SLOT(close())); + } + + return viewer; + } #endif diff --git a/modules/gui/src/gosty_app.hh b/modules/gui/src/gosty_app.hh index 1cf803e0036f9d468675d9740f93bbbb8a9e668f..47b0f23fadfe151a262e25f39910b5da9eda1c24 100644 --- a/modules/gui/src/gosty_app.hh +++ b/modules/gui/src/gosty_app.hh @@ -124,7 +124,7 @@ public: #if OST_IMG_ENABLED /// \brief create new DataViewer /// - ost::img::gui::DataViewer* CreateDataViewer(const ost::img::ImageHandle& d, const QString& name=""); + ost::img::gui::DataViewer* CreateDataViewer(const ost::img::ImageHandle& d, const QString& name="", const int noparent=0); #endif /// \brief give the application time to run the mainloop and process events