Go to the documentation of this file.00001 #ifndef Fireworks_Core_FWGeometryTableManagerBase_h
00002 #define Fireworks_Core_FWGeometryTableManagerBase_h
00003
00004
00005
00006
00007
00016
00017
00018
00019
00020
00021
00022 #include <sigc++/sigc++.h>
00023
00024 #include "Fireworks/Core/interface/FWGeometryTableViewBase.h"
00025
00026 #include "Fireworks/TableWidget/interface/FWTableManagerBase.h"
00027 #include "Fireworks/TableWidget/interface/FWTextTreeCellRenderer.h"
00028 #include "Fireworks/TableWidget/interface/FWTextTableCellRenderer.h"
00029 #include "Fireworks/TableWidget/interface/FWTableCellRendererBase.h"
00030
00031 #include "TGeoNode.h"
00032
00033 class FWTableCellRendererBase;
00034 class TGeoNode;
00035 class TEvePointSet;
00036
00037 class FWGeometryTableManagerBase : public FWTableManagerBase
00038 {
00039 friend class FWGeometryTableViewBase;
00040
00041 public:
00042
00043
00044 enum Bits
00045 {
00046 kExpanded = BIT(0),
00047
00048 kVisNodeSelf = BIT(1),
00049 kVisNodeChld = BIT(2),
00050
00051 kHighlighted = BIT(3),
00052 kSelected = BIT(4)
00053 };
00054
00055 struct NodeInfo
00056 {
00057 NodeInfo():m_node(0), m_parent(-1), m_color(0), m_level(-1),
00058 m_flags(kVisNodeSelf|kVisNodeChld) {}
00059
00060 NodeInfo(TGeoNode* n, Int_t p, Color_t col, Char_t l, UChar_t f = kVisNodeSelf|kVisNodeChld ):m_node(n), m_parent(p), m_color(col), m_level(l),
00061 m_flags(f) {}
00062
00063 TGeoNode* m_node;
00064 Int_t m_parent;
00065 Color_t m_color;
00066 UChar_t m_level;
00067 UChar_t m_flags;
00068 UChar_t m_transparency;
00069
00070
00071 const char* name() const;
00072
00073
00074 void setBit(UChar_t f) { m_flags |= f;}
00075 void resetBit(UChar_t f) { m_flags &= ~f; }
00076 void setBitVal(UChar_t f, bool x) { x ? setBit(f) : resetBit(f);}
00077
00078 bool testBit(UChar_t f) const { return (m_flags & f) == f; }
00079 bool testBitAny(UChar_t f) const { return (m_flags & f) != 0; }
00080
00081 void switchBit(UChar_t f) { testBit(f) ? resetBit(f) : setBit(f); }
00082 };
00083
00084
00085 typedef std::vector<NodeInfo> Entries_v;
00086 typedef Entries_v::iterator Entries_i;
00087
00088 int m_highlightIdx;
00089
00090
00091
00092 class ColorBoxRenderer : public FWTableCellRendererBase
00093 {
00094 public:
00095 ColorBoxRenderer();
00096 virtual ~ColorBoxRenderer();
00097
00098 virtual UInt_t width() const { return m_width; }
00099 virtual UInt_t height() const { return m_height; }
00100 void setData(Color_t c, bool);
00101 virtual void draw(Drawable_t iID, int iX, int iY, unsigned int iWidth, unsigned int iHeight);
00102
00103 UInt_t m_width;
00104 UInt_t m_height;
00105 Pixel_t m_color;
00106 bool m_isSelected;
00107 TGGC* m_colorContext;
00108 };
00109
00110 protected:
00111 virtual bool nodeIsParent(const NodeInfo&) const { return false; }
00112
00113
00114 public:
00115 FWGeometryTableManagerBase();
00116 virtual ~FWGeometryTableManagerBase();
00117
00118 virtual const char* cellName(const NodeInfo& ) const { return 0;}
00119
00120
00121
00122 virtual int unsortedRowNumber(int unsorted) const;
00123 virtual int numberOfRows() const;
00124 virtual std::vector<std::string> getTitles() const;
00125
00126 virtual const std::string title() const;
00127
00128
00129
00130
00131
00132 std::vector<int> rowToIndex() { return m_row_to_index; }
00133
00134
00135 virtual void implSort(int, bool) {}
00136
00137 bool nodeImported(int idx) const;
00138
00139
00140 NodeInfo* getSelected();
00141
00142 Entries_v& refEntries() {return m_entries;}
00143 NodeInfo& refEntry(int i) {return m_entries[i];}
00144
00145 void loadGeometry( TGeoNode* , TObjArray*);
00146
00147 void setBackgroundToWhite(bool);
00148 void getNodePath(int, std::string&) const;
00149
00150 int getLevelOffset() const { return m_levelOffset; }
00151 void setLevelOffset(int x) { m_levelOffset =x; }
00152
00153 void setDaughtersSelfVisibility(bool);
00154
00155 void getNodeMatrix(const NodeInfo& nodeInfo, TGeoHMatrix& mat) const;
00156
00157
00158 virtual void setVisibility(NodeInfo&, bool );
00159 virtual void setVisibilityChld(NodeInfo&, bool);
00160 virtual void setDaughtersSelfVisibility(int selectedIdx, bool v);
00161
00162 virtual bool getVisibilityChld(const NodeInfo& nodeInfo) const;
00163 virtual bool getVisibility (const NodeInfo& nodeInfo) const;
00164
00165 bool isNodeRendered(int idx, int top_node_idx) const;
00166
00167 static void getNNodesTotal(TGeoNode* geoNode, int& off);
00168
00169 void showEditor(int);
00170 void cancelEditor(bool);
00171 void setCellValueEditor(TGTextEntry *editor);
00172 void applyTransparencyFromEditor();
00173
00174 FWGeometryTableManagerBase(const FWGeometryTableManagerBase&);
00175 const FWGeometryTableManagerBase& operator=(const FWGeometryTableManagerBase&);
00176
00177
00178 bool firstColumnClicked(int row, int xPos);
00179
00180
00181 void redrawTable(bool setExpand = false);
00182
00183 virtual void recalculateVisibility() = 0;
00184
00185
00186 virtual bool cellDataIsSortable() const { return false ; }
00187
00188
00189
00190
00191 mutable TGGC* m_highlightContext;
00192 mutable FWTextTreeCellRenderer m_renderer;
00193 mutable ColorBoxRenderer m_colorBoxRenderer;
00194
00195 std::vector<int> m_row_to_index;
00196
00197 Entries_v m_entries;
00198
00199 int m_levelOffset;
00200
00201 TGTextEntry* m_editor;
00202 int m_editTransparencyIdx;
00203 };
00204
00205
00206
00207 inline void FWGeometryTableManagerBase::getNNodesTotal(TGeoNode* geoNode, int& off)
00208 {
00209 int nD = geoNode->GetNdaughters();
00210 off += nD;
00211 for (int i = 0; i < nD; ++i )
00212 {
00213 getNNodesTotal(geoNode->GetDaughter(i), off);
00214 }
00215 }
00216
00217 #endif