2005-08-23 14:55:09 +06:00
|
|
|
// Copyright (C) 2003 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.
|
|
|
|
//
|
|
|
|
// This library is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
// Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
|
|
// License along with this library; if not, write to the Free Software
|
|
|
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
//
|
2006-06-01 17:39:17 +06:00
|
|
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
2005-08-23 14:55:09 +06:00
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// File : SMESHGUI_SelectionOp.h
|
|
|
|
// Author : Alexander SOLOVYOV
|
|
|
|
// Module : SMESH
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef SMESHGUI_SelectionOp_H
|
|
|
|
#define SMESHGUI_SelectionOp_H
|
|
|
|
|
2008-03-07 12:47:05 +05:00
|
|
|
#include "SMESH_SMESHGUI.hxx"
|
|
|
|
|
2005-08-23 14:55:09 +06:00
|
|
|
#include <SMESHGUI_Operation.h>
|
|
|
|
#include <SMESHGUI_Dialog.h>
|
|
|
|
#include <SVTK_Selection.h>
|
|
|
|
#include <SALOME_InteractiveObject.hxx>
|
|
|
|
|
|
|
|
#include <SALOMEconfig.h>
|
|
|
|
#include CORBA_SERVER_HEADER(SMESH_Gen)
|
|
|
|
|
|
|
|
|
|
|
|
class SUIT_SelectionFilter;
|
|
|
|
class TColStd_MapOfInteger;
|
|
|
|
class SVTK_ViewWindow;
|
|
|
|
class SVTK_Selector;
|
|
|
|
class SMESH_Actor;
|
|
|
|
|
|
|
|
/*
|
|
|
|
Class : SMESHGUI_SelectionOp
|
|
|
|
Description : Base operation for all operations using object selection in viewer or objectbrowser
|
2005-11-03 13:38:17 +05:00
|
|
|
through common widgets created by LightApp_Dialog::createObject
|
2005-08-23 14:55:09 +06:00
|
|
|
*/
|
2008-03-07 12:47:05 +05:00
|
|
|
class SMESHGUI_EXPORT SMESHGUI_SelectionOp : public SMESHGUI_Operation
|
2005-08-23 14:55:09 +06:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
typedef QValueList<int> IdList; //! List of node or element ids
|
|
|
|
|
|
|
|
public:
|
|
|
|
SMESHGUI_SelectionOp( const Selection_Mode = ActorSelection );
|
|
|
|
virtual ~SMESHGUI_SelectionOp();
|
|
|
|
|
|
|
|
static void extractIds( const QStringList&, IdList&, const QChar );
|
|
|
|
|
|
|
|
protected:
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
Object,
|
|
|
|
MeshNode,
|
|
|
|
MeshElement
|
|
|
|
|
|
|
|
} EntityType;
|
|
|
|
/*!
|
|
|
|
This enumeration is used in typeById method to distinguish objects, mesh nodes and mesh elements,
|
|
|
|
because node end element ids may overlap
|
|
|
|
*/
|
|
|
|
|
|
|
|
protected:
|
|
|
|
virtual void startOperation();
|
|
|
|
virtual void commitOperation();
|
|
|
|
virtual void abortOperation();
|
|
|
|
virtual void selectionDone();
|
|
|
|
|
|
|
|
//! sets the dialog widgets to state just after operation start
|
|
|
|
virtual void initDialog();
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Creates filter being used when certain object selection widget is active
|
|
|
|
* If no filter must be used, then function must return 0
|
|
|
|
* if id is negative, then function must return filter for common using independently of active widget
|
|
|
|
*/
|
|
|
|
virtual SUIT_SelectionFilter* createFilter( const int ) const;
|
|
|
|
|
|
|
|
//! Remove only filters set by this operation (they are in map myFilters )
|
2006-05-06 14:51:48 +06:00
|
|
|
void removeCustomFilters();
|
2005-08-23 14:55:09 +06:00
|
|
|
|
|
|
|
//! Return what selection mode is set in VTK viewer
|
|
|
|
Selection_Mode selectionMode() const;
|
|
|
|
|
|
|
|
//! Set selection mode in VTK viewer
|
|
|
|
void setSelectionMode( const Selection_Mode );
|
|
|
|
|
|
|
|
//! Hilight object in VTK viewer
|
|
|
|
void highlight( const Handle( SALOME_InteractiveObject )&,
|
|
|
|
const bool, const bool = true );
|
|
|
|
|
|
|
|
//! Select some nodes or elements in VTK
|
|
|
|
void addOrRemoveIndex( const Handle( SALOME_InteractiveObject )&,
|
|
|
|
const TColStd_MapOfInteger&, const bool );
|
|
|
|
|
|
|
|
SVTK_ViewWindow* viewWindow() const;
|
|
|
|
SVTK_Selector* selector() const;
|
|
|
|
|
|
|
|
//! Get names, types and ids of selected objects
|
|
|
|
virtual void selected( QStringList&, SMESHGUI_Dialog::TypesList&, QStringList& ) const;
|
|
|
|
|
|
|
|
//! Find type by id
|
|
|
|
virtual int typeById( const QString&, const EntityType ) const;
|
|
|
|
|
|
|
|
//! Char using to divide <entry> and <id> in string id representation. By default, '#'
|
|
|
|
virtual QChar idChar() const;
|
|
|
|
|
|
|
|
//! Try to find in certain object selection widget selected node or element ids and return it
|
|
|
|
void selectedIds( const int, IdList& ) const;
|
|
|
|
|
|
|
|
//! Find in QStringList correct node or element ids representation and append integer(id) to IdList
|
|
|
|
void extractIds( const QStringList&, IdList& ) const;
|
|
|
|
|
|
|
|
//! Return selected mesh if selection mode isn't ActorSelection and only one object is selected
|
|
|
|
SMESH::SMESH_Mesh_var mesh() const;
|
|
|
|
|
|
|
|
//! Return actor according to selected mesh if selection mode isn't ActorSelection
|
|
|
|
SMESH_Actor* actor() const;
|
|
|
|
|
|
|
|
protected slots:
|
|
|
|
//! Installs filter corresponding to certain object selection widget
|
|
|
|
virtual void onActivateObject( int );
|
|
|
|
|
|
|
|
//! Removes filter corresponding to certain object selection widget
|
|
|
|
virtual void onDeactivateObject( int );
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Empty default implementation. In successors it may be used for more advanced selection checking.
|
|
|
|
* This slot is connected to signal when the selection changed in some object selection widget
|
|
|
|
*/
|
|
|
|
virtual void onSelectionChanged( int );
|
|
|
|
|
|
|
|
/*! Default implementation allowing user to edit selected ids "by hands".
|
|
|
|
In order to run default mechanism, you must set for some
|
|
|
|
object selection widget the "name indication" to "ListOfNames",
|
|
|
|
"read only" state to false and connect the dialog's signal "objectChanged"
|
|
|
|
to this slot
|
|
|
|
Warning: this mechanism can process only integer ids, NOT MESH OR GROUP NAMES!!!
|
|
|
|
*/
|
|
|
|
virtual void onTextChanged( int, const QStringList& );
|
|
|
|
|
|
|
|
private:
|
|
|
|
typedef QMap<int, SUIT_SelectionFilter*> Filters;
|
|
|
|
|
|
|
|
private:
|
|
|
|
Filters myFilters;
|
|
|
|
Selection_Mode myDefSelectionMode, myOldSelectionMode;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|