Program Listing for File vtkMRMLLayerDMWidgetEventTranslationNode.h
↰ Return to documentation for file (MRML/vtkMRMLLayerDMWidgetEventTranslationNode.h)
#pragma once
#include "vtkSlicerLayerDMModuleMRMLExport.h"
// Slicer includes
#include <vtkMRMLNode.h>
#include <vtkMRMLAbstractWidget.h>
// VTK includes
#include <vtkCommand.h>
#include <vtkEvent.h>
// STL includes
#include <map>
class vtkMRMLInteractionEventData;
class VTK_SLICER_LAYERDM_MODULE_MRML_EXPORT vtkMRMLLayerDMWidgetEventTranslationNode : public vtkMRMLNode
{
public:
static vtkMRMLLayerDMWidgetEventTranslationNode* New();
vtkTypeMacro(vtkMRMLLayerDMWidgetEventTranslationNode, vtkMRMLNode);
vtkMRMLLayerDMWidgetEventTranslationNode(const vtkMRMLLayerDMWidgetEventTranslationNode&) = delete;
void operator=(const vtkMRMLLayerDMWidgetEventTranslationNode&) = delete;
void PrintSelf(ostream& os, vtkIndent indent) override;
void Copy(vtkMRMLNode* node) override;
void ReadXMLAttributes(const char** atts) override;
void WriteXML(ostream& of, int indent) override;
vtkMRMLNode* CreateNodeInstance() override;
const char* GetNodeTagName() override;
static unsigned long GetEndInteractionEvent(unsigned long startInteractionEvent);
static unsigned long GetClickEvent(unsigned long releaseEvent);
void SetTranslation(int widgetState, unsigned long interactionEvent, unsigned long widgetEvent, int modifier = vtkEvent::NoModifier);
void SetTranslationClickAndDrag(int widgetState,
unsigned long interactionEvent,
int widgetStateDragging,
unsigned long widgetStartEvent,
unsigned long widgetEndEvent,
int modifiers = vtkEvent::NoModifier);
void SetTranslationKeyboard(int widgetState,
const std::string& keySym,
unsigned long widgetEvent,
int modifier = vtkEvent::NoModifier,
int repeatCount = 1,
unsigned long keyEvent = vtkCommand::KeyPressEvent);
int RemoveTranslationEvent(unsigned long widgetEvent);
bool BlockTranslationEvent(unsigned long widgetEvent, bool isBlocked);
bool BlockAllTranslationEvents(bool isBlocked);
unsigned long Translate(int widgetState, vtkMRMLInteractionEventData* eventData);
void Clear();
int GetNumberOfTranslations() const;
protected:
vtkMRMLLayerDMWidgetEventTranslationNode() = default;
~vtkMRMLLayerDMWidgetEventTranslationNode() override = default;
private:
struct EventKey
{
bool operator==(const EventKey& other) const { return this->AsTuple() == other.AsTuple(); }
bool operator<(const EventKey& other) const { return this->AsTuple() < other.AsTuple(); }
std::tuple<int, unsigned long, int, int, std::string> AsTuple() const { return std::make_tuple(widgetState, eventId, modifier, repeatCount, keySym); }
static int thresholdRepeatCount(int repeatCount) { return std::max(1, repeatCount); }
int widgetState{ vtkMRMLAbstractWidget::WidgetStateAny };
unsigned long eventId{ vtkCommand::NoEvent };
int modifier{ vtkEvent::NoModifier };
int repeatCount{ 1 };
std::string keySym{};
};
void SetTranslation(const EventKey& key, unsigned long widgetEvent);
unsigned long Translate(EventKey key) const;
bool IsWidgetEventBlocked(unsigned long widgetEvent) const;
unsigned long GetWidgetEvent(const EventKey& key) const;
static std::string ToString(const std::map<EventKey, unsigned long>& eventMap, const vtkIndent* indent, const std::string& eol);
static std::string ToString(const std::pair<EventKey, unsigned long>& eventPair);
static std::map<EventKey, unsigned long> EventMapFromString(const std::string& value);
static std::pair<EventKey, unsigned long> EventPairFromString(const std::string& value);
std::map<EventKey, unsigned long> EventMap{};
std::set<unsigned long> BlockedEvents{};
bool IsBlocked{};
};