File indexing completed on 2024-04-06 12:11:33
0001 #include "TGFont.h"
0002 #include "TGButton.h"
0003 #include "TGLabel.h"
0004 #include "TGSlider.h"
0005 #include "TGComboBox.h"
0006 #include "TGClient.h"
0007 #include "TG3DLine.h"
0008 #include "TGResourcePool.h"
0009 #include "TGLUtil.h"
0010 #include "TGLViewer.h"
0011 #include "TEveManager.h"
0012 #include "TEveViewer.h"
0013 #include "TColor.h"
0014 #include "Fireworks/Core/interface/Context.h"
0015
0016 #include "Fireworks/Core/interface/CmsShowCommonPopup.h"
0017 #include "Fireworks/Core/interface/CmsShowCommon.h"
0018 #include "Fireworks/Core/interface/FWColorManager.h"
0019 #include "Fireworks/Core/interface/FWDialogBuilder.h"
0020 #include "Fireworks/Core/src/FWColorSelect.h"
0021 #include "Fireworks/Core/interface/FWViewEnergyScaleEditor.h"
0022 #include "Fireworks/Core/interface/FWViewEnergyScale.h"
0023
0024 #include "Fireworks/Core/interface/FWParameterSetterEditorBase.h"
0025
0026 #include "Fireworks/Core/interface/FWParameterSetterBase.h"
0027 #include "Fireworks/Core/interface/FWEventItemsManager.h"
0028 #include "Fireworks/Core/interface/FWEventItem.h"
0029
0030 #include <functional>
0031
0032 CmsShowCommonPopup::CmsShowCommonPopup(CmsShowCommon* model, const TGWindow* p, UInt_t w, UInt_t h)
0033 : TGTransientFrame(gClient->GetDefaultRoot(), p, w, h),
0034 m_common(model),
0035 m_backgroundButton(nullptr),
0036 m_gammaSlider(nullptr),
0037 m_gammaButton(nullptr),
0038 m_colorRnrCtxHighlightWidget(nullptr),
0039 m_colorRnrCtxSelectWidget(nullptr),
0040 m_combo(nullptr) {
0041 SetCleanup(kDeepCleanup);
0042
0043 TGGC* fTextGC;
0044 const TGFont* font = gClient->GetFont("-adobe-helvetica-bold-r-*-*-14-*-*-*-*-*-iso8859-1");
0045 if (!font)
0046 font = gClient->GetResourcePool()->GetDefaultFont();
0047 GCValues_t gval;
0048 gval.fMask = kGCBackground | kGCFont | kGCForeground;
0049 gval.fFont = font->GetFontHandle();
0050 fTextGC = gClient->GetGC(&gval, kTRUE);
0051
0052 TGCompositeFrame* vf2 = new TGVerticalFrame(this);
0053 AddFrame(vf2, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
0054
0055
0056
0057 {
0058 TGLabel* xx = new TGLabel(vf2, "GlobalScales ", fTextGC->GetGC());
0059 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
0060 }
0061 FWViewEnergyScaleEditor* scaleEditor = new FWViewEnergyScaleEditor(m_common->getEnergyScale(), vf2);
0062 vf2->AddFrame(scaleEditor);
0063
0064
0065
0066 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX, 4, 8, 3, 3));
0067 {
0068 TGLabel* xx = new TGLabel(vf2, "Projections ", fTextGC->GetGC());
0069 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
0070 }
0071 vf2->AddFrame(new TGLabel(vf2, "Track behavior when crossing y=0 in RhoZ view:"),
0072 new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
0073 makeSetter(vf2, &m_common->m_trackBreak);
0074 makeSetter(vf2, &m_common->m_drawBreakPoints);
0075
0076
0077
0078
0079
0080 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX, 4, 8, 8, 2));
0081 {
0082 TGLabel* xx = new TGLabel(vf2, "General Colors ", fTextGC->GetGC());
0083 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
0084 }
0085 {
0086 TGCompositeFrame* hf = new TGHorizontalFrame(vf2);
0087 vf2->AddFrame(hf, new TGLayoutHints(kLHintsExpandX));
0088
0089 m_backgroundButton = new TGTextButton(hf, "Black/White Background");
0090 hf->AddFrame(m_backgroundButton, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
0091 m_backgroundButton->Connect("Clicked()", "CmsShowCommonPopup", this, "switchBackground()");
0092
0093 makeSetter(hf, &m_common->m_gamma);
0094 }
0095
0096 TGFont* smallFont = nullptr;
0097 FontStruct_t defaultFontStruct = m_backgroundButton->GetDefaultFontStruct();
0098 try {
0099 TGFontPool* pool = gClient->GetFontPool();
0100 TGFont* defaultFont = pool->GetFont(defaultFontStruct);
0101 FontAttributes_t attributes = defaultFont->GetFontAttributes();
0102 smallFont = pool->GetFont(attributes.fFamily, 8, attributes.fWeight, attributes.fSlant);
0103 } catch (...) {
0104
0105 }
0106
0107
0108 if (true) {
0109 const TGCompositeFrame* f = static_cast<const TGCompositeFrame*>(makeSetter(vf2, &m_common->m_palette));
0110
0111
0112
0113
0114 m_combo = static_cast<TGComboBox*>(static_cast<TGFrameElement*>(f->GetList()->At(0))->fFrame);
0115 m_common->m_palette.changed_.connect(std::bind(&CmsShowCommonPopup::setPaletteGUI, this));
0116
0117 TGCompositeFrame* hf = new TGHorizontalFrame(vf2);
0118 vf2->AddFrame(hf, new TGLayoutHints(kLHintsExpandX));
0119 {
0120 TGButton* butt;
0121 butt = new TGTextButton(hf, "Permute Colors");
0122 butt->SetToolTipText("Randomize assigned collection colors");
0123 hf->AddFrame(butt, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
0124 butt->Connect("Clicked()", "CmsShowCommonPopup", this, "permuteColors()");
0125
0126 butt = new TGTextButton(hf, "Randomize Colors");
0127 butt->SetToolTipText("Randomize collection colors from full palette");
0128 hf->AddFrame(butt, new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2));
0129 butt->Connect("Clicked()", "CmsShowCommonPopup", this, "randomizeColors()");
0130 }
0131 }
0132
0133
0134 {
0135 int hci, sci;
0136 getColorSetColors(hci, sci);
0137 TGHorizontalFrame* top = new TGHorizontalFrame(vf2);
0138 vf2->AddFrame(top);
0139 {
0140 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
0141 top->AddFrame(hf);
0142
0143 m_colorRnrCtxHighlightWidget = new FWColorSelect(hf, "Highlight", 0, m_common->colorManager(), 3);
0144 hf->AddFrame(m_colorRnrCtxHighlightWidget);
0145 m_colorRnrCtxHighlightWidget->SetColorByIndex(hci, kFALSE);
0146 m_colorRnrCtxHighlightWidget->Connect(
0147 "ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeSelectionColorSet(Color_t)");
0148
0149 TGHorizontalFrame* lf = new TGHorizontalFrame(hf, 45, 16, kFixedSize);
0150 TGLabel* label = new TGLabel(lf, "Higlight");
0151 label->SetTextFont(smallFont);
0152 lf->AddFrame(label);
0153 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
0154 }
0155
0156 {
0157 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
0158 top->AddFrame(hf);
0159
0160 m_colorRnrCtxSelectWidget = new FWColorSelect(hf, "Selection", 0, m_common->colorManager(), 1);
0161 hf->AddFrame(m_colorRnrCtxSelectWidget);
0162 m_colorRnrCtxSelectWidget->SetColorByIndex(sci, kFALSE);
0163 m_colorRnrCtxSelectWidget->Connect(
0164 "ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeSelectionColorSet(Color_t)");
0165
0166 TGHorizontalFrame* lf = new TGHorizontalFrame(hf, 45, 16, kFixedSize);
0167 TGLabel* label = new TGLabel(lf, "Selection");
0168 label->SetTextFont(smallFont);
0169 lf->AddFrame(label);
0170 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft | kLHintsCenterY));
0171 }
0172 }
0173 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX, 4, 8, 8, 2));
0174
0175
0176
0177
0178
0179 {
0180 TGLabel* xx = new TGLabel(vf2, "DetectorColors ", fTextGC->GetGC());
0181 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft, 2, 2, 8, 0));
0182 }
0183
0184 TGHSlider* transpWidget2D = nullptr;
0185 TGHSlider* transpWidget3D = nullptr;
0186 TGCompositeFrame* top = new TGVerticalFrame(vf2);
0187 vf2->AddFrame(top, new TGLayoutHints(kLHintsNormal, 2, 2, 2, 0));
0188
0189 {
0190 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
0191 hf->AddFrame(new TGLabel(hf, "Tansparency 2D:"), new TGLayoutHints(kLHintsBottom, 2, 2, 3, 3));
0192 transpWidget2D = new TGHSlider(hf, 100, kSlider1);
0193 hf->AddFrame(transpWidget2D);
0194 top->AddFrame(hf, new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2));
0195 }
0196 {
0197 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
0198 hf->AddFrame(new TGLabel(hf, "Tansparency 3D:"), new TGLayoutHints(kLHintsBottom, 2, 2, 2, 2));
0199 transpWidget3D = new TGHSlider(hf, 100, kSlider1);
0200 hf->AddFrame(transpWidget3D);
0201 top->AddFrame(hf, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 10));
0202 }
0203
0204 std::string names[kFWGeomColorSize];
0205 names[kFWPixelBarrelColorIndex] = "Pixel Barrel";
0206 names[kFWPixelEndcapColorIndex] = "Pixel Endcap";
0207 names[kFWTrackerBarrelColorIndex] = "Tracker Barrel";
0208 names[kFWTrackerEndcapColorIndex] = "Tracker Endcap";
0209 names[kFWMuonBarrelLineColorIndex] = "Muon Barrel";
0210 names[kFWMuonEndcapLineColorIndex] = "Muon Endcap";
0211 int i = 0;
0212 for (int k = 0; k < 3; ++k) {
0213 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
0214 top->AddFrame(hf);
0215 for (int j = 0; j < 3; ++j) {
0216 m_colorSelectWidget[i] = new FWColorSelect(hf, names[i].c_str(), 0, m_common->colorManager(), i);
0217 hf->AddFrame(m_colorSelectWidget[i]);
0218 m_colorSelectWidget[i]->SetColorByIndex(m_common->colorManager()->geomColor(FWGeomColorIndex(i)), kFALSE);
0219 m_colorSelectWidget[i]->Connect("ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeGeomColor(Color_t)");
0220
0221 TGHorizontalFrame* lf = new TGHorizontalFrame(hf, 100, 16, kFixedSize);
0222 TGLabel* label = new TGLabel(lf, m_colorSelectWidget[i]->label().c_str());
0223 label->SetTextFont(smallFont);
0224 lf->AddFrame(label);
0225 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 0, 0, 0, 0));
0226
0227 ++i;
0228 }
0229 }
0230
0231
0232 transpWidget2D->SetRange(0, 100);
0233 transpWidget2D->SetPosition(m_common->colorManager()->geomTransparency(true));
0234 transpWidget2D->Connect("PositionChanged(Int_t)", "CmsShowCommonPopup", this, "changeGeomTransparency2D(Int_t)");
0235
0236 transpWidget3D->SetRange(0, 100);
0237 transpWidget3D->SetPosition(m_common->colorManager()->geomTransparency(false));
0238 transpWidget3D->Connect("PositionChanged(Int_t)", "CmsShowCommonPopup", this, "changeGeomTransparency3D(Int_t)");
0239
0240 SetWindowName("Common Preferences");
0241 MapSubwindows();
0242 Resize(GetDefaultSize());
0243 Layout();
0244 CenterOnParent(kTRUE, TGTransientFrame::kTopRight);
0245 }
0246
0247 CmsShowCommonPopup::~CmsShowCommonPopup() {}
0248
0249
0250
0251 void CmsShowCommonPopup::switchBackground() { m_common->switchBackground(); }
0252
0253 void CmsShowCommonPopup::randomizeColors() { m_common->randomizeColors(); }
0254
0255 void CmsShowCommonPopup::permuteColors() { m_common->permuteColors(); }
0256
0257 void CmsShowCommonPopup::changeGeomColor(Color_t iColor) {
0258 TGColorSelect* cs = (TGColorSelect*)gTQSender;
0259 FWGeomColorIndex cidx = FWGeomColorIndex(cs->WidgetId());
0260 m_common->setGeomColor(cidx, iColor);
0261 }
0262
0263 void CmsShowCommonPopup::changeSelectionColorSet(Color_t idx) {
0264 TGColorSelect* cs = (TGColorSelect*)gTQSender;
0265
0266
0267 for (TEveElement::List_i it = gEve->GetViewers()->BeginChildren(); it != gEve->GetViewers()->EndChildren(); ++it) {
0268 TGLViewer* v = ((TEveViewer*)(*it))->GetGLViewer();
0269
0270 TGLColorSet& colorset = m_common->colorManager()->isColorSetDark() ? v->RefDarkColorSet() : v->RefLightColorSet();
0271 colorset.Selection(cs->WidgetId()).SetColor(idx);
0272 colorset.Selection(cs->WidgetId() + 1).SetColor(idx);
0273 }
0274 }
0275
0276 void CmsShowCommonPopup::changeGeomTransparency2D(int iTransp) { m_common->setGeomTransparency(iTransp, true); }
0277
0278 void CmsShowCommonPopup::changeGeomTransparency3D(int iTransp) { m_common->setGeomTransparency(iTransp, false); }
0279
0280
0281 void CmsShowCommonPopup::colorSetChanged() {
0282 for (int i = 0; i < kFWGeomColorSize; ++i)
0283 m_colorSelectWidget[i]->SetColorByIndex(m_common->colorManager()->geomColor(FWGeomColorIndex(i)), kFALSE);
0284
0285 int hci, sci;
0286 getColorSetColors(hci, sci);
0287
0288 m_colorRnrCtxHighlightWidget->SetColorByIndex(hci, kFALSE);
0289 m_colorRnrCtxSelectWidget->SetColorByIndex(sci, kFALSE);
0290 }
0291
0292 void CmsShowCommonPopup::getColorSetColors(int& hci, int& sci) {
0293 TGLColorSet& colorset =
0294 m_common->colorManager()->isColorSetDark() ? m_common->m_darkColorSet : m_common->m_lightColorSet;
0295 {
0296 TGLColor& glc = colorset.Selection(3);
0297 hci = TColor::GetColor(glc.GetRed(), glc.GetGreen(), glc.GetBlue());
0298
0299 }
0300 {
0301 TGLColor& glc = colorset.Selection(1);
0302 sci = TColor::GetColor(glc.GetRed(), glc.GetGreen(), glc.GetBlue());
0303
0304 }
0305 }
0306
0307 TGFrame* CmsShowCommonPopup::makeSetter(TGCompositeFrame* frame, FWParameterBase* param) {
0308 std::shared_ptr<FWParameterSetterBase> ptr(FWParameterSetterBase::makeSetterFor(param));
0309 ptr->attach(param, this);
0310
0311 TGFrame* pframe = ptr->build(frame);
0312 frame->AddFrame(pframe, new TGLayoutHints(kLHintsExpandX, 0, 0, 2, 2));
0313
0314 m_setters.push_back(ptr);
0315 return pframe;
0316 }
0317
0318 void CmsShowCommonPopup::setPaletteGUI() {
0319 m_common->setPalette();
0320
0321 for (int i = 0; i < kFWGeomColorSize; ++i) {
0322 FWColorManager* cm = m_common->m_context->colorManager();
0323
0324 m_colorSelectWidget[i]->SetColorByIndex(cm->geomColor(FWGeomColorIndex(i)), kFALSE);
0325 }
0326 }