File indexing completed on 2024-09-07 04:36:20
0001 #include <iostream>
0002
0003 #include <functional>
0004 #include <boost/regex.hpp>
0005
0006 #include "Fireworks/Core/interface/FWGeometryTableViewBase.h"
0007 #include "Fireworks/Core/interface/FWGeoTopNode.h"
0008 #include "Fireworks/Core/interface/fwLog.h"
0009 #include "Fireworks/Core/interface/FWGeometryTableManagerBase.h"
0010 #include "Fireworks/TableWidget/interface/FWTableWidget.h"
0011 #include "Fireworks/Core/interface/FWGUIManager.h"
0012 #include "Fireworks/Core/interface/FWColorManager.h"
0013 #include "Fireworks/Core/interface/FWParameterSetterBase.h"
0014 #include "Fireworks/Core/src/FWColorSelect.h"
0015 #include "Fireworks/Core/src/FWPopupMenu.cc"
0016 #include "Fireworks/Core/src/FWGeoTopNodeScene.h"
0017 #include "Fireworks/Core/src/FWEveDigitSetScalableMarker.h"
0018 #include "Fireworks/Core/interface/CmsShowViewPopup.h"
0019
0020 #include "TGFileDialog.h"
0021 #include "TGeoNode.h"
0022 #include "TGeoMatrix.h"
0023 #include "TGStatusBar.h"
0024 #include "TGButton.h"
0025 #include "TGLabel.h"
0026 #include "TGLPhysicalShape.h"
0027 #include "TGMenu.h"
0028 #include "TGComboBox.h"
0029
0030 #include "TGeoShape.h"
0031 #include "TGeoBBox.h"
0032 #include "TEveManager.h"
0033 #include "TEveGeoNode.h"
0034 #include "TEveScene.h"
0035 #include "TEveSceneInfo.h"
0036 #include "TEveViewer.h"
0037 #include "TGLViewer.h"
0038 #include "TGLCamera.h"
0039 #include "TEveSelection.h"
0040 #include "TVirtualX.h"
0041 #ifdef PERFTOOL_BROWSER
0042 #include <google/profiler.h>
0043 #endif
0044
0045
0046
0047
0048
0049
0050
0051 Bool_t FWGeometryTableViewBase::FWViewCombo::HandleButton(Event_t* event) {
0052 if (event->fType == kButtonPress) {
0053 bool map = false;
0054
0055 FWPopupMenu* m_viewPopup = new FWPopupMenu(nullptr);
0056
0057 TEveElementList* views = gEve->GetViewers();
0058 int idx = 0;
0059
0060 for (TEveElement::List_i it = views->BeginChildren(); it != views->EndChildren(); ++it) {
0061 TEveViewer* v = ((TEveViewer*)(*it));
0062 if (strstr(v->GetElementName(), "3D")) {
0063 bool added = false;
0064 m_viewPopup->AddEntry(v->GetElementName(), idx);
0065
0066 for (TEveElement::List_i eit = v->BeginChildren(); eit != v->EndChildren(); ++eit) {
0067 TEveScene* s = ((TEveSceneInfo*)*eit)->GetScene();
0068 if (m_el && s->HasChildren() && s->FirstChild() == m_el) {
0069 added = true;
0070 break;
0071 }
0072 }
0073 map = true;
0074 if (added)
0075 m_viewPopup->CheckEntry(idx);
0076 }
0077 ++idx;
0078 }
0079
0080 if (map) {
0081 Window_t wdummy;
0082 Int_t ax, ay;
0083 gVirtualX->TranslateCoordinates(GetId(),
0084 gClient->GetDefaultRoot()->GetId(),
0085 event->fX,
0086 event->fY,
0087 ax,
0088 ay,
0089 wdummy);
0090
0091 m_viewPopup->PlaceMenu(ax, ay, true, true);
0092 m_viewPopup->Connect("Activated(Int_t)",
0093 "FWGeometryTableViewBase",
0094 const_cast<FWGeometryTableViewBase*>(m_tableView),
0095 "selectView(Int_t)");
0096 } else {
0097 fwLog(fwlog::kInfo) << "No 3D View added. \n";
0098 }
0099 }
0100 return true;
0101 }
0102
0103
0104
0105
0106
0107 namespace {
0108 class FWGeometryVF : public TGVerticalFrame {
0109 public:
0110 FWGeometryVF(const TGWindow* p, FWGeometryTableViewBase* tv) : TGVerticalFrame(p), m_tv(tv) {
0111 m_tv = tv;
0112 gVirtualX->SelectInput(GetId(),
0113 kKeyPressMask | kKeyReleaseMask | kExposureMask | kPointerMotionMask |
0114 kStructureNotifyMask | kFocusChangeMask | kEnterWindowMask | kLeaveWindowMask);
0115 }
0116
0117 ~FWGeometryVF() override {}
0118
0119 Bool_t HandleKey(Event_t* event) override {
0120 if (event->fCode == (UInt_t)gVirtualX->KeysymToKeycode(kKey_Escape)) {
0121 m_tv->getTableManager()->cancelEditor(true);
0122 }
0123 return TGCompositeFrame::HandleKey(event);
0124 }
0125
0126 FWGeometryTableViewBase* m_tv;
0127 };
0128
0129 class FWTranspEntry : public TGTextEntry {
0130 public:
0131 FWTranspEntry(const TGWindow* p, FWGeometryTableViewBase* tv) : TGTextEntry(p), m_tv(tv) {}
0132 ~FWTranspEntry() override {}
0133
0134 Bool_t HandleKey(Event_t* event) override {
0135 if (event->fCode == (UInt_t)gVirtualX->KeysymToKeycode(kKey_Escape)) {
0136 m_tv->getTableManager()->cancelEditor(true);
0137 }
0138 return TGTextEntry::HandleKey(event);
0139 }
0140 FWGeometryTableViewBase* m_tv;
0141 };
0142 }
0143
0144
0145
0146
0147
0148 FWGeometryTableViewBase::FWGeometryTableViewBase(TEveWindowSlot* iParent,
0149 FWViewType::EType type,
0150 FWColorManager* colMng)
0151 : FWViewBase(type),
0152 m_topNodeIdx(this, "TopNodeIndex", -1l, 0, 1e7),
0153 m_autoExpand(this, "ExpandList:", 1l, 0l, 100l),
0154 m_enableHighlight(this, "EnableHighlight", true),
0155 m_parentTransparencyFactor(this, "ParentTransparencyFactor", 1l, 0l, 100l),
0156 m_leafTransparencyFactor(this, "LeafTransparencyFactor", 1l, 0l, 100l),
0157 m_minParentTransparency(this, "MinParentTransparency", type == FWViewType::kOverlapTable ? 0l : 90l, 0l, 100l),
0158 m_minLeafTransparency(this, "MinLeafTransparency", 0l, 0l, 100l),
0159 m_colorManager(colMng),
0160 m_colorPopup(nullptr),
0161 m_eveWindow(nullptr),
0162 m_frame(nullptr),
0163 m_viewBox(nullptr),
0164 m_viewersConfig(nullptr),
0165 m_enableRedraw(true),
0166 m_marker(nullptr),
0167 m_eveTopNode(nullptr),
0168 m_eveScene(nullptr),
0169 m_tableRowIndexForColorPopup(-1) {
0170 m_eveWindow = iParent->MakeFrame(nullptr);
0171 TGCompositeFrame* xf = m_eveWindow->GetGUICompositeFrame();
0172
0173 m_frame = new FWGeometryVF(xf, this);
0174
0175 xf->AddFrame(m_frame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
0176
0177 m_parentTransparencyFactor.changed_.connect(std::bind(&FWGeometryTableViewBase::refreshTable3D, this));
0178 m_leafTransparencyFactor.changed_.connect(std::bind(&FWGeometryTableViewBase::refreshTable3D, this));
0179 m_minParentTransparency.changed_.connect(std::bind(&FWGeometryTableViewBase::refreshTable3D, this));
0180 m_minLeafTransparency.changed_.connect(std::bind(&FWGeometryTableViewBase::refreshTable3D, this));
0181 }
0182
0183 void FWGeometryTableViewBase::postConst() {
0184 m_tableWidget = new FWTableWidget(getTableManager(), m_frame);
0185 m_frame->AddFrame(m_tableWidget, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 2, 2, 0, 0));
0186 m_tableWidget->SetBackgroundColor(0xffffff);
0187 m_tableWidget->SetLineSeparatorColor(0x000000);
0188 m_tableWidget->SetHeaderBackgroundColor(0xececec);
0189 m_tableWidget->Connect("cellClicked(Int_t,Int_t,Int_t,Int_t,Int_t,Int_t)",
0190 "FWGeometryTableViewBase",
0191 this,
0192 "cellClicked(Int_t,Int_t,Int_t,Int_t,Int_t,Int_t)");
0193 m_tableWidget->disableGrowInWidth();
0194
0195
0196 FWTranspEntry* editor = new FWTranspEntry(m_tableWidget->body(), this);
0197 editor->SetBackgroundColor(gVirtualX->GetPixel(kYellow - 7));
0198 editor->SetFrameDrawn(false);
0199 editor->Connect("ReturnPressed()", "FWGeometryTableViewBase", this, "transparencyChanged()");
0200 getTableManager()->setCellValueEditor(editor);
0201
0202 m_frame->MapSubwindows();
0203 editor->UnmapWindow();
0204 m_frame->Layout();
0205 m_eveWindow->GetGUICompositeFrame()->Layout();
0206 m_frame->MapWindow();
0207 }
0208
0209
0210 FWGeometryTableViewBase::~FWGeometryTableViewBase() {
0211
0212 TGCompositeFrame* frame = m_eveWindow->GetGUICompositeFrame();
0213 frame->RemoveFrame(m_frame);
0214 delete m_frame;
0215
0216 m_eveWindow->DestroyWindowAndSlot();
0217 delete getTableManager();
0218 }
0219
0220 namespace {
0221 TEveScene* getMarkerScene(TEveViewer* v) {
0222 TEveElement* si = v->FindChild(Form("SI - EventScene %s", v->GetElementName()));
0223 if (si)
0224 return ((TEveSceneInfo*)(si))->GetScene();
0225 else
0226 return nullptr;
0227 }
0228 }
0229
0230
0231 void FWGeometryTableViewBase::cdNode(int idx) {
0232 std::string p;
0233 getTableManager()->getNodePath(idx, p);
0234 setPath(idx, p);
0235 }
0236
0237 void FWGeometryTableViewBase::cdTop() {
0238 std::string path = "/";
0239 path += getTableManager()->refEntries().at(0).name();
0240 setPath(-1, path);
0241 }
0242
0243 void FWGeometryTableViewBase::cdUp() {
0244 if (getTopNodeIdx() != -1) {
0245 int pIdx = getTableManager()->refEntries()[getTopNodeIdx()].m_parent;
0246 std::string p;
0247 getTableManager()->getNodePath(pIdx, p);
0248 setPath(pIdx, p);
0249 }
0250 }
0251
0252 void FWGeometryTableViewBase::setPath(int parentIdx, std::string&) {
0253 m_eveTopNode->clearSelection();
0254
0255
0256 m_topNodeIdx.set(parentIdx);
0257
0258 getTableManager()->setLevelOffset(getTableManager()->refEntries().at(getTopNodeIdx()).m_level);
0259
0260 checkExpandLevel();
0261 refreshTable3D();
0262 }
0263
0264
0265
0266 void FWGeometryTableViewBase::checkExpandLevel() {
0267
0268 int ae = m_autoExpand.value();
0269 if (m_topNodeIdx.value() > 0)
0270 ae += getTableManager()->refEntries().at(m_topNodeIdx.value()).m_level;
0271
0272 for (FWGeometryTableManagerBase::Entries_i i = getTableManager()->refEntries().begin();
0273 i != getTableManager()->refEntries().end();
0274 ++i) {
0275 if (i->m_level < ae)
0276 i->setBit(FWGeometryTableManagerBase::kExpanded);
0277 else
0278 i->resetBit(FWGeometryTableManagerBase::kExpanded);
0279 }
0280 }
0281
0282
0283
0284 void FWGeometryTableViewBase::populate3DViewsFromConfig() {
0285
0286 if (m_viewersConfig) {
0287 TEveElementList* viewers = gEve->GetViewers();
0288 const FWConfiguration::KeyValues* keyVals = m_viewersConfig->keyValues();
0289
0290 if (nullptr != keyVals) {
0291 for (FWConfiguration::KeyValuesIt it = keyVals->begin(); it != keyVals->end(); ++it) {
0292 TString sname = it->first;
0293 TEveViewer* v = dynamic_cast<TEveViewer*>(viewers->FindChild(sname.Data()));
0294 if (!v) {
0295 fwLog(fwlog::kError) << "FWGeometryTableViewBase::populate3DViewsFromConfig no viewer found " << it->first
0296 << std::endl;
0297 return;
0298 }
0299 v->AddScene(m_eveScene);
0300 m_viewBox->setElement(m_eveTopNode);
0301 if (m_marker)
0302 getMarkerScene(v)->AddElement(m_marker);
0303
0304 gEve->FullRedraw3D(false, true);
0305 }
0306 }
0307 }
0308 }
0309
0310
0311
0312 void FWGeometryTableViewBase::selectView(int idx) {
0313
0314
0315 m_viewBox->setElement(m_eveTopNode);
0316
0317 TEveElement::List_i it = gEve->GetViewers()->BeginChildren();
0318 std::advance(it, idx);
0319 TEveViewer* v = (TEveViewer*)(*it);
0320
0321 for (TEveElement::List_i eit = v->BeginChildren(); eit != v->EndChildren(); ++eit) {
0322 if ((((TEveSceneInfo*)(*eit))->GetScene()) == m_eveScene) {
0323 v->RemoveElement(*eit);
0324 if (m_marker)
0325 getMarkerScene(v)->RemoveElement(m_marker);
0326 gEve->Redraw3D();
0327 return;
0328 }
0329 }
0330
0331 if (m_marker)
0332 getMarkerScene(v)->AddElement(m_marker);
0333 v->AddScene(m_eveScene);
0334 gEve->Redraw3D();
0335 }
0336
0337
0338
0339 void FWGeometryTableViewBase::setColumnSelected(int idx) {
0340
0341 if (gEve->GetSelection()->HasChild(m_eveTopNode))
0342 gEve->GetSelection()->RemoveElement(m_eveTopNode);
0343
0344 if (gEve->GetHighlight()->HasChild(m_eveTopNode))
0345 gEve->GetHighlight()->RemoveElement(m_eveTopNode);
0346
0347
0348 m_eveTopNode->UnSelected();
0349 m_eveTopNode->UnHighlighted();
0350
0351 if (m_eveTopNode->selectPhysicalFromTable(idx))
0352 gEve->GetSelection()->AddElement(m_eveTopNode);
0353
0354 getTableManager()->refEntry(idx).setBit(FWGeometryTableManagerBase::kSelected);
0355 getTableManager()->redrawTable();
0356 gEve->Redraw3D();
0357 }
0358
0359
0360 void FWGeometryTableViewBase::cellClicked(Int_t iRow, Int_t iColumn, Int_t iButton, Int_t iKeyMod, Int_t x, Int_t y) {
0361 int idx = getTableManager()->rowToIndex()[iRow];
0362 FWGeometryTableManagerBase::NodeInfo& ni = getTableManager()->refEntries()[idx];
0363
0364 if (iColumn != 2)
0365 getTableManager()->cancelEditor(false);
0366
0367 bool elementChanged = false;
0368 if (iButton == kButton1) {
0369 if (iColumn == 0) {
0370 Window_t wdummy;
0371 Int_t xLoc, yLoc;
0372 gVirtualX->TranslateCoordinates(
0373 gClient->GetDefaultRoot()->GetId(), m_tableWidget->GetId(), x, y, xLoc, yLoc, wdummy);
0374
0375 if (getTableManager()->firstColumnClicked(iRow, xLoc))
0376 setColumnSelected(idx);
0377 } else if (iColumn == 1) {
0378 std::vector<Color_t> colors;
0379 m_colorManager->fillLimitedColors(colors);
0380
0381 if (!m_colorPopup) {
0382 m_colorPopup = new FWColorPopup(gClient->GetDefaultRoot(), colors.front());
0383 m_colorPopup->InitContent("", colors);
0384 m_colorPopup->Connect("ColorSelected(Color_t)",
0385 "FWGeometryTableViewBase",
0386 const_cast<FWGeometryTableViewBase*>(this),
0387 "nodeColorChangeRequested(Color_t");
0388 }
0389 m_tableRowIndexForColorPopup = idx;
0390 m_colorPopup->SetName("Selected");
0391 m_colorPopup->ResetColors(colors, m_colorManager->backgroundColorIndex() == FWColorManager::kBlackIndex);
0392 m_colorPopup->PlacePopup(x, y, m_colorPopup->GetDefaultWidth(), m_colorPopup->GetDefaultHeight());
0393 return;
0394 } else if (iColumn == 2) {
0395
0396 getTableManager()->showEditor(idx);
0397 } else if (iColumn == 3) {
0398
0399 getTableManager()->setVisibility(ni, !getTableManager()->getVisibility(ni));
0400 elementChanged = true;
0401 } else if (iColumn == 4) {
0402
0403 getTableManager()->setVisibilityChld(ni, !getTableManager()->getVisibilityChld(ni));
0404 elementChanged = true;
0405 } else if (iColumn == 6) {
0406
0407 ni.switchBit(BIT(5));
0408 elementChanged = true;
0409 } else {
0410 setColumnSelected(idx);
0411 }
0412
0413 if (elementChanged) {
0414 refreshTable3D();
0415
0416 }
0417 } else if (iColumn == 0) {
0418 setColumnSelected(idx);
0419 m_eveTopNode->popupMenu(x, y, nullptr);
0420 }
0421 }
0422
0423 void FWGeometryTableViewBase::setBackgroundColor() {
0424 bool backgroundIsWhite = m_colorManager->backgroundColorIndex() == FWColorManager::kWhiteIndex;
0425 if (backgroundIsWhite) {
0426 m_tableWidget->SetBackgroundColor(0xffffff);
0427 m_tableWidget->SetLineSeparatorColor(0x000000);
0428 } else {
0429 m_tableWidget->SetBackgroundColor(0x000000);
0430 m_tableWidget->SetLineSeparatorColor(0xffffff);
0431 }
0432 getTableManager()->setBackgroundToWhite(backgroundIsWhite);
0433 gClient->NeedRedraw(m_tableWidget);
0434 }
0435
0436
0437
0438 void FWGeometryTableViewBase::nodeColorChangeRequested(Color_t col) {
0439
0440
0441
0442 if (m_tableRowIndexForColorPopup >= 0) {
0443 FWGeometryTableManagerBase::NodeInfo& ni = getTableManager()->refEntries()[m_tableRowIndexForColorPopup];
0444 ni.m_color = col;
0445 ni.m_node->GetVolume()->SetLineColor(col);
0446 refreshTable3D();
0447 m_tableRowIndexForColorPopup = -1;
0448 }
0449 }
0450
0451
0452 void FWGeometryTableViewBase::chosenItem(int menuIdx) {
0453 int selectedIdx = m_eveTopNode->getFirstSelectedTableIndex();
0454 FWGeometryTableManagerBase::NodeInfo& ni = getTableManager()->refEntry(selectedIdx);
0455
0456
0457 TGeoVolume* gv = ni.m_node->GetVolume();
0458 bool resetHome = false;
0459 if (gv) {
0460 switch (menuIdx) {
0461 case FWGeoTopNode::kVisSelfOff:
0462 getTableManager()->setVisibility(ni, false);
0463 refreshTable3D();
0464 break;
0465
0466 case FWGeoTopNode::kVisChldOff:
0467 getTableManager()->setDaughtersSelfVisibility(selectedIdx, false);
0468 refreshTable3D();
0469 break;
0470
0471 case FWGeoTopNode::kVisChldOn:
0472 getTableManager()->setDaughtersSelfVisibility(selectedIdx, true);
0473 refreshTable3D();
0474 break;
0475
0476 case FWGeoTopNode::kApplyChldCol:
0477 getTableManager()->applyColorTranspToDaughters(selectedIdx, false);
0478 refreshTable3D();
0479 break;
0480
0481 case FWGeoTopNode::kApplyChldColRec:
0482 getTableManager()->applyColorTranspToDaughters(selectedIdx, true);
0483 refreshTable3D();
0484 break;
0485
0486 case FWGeoTopNode::kPrintMaterial:
0487 gv->InspectMaterial();
0488 break;
0489
0490 case FWGeoTopNode::kPrintShape:
0491 gv->InspectShape();
0492 break;
0493
0494 case FWGeoTopNode::kPrintPath: {
0495 std::string ps;
0496 getTableManager()->getNodePath(selectedIdx, ps);
0497 std::cout << ps << std::endl;
0498 break;
0499 }
0500 case FWGeoTopNode::kSetTopNode:
0501 cdNode(selectedIdx);
0502 break;
0503
0504 case FWGeoTopNode::kSetTopNodeCam:
0505 cdNode(selectedIdx);
0506 resetHome = true;
0507 break;
0508
0509 case FWGeoTopNode::kCamera: {
0510 TGLViewer* v = FWGeoTopNode::s_pickedViewer;
0511 v->CurrentCamera().SetExternalCenter(true);
0512 v->CurrentCamera().SetCenterVec(FWGeoTopNode::s_pickedCamera3DCenter.X(),
0513 FWGeoTopNode::s_pickedCamera3DCenter.Y(),
0514 FWGeoTopNode::s_pickedCamera3DCenter.Z());
0515 v->SetDrawCameraCenter(true);
0516
0517 break;
0518 }
0519 default:
0520 return;
0521 }
0522 }
0523
0524 if (resetHome)
0525 gEve->FullRedraw3D(true, true);
0526 }
0527
0528 void FWGeometryTableViewBase::transparencyChanged() {
0529 getTableManager()->applyTransparencyFromEditor();
0530 refreshTable3D();
0531 }
0532
0533
0534
0535 void FWGeometryTableViewBase::refreshTable3D() {
0536 if (m_enableRedraw) {
0537 if (gEve->GetSelection()->HasChild(m_eveTopNode))
0538 gEve->GetSelection()->RemoveElement(m_eveTopNode);
0539
0540 if (gEve->GetHighlight()->HasChild(m_eveTopNode))
0541 gEve->GetHighlight()->RemoveElement(m_eveTopNode);
0542
0543 m_eveTopNode->m_scene->PadPaint(m_eveTopNode->m_scene->GetPad());
0544 gEve->Redraw3D();
0545
0546 getTableManager()->redrawTable();
0547 }
0548 }
0549
0550
0551
0552 void FWGeometryTableViewBase::addTo(FWConfiguration& iTo) const {
0553 FWConfigurableParameterizable::addTo(iTo);
0554
0555 FWConfiguration viewers(1);
0556 FWConfiguration tempArea;
0557
0558 for (TEveElement::List_i k = gEve->GetViewers()->BeginChildren(); k != gEve->GetViewers()->EndChildren(); ++k) {
0559 for (TEveElement::List_i eit = (*k)->BeginChildren(); eit != (*k)->EndChildren(); ++eit) {
0560 TEveScene* s = ((TEveSceneInfo*)*eit)->GetScene();
0561 if (s->GetGLScene() == m_eveTopNode->m_scene) {
0562 viewers.addKeyValue((*k)->GetElementName(), tempArea);
0563 break;
0564 }
0565 }
0566 }
0567
0568 iTo.addKeyValue("Viewers", viewers, true);
0569 }
0570
0571
0572
0573 void FWGeometryTableViewBase::setTopNodePathFromConfig(const FWConfiguration& iFrom) {
0574 int tn;
0575 const FWConfiguration* value = iFrom.valueForKey(m_topNodeIdx.name());
0576 if (!value)
0577 return;
0578
0579 std::istringstream s(value->value());
0580 s >> tn;
0581 int lastIdx = getTableManager()->refEntries().size() - 1;
0582 if (tn >= lastIdx) {
0583 fwLog(fwlog::kWarning) << Form(
0584 "Ignoring node path from confugration file -- %s value larger than number of nodes \n",
0585 m_topNodeIdx.name().c_str());
0586 return;
0587 }
0588
0589 m_topNodeIdx.set(tn);
0590 }
0591
0592
0593
0594 void FWGeometryTableViewBase::reloadColors() {
0595
0596 for (FWGeometryTableManagerBase::Entries_i i = getTableManager()->refEntries().begin();
0597 i != getTableManager()->refEntries().end();
0598 ++i) {
0599 i->m_color = i->m_node->GetVolume()->GetLineColor();
0600 }
0601
0602 refreshTable3D();
0603 }
0604
0605
0606
0607 void FWGeometryTableViewBase::populateController(ViewerParameterGUI& gui) const {
0608 gui.requestTab("Style")
0609 .separator()
0610 .
0611
0612
0613 addParam(&m_minParentTransparency)
0614 .addParam(&m_minLeafTransparency)
0615 .separator();
0616 TGTextButton* butt = new TGTextButton(gui.getTabContainer(), "ReloadColors");
0617 gui.getTabContainer()->AddFrame(butt);
0618 butt->Connect("Clicked()", "FWGeometryTableViewBase", (FWGeometryTableViewBase*)this, "reloadColors()");
0619 }