anatomist  5.0.5
3D neuroimaging data viewer
selectFactory.h
Go to the documentation of this file.
1 /* This software and supporting documentation are distributed by
2  * Institut Federatif de Recherche 49
3  * CEA/NeuroSpin, Batiment 145,
4  * 91191 Gif-sur-Yvette cedex
5  * France
6  *
7  * This software is governed by the CeCILL-B license under
8  * French law and abiding by the rules of distribution of free software.
9  * You can use, modify and/or redistribute the software under the
10  * terms of the CeCILL-B license as circulated by CEA, CNRS
11  * and INRIA at the following URL "http://www.cecill.info".
12  *
13  * As a counterpart to the access to the source code and rights to copy,
14  * modify and redistribute granted by the license, users are provided only
15  * with a limited warranty and the software's author, the holder of the
16  * economic rights, and the successive licensors have only limited
17  * liability.
18  *
19  * In this respect, the user's attention is drawn to the risks associated
20  * with loading, using, modifying and/or developing or reproducing the
21  * software by the user in light of its specific status of free software,
22  * that may mean that it is complicated to manipulate, and that also
23  * therefore means that it is reserved for developers and experienced
24  * professionals having in-depth computer knowledge. Users are therefore
25  * encouraged to load and test the software's suitability as regards their
26  * requirements in conditions enabling the security of their systems and/or
27  * data to be ensured and, more generally, to use and operate it in the
28  * same conditions as regards security.
29  *
30  * The fact that you are presently reading this means that you have had
31  * knowledge of the CeCILL-B license and that you accept its terms.
32  */
33 
34 
35 #ifndef ANA_SELECTION_SELECTFACTORY_H
36 #define ANA_SELECTION_SELECTFACTORY_H
37 
38 
39 #include <aims/vector/vector.h>
40 #include <list>
41 #include <map>
42 #include <set>
43 
44 
45 class Tree;
46 
47 
48 namespace anatomist
49 {
50  class AObject;
51  class AWindow;
52  class WSelectChooser;
53  class Referential;
54  class Selector;
55  class PostSelector;
56 
57 
65  {
66  public:
68  {
69  Normal = 0,
70  Add = 1,
71  Toggle = 2
72  };
73 
74  struct HColor
75  {
76  HColor() {}
77  HColor( float red, float grn, float blu, float al = 1.,
78  bool ntalp = false )
79  : r( red), g( grn ), b( blu ), a( al ), na( ntalp ) {}
80  bool operator == ( const HColor & ) const;
81  bool operator != ( const HColor & ) const;
82 
83  float r;
84  float g;
85  float b;
86  float a;
88  bool na;
89  };
90 
91  SelectFactory();
92  virtual ~SelectFactory();
93 
99  virtual WSelectChooser*
100  createSelectChooser( unsigned group,
101  const std::set<AObject *> & objects ) const;
102  const std::map<unsigned, std::set<AObject *> > & selected() const
103  { return( _selected() ); }
104  virtual void select( unsigned group, const std::set<AObject *> & obj,
105  const HColor* col = 0 ) const;
106  virtual void unselect( unsigned group,
107  const std::set<AObject *> & obj ) const;
108  virtual void unselectAll( unsigned group ) const;
110  virtual void selectAll( AWindow* win, const HColor* col = 0 ) const;
112  virtual void flip( unsigned group, const std::set<AObject *> & obj,
113  const HColor* col = 0 ) const;
114  virtual void select( SelectMode mode, unsigned group,
115  const std::set<AObject *> & obj,
116  const HColor* col = 0 ) const;
117  virtual bool isSelected( unsigned group, AObject* obj ) const;
118  virtual HColor highlightColor( AObject* obj ) const;
119  virtual void setHighlightColor( AObject* obj,
120  const HColor* col = 0 ) const;
122  virtual void refresh() const;
125  virtual void refreshSelectionRendering() const;
134  virtual void handleSelectionMenu( AWindow *win, int x, int y,
135  const Tree* specific = 0 );
136  virtual void propagateSelection( unsigned group ) const;
137 
138  static void setFactory( SelectFactory* fac );
139  static SelectFactory* factory();
141  static bool hasAncestor( const AWindow* win, AObject* obj );
142  static AObject* objectAt( AObject* o, const std::vector<float> & pos,
143  float tolerence, const Referential* wref,
144  const Point3df & wgeom,
145  const std::string & selector = "default" );
146  static void select( AWindow* w, const std::vector<float> & pos,
147  float tolerence, int modifier,
148  const std::string & selector = "default" );
149  static void findObjectsAt( AWindow* w, const std::vector<float> & pos,
150  float tolerence, std::set<AObject *>& shown,
151  std::set<AObject *>& hidden,
152  const std::string & selector );
153  static void registerSelector( const std::string & key, Selector* s );
155  static void registerPostSelector( const std::string & key,
156  PostSelector* s );
159  static void activatePostSelector( int priority, const std::string & psel );
161  static void deactivatePostSelector( const std::string & psel );
162  static void setSelectColor( const HColor & col );
163 
164  static HColor & selectColor();
165  static bool & selectColorInverse();
166 
167  virtual void remove( anatomist::AWindow* win );
168  virtual void removeFromThisWindow( anatomist::AWindow* win );
169 
170  protected:
171 
172  private:
174  static std::map<AObject*, HColor> & _highlightColors();
176  static std::set<AWindow *> & _winToRefresh();
177  static std::map<unsigned, std::set<AObject *> > & _selected();
178  };
179 
180 
181 
182  inline void SelectFactory::handleSelectionMenu( AWindow *, int, int,
183  const Tree* )
184  {
185  }
186 
187 }
188 
189 #endif
static bool hasAncestor(const AWindow *win, AObject *obj)
tells if win sees obj or one of its ancestors
Base class for selection chooser windows.
Definition: wSelChooser.h:50
virtual void removeFromThisWindow(anatomist::AWindow *win)
static void registerSelector(const std::string &key, Selector *s)
Base Anatomist object (abstract)
Definition: Object.h:95
Performs an action after an object has been selected (fiber tracking, ...)
Definition: postSelector.h:48
static HColor & selectColor()
virtual bool isSelected(unsigned group, AObject *obj) const
Abstract base class Anatomist window.
Definition: Window.h:57
static void registerPostSelector(const std::string &key, PostSelector *s)
Registers possible actions to be taken after object selection.
static bool & selectColorInverse()
bool operator==(const HColor &) const
virtual void setHighlightColor(AObject *obj, const HColor *col=0) const
static void setFactory(SelectFactory *fac)
virtual void propagateSelection(unsigned group) const
static void activatePostSelector(int priority, const std::string &psel)
Activates a registered post-selector, it will be used after every object selection with a given prior...
static SelectFactory * factory()
virtual void refresh() const
Redraws objects in involved windows.
virtual void handleSelectionMenu(AWindow *win, int x, int y, const Tree *specific=0)
draws / handles the selection menu (right click)
static void setSelectColor(const HColor &col)
static void findObjectsAt(AWindow *w, const std::vector< float > &pos, float tolerence, std::set< AObject *> &shown, std::set< AObject *> &hidden, const std::string &selector)
HColor(float red, float grn, float blu, float al=1., bool ntalp=false)
Definition: selectFactory.h:77
virtual void refreshSelectionRendering() const
Redraws all windows containing selected objects (called after selection rendering mode has changed) ...
virtual void unselectAll(unsigned group) const
static void deactivatePostSelector(const std::string &psel)
Dectivates a post-selector: won&#39;t be called anymore.
const std::map< unsigned, std::set< AObject * > > & selected() const
virtual void unselect(unsigned group, const std::set< AObject *> &obj) const
Central selection center.
Definition: selectFactory.h:64
bool operator!=(const HColor &) const
virtual HColor highlightColor(AObject *obj) const
virtual WSelectChooser * createSelectChooser(unsigned group, const std::set< AObject *> &objects) const
Creates a selection choice window.
virtual void flip(unsigned group, const std::set< AObject *> &obj, const HColor *col=0) const
Inverts state of given objects.
Referential: marker for transformations, with an associated color.
Definition: Referential.h:54
virtual void selectAll(AWindow *win, const HColor *col=0) const
Selects all selectable objects in a given window.
virtual void select(unsigned group, const std::set< AObject *> &obj, const HColor *col=0) const
static AObject * objectAt(AObject *o, const std::vector< float > &pos, float tolerence, const Referential *wref, const Point3df &wgeom, const std::string &selector="default")