/*========================================================================= Program: bbtk Module: $RCSfile$ Language: C++ Date: $Date$ Version: $Revision$ =========================================================================*/ /* --------------------------------------------------------------------- * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux * * This software is governed by the CeCILL-B license under French law and * abiding by the rules of distribution of free software. You can use, * modify and/ or redistribute the software under the terms of the CeCILL-B * license as circulated by CEA, CNRS and INRIA at the following URL * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html * or in the file LICENSE.txt. * * As a counterpart to the access to the source code and rights to copy, * modify and redistribute granted by the license, users are provided only * with a limited warranty and the software's author, the holder of the * economic rights, and the successive licensors have only limited * liability. * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-B license and that you accept its terms. * ------------------------------------------------------------------------ */ /** * \file * \brief Class bbtk::GBlackBoxController */ #include "GBlackBoxController.h" #ifdef _DEBUG #define new DEBUG_NEW #endif namespace bbtk { //========================================================================= GBlackBoxController::GBlackBoxController() { } //========================================================================= GBlackBoxController::~GBlackBoxController() { } //========================================================================= bool GBlackBoxController::OnMouseMove() { if ( _vtkInteractorStyleBaseView!=NULL) { int X,Y; wxVTKRenderWindowInteractor *_wxVTKiren; _wxVTKiren= _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); _wxVTKiren->GetEventPosition( X , Y ); int state = _view->getState(); //Evaluate new state if(state == NOTHING_HAPPENS) { if(_view->isPointInside(X,Y)) { _view->setState(HIGHLIGHTED); } } // state if( state==HIGHLIGHTED) { if(!_view->isPointInside(X,Y)) { _view->setState(NOTHING_HAPPENS); } } // state if ((state==DRAG) && (_isLeftClickDown==true) ) { _objHasBeenMoved=true; } // state _model->notifyObservers(getId()); } return true; } //========================================================================= bool GBlackBoxController::OnLeftButtonDown() { _objHasBeenMoved = false; _isLeftClickDown = true; bool ok=true; int X,Y; wxVTKRenderWindowInteractor *_wxVTKiren; _wxVTKiren= _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); _wxVTKiren->GetEventPosition( X , Y ); int state = _view->getState(); //Evaluate new state if(_view->isPointInside(X,Y)) // if(state == HIGHLIGHTED) //EED3oct2010 if ( (state == HIGHLIGHTED) && (ctrlkey==1 ) ) { ok=false; _view->setState(SELECTED); _model->notifyObservers(getId(),ADD_TO_SELECTED); } int shiftkey = _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey(); int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey(); ctrlkey = ctrlkey + shiftkey; if ( (state==DRAG) && (ctrlkey==1) && (_view->isPointInside(X,Y)==true) ) { _view->setState(NOTHING_HAPPENS); _model->notifyObservers(getId(),REMOVE_FROM_SELECTED); } return ok; } //========================================================================= bool GBlackBoxController::OnLeftButtonUp() { _isLeftClickDown = false; int state = _view->getState(); //Evaluate new state //EED Borrame // int X,Y; // wxVTKRenderWindowInteractor *wxVTKiren; // wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); // wxVTKiren->GetEventPosition(X,Y); // if(_isLeftClickDown) // { // _isLeftClickDown=false; // if(_view->isPointInside(X,Y)) // { // It is supposed that I'm always inside even if the box is in drag // _view->setState(SELECTED); // _model->notifyObservers(getId()); // } // } int shiftkey = _vtkInteractorStyleBaseView->GetInteractor()->GetShiftKey(); int ctrlkey = _vtkInteractorStyleBaseView->GetInteractor()->GetControlKey(); ctrlkey = ctrlkey + shiftkey; if ( (state==SELECTED) && (ctrlkey==0) && (_objHasBeenMoved==false)) { _view->setState(NOTHING_HAPPENS); _model->notifyObservers(getId(),REMOVE_FROM_SELECTED); } return true; } //========================================================================= bool GBlackBoxController::OnRightButtonUp() { return true; } //========================================================================= bool GBlackBoxController::OnMiddleButtonDown() { int X,Y; wxVTKRenderWindowInteractor *wxVTKiren; wxVTKiren = _vtkInteractorStyleBaseView->GetWxVtk3DBaseView()->GetWxVTKRenderWindowInteractor(); wxVTKiren->GetEventPosition(X,Y); // int state = _view->getState(); //Evaluate new state if(_view->isPointInside(X,Y)) { GBlackBoxModel *bbmodel = (GBlackBoxModel*)_model; _view->setState(HIGHLIGHTED); if(bbmodel->isExecutable()) { bbmodel->setExecutable(false); } else { bbmodel->setExecutable(true); } bbmodel->notifyObservers(getId()); } return true; } //========================================================================= } // EO namespace bbtk // EOF