CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_6/src/Fireworks/Core/interface/FWEventItem.h

Go to the documentation of this file.
00001 #ifndef Fireworks_Core_FWEventItem_h
00002 #define Fireworks_Core_FWEventItem_h
00003 // -*- C++ -*-
00004 //
00005 // Package:     Core
00006 // Class  :     FWEventItem
00007 //
00016 //
00017 // Original Author:  Chris Jones
00018 //         Created:  Thu Jan  3 14:02:21 EST 2008
00019 // $Id: FWEventItem.h,v 1.49 2011/11/18 02:57:07 amraktad Exp $
00020 //
00021 
00022 // system include files
00023 #include <string>
00024 #include <vector>
00025 #include "Reflex/Type.h"
00026 #include <boost/shared_ptr.hpp>
00027 #include <sigc++/connection.h>
00028 
00029 // user include files
00030 #include "Fireworks/Core/interface/FWDisplayProperties.h"
00031 #include "Fireworks/Core/interface/FWPhysicsObjectDesc.h"
00032 #include "Fireworks/Core/interface/FWModelChangeSignal.h"
00033 #include "Fireworks/Core/interface/FWItemChangeSignal.h"
00034 
00035 #include "Fireworks/Core/interface/FWModelFilter.h"
00036 #include "Fireworks/Core/interface/FWItemValueGetter.h"
00037 
00038 #include "Fireworks/Core/interface/Context.h"
00039 
00040 // forward declarations
00041 class TClass;
00042 class FWModelChangeManager;
00043 class FWSelectionManager;
00044 class FWGeometry;
00045 class TVirtualCollectionProxy;
00046 class FWItemAccessorBase;
00047 class FWProxyBuilderConfiguration;
00048 class FWConfiguration;
00049 
00050 namespace edm {
00051    class EventBase;
00052 }
00053 namespace fireworks {
00054    class Context;
00055 }
00056 
00057 class FWEventItem
00058 {
00059 public:
00060    struct ModelInfo {
00061       FWDisplayProperties m_displayProperties;
00062       bool m_isSelected;
00063       ModelInfo(const FWDisplayProperties& iProps, bool iIsSelected) :
00064          m_displayProperties(iProps),
00065          m_isSelected(iIsSelected) {
00066       }
00067 
00068       const FWDisplayProperties& displayProperties() const {
00069          return m_displayProperties;
00070       }
00071       bool isSelected() const {
00072          return m_isSelected;
00073       }
00074    };
00075 
00076    FWEventItem(fireworks::Context* iContext,
00077                unsigned int iItemId,
00078                boost::shared_ptr<FWItemAccessorBase> iAccessor,
00079                const FWPhysicsObjectDesc& iDesc,  const FWConfiguration* pbConf = 0);
00080    virtual ~FWEventItem();
00081 
00082    // ---------- const member functions ---------------------
00083 #if !defined(__CINT__) && !defined(__MAKECINT__)
00084    template<class T>
00085    void get(const T*& oData) const {
00086       oData=reinterpret_cast<const T*>(data(typeid(T)));
00087    }
00088 #endif
00089    const void* data(const std::type_info&) const;
00090    const FWDisplayProperties& defaultDisplayProperties() const;
00091 
00093    int layer() const;
00095    bool isInFront() const;
00097    bool isInBack() const;
00098 
00099    const std::string& filterExpression() const;
00102    unsigned int id() const;
00103    const std::string& name() const;
00104    const TClass* type() const;
00106    const std::string& purpose() const;
00107 
00108    const std::string& moduleLabel() const;
00109    const std::string& productInstanceLabel() const;
00110    const std::string& processName() const;
00111 
00112    const TClass* modelType() const;
00113    ModelInfo modelInfo(int iIndex) const;    //return copy for now since want to be able to change visibility
00114    size_t size() const;
00115    const void* modelData(int iIndex) const;
00116    std::string modelName(int iIndex) const;
00117 
00119   const  FWItemValueGetter& valueGetter() const { return m_interestingValueGetter; }
00120    bool haveInterestingValue() const;
00121    const std::string& modelInterestingValueAsString(int iIndex) const;
00122 
00123    bool isCollection() const;
00124 
00125    //convenience methods
00126 
00127    const fireworks::Context& context () const {
00128       return *m_context;
00129    }
00130 
00131    FWModelChangeManager* changeManager() const {
00132       return m_context->modelChangeManager();
00133    }
00134    FWSelectionManager* selectionManager() const {
00135       return m_context->selectionManager();
00136    }
00137    
00138    FWColorManager* colorManager() const {
00139       return m_context->colorManager();
00140    }
00141 
00142    bool hasEvent() const {
00143       return 0 != m_event;
00144    }
00145 
00146    // hackery methods
00147    const edm::EventBase *getEvent () const {
00148       return m_event;
00149    }
00150 
00151 
00153    bool hasError() const;
00155    const std::string& errorMessage() const;
00156    
00157    // ---------- static member functions --------------------
00158 
00159    static int minLayerValue();
00160    static int maxLayerValue();
00161 
00162    // ---------- member functions ---------------------------
00163    void setEvent(const edm::EventBase* iEvent);
00164 
00165    const FWGeometry* getGeom() const;
00166    FWProxyBuilderConfiguration* getConfig() const { return m_proxyBuilderConfig; }
00167 
00168    void setLabels(const std::string& iModule,
00169                   const std::string& iProductInstance,
00170                   const std::string& iProcess);
00171    void setName(const std::string& iName);
00172    void setDefaultDisplayProperties(const FWDisplayProperties&);
00174    void setFilterExpression(const std::string& );
00175 
00177    void selectItem();
00178    void unselectItem();
00179    void toggleSelectItem();
00180    bool itemIsSelected() const;
00181    
00183    void moveToFront();
00184    void moveToBack();
00185    void moveToLayer(int layer);
00186 
00187    void proxyConfigChanged();
00188 
00189    void unselect(int iIndex) const;
00190    void select(int iIndex) const;
00191    void toggleSelect(int iIndex) const;
00192    void setDisplayProperties(int iIndex, const FWDisplayProperties&) const;
00193 
00194    void destroy() const;
00196    mutable FWModelChangeSignal changed_;
00197 
00199    mutable FWItemChangeSignal itemChanged_;
00200 
00204    mutable FWItemChangeSignal preItemChanged_;
00205 
00208    mutable FWItemChangeSignal defaultDisplayPropertiesChanged_;
00209    
00211    mutable FWItemChangeSignal filterChanged_;
00212 
00215    mutable FWItemChangeSignal goingToBeDestroyed_;
00216 private:
00217    //FWEventItem(const FWEventItem&); // stop default
00218 
00219    //const FWEventItem& operator=(const FWEventItem&); // stop default
00220    void setData(const Reflex::Object& ) const;
00221 
00222    void getPrimaryData() const;
00223    void runFilter();
00224    void handleChange();
00225    // ---------- member data --------------------------------
00226    const fireworks::Context* m_context;
00227    unsigned int m_id;
00228    std::string m_name;
00229    const TClass* m_type;
00230    std::string m_purpose;
00231    boost::shared_ptr<FWItemAccessorBase> m_accessor;
00232    FWDisplayProperties m_displayProperties;
00233    int m_layer;
00234    mutable std::vector<ModelInfo> m_itemInfos;
00235 
00236    //This will probably moved to a FWEventItemRetriever class
00237    std::string m_moduleLabel;
00238    std::string m_productInstanceLabel;
00239    std::string m_processName;
00240    const edm::EventBase* m_event;
00241    ROOT::Reflex::Type m_wrapperType;
00242    FWItemValueGetter m_interestingValueGetter;
00243 
00244    FWModelFilter m_filter;
00245    mutable bool m_printedErrorThisEvent;
00246    mutable std::string m_errorMessage;
00247    
00248    bool m_isSelected;
00249 
00250 
00251    FWProxyBuilderConfiguration*  m_proxyBuilderConfig;
00252 };
00253 
00254 
00255 #endif