-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
static bool GENERATE_SUIT_EVENTS = true;
static bool FOCUS_UNDER_MOUSE = false;
+// workaround about the bug in vtkImplicitPlaneWidget class
+// that eats mouse button release event
+// causing clipping plane preview in SMESH sticking up
+#define Fix_Of_vtkImplicitPlaneWidget_bug
/*!
Constructor
GetDevice()->LeftButtonReleaseEvent();
else if( event->button() & Qt::MidButton )
GetDevice()->MiddleButtonReleaseEvent();
- else if( event->button() & Qt::RightButton )
+ else if( event->button() & Qt::RightButton ) {
+#if defined(Fix_Of_vtkImplicitPlaneWidget_bug)
+ GetDevice()->SetEventInformationFlipY( -99999, -99999,
+ event->modifiers() & Qt::ControlModifier,
+ event->modifiers() & Qt::ShiftModifier);
+ bool blocked = blockSignals( true );
+ GetDevice()->LeftButtonPressEvent();
+ GetDevice()->LeftButtonReleaseEvent();
+ blockSignals( blocked );
+ GetDevice()->SetEventInformationFlipY(event->x(),
+ event->y(),
+ event->modifiers() & Qt::ControlModifier,
+ event->modifiers() & Qt::ShiftModifier);
+#endif
GetDevice()->RightButtonReleaseEvent();
+ }
}
SVTK_RenderWindowInteractor
::mouseReleaseEvent( QMouseEvent *event )
{
+ SVTK_InteractorStyle* style = 0;
bool aRightBtn = event->button() == Qt::RightButton;
bool isOperation = false;
+ bool isPolygonalSelection = false;
if( aRightBtn && GetInteractorStyle()) {
- SVTK_InteractorStyle* style = dynamic_cast<SVTK_InteractorStyle*>( GetInteractorStyle() );
+ style = dynamic_cast<SVTK_InteractorStyle*>( GetInteractorStyle() );
if ( style )
isOperation = style->CurrentState() != VTK_INTERACTOR_STYLE_CAMERA_NONE;
}
QVTK_RenderWindowInteractor::mouseReleaseEvent(event);
- if ( aRightBtn && !isOperation && !( event->modifiers() & Qt::ControlModifier ) &&
+ if ( style ) {
+ isPolygonalSelection = style->GetPolygonState() == Finished;
+ style->SetPolygonState( Disable );
+ }
+
+ if ( aRightBtn && !isOperation && !isPolygonalSelection &&
+ !( event->modifiers() & Qt::ControlModifier ) &&
!( event->modifiers() & Qt::ShiftModifier ) ) {
QContextMenuEvent aEvent( QContextMenuEvent::Mouse,
event->pos(), event->globalPos() );
SVTK_RenderWindowInteractor
::mouseDoubleClickEvent( QMouseEvent* event )
{
+ if( GetInteractorStyle() && event->button() == Qt::LeftButton ) {
+ SVTK_InteractorStyle* style = dynamic_cast<SVTK_InteractorStyle*>( GetInteractorStyle() );
+ if ( style )
+ style->OnMouseButtonDoubleClick();
+ }
+
QVTK_RenderWindowInteractor::mouseDoubleClickEvent(event);
if(GENERATE_SUIT_EVENTS)