ROOT logo
// @(#)root/eve:$Id: TEveSelection.h 30891 2009-10-27 19:28:36Z matevz $
// Author: Matevz Tadel 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TEveSelection
#define ROOT_TEveSelection

#include "TEveElement.h"

#include "TQObject.h"

#include <map>

class TEveSelection : public TEveElementList,
                      public TQObject
{
public:
   enum EPickToSelect  // How to convert picking events to top selected element:
   {
      kPS_Ignore,        // ignore picking
      kPS_Element,       // select element (default for selection)
      kPS_Projectable,   // select projectable
      kPS_Compound,      // select compound
      kPS_PableCompound, // select projectable and compound
      kPS_Master         // select master element (top-level compound)
   };

private:
   TEveSelection(const TEveSelection&);            // Not implemented
   TEveSelection& operator=(const TEveSelection&); // Not implemented

protected:
   typedef std::map<TEveElement*, Set_t>           SelMap_t;
   typedef std::map<TEveElement*, Set_t>::iterator SelMap_i;

   Int_t            fPickToSelect;
   Bool_t           fActive;
   Bool_t           fIsMaster;

   SelMap_t         fImpliedSelected;

   Select_foo       fSelElement;
   ImplySelect_foo  fIncImpSelElement;
   ImplySelect_foo  fDecImpSelElement;

   void DoElementSelect  (SelMap_i entry);
   void DoElementUnselect(SelMap_i entry);

public:
   TEveSelection(const char* n="TEveSelection", const char* t="");
   virtual ~TEveSelection() {}

   void SetHighlightMode();

   Int_t  GetPickToSelect()   const { return fPickToSelect; }
   void   SetPickToSelect(Int_t ps) { fPickToSelect = ps; }

   Bool_t GetIsMaster()       const { return fIsMaster; }
   void   SetIsMaster(Bool_t m)     { fIsMaster = m; }

   virtual Bool_t AcceptElement(TEveElement* el);

   virtual void AddElement(TEveElement* el);
   virtual void RemoveElement(TEveElement* el);
   virtual void RemoveElementLocal(TEveElement* el);
   virtual void RemoveElements();
   virtual void RemoveElementsLocal();

   virtual void RemoveImpliedSelected(TEveElement* el);

   void SelectionAdded(TEveElement* el);    // *SIGNAL*
   void SelectionRemoved(TEveElement* el);  // *SIGNAL*
   void SelectionCleared();                 // *SIGNAL*
   void SelectionRepeated(TEveElement* el); // *SIGNAL*

   // ----------------------------------------------------------------
   // Interface to make selection active/non-active.
   // Not used yet, assumed to be active all the time.

   virtual void ActivateSelection();
   virtual void DeactivateSelection();

   // ----------------------------------------------------------------
   // User input processing.

   TEveElement* MapPickedToSelected(TEveElement* el);

   virtual void UserPickedElement(TEveElement* el, Bool_t multi=kFALSE);
   virtual void UserRePickedElement(TEveElement* el);
   virtual void UserUnPickedElement(TEveElement* el);

   // ----------------------------------------------------------------

   ClassDef(TEveSelection, 0); // Container for selected and highlighted elements.
};

#endif
 TEveSelection.h:1
 TEveSelection.h:2
 TEveSelection.h:3
 TEveSelection.h:4
 TEveSelection.h:5
 TEveSelection.h:6
 TEveSelection.h:7
 TEveSelection.h:8
 TEveSelection.h:9
 TEveSelection.h:10
 TEveSelection.h:11
 TEveSelection.h:12
 TEveSelection.h:13
 TEveSelection.h:14
 TEveSelection.h:15
 TEveSelection.h:16
 TEveSelection.h:17
 TEveSelection.h:18
 TEveSelection.h:19
 TEveSelection.h:20
 TEveSelection.h:21
 TEveSelection.h:22
 TEveSelection.h:23
 TEveSelection.h:24
 TEveSelection.h:25
 TEveSelection.h:26
 TEveSelection.h:27
 TEveSelection.h:28
 TEveSelection.h:29
 TEveSelection.h:30
 TEveSelection.h:31
 TEveSelection.h:32
 TEveSelection.h:33
 TEveSelection.h:34
 TEveSelection.h:35
 TEveSelection.h:36
 TEveSelection.h:37
 TEveSelection.h:38
 TEveSelection.h:39
 TEveSelection.h:40
 TEveSelection.h:41
 TEveSelection.h:42
 TEveSelection.h:43
 TEveSelection.h:44
 TEveSelection.h:45
 TEveSelection.h:46
 TEveSelection.h:47
 TEveSelection.h:48
 TEveSelection.h:49
 TEveSelection.h:50
 TEveSelection.h:51
 TEveSelection.h:52
 TEveSelection.h:53
 TEveSelection.h:54
 TEveSelection.h:55
 TEveSelection.h:56
 TEveSelection.h:57
 TEveSelection.h:58
 TEveSelection.h:59
 TEveSelection.h:60
 TEveSelection.h:61
 TEveSelection.h:62
 TEveSelection.h:63
 TEveSelection.h:64
 TEveSelection.h:65
 TEveSelection.h:66
 TEveSelection.h:67
 TEveSelection.h:68
 TEveSelection.h:69
 TEveSelection.h:70
 TEveSelection.h:71
 TEveSelection.h:72
 TEveSelection.h:73
 TEveSelection.h:74
 TEveSelection.h:75
 TEveSelection.h:76
 TEveSelection.h:77
 TEveSelection.h:78
 TEveSelection.h:79
 TEveSelection.h:80
 TEveSelection.h:81
 TEveSelection.h:82
 TEveSelection.h:83
 TEveSelection.h:84
 TEveSelection.h:85
 TEveSelection.h:86
 TEveSelection.h:87
 TEveSelection.h:88
 TEveSelection.h:89
 TEveSelection.h:90
 TEveSelection.h:91
 TEveSelection.h:92
 TEveSelection.h:93
 TEveSelection.h:94
 TEveSelection.h:95
 TEveSelection.h:96
 TEveSelection.h:97
 TEveSelection.h:98
 TEveSelection.h:99
 TEveSelection.h:100
 TEveSelection.h:101
 TEveSelection.h:102
 TEveSelection.h:103
 TEveSelection.h:104