/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkTDxInteractorStyle.cxx

  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.

=========================================================================*/

#include "vtkTDxInteractorStyle.h"

#include "vtkCommand.h"
#include "vtkTDxInteractorStyleSettings.h"
#include "vtkTDxMotionEventInfo.h" // Borland needs it.


vtkCxxSetObjectMacro(vtkTDxInteractorStyle,Settings,
                     vtkTDxInteractorStyleSettings);

// ----------------------------------------------------------------------------
vtkTDxInteractorStyle::vtkTDxInteractorStyle()
{
  this->Renderer=nullptr;
  this->Settings=vtkTDxInteractorStyleSettings::New();
}

// ----------------------------------------------------------------------------
vtkTDxInteractorStyle::~vtkTDxInteractorStyle()
{
  if(this->Settings!=nullptr)
  {
    this->Settings->Delete();
  }
}

// ----------------------------------------------------------------------------
void vtkTDxInteractorStyle::ProcessEvent(vtkRenderer *renderer,
                                         unsigned long event,
                                         void *calldata)
{
  vtkDebugMacro(<<"vtkTDxInteractorStyle::ProcessEvent()");
  this->Renderer=renderer;

  vtkTDxMotionEventInfo *motionInfo;
  int *buttonInfo;

  switch(event)
  {
    case vtkCommand::TDxMotionEvent:
      vtkDebugMacro(<<"vtkTDxInteractorStyle::ProcessEvent() TDxMotionEvent");
      motionInfo=static_cast<vtkTDxMotionEventInfo *>(calldata);
      this->OnMotionEvent(motionInfo);
      break;
    case vtkCommand::TDxButtonPressEvent:
      vtkDebugMacro(<<"vtkTDxInteractorStyle::ProcessEvent() TDxButtonPressEvent");
      buttonInfo=static_cast<int *>(calldata);
      this->OnButtonPressedEvent(*buttonInfo);
      break;
    case vtkCommand::TDxButtonReleaseEvent:
      vtkDebugMacro(<<"vtkTDxInteractorStyle::ProcessEvent() TDxButtonReleaseEvent");
      buttonInfo=static_cast<int *>(calldata);
      this->OnButtonReleasedEvent(*buttonInfo);
      break;
  }
}

// ----------------------------------------------------------------------------
void vtkTDxInteractorStyle::OnMotionEvent(
  vtkTDxMotionEventInfo *vtkNotUsed(motionInfo))
{
  vtkDebugMacro(<<"vtkTDxInteractorStyle::OnMotionEvent()");
}

// ----------------------------------------------------------------------------
void vtkTDxInteractorStyle::OnButtonPressedEvent(int vtkNotUsed(button))
{
  vtkDebugMacro(<<"vtkTDxInteractorStyle::OnButtonPressedEvent()");
}

// ----------------------------------------------------------------------------
void vtkTDxInteractorStyle::OnButtonReleasedEvent(int vtkNotUsed(button))
{
  vtkDebugMacro(<<"vtkTDxInteractorStyle::OnButtonReleasedEvent()");
}

//----------------------------------------------------------------------------
void vtkTDxInteractorStyle::PrintSelf(ostream& os, vtkIndent indent)
{
  this->Superclass::PrintSelf(os,indent);

  os << indent << "Settings: ";
  if(this->Settings==nullptr)
  {
    os << "(none)" << endl;
  }
  else
  {
    os << endl;
    this->Settings->PrintSelf(os,indent.GetNextIndent());
  }
}
