You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
3.0 KiB
C++
100 lines
3.0 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkObserverMediator.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkObserverMediator
|
|
* @brief manage contention for cursors and other resources
|
|
*
|
|
* The vtkObserverMediator is a helper class that manages requests for
|
|
* cursor changes from multiple interactor observers (e.g. widgets). It keeps
|
|
* a list of widgets (and their priorities) and their current requests for
|
|
* cursor shape. It then satisfies requests based on widget priority and the
|
|
* relative importance of the request (e.g., a lower priority widget
|
|
* requesting a particular cursor shape will overrule a higher priority
|
|
* widget requesting a default shape).
|
|
*
|
|
* @sa
|
|
* vtkAbstractWidget vtkWidgetRepresentation
|
|
*/
|
|
|
|
#ifndef vtkObserverMediator_h
|
|
#define vtkObserverMediator_h
|
|
|
|
#include "vtkObject.h"
|
|
#include "vtkRenderingCoreModule.h" // For export macro
|
|
|
|
class vtkRenderWindowInteractor;
|
|
class vtkInteractorObserver;
|
|
class vtkObserverMap;
|
|
|
|
class VTKRENDERINGCORE_EXPORT vtkObserverMediator : public vtkObject
|
|
{
|
|
public:
|
|
/**
|
|
* Instantiate the class.
|
|
*/
|
|
static vtkObserverMediator* New();
|
|
|
|
//@{
|
|
/**
|
|
* Standard macros.
|
|
*/
|
|
vtkTypeMacro(vtkObserverMediator, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the instance of vtkRenderWindow whose cursor shape is
|
|
* to be managed.
|
|
*/
|
|
void SetInteractor(vtkRenderWindowInteractor* iren);
|
|
vtkGetObjectMacro(Interactor, vtkRenderWindowInteractor);
|
|
//@}
|
|
|
|
/**
|
|
* Method used to request a cursor shape. Note that the shape is specified
|
|
* using one of the integral values determined in vtkRenderWindow.h. The
|
|
* method returns a non-zero value if the shape was successfully changed.
|
|
*/
|
|
int RequestCursorShape(vtkInteractorObserver*, int cursorShape);
|
|
|
|
/**
|
|
* Remove all requests for cursor shape from a given interactor.
|
|
*/
|
|
void RemoveAllCursorShapeRequests(vtkInteractorObserver*);
|
|
|
|
protected:
|
|
vtkObserverMediator();
|
|
~vtkObserverMediator() override;
|
|
|
|
// The render window whose cursor we are controlling
|
|
vtkRenderWindowInteractor* Interactor;
|
|
|
|
// A map whose key is the observer*, and whose data value is a cursor
|
|
// request. Note that a special compare function is used to sort the
|
|
// widgets based on the observer's priority.
|
|
vtkObserverMap* ObserverMap; // given a widget*, return its data
|
|
|
|
// The current observer and cursor shape
|
|
vtkInteractorObserver* CurrentObserver;
|
|
int CurrentCursorShape;
|
|
|
|
private:
|
|
vtkObserverMediator(const vtkObserverMediator&) = delete;
|
|
void operator=(const vtkObserverMediator&) = delete;
|
|
};
|
|
|
|
#endif
|