Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure virtual functions can be called from derived ctkVTK view pimpl #1153

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ ctkVTKAbstractViewPrivate::ctkVTKAbstractViewPrivate(ctkVTKAbstractView& object)
this->PauseRenderCount = 0;
}

// --------------------------------------------------------------------------
ctkVTKAbstractViewPrivate::~ctkVTKAbstractViewPrivate() = default;

// --------------------------------------------------------------------------
void ctkVTKAbstractViewPrivate::init()
{
Expand Down
1 change: 1 addition & 0 deletions Libs/Visualization/VTK/Widgets/ctkVTKAbstractView_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class ctkVTKAbstractViewPrivate : public QObject

public:
ctkVTKAbstractViewPrivate(ctkVTKAbstractView& object);
virtual ~ctkVTKAbstractViewPrivate();

/// Convenient setup methods
virtual void init();
Expand Down
28 changes: 23 additions & 5 deletions Libs/Visualization/VTK/Widgets/ctkVTKRenderView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,21 @@ ctkVTKRenderViewPrivate::ctkVTKRenderViewPrivate(ctkVTKRenderView& object)
this->Orientation->SetOrientationMarker(this->Axes);
}

// --------------------------------------------------------------------------
ctkVTKRenderViewPrivate::~ctkVTKRenderViewPrivate() = default;

// --------------------------------------------------------------------------
void ctkVTKRenderViewPrivate::init()
{
this->ctkVTKAbstractViewPrivate::init();

// The interactor in RenderWindow exists after the renderwindow is set to
// the QVTKWidet
this->Orientation->SetInteractor(this->RenderWindow->GetInteractor());
this->Orientation->SetEnabled(1);
this->Orientation->InteractiveOff();
}

// --------------------------------------------------------------------------
void ctkVTKRenderViewPrivate::setupCornerAnnotation()
{
Expand Down Expand Up @@ -204,18 +219,21 @@ ctkVTKRenderView::ctkVTKRenderView(QWidget* parentWidget)
{
Q_D(ctkVTKRenderView);
d->init();
}

// The interactor in RenderWindow exists after the renderwindow is set to
// the QVTKWidet
d->Orientation->SetInteractor(d->RenderWindow->GetInteractor());
d->Orientation->SetEnabled(1);
d->Orientation->InteractiveOff();
// --------------------------------------------------------------------------
ctkVTKRenderView::ctkVTKRenderView(ctkVTKRenderViewPrivate* pimpl, QWidget* parentWidget)
: Superclass(pimpl, parentWidget)
{
// derived classes must call init manually. Calling init() here may results in
// actions on a derived public class not yet finished to be created
}

//----------------------------------------------------------------------------
ctkVTKRenderView::~ctkVTKRenderView()
{
}

//----------------------------------------------------------------------------
void ctkVTKRenderView::setInteractor(vtkRenderWindowInteractor* newInteractor)
{
Expand Down
5 changes: 4 additions & 1 deletion Libs/Visualization/VTK/Widgets/ctkVTKRenderView.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public Q_SLOTS:

/// Set window interactor
/// Reimplemented to propagate interaction to Orientation widget
virtual void setInteractor(vtkRenderWindowInteractor* interactor);
void setInteractor(vtkRenderWindowInteractor* interactor) override;

/// Return pitch, roll or yaw increment (in degree)
double pitchRollYawIncrement()const;
Expand Down Expand Up @@ -186,6 +186,9 @@ public Q_SLOTS:
/// Return zoom factor
double zoomFactor()const;

protected:
ctkVTKRenderView(ctkVTKRenderViewPrivate* pimpl, QWidget* parent);

private:
Q_DECLARE_PRIVATE(ctkVTKRenderView);
Q_DISABLE_COPY(ctkVTKRenderView);
Expand Down
8 changes: 5 additions & 3 deletions Libs/Visualization/VTK/Widgets/ctkVTKRenderView_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,19 @@ class vtkRenderWindowInteractor;

//-----------------------------------------------------------------------------
/// \ingroup Visualization_VTK_Widgets
class ctkVTKRenderViewPrivate : public ctkVTKAbstractViewPrivate
class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKRenderViewPrivate : public ctkVTKAbstractViewPrivate
{
Q_OBJECT
Q_DECLARE_PUBLIC(ctkVTKRenderView);

public:
ctkVTKRenderViewPrivate(ctkVTKRenderView& object);
virtual ~ctkVTKRenderViewPrivate();

/// Convenient setup methods
virtual void setupCornerAnnotation();
virtual void setupRendering();
void init() override;
void setupCornerAnnotation() override;
void setupRendering() override;

void zoom(double zoomFactor);

Expand Down
21 changes: 20 additions & 1 deletion Libs/Visualization/VTK/Widgets/ctkVTKSliceView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ ctkVTKSliceViewPrivate::ctkVTKSliceViewPrivate(ctkVTKSliceView& object)
this->OverlayRenderer = vtkSmartPointer<vtkRenderer>::New();
}

// --------------------------------------------------------------------------
ctkVTKSliceViewPrivate::~ctkVTKSliceViewPrivate() = default;

// --------------------------------------------------------------------------
void ctkVTKSliceViewPrivate::init()
{
Q_Q(ctkVTKSliceView);
this->ctkVTKAbstractViewPrivate::init();

q->VTKWidget()->installEventFilter(q);
}

// --------------------------------------------------------------------------
void ctkVTKSliceViewPrivate::setupCornerAnnotation()
{
Expand Down Expand Up @@ -100,7 +112,14 @@ ctkVTKSliceView::ctkVTKSliceView(QWidget* parentWidget)
{
Q_D(ctkVTKSliceView);
d->init();
this->VTKWidget()->installEventFilter(this);
}

// --------------------------------------------------------------------------
ctkVTKSliceView::ctkVTKSliceView(ctkVTKSliceViewPrivate* pimpl, QWidget* parentWidget)
: Superclass(pimpl, parentWidget)
{
// derived classes must call init manually. Calling init() here may results in
// actions on a derived public class not yet finished to be created
}

// --------------------------------------------------------------------------
Expand Down
7 changes: 4 additions & 3 deletions Libs/Visualization/VTK/Widgets/ctkVTKSliceView.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKSliceView : public ctkVTKAbstra

/// Set background color
/// \sa vtkLightBoxRendererManager::SetBackgroundColor
virtual void setBackgroundColor(const QColor& newBackgroundColor);
void setBackgroundColor(const QColor& newBackgroundColor) override;

/// Get background color
/// \sa setBackgroundColor();
virtual QColor backgroundColor()const;
QColor backgroundColor()const override;

/// Get highlightedBox color
/// \sa setHighlightedBoxColor();
Expand Down Expand Up @@ -133,7 +133,8 @@ public Q_SLOTS:
void resized(const QSize& size);

protected:
virtual bool eventFilter(QObject *object, QEvent *event);
ctkVTKSliceView(ctkVTKSliceViewPrivate* pimpl, QWidget* parent);
bool eventFilter(QObject *object, QEvent *event) override;

private:
Q_DECLARE_PRIVATE(ctkVTKSliceView);
Expand Down
10 changes: 7 additions & 3 deletions Libs/Visualization/VTK/Widgets/ctkVTKSliceView_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,19 @@ class vtkRenderWindowInteractor;

//-----------------------------------------------------------------------------
/// \ingroup Visualization_VTK_Widgets
class ctkVTKSliceViewPrivate : public ctkVTKAbstractViewPrivate
class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKSliceViewPrivate : public ctkVTKAbstractViewPrivate
{
Q_OBJECT
Q_DECLARE_PUBLIC(ctkVTKSliceView);

public:
ctkVTKSliceViewPrivate(ctkVTKSliceView&);
virtual ~ctkVTKSliceViewPrivate();

/// Convenient setup methods
void setupCornerAnnotation();
void setupRendering();
void init() override;
void setupCornerAnnotation() override;
void setupRendering() override;

vtkSmartPointer<vtkLightBoxRendererManager> LightBoxRendererManager;
bool RenderPending;
Expand Down