diff --git a/modules/gui/src/data_viewer/data_viewer.cc b/modules/gui/src/data_viewer/data_viewer.cc index 2bc7d368f8ce6b178a01d9580de9d7d383edddd2..8db37d504cbb4556e365c6e3ffd293a6ad7a5b51 100644 --- a/modules/gui/src/data_viewer/data_viewer.cc +++ b/modules/gui/src/data_viewer/data_viewer.cc @@ -83,6 +83,7 @@ DataViewer::~DataViewer() void DataViewer::SetData(const Data& d) { panel_->SetData(d); + fft_->SetData(d); info_->SetImageInfo(d); } diff --git a/modules/gui/src/data_viewer/data_viewer_panel_base.hh b/modules/gui/src/data_viewer/data_viewer_panel_base.hh index 4c4b59bb5df8bb4df9853d6f10dd42d577e78ed0..ec2345a5cd471ba29ab78eded8a53934d0ba5624 100644 --- a/modules/gui/src/data_viewer/data_viewer_panel_base.hh +++ b/modules/gui/src/data_viewer/data_viewer_panel_base.hh @@ -59,7 +59,7 @@ public: DataViewerPanelBase(const Data& data,QWidget* parent); virtual ~DataViewerPanelBase(); - void SetData(const Data& d); + virtual void SetData(const Data& d); ////////////////// // event handling diff --git a/modules/gui/src/data_viewer/fft_panel.cc b/modules/gui/src/data_viewer/fft_panel.cc index 00d3b60d2e2635600dae4d9b711144fa078fe46c..17dd63b4a9da18678ae40f712241b1c9a2a98f67 100644 --- a/modules/gui/src/data_viewer/fft_panel.cc +++ b/modules/gui/src/data_viewer/fft_panel.cc @@ -36,18 +36,17 @@ FFTPanel::FFTPanel(const Data& parent_data, QWidget* parent): DataViewerPanelBase(parent_data,parent), size_(std::min<int>(256,std::min<int>(parent_data.GetSize()[0],parent_data.GetSize()[1]))), parent_position_(parent_data.GetExtent().GetCenter()), - parent_data_(parent_data), fft_data_(CreateImage(Extent(Size(size_,size_),Point(0,0)), - COMPLEX,HALF_FREQUENCY)) + COMPLEX,HALF_FREQUENCY)), + parent_observer_(parent_data) { QAction* a_set_size=new QAction("Set FFT size",this); popupmenu_->addAction(a_set_size); connect(a_set_size, SIGNAL(triggered()), this, SLOT(ShowSizeDialog())); - SetData(fft_data_); + DataViewerPanelBase::SetData(fft_data_); update_fft(); } - FFTPanel::~FFTPanel() { } @@ -58,8 +57,6 @@ void FFTPanel::ObserverUpdate() UpdateView(true); } - - void FFTPanel::SetPosition(const Point& p) { parent_position_=p; @@ -71,9 +68,14 @@ void FFTPanel::ShowSizeDialog() bool ok; #if QT_VERSION >= 0x040500 int i = QInputDialog::getInt(this, "Set FFT size","FFT size", size_, 1, - std::min<int>(parent_data_.GetSize()[0],parent_data_.GetSize()[1]), 1, &ok); + std::min<int>(parent_observer_.GetObservedData().GetSize()[0], + parent_observer_.GetObservedData().GetSize()[1]), + 1, &ok); #else - int i = QInputDialog::getInteger(this, "Set FFT size","FFT size", size_, 1, std::min<int>(parent_data_.GetSize()[0],parent_data_.GetSize()[1]), 1, &ok); + int i = QInputDialog::getInteger(this, "Set FFT size","FFT size", size_, 1, + std::min<int>(parent_observer_.GetObservedData().GetSize()[0], + parent_observer_.GetObservedData().GetSize()[1]), + 1, &ok); #endif if (ok){ SetFFTSize(i); @@ -93,14 +95,21 @@ unsigned int FFTPanel::GetFFTSize() return size_; } -void FFTPanel::update_fft() +void FFTPanel::SetData(const Data& parent_data) { - ImageHandle im=CreateImage(Extent(Size(size_,size_), - parent_position_)); - im.Paste(parent_data_); + parent_observer_=ParentDataObserver(parent_data); +} + + +void FFTPanel::update_fft() +{ + ImageHandle im=CreateImage(Extent(Size(size_,size_),parent_position_)); + im.Paste(parent_observer_.GetObservedData()); im.ApplyIP(alg::FFT()); fft_data_.Paste(im); UpdateView(true); } + }}} //ns + diff --git a/modules/gui/src/data_viewer/fft_panel.hh b/modules/gui/src/data_viewer/fft_panel.hh index fab31b6accdb9280ef12354da12cbcca4c787315..2add54b8d2ca8140a078249250382751dc18ae3e 100644 --- a/modules/gui/src/data_viewer/fft_panel.hh +++ b/modules/gui/src/data_viewer/fft_panel.hh @@ -29,6 +29,16 @@ namespace ost { namespace img { namespace gui { +class ParentDataObserver: public DataObserver +{ +public: + ParentDataObserver(const Data& d):DataObserver(d){} + virtual void ObserverRelease() + { + // Noop as parent takes care of this. + } +}; + class DLLEXPORT_OST_GUI FFTPanel: public DataViewerPanelBase { Q_OBJECT @@ -39,6 +49,7 @@ public: void SetFFTSize(unsigned int size); unsigned int GetFFTSize(); virtual void ObserverUpdate(); + virtual void SetData(const Data& parent_data); public slots: void SetPosition(const Point& p); @@ -48,8 +59,8 @@ protected: void update_fft(); unsigned int size_; Point parent_position_; - const Data& parent_data_; ImageHandle fft_data_; + ParentDataObserver parent_observer_; }; }}} //ns