Salome HOME
Introduce a SALOME_IntaractiveObject attribute
[modules/gui.git] / src / SVTK / SVTK_Selector.h
1 //  SALOME SALOMEGUI : implementation of desktop and GUI kernel
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
5 // 
6 //  This library is free software; you can redistribute it and/or 
7 //  modify it under the terms of the GNU Lesser General Public 
8 //  License as published by the Free Software Foundation; either 
9 //  version 2.1 of the License. 
10 // 
11 //  This library is distributed in the hope that it will be useful, 
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of 
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
14 //  Lesser General Public License for more details. 
15 // 
16 //  You should have received a copy of the GNU Lesser General Public 
17 //  License along with this library; if not, write to the Free Software 
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
19 // 
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : SALOME_Selection.h
25 //  Author : Nicolas REJNERI
26 //  Module : SALOME
27 //  $Header$
28
29 #ifndef SVTK_SELECTOR_H
30 #define SVTK_SELECTOR_H
31 #include <NCollection_DataMap.hxx>
32 #include <vtkSmartPointer.h>
33 #include <TColStd_MapOfInteger.hxx>
34
35 #include "SVTK_Selection.h"
36
37 #include "SALOME_ListIO.hxx"
38 #include "SALOME_InteractiveObject.hxx"
39 #include "SALOME_DataMapOfIOMapOfInteger.hxx"
40
41 class SALOME_Actor;
42
43 class SVTK_Viewer;
44 class SVTK_ViewWindow;
45
46 class SVTK_Selector
47 {
48 public:
49   SVTK_Selector();
50   virtual ~SVTK_Selector();
51
52   void SetSelectionMode( Selection_Mode theMode );
53   Selection_Mode SelectionMode() const { return mySelectionMode; }
54
55   void
56   ClearIObjects();
57
58   SALOME_Actor* 
59   GetActor(const Handle(SALOME_InteractiveObject)& theIO) const;
60   bool
61   IsSelected(const Handle(SALOME_InteractiveObject)& theIO) const;
62   bool
63   IsSelected(SALOME_Actor* theActor) const;
64
65   bool
66   AddIObject(const Handle(SALOME_InteractiveObject)& theIO);
67   bool
68   AddIObject(SALOME_Actor* theActor);
69
70   bool 
71   RemoveIObject(const Handle(SALOME_InteractiveObject)& theIO);
72   bool 
73   RemoveIObject(SALOME_Actor* theActor);
74
75   const SALOME_ListIO& 
76   StoredIObjects() const;
77
78   int 
79   IObjectCount() const;
80
81   bool 
82   HasIndex(const Handle(SALOME_InteractiveObject)& theIO ) const;
83
84   void 
85   GetIndex( const Handle(SALOME_InteractiveObject)& theIO, 
86             TColStd_IndexedMapOfInteger& theIndex );
87         
88   bool 
89   AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, 
90                     const TColStd_IndexedMapOfInteger& theIndices, 
91                     bool theIsModeShift);
92   bool 
93   AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, 
94                     const TColStd_MapOfInteger& theIndices, 
95                     bool theIsModeShift);
96   bool
97   AddOrRemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, 
98                     int theIndex, 
99                     bool theIsModeShift);
100   void 
101   RemoveIndex( const Handle(SALOME_InteractiveObject)& theIO, 
102                int theIndex);
103   bool 
104   IsIndexSelected(const Handle(SALOME_InteractiveObject)& theIO, 
105                   int theIndex) const;
106   void 
107   ClearIndex();
108
109 private:
110   typedef NCollection_DataMap<Handle(SALOME_InteractiveObject),
111                               vtkSmartPointer<SALOME_Actor> > TIO2Actors;
112   TIO2Actors myIO2Actors;
113   Selection_Mode mySelectionMode;
114   SALOME_ListIO myIObjects;
115   SALOME_DataMapOfIOMapOfInteger myMapIOSubIndex;
116 };
117
118
119 #endif