00001 #include "TGFont.h"
00002 #include "TGButton.h"
00003 #include "TGLabel.h"
00004 #include "TGSlider.h"
00005 #include "TGComboBox.h"
00006 #include "TGClient.h"
00007 #include "TG3DLine.h"
00008 #include "TGResourcePool.h"
00009 #include "TGLUtil.h"
00010 #include "TGLViewer.h"
00011 #include "TEveManager.h"
00012 #include "TEveViewer.h"
00013 #include "TColor.h"
00014
00015 #include "Fireworks/Core/interface/CmsShowCommonPopup.h"
00016 #include "Fireworks/Core/interface/CmsShowCommon.h"
00017 #include "Fireworks/Core/interface/FWColorManager.h"
00018 #include "Fireworks/Core/src/FWDialogBuilder.h"
00019 #include "Fireworks/Core/src/FWColorSelect.h"
00020 #include "Fireworks/Core/interface/FWViewEnergyScaleEditor.h"
00021
00022 #include "Fireworks/Core/interface/FWParameterSetterEditorBase.h"
00023
00024 #include "Fireworks/Core/interface/FWParameterSetterBase.h"
00025
00026
00027
00028
00029
00030
00031
00032 CmsShowCommonPopup::CmsShowCommonPopup(CmsShowCommon* model, const TGWindow* p, UInt_t w, UInt_t h) :
00033 TGTransientFrame(gClient->GetDefaultRoot(),p,w,h),
00034 m_common(model),
00035 m_backgroundButton(0),
00036 m_gammaSlider(0),
00037 m_gammaButton(0),
00038 m_colorRnrCtxHighlightWidget(0),
00039 m_colorRnrCtxSelectWidget(0)
00040 {
00041 SetCleanup(kDeepCleanup);
00042
00043 TGGC *fTextGC;
00044 const TGFont *font = gClient->GetFont("-adobe-helvetica-bold-r-*-*-14-*-*-*-*-*-iso8859-1");
00045 if (!font)
00046 font = gClient->GetResourcePool()->GetDefaultFont();
00047 GCValues_t gval;
00048 gval.fMask = kGCBackground | kGCFont | kGCForeground;
00049 gval.fFont = font->GetFontHandle();
00050 fTextGC = gClient->GetGC(&gval, kTRUE);
00051
00052
00053 TGFont* smallFont = 0;
00054 FontStruct_t defaultFontStruct = m_backgroundButton->GetDefaultFontStruct();
00055 try
00056 {
00057 TGFontPool *pool = gClient->GetFontPool();
00058 TGFont* defaultFont = pool->GetFont(defaultFontStruct);
00059 FontAttributes_t attributes = defaultFont->GetFontAttributes();
00060 smallFont = pool->GetFont(attributes.fFamily, 8, attributes.fWeight, attributes.fSlant);
00061 }
00062 catch(...)
00063 {
00064
00065 }
00066
00067 TGCompositeFrame* vf2 = new TGVerticalFrame(this);
00068 AddFrame(vf2, new TGLayoutHints(kLHintsExpandX, 2, 2, 2, 2));
00069
00070
00071
00072 {
00073 TGLabel* xx = new TGLabel(vf2, "GlobalScales ", fTextGC->GetGC());
00074 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft ,2,2,4,4));
00075 }
00076 FWViewEnergyScaleEditor* scaleEditor = new FWViewEnergyScaleEditor(m_common->m_energyScale.get(), vf2);
00077 vf2->AddFrame(scaleEditor);
00078
00079
00080
00081 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX,4 ,8, 3, 3));
00082 {
00083 TGLabel* xx = new TGLabel(vf2, "Projections ", fTextGC->GetGC());
00084 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft ,2,2,4,4));
00085 }
00086 vf2->AddFrame(new TGLabel(vf2, "Track behaviour when crossing y=0 in RhoZ-view:"), new TGLayoutHints(kLHintsLeft ,2,2,0,0));
00087 makeSetter(vf2, &m_common->m_trackBreak);
00088 makeSetter(vf2, &m_common->m_drawBreakPoints);
00089
00090
00091
00092
00093
00094 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX ,4 ,8, 8, 2));
00095 {
00096 TGLabel* xx = new TGLabel(vf2, "General Colors ", fTextGC->GetGC());
00097 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft,2,2,4,4));
00098 }
00099 m_backgroundButton = new TGTextButton(vf2, "Black/White Background");
00100 vf2->AddFrame(m_backgroundButton);
00101 makeSetter(vf2, &m_common->m_gamma);
00102
00103
00104 {
00105 int hci, sci;
00106 getColorSetColors(hci, sci);
00107 TGHorizontalFrame* top = new TGHorizontalFrame(vf2);
00108 vf2->AddFrame(top);
00109 {
00110 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
00111 top->AddFrame(hf);
00112
00113 m_colorRnrCtxHighlightWidget = new FWColorSelect(hf, "highlight", 0, m_common->colorManager(), 3);
00114 hf->AddFrame(m_colorRnrCtxHighlightWidget);
00115 m_colorRnrCtxHighlightWidget->SetColorByIndex(hci , kFALSE);
00116 m_colorRnrCtxHighlightWidget->Connect("ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeSelectionColorSet(Color_t)");
00117
00118 TGFrame* lf = new TGHorizontalFrame(hf, 100, 16, kFixedSize);
00119 TGLabel* label = new TGLabel(lf, "Higlight");
00120 label->SetTextFont(smallFont);
00121 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft |kLHintsCenterY , 0, 0, 0,0));
00122 }
00123
00124 {
00125 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
00126 top->AddFrame(hf);
00127
00128 m_colorRnrCtxSelectWidget = new FWColorSelect(hf, "selectioyn", 0, m_common->colorManager(), 1);
00129 hf->AddFrame(m_colorRnrCtxSelectWidget);
00130 m_colorRnrCtxSelectWidget->SetColorByIndex(sci , kFALSE);
00131 m_colorRnrCtxSelectWidget->Connect("ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeSelectionColorSet(Color_t)");
00132
00133 TGFrame* lf = new TGHorizontalFrame(hf, 100, 16, kFixedSize);
00134 TGLabel* label = new TGLabel(lf, "Selection");
00135 label->SetTextFont(smallFont);
00136 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft |kLHintsCenterY , 0, 0, 0,0));
00137 }
00138 }
00139
00140 vf2->AddFrame(new TGHorizontal3DLine(vf2), new TGLayoutHints(kLHintsExpandX ,4 ,8, 8, 2));
00141
00142
00143
00144
00145
00146 {
00147 TGLabel* xx = new TGLabel(vf2, "DetectorColors ", fTextGC->GetGC());
00148 vf2->AddFrame(xx, new TGLayoutHints(kLHintsLeft,2,2,8,0));
00149 }
00150
00151 TGHSlider* transpWidget2D = 0;
00152 TGHSlider* transpWidget3D = 0;
00153 TGCompositeFrame* top = new TGVerticalFrame(vf2);
00154 vf2->AddFrame(top, new TGLayoutHints(kLHintsNormal, 2, 2, 2, 0));
00155
00156 {
00157 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
00158 hf->AddFrame(new TGLabel(hf, "Tansparency 2D:"), new TGLayoutHints(kLHintsBottom, 2, 2, 3, 3));
00159 transpWidget2D = new TGHSlider(hf, 100, kSlider1);
00160 hf->AddFrame( transpWidget2D);
00161 top->AddFrame(hf,new TGLayoutHints( kLHintsNormal, 0, 0, 2, 2));
00162 }
00163 {
00164 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
00165 hf->AddFrame(new TGLabel(hf, "Tansparency 3D:") , new TGLayoutHints(kLHintsBottom,2, 2, 2, 2 ));
00166 transpWidget3D = new TGHSlider(hf, 100, kSlider1);
00167 hf->AddFrame( transpWidget3D);
00168 top->AddFrame(hf, new TGLayoutHints(kLHintsExpandX, 0, 0, 0, 10));
00169 }
00170 std::string names[kFWGeomColorSize];
00171 names[kFWPixelBarrelColorIndex ] = "Pixel Barrel";
00172 names[kFWPixelEndcapColorIndex ] = "Pixel Endcap" ;
00173 names[kFWTrackerBarrelColorIndex ] = "Tracker Barrel";
00174 names[kFWTrackerEndcapColorIndex ] = "Tracker Endcap";
00175 names[kFWMuonBarrelLineColorIndex] = "Muon Barrel";
00176 names[kFWMuonEndcapLineColorIndex] = "Muon Endcap";
00177 int i = 0;
00178 for (int k = 0; k < 3; ++k)
00179 {
00180 TGHorizontalFrame* hf = new TGHorizontalFrame(top);
00181 top->AddFrame(hf);
00182
00183 for (int j = 0 ; j < 2; ++j)
00184 {
00185 m_colorSelectWidget[i] = new FWColorSelect(hf, names[i].c_str(), 0, m_common->colorManager(), i);
00186 hf->AddFrame(m_colorSelectWidget[i]);
00187 m_colorSelectWidget[i]->SetColorByIndex(m_common->colorManager()->geomColor(FWGeomColorIndex(i)), kFALSE);
00188 m_colorSelectWidget[i]->Connect("ColorChosen(Color_t)", "CmsShowCommonPopup", this, "changeGeomColor(Color_t)");
00189
00190 TGFrame* lf = new TGHorizontalFrame(hf, 100, 16, kFixedSize);
00191 TGLabel* label = new TGLabel(lf, m_colorSelectWidget[i]->label().c_str());
00192 label->SetTextFont(smallFont);
00193 hf->AddFrame(lf, new TGLayoutHints(kLHintsLeft |kLHintsCenterY , 0, 0, 0,0));
00194
00195 ++i;
00196 }
00197 }
00198
00199
00200 m_backgroundButton->Connect("Clicked()", "CmsShowCommonPopup", this, "switchBackground()");
00201
00202 transpWidget2D->SetRange(0, 100);
00203 transpWidget2D->SetPosition(m_common->colorManager()->geomTransparency(true));
00204 transpWidget2D->Connect("PositionChanged(Int_t)", "CmsShowCommonPopup", this, "changeGeomTransparency2D(Int_t)");
00205
00206 transpWidget3D->SetRange(0, 100);
00207 transpWidget3D->SetPosition(m_common->colorManager()->geomTransparency(false));
00208 transpWidget3D->Connect("PositionChanged(Int_t)", "CmsShowCommonPopup", this, "changeGeomTransparency3D(Int_t)");
00209
00210 SetWindowName("Common Preferences");
00211 MapSubwindows();
00212 Resize(GetDefaultSize());
00213 Layout();
00214 CenterOnParent(kTRUE, TGTransientFrame::kTopRight);
00215 }
00216
00217
00218
00219 CmsShowCommonPopup::~CmsShowCommonPopup()
00220 {
00221 }
00222
00223 void
00224 CmsShowCommonPopup::switchBackground()
00225 {
00226 m_common->switchBackground();
00227 }
00228
00229
00230 void
00231 CmsShowCommonPopup::changeGeomColor(Color_t iColor)
00232 {
00233 TGColorSelect *cs = (TGColorSelect *) gTQSender;
00234 FWGeomColorIndex cidx = FWGeomColorIndex(cs->WidgetId());
00235 m_common->setGeomColor(cidx, iColor);
00236 }
00237
00238
00239 void
00240 CmsShowCommonPopup::changeSelectionColorSet(Color_t idx)
00241 {
00242 TGColorSelect *cs = (TGColorSelect *) gTQSender;
00243
00244
00245 for (TEveElement::List_i it = gEve->GetViewers()->BeginChildren(); it != gEve->GetViewers()->EndChildren(); ++it)
00246 {
00247 TGLViewer* v = ((TEveViewer*)(*it))->GetGLViewer();
00248
00249 TGLColorSet& colorset = m_common->colorManager()->isColorSetDark() ? v->RefDarkColorSet():v->RefLightColorSet();
00250 colorset.Selection(cs->WidgetId()).SetColor(idx);
00251 colorset.Selection(cs->WidgetId()+1).SetColor(idx);
00252
00253 }
00254 }
00255
00256
00257 void
00258 CmsShowCommonPopup::changeGeomTransparency2D(int iTransp)
00259 {
00260 m_common->setGeomTransparency(iTransp, true);
00261 }
00262
00263 void
00264 CmsShowCommonPopup::changeGeomTransparency3D(int iTransp)
00265 {
00266 m_common->setGeomTransparency(iTransp, false);
00267 }
00268
00269
00270
00271 void
00272 CmsShowCommonPopup::colorSetChanged()
00273 {
00274 for (int i = 0 ; i < kFWGeomColorSize; ++i)
00275 m_colorSelectWidget[i]->SetColorByIndex(m_common->colorManager()->geomColor(FWGeomColorIndex(i)), kFALSE);
00276
00277 int hci, sci;
00278 getColorSetColors(hci, sci);
00279
00280 m_colorRnrCtxHighlightWidget->SetColorByIndex(hci , kFALSE);
00281 m_colorRnrCtxSelectWidget->SetColorByIndex(sci , kFALSE);
00282 }
00283
00284 void CmsShowCommonPopup::getColorSetColors (int& hci, int& sci)
00285 {
00286 TGLColorSet& colorset = m_common->colorManager()->isColorSetDark() ? gEve->GetDefaultGLViewer()->RefDarkColorSet():
00287 gEve->GetDefaultGLViewer()->RefLightColorSet();
00288 {
00289 TGLColor& glc = colorset.Selection(3);
00290 hci = TColor::GetColor(glc.GetRed(), glc.GetGreen(), glc.GetBlue());
00291
00292 }{
00293 TGLColor& glc = colorset.Selection(1);
00294 sci = TColor::GetColor(glc.GetRed(), glc.GetGreen(), glc.GetBlue());
00295
00296 }
00297 }
00298
00299 void
00300 CmsShowCommonPopup::makeSetter(TGCompositeFrame* frame, FWParameterBase* param)
00301 {
00302 boost::shared_ptr<FWParameterSetterBase> ptr( FWParameterSetterBase::makeSetterFor(param) );
00303 ptr->attach(param, this);
00304
00305 TGFrame* pframe = ptr->build(frame);
00306 frame->AddFrame(pframe, new TGLayoutHints(kLHintsExpandX, 0, 0, 2,2));
00307
00308 m_setters.push_back(ptr);
00309 }