diff --git a/modules/gui/pymod/data_viewer_proxy.cc b/modules/gui/pymod/data_viewer_proxy.cc index 23551d1277bfa0319b54a562cb68029ffe8404b7..44c7de2174c7a913fc346c7878cb9f269640ec7b 100644 --- a/modules/gui/pymod/data_viewer_proxy.cc +++ b/modules/gui/pymod/data_viewer_proxy.cc @@ -30,8 +30,10 @@ namespace ost { namespace img { namespace gui { DataViewerProxy::DataViewerProxy(DataViewer* v): - ost::gui::SipHandler<ost::img::gui::DataViewer>(v) -{} + ost::gui::SipHandler<ost::img::gui::DataViewer>(v), + DataObserver(v->GetData()) +{ +} NormalizerPtr DataViewerProxy::GetNormalizer() const @@ -58,6 +60,81 @@ Extent DataViewerProxy::GetSelection() const { return Me()->GetSelection(); } +void DataViewerProxy::SetSelection(const Extent& selection) +{ + Me()->SetSelection(selection); +} + +void DataViewerProxy::SetSlab(int slab) +{ + Me()->SetSlab(slab); +} + +int DataViewerProxy::GetSlab() const +{ + return Me()->GetSlab(); +} + +void DataViewerProxy::SetZoomScale(Real zoomscale) +{ + Me()->SetZoomScale(zoomscale); +} + +Real DataViewerProxy::GetZoomScale() const +{ + return Me()->GetZoomScale(); +} + +void DataViewerProxy::SetViewerMin(Real min) +{ + Me()->SetViewerMin(min); +} + +Real DataViewerProxy::GetViewerMin() const +{ + return Me()->GetViewerMin(); +} + +void DataViewerProxy::SetViewerMax(Real max) +{ + Me()->SetViewerMax(max); +} + +Real DataViewerProxy::GetViewerMax() const +{ + return Me()->GetViewerMax(); +} + +void DataViewerProxy::SetGamma(Real gamma) +{ + Me()->SetGamma(gamma); +} + +Real DataViewerProxy::GetGamma() const +{ + return Me()->GetGamma(); +} + +void DataViewerProxy::SetInvert(bool invert) +{ + Me()->SetInvert(invert); +} + +bool DataViewerProxy::GetInvert() const +{ + return Me()->GetInvert(); +} + +void DataViewerProxy::SetOffset(const geom::Vec2& offset) +{ + Me()->SetOffset(offset); +} + +geom::Vec2 DataViewerProxy::GetOffset() const +{ + return Me()->GetOffset(); +} + void DataViewerProxy::SetData(const Data& d) { @@ -85,9 +162,9 @@ OverlayManagerPtr DataViewerProxy::GetOverlayManager() const } -void DataViewerProxy::AddDockWidget(QWidget* w, const QString& name, bool shown) +void DataViewerProxy::AddDockWidget(QWidget* w, const QString& name, bool shown, int area) { - Me()->AddDockWidget(w,name, shown); + Me()->AddDockWidget(w,name, shown,area); } void DataViewerProxy::RemoveDockWidget(QWidget* w) @@ -110,6 +187,22 @@ void DataViewerProxy::Hide() Me()->hide(); } +void DataViewerProxy::ObserverUpdate() +{ +} +void DataViewerProxy::ObserverUpdate(const Extent& e) +{ +} +void DataViewerProxy::ObserverUpdate(const Point& p) +{ +} +void DataViewerProxy::ObserverRelease() +{ + Release(Me()); +} +object DataViewerProxy::GetQObject(){ + return ost::gui::get_py_qobject<DataViewer>(Me()); +} }}} //ns diff --git a/modules/gui/pymod/data_viewer_proxy.hh b/modules/gui/pymod/data_viewer_proxy.hh index 39a5f6c838962281eae1b39defdf1888cd9f523c..77eae302faa85f1749852827bce714ae6648f997 100644 --- a/modules/gui/pymod/data_viewer_proxy.hh +++ b/modules/gui/pymod/data_viewer_proxy.hh @@ -48,7 +48,7 @@ namespace ost { namespace img { namespace gui { // fw decl class DataViewer; -class TEMPLATE_EXPORT DataViewerProxy : public ost::gui::SipHandler<DataViewer>{ +class TEMPLATE_EXPORT DataViewerProxy : public ost::gui::SipHandler<DataViewer>, public DataObserver { public: DataViewerProxy(DataViewer* v); @@ -63,11 +63,27 @@ public: void UpdateView(); Extent GetSelection() const; + void SetSelection(const Extent& selection); + void SetSlab(int slab); + int GetSlab() const; + void SetZoomScale(Real zoomscale); + Real GetZoomScale() const; + void SetViewerMin(Real min); + Real GetViewerMin() const; + void SetViewerMax(Real max); + Real GetViewerMax() const; + void SetGamma(Real gamma); + Real GetGamma() const; + void SetInvert(bool invert); + bool GetInvert() const; + void SetOffset(const geom::Vec2& offset); + geom::Vec2 GetOffset() const; + int AddOverlay(const OverlayPtr& ov, bool make_active=true); OverlayManagerPtr GetOverlayManager() const; void ClearOverlays(); - void AddDockWidget(QWidget* w, const QString& name, bool shown=true); + void AddDockWidget(QWidget* w, const QString& name, bool shown=true, int area=2); void RemoveDockWidget(QWidget* w); void SetAntialiasing(bool f); @@ -80,6 +96,14 @@ public: void Hide(); + ////////////////////// + // observer interface + virtual void ObserverUpdate(); + virtual void ObserverUpdate(const Extent& e); + virtual void ObserverUpdate(const Point& p); + virtual void ObserverRelease(); + + object GetQObject(); }; typedef boost::shared_ptr<DataViewerProxy> DataViewerProxyPtr; diff --git a/modules/gui/pymod/export_data_viewer.cc b/modules/gui/pymod/export_data_viewer.cc index dbaa30ace761f80c9284b634ddd2d6140f6dda97..b3e6e0b954de0349f09e652a49f46e4592b2ba75 100644 --- a/modules/gui/pymod/export_data_viewer.cc +++ b/modules/gui/pymod/export_data_viewer.cc @@ -25,30 +25,28 @@ #include <boost/python.hpp> #include <ost/base.hh> #include <ost/gui/data_viewer/data_viewer.hh> +#include "data_viewer_proxy.hh" #include <ost/gui/data_viewer/overlay_manager.hh> -#include "sip_handler.hh" - using namespace boost::python; using namespace ost::img; using namespace ost; -using namespace ost::img::gui; using namespace ost::gui; +using namespace ost::img::gui; namespace { -void add_dock1(DataViewer* p, QWidget* w, const String& name) +void add_dock1(DataViewerProxy* p, QWidget* w, const String& name) { p->AddDockWidget(w,QString::fromStdString(name)); } -void add_dock2(DataViewer* p, QWidget* w, const String& name, bool s) +void add_dock2(DataViewerProxy* p, QWidget* w, const String& name, bool s) { p->AddDockWidget(w,QString::fromStdString(name),s); } - -void add_dock3(DataViewer* p, QWidget* w, const String& name, bool s, int area) +void add_dock3(DataViewerProxy* p, QWidget* w, const String& name, bool s, int area) { p->AddDockWidget(w,QString::fromStdString(name),s,area); } @@ -60,53 +58,54 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(o_AddDockWidget, AddDockWidget, 2, 4) void export_data_viewer() { - class_<DataViewer, boost::noncopyable >("DataViewer",no_init) - .def("SetData",&DataViewer::SetData) - .def("SetName",&DataViewer::SetName) - .def("GetOverlayManager",&DataViewer::GetOverlayManager) - .def("GetNormalizer",&DataViewer::GetNormalizer,return_value_policy<return_by_value>()) - .def("Renormalize",&DataViewer::Renormalize) - .def("AddOverlay",&DataViewer::AddOverlay,o_AddOverlay()) - .def("ClearOverlays",&DataViewer::ClearOverlays) - .def("GetSelection",&DataViewer::GetSelection) - .def("SetSelection",&DataViewer::SetSelection) - .def("UpdateView",&DataViewer::UpdateView) - .def("Recenter",&DataViewer::Recenter) - .def("AddDockWidget",&DataViewer::AddDockWidget,o_AddDockWidget()) + class_<DataViewerProxy, DataViewerProxyPtr, bases<ost::gui::SipHandlerBase> >("DataViewer",no_init) + .def("SetData",&DataViewerProxy::SetData) + .def("SetName",&DataViewerProxy::SetName) + .def("GetOverlayManager",&DataViewerProxy::GetOverlayManager) + .def("GetNormalizer",&DataViewerProxy::GetNormalizer,return_value_policy<return_by_value>()) + .def("Renormalize",&DataViewerProxy::Renormalize) + .def("AddOverlay",&DataViewerProxy::AddOverlay,o_AddOverlay()) + .def("ClearOverlays",&DataViewerProxy::ClearOverlays) + .def("GetSelection",&DataViewerProxy::GetSelection) + .def("SetSelection",&DataViewerProxy::SetSelection) + .def("UpdateView",&DataViewerProxy::UpdateView) + .def("Recenter",&DataViewerProxy::Recenter) + .def("AddDockWidget",&DataViewerProxy::AddDockWidget,o_AddDockWidget()) .def("AddDockWidget",add_dock1) .def("AddDockWidget",add_dock2) .def("AddDockWidget",add_dock3) - .def("SetSlab", &DataViewer::SetSlab) - .def("GetSlab", &DataViewer::GetSlab) - .add_property("slab", &DataViewer::GetSlab, &DataViewer::SetSlab) - .def("SetZoomScale", &DataViewer::SetZoomScale) - .def("GetZoomScale", &DataViewer::GetZoomScale) - .add_property("zoomscale", &DataViewer::GetZoomScale, &DataViewer::SetZoomScale) - .def("SetViewerMin", &DataViewer::SetViewerMin) - .def("GetViewerMin", &DataViewer::GetViewerMin) - .add_property("viewer_min", &DataViewer::GetViewerMin, &DataViewer::SetViewerMin) - .def("SetViewerMax", &DataViewer::SetViewerMax) - .def("GetViewerMax", &DataViewer::GetViewerMax) - .add_property("viewer_max", &DataViewer::GetViewerMax, &DataViewer::SetViewerMax) - .def("SetGamma", &DataViewer::SetGamma) - .def("GetGamma", &DataViewer::GetGamma) - .add_property("gamma", &DataViewer::GetGamma, &DataViewer::SetGamma) - .def("SetInvert", &DataViewer::SetInvert) - .def("GetInvert", &DataViewer::GetInvert) - .add_property("invert", &DataViewer::GetInvert, &DataViewer::SetInvert) - .def("SetOffset", &DataViewer::SetOffset) - .def("GetOffset", &DataViewer::GetOffset) - .add_property("offset", &DataViewer::GetOffset, &DataViewer::SetOffset) - .def("RemoveDockWidget",&DataViewer::RemoveDockWidget) - .def("SetAntialiasing",&DataViewer::SetAntialiasing) - .def("Show",&DataViewer::show) - .def("Hide", &DataViewer::hide) - .def("GetQObject",&get_py_qobject<DataViewer>) - .add_property("qobject", &get_py_qobject<DataViewer>) - /* - .def("SetAutoNormalize",&DataViewer::SetAutoNormalize) - .def("ShowClickedPosition",&DataViewer::ShowClickedPosition,o_ShowClickedPosition()) - .def("GetClickedPosition",&DataViewer::GetClickedPosition) - */ + .def("RemoveDockWidget",&DataViewerProxy::RemoveDockWidget) + .def("SetAntialiasing",&DataViewerProxy::SetAntialiasing) + .def("Show",&DataViewerProxy::Show) + .def("Hide", &DataViewerProxy::Hide) + .def("SetSlab", &DataViewerProxy::SetSlab) + .def("GetSlab", &DataViewerProxy::GetSlab) + .add_property("slab", &DataViewerProxy::GetSlab, &DataViewerProxy::SetSlab) + .def("SetZoomScale", &DataViewerProxy::SetZoomScale) + .def("GetZoomScale", &DataViewerProxy::GetZoomScale) + .add_property("zoomscale", &DataViewerProxy::GetZoomScale, &DataViewerProxy::SetZoomScale) + .def("SetViewerMin", &DataViewerProxy::SetViewerMin) + .def("GetViewerMin", &DataViewerProxy::GetViewerMin) + .add_property("viewer_min", &DataViewerProxy::GetViewerMin, &DataViewerProxy::SetViewerMin) + .def("SetViewerMax", &DataViewerProxy::SetViewerMax) + .def("GetViewerMax", &DataViewerProxy::GetViewerMax) + .add_property("viewer_max", &DataViewerProxy::GetViewerMax, &DataViewerProxy::SetViewerMax) + .def("SetGamma", &DataViewerProxy::SetGamma) + .def("GetGamma", &DataViewerProxy::GetGamma) + .add_property("gamma", &DataViewerProxy::GetGamma, &DataViewerProxy::SetGamma) + .def("SetInvert", &DataViewerProxy::SetInvert) + .def("GetInvert", &DataViewerProxy::GetInvert) + .add_property("invert", &DataViewerProxy::GetInvert, &DataViewerProxy::SetInvert) + .def("SetOffset", &DataViewerProxy::SetOffset) + .def("GetOffset", &DataViewerProxy::GetOffset) + .add_property("offset", &DataViewerProxy::GetOffset, &DataViewerProxy::SetOffset) + .def("GetQObject",&DataViewerProxy::GetQObject) + .add_property("qobject",&DataViewerProxy::GetQObject) + + /* + .def("SetAutoNormalize",&DataViewerProxy::SetAutoNormalize) + .def("ShowClickedPosition",&DataViewerProxy::ShowClickedPosition,o_ShowClickedPosition()) + .def("GetClickedPosition",&DataViewerProxy::GetClickedPosition) + */ ; } diff --git a/modules/gui/pymod/export_gosty.cc b/modules/gui/pymod/export_gosty.cc index 1cd37fae447b9bd593a82c750196b29ef7a3dc55..7401816de5badf49cd833d958e347596c74c25f9 100644 --- a/modules/gui/pymod/export_gosty.cc +++ b/modules/gui/pymod/export_gosty.cc @@ -36,9 +36,7 @@ using namespace boost::python; #include "sip_handler.hh" #if OST_IMG_ENABLED - #include <ost/gui/data_viewer/data_viewer.hh> -#include <ost/img/data.hh> -#include <ost/gui/data_viewer/data_viewer.hh> +#include "data_viewer_proxy.hh" using namespace ost::img::gui; #endif @@ -48,15 +46,13 @@ using namespace ost::gui; namespace { #if OST_IMG_ENABLED -DataViewer* app_create_data_viewer1(GostyApp* app, - const ost::img::Data& d, - const QString& name) +DataViewerProxyPtr app_create_data_viewer1(GostyApp* app, const ost::img::Data& d, const QString& name) { - return app->CreateDataViewer(d,name); + return DataViewerProxyPtr(new DataViewerProxy(app->CreateDataViewer(d,name))); } -DataViewer* app_create_data_viewer2(GostyApp* app, const ost::img::Data& d) +DataViewerProxyPtr app_create_data_viewer2(GostyApp* app, const ost::img::Data& d) { - return app->CreateDataViewer(d); + return DataViewerProxyPtr(new DataViewerProxy(app->CreateDataViewer(d))); } #endif @@ -117,8 +113,8 @@ void export_Gosty() .add_property("message_widget", make_function(&GostyApp::GetMessageWidget, return_value_policy<reference_existing_object>())) #if OST_IMG_ENABLED - .def("CreateDataViewer", &app_create_data_viewer1,return_value_policy<reference_existing_object>()) - .def("CreateDataViewer", &app_create_data_viewer2,return_value_policy<reference_existing_object>()) + .def("CreateDataViewer", &app_create_data_viewer1) + .def("CreateDataViewer", &app_create_data_viewer2) #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 64896c8a76022a6098ffc66a18f8b00554b9cca3..82e81fdc7962c6f982e7a09dca59eb897095dade 100644 --- a/modules/gui/src/data_viewer/data_viewer.cc +++ b/modules/gui/src/data_viewer/data_viewer.cc @@ -87,6 +87,10 @@ void DataViewer::SetData(const Data& d) info_->SetImageInfo(d); } +const Data& DataViewer::GetData() const{ + return panel_->GetObservedData(); +} + NormalizerPtr DataViewer::GetNormalizer() const { assert(panel_); diff --git a/modules/gui/src/data_viewer/data_viewer.hh b/modules/gui/src/data_viewer/data_viewer.hh index e9e417f6b0c6a0076ab728ae8dd60b0dacabf71d..b01848471b892c0d0fb17ac8aa331645dad5f6ea 100644 --- a/modules/gui/src/data_viewer/data_viewer.hh +++ b/modules/gui/src/data_viewer/data_viewer.hh @@ -69,6 +69,9 @@ public: //! set new image or function to display void SetData(const Data& data); + //! get the current displayed image + const Data& GetData() const; + //! retrieve used normalizer NormalizerPtr GetNormalizer() const;