1 /**************************************************************************
2 * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15 /////////////////////////////////////////////////////////////////////////
16 // ALICE SLIDER FRAME CLASS //
17 // Author: Mayeul ROUSSELET //
18 // e-mail: Mayeul.Rousselet@cern.ch //
19 // Last update:26/08/2003 //
20 /////////////////////////////////////////////////////////////////////////
25 #include <TGNumberEntry.h>
28 #include "AliSliderFrame.h"
29 #include "AliDisplay2.h"
31 ClassImp(AliSliderFrame);
33 //_____________________________________________________________
34 AliSliderFrame::AliSliderFrame(const TGWindow *p, UInt_t w, UInt_t h)
37 fMainFrame = new TGCompositeFrame(p, w, h, kVerticalFrame | kRaisedFrame);
38 fLayout = new TGLayoutHints( kLHintsBottom | kLHintsRight | kLHintsExpandX,5,5,2,2);
41 fMomentumFrame = new TGCompositeFrame(fMainFrame,0,0, kHorizontalFrame);
42 fMomentumLayout = new TGLayoutHints( kLHintsLeft | kLHintsTop | kLHintsExpandX ,5,5,2,2);
43 fMomentumSlider = new TGDoubleHSlider(fMomentumFrame, 400, kDoubleScaleBoth, kIdsMOMENTUM);
44 fMomentumSlider->Connect("PositionChanged()","AliSliderFrame",this,"DoSlider()");
45 fMomentumSlider->Connect("PositionChanged()","AliSliderFrame",this,"DoPositionChanged(Int_t)");
46 fMomentumSlider->Connect("Released()","AliSliderFrame",this,"DoReleased()");
47 SetMomentumRange(0,2);
48 fMomentumSlider->SetPosition(0,2);
49 fMomentumLabel = new TGLabel(fMomentumFrame,"Momentum");
51 fMomentumMinValue = new TGNumberEntry(fMomentumFrame,GetMomentumMin(),7,kIdsMomentumMIN);
52 fMomentumMinValue->Connect("ValueChanged(Long_t)","AliSliderFrame",this,"DoField(Long_t)");
53 fMomentumMinValue->GetNumberEntry()->Connect("ReturnPressed()","AliSliderFrame",this,"DoField(Long_t)");
54 fMomentumMinValue->SetButtonToNum(kFALSE);
56 fMomentumMaxValue = new TGNumberEntry(fMomentumFrame,GetMomentumMax(),7,kIdsMomentumMAX);
57 fMomentumMaxValue->Connect("ValueChanged(Long_t)","AliSliderFrame",this,"DoField(Long_t)");
58 fMomentumMaxValue->GetNumberEntry()->Connect("ReturnPressed()","AliSliderFrame",this,"DoField(Long_t)");
59 fMomentumMaxValue->SetButtonToNum(kFALSE);
61 fMomentumFrame->AddFrame(fMomentumLabel,new TGLayoutHints( kLHintsLeft | kLHintsCenterY,5,5,2,2));
62 fMomentumFrame->AddFrame(fMomentumMinValue,new TGLayoutHints( kLHintsLeft ,5,5,2,2));
63 fMomentumFrame->AddFrame(fMomentumSlider,fMomentumLayout);
64 fMomentumFrame->AddFrame(fMomentumMaxValue,new TGLayoutHints( kLHintsRight,5,5,2,2));
65 fMomentumFrame->Resize(700,100);
69 fRapidityFrame = new TGCompositeFrame(fMainFrame,0,0, kHorizontalFrame);
70 fRapidityLayout = new TGLayoutHints( kLHintsLeft | kLHintsTop | kLHintsExpandX,5,5,2,2);
71 fRapiditySlider = new TGDoubleHSlider(fRapidityFrame, 400, kDoubleScaleBoth, kIdsRAPIDITY);
72 fRapiditySlider->Connect("PositionChanged()","AliSliderFrame",this,"DoSlider()");
73 fRapiditySlider->Connect("PositionChanged()","AliSliderFrame",this,"DoPositionChanged(Int_t)");
74 fRapiditySlider->Connect("Released()","AliSliderFrame",this,"DoReleased()");
75 SetRapidityRange(-1.5,1.5);
76 fRapiditySlider->SetPosition(-1.5,1.5);
77 fRapidityLabel = new TGLabel(fRapidityFrame,"Rapidity ");
78 fRapidityMinValue = new TGNumberEntry(fRapidityFrame,GetRapidityMin(),7,kIdsRapidityMIN);
79 fRapidityMinValue->Connect("ValueChanged(Long_t)","AliSliderFrame",this,"DoField(Long_t)");
80 fRapidityMinValue->SetButtonToNum(kFALSE);
81 fRapidityMinValue->GetNumberEntry()->Connect("ReturnPressed()","AliSliderFrame",this,"DoField(Long_t)");
83 fRapidityMaxValue = new TGNumberEntry(fRapidityFrame,GetRapidityMax(),7,kIdsRapidityMAX);
84 fRapidityMaxValue->Connect("ValueChanged(Long_t)","AliSliderFrame",this,"DoField(Long_t)");
85 fRapidityMaxValue->SetButtonToNum(kFALSE);
86 fRapidityMaxValue->GetNumberEntry()->Connect("ReturnPressed()","AliSliderFrame",this,"DoField(Long_t)");
88 fRapidityFrame->AddFrame(fRapidityLabel,new TGLayoutHints( kLHintsLeft | kLHintsCenterY,5,5,2,2));
89 fRapidityFrame->AddFrame(fRapidityMinValue,new TGLayoutHints( kLHintsLeft ,5,5,2,2));
90 fRapidityFrame->AddFrame(fRapiditySlider,fRapidityLayout);
91 fRapidityFrame->AddFrame(fRapidityMaxValue,new TGLayoutHints( kLHintsRight ,5,5,2,2));
92 fRapidityFrame->Resize(700,100);
94 fMainFrame->AddFrame(fMomentumFrame,fLayout);
95 fMainFrame->AddFrame(fRapidityFrame,fLayout);
96 fMainFrame->MapSubwindows();
97 fMainFrame->MapWindow();
98 fMainFrame->Resize(700,100);
102 //_____________________________________________________________
103 AliSliderFrame::~AliSliderFrame(void)
107 delete fRapidityLayout;
108 delete fMomentumLayout;
109 delete fMomentumMinValue;
110 delete fMomentumMaxValue;
112 delete fRapidityFrame;
113 delete fMomentumFrame;
114 delete fMomentumSlider;
115 delete fRapiditySlider;
116 delete fMomentumLabel;
117 delete fRapidityLabel;
118 delete fRapidityMinValue;
119 delete fRapidityMaxValue;
122 //_____________________________________________________________
123 void AliSliderFrame::CloseWindow(void)
125 // Deletes this window
129 //_____________________________________________________________
130 void AliSliderFrame::DoSlider(Int_t /*pos*/)
132 // Updates the values in case one moves a slider
133 TGFrame *frame = (TGFrame *) gTQSender;
134 TGDoubleSlider * ds = (TGDoubleSlider *) frame;
135 int id = ds->WidgetId();
140 //sprintf(buf,"momentum min:%f max:%f",GetMomentumMin(),GetMomentumMax());
141 //printf("\n%s",buf);
142 sprintf(min,"%.4f",GetMomentumMin());
143 sprintf(max,"%.4f",GetMomentumMax());
144 fMomentumMaxValue->SetText(max);
145 fMomentumMinValue->SetText(min);
149 sprintf(min,"%.4f",GetRapidityMin());
150 sprintf(max,"%.4f",GetRapidityMax());
151 fRapidityMaxValue->SetText(max);
152 fRapidityMinValue->SetText(min);
159 //_____________________________________________________________
160 void AliSliderFrame::DoReleased(Int_t /*pos*/) const
162 // Updates the display when the slider is released
163 TGFrame *frame = (TGFrame *) gTQSender;
164 TGDoubleSlider * ds = (TGDoubleSlider *) frame;
165 int id = ds->WidgetId();
169 gAliDisplay2->Update(kmCUTS);
175 //_____________________________________________________________
176 void AliSliderFrame::DoPositionChanged(Int_t /*pos*/) const
178 // Updates the display when a slider has changed
179 if(!gAliDisplay2->GetSliderUpdate()) return;
180 TGFrame *frame = (TGFrame *) gTQSender;
181 TGDoubleSlider * ds = (TGDoubleSlider *) frame;
182 int id = ds->WidgetId();
184 case kIdsRapidityMIN:
185 case kIdsRapidityMAX:
186 case kIdsMomentumMIN:
187 case kIdsMomentumMAX:{
188 gAliDisplay2->Update(kmCUTS);
195 //_____________________________________________________________
196 void AliSliderFrame::DoField(Long_t pos)
198 // Updates the display in case of changed min/max values for
199 // momentum and/or rapidity
200 TGNumberEntry *ne = (TGNumberEntry *) gTQSender;
201 int id = ne->WidgetId();
204 Float_t step=gAliDisplay2->GetSliderStep();
205 if((pos/10000)==0){//Up button pressed
211 case kIdsMomentumMIN:{
212 fMomentumMinValue->SetNumber(fMomentumMinValue->GetNumber()+step*sign);
213 sprintf(min,"%.4f",fMomentumMinValue->GetNumber());
214 fMomentumMinValue->SetText(min);
217 case kIdsMomentumMAX:{
218 fMomentumMaxValue->SetNumber(fMomentumMaxValue->GetNumber()+step*sign);
219 sprintf(max,"%.4f",fMomentumMaxValue->GetNumber());
220 fMomentumMaxValue->SetText(max);
223 case kIdsRapidityMIN:{
224 fRapidityMinValue->SetNumber(fRapidityMinValue->GetNumber()+step*sign);
225 sprintf(min,"%.4f",fRapidityMinValue->GetNumber());
226 fRapidityMinValue->SetText(min);
229 case kIdsRapidityMAX:{
230 fRapidityMaxValue->SetNumber(fRapidityMaxValue->GetNumber()+step*sign);
231 sprintf(max,"%.4f",fRapidityMaxValue->GetNumber());
232 fRapidityMaxValue->SetText(max);
238 fMomentumSlider->SetPosition(fMomentumMinValue->GetNumber(),fMomentumMaxValue->GetNumber());
239 fRapiditySlider->SetPosition(fRapidityMinValue->GetNumber(),fRapidityMaxValue->GetNumber());
240 // gAliDisplay2->Draw();
241 gAliDisplay2->Update(kmCUTS);
244 //_____________________________________________________________
245 void AliSliderFrame::SaveToRC() const
247 // Saves settings in the .alidisplayrc file
248 TEnv *rc=new TEnv(".alidisplayrc");
249 rc->SetValue("AliDisplay.MomentumMin",GetMomentumMin());
250 rc->SetValue("AliDisplay.MomentumMax",GetMomentumMax());
251 rc->SetValue("AliDisplay.RapidityMin",GetRapidityMin());
252 rc->SetValue("AliDisplay.RapidityMax",GetRapidityMax());
253 rc->SaveLevel(kEnvLocal);
257 //_____________________________________________________________
258 void AliSliderFrame::LoadFromRC()
260 // Loads settings from the .alidisplayrc file
261 // and uses the default momentum and rapidity ranges
262 TEnv *rc=new TEnv(".alidisplayrc");
264 a=rc->GetValue("AliDisplay.MomentumMin",0);
265 b=rc->GetValue("AliDisplay.MomentumMax",2);
266 fMomentumSlider->SetPosition(a,b);
267 a=rc->GetValue("AliDisplay.RapidityMin",-1.5);
268 b=rc->GetValue("AliDisplay.RapidityMax",1.5);
269 fRapiditySlider->SetPosition(a,b);