]> git.uio.no Git - u/mrichter/AliRoot.git/blob - DISPLAY/AliSliderFrame.cxx
22-mar-2006 NvE Line attribute selections for displays extended in AliHelix.
[u/mrichter/AliRoot.git] / DISPLAY / AliSliderFrame.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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 /////////////////////////////////////////////////////////////////////////
21
22 #include <TGFrame.h>
23 #include <TGLayout.h>
24 #include <TGLabel.h>
25 #include <TGNumberEntry.h>
26 #include <TEnv.h>
27
28 #include "AliSliderFrame.h"
29 #include "AliDisplay2.h"
30
31 ClassImp(AliSliderFrame)
32
33 //_____________________________________________________________
34 AliSliderFrame::AliSliderFrame(const TGWindow *p, UInt_t w, UInt_t h)
35 {
36   // Constructor
37   fMainFrame = new TGCompositeFrame(p, w, h, kVerticalFrame | kRaisedFrame);
38   fLayout = new TGLayoutHints( kLHintsBottom | kLHintsRight | kLHintsExpandX,5,5,2,2);
39   
40   //Momentum Slider
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");
50   
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);
55   
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);
60   
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);
66   
67   
68   //Rapidity Slider
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)");
82   
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)");
87   
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);
93   
94   fMainFrame->AddFrame(fMomentumFrame,fLayout);
95   fMainFrame->AddFrame(fRapidityFrame,fLayout);
96   fMainFrame->MapSubwindows();
97   fMainFrame->MapWindow();
98   fMainFrame->Resize(700,100);
99   LoadFromRC();
100 }
101
102 //_____________________________________________________________
103 AliSliderFrame::~AliSliderFrame(void)
104 {
105   // Destructor
106   delete fLayout;
107   delete fRapidityLayout;
108   delete fMomentumLayout;
109   delete fMomentumMinValue;
110   delete fMomentumMaxValue;
111   delete fMainFrame;
112   delete fRapidityFrame;
113   delete fMomentumFrame;
114   delete fMomentumSlider;
115   delete fRapiditySlider;
116   delete fMomentumLabel;
117   delete fRapidityLabel;
118   delete fRapidityMinValue;
119   delete fRapidityMaxValue;
120 }
121
122 //_____________________________________________________________
123 void AliSliderFrame::CloseWindow(void)
124 {
125   // Deletes this window
126   delete this;
127 }
128
129 //_____________________________________________________________
130 void AliSliderFrame::DoSlider(Int_t /*pos*/)
131 {
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();
136   char min[8];
137   char max[8];
138   switch(id){
139   case kIdsMOMENTUM:{
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);
146   }
147     break;
148   case kIdsRAPIDITY:{
149     sprintf(min,"%.4f",GetRapidityMin());
150     sprintf(max,"%.4f",GetRapidityMax());
151     fRapidityMaxValue->SetText(max);
152     fRapidityMinValue->SetText(min);
153   }
154     break;
155   default:break;
156   }
157 }
158
159 //_____________________________________________________________
160 void AliSliderFrame::DoReleased(Int_t /*pos*/) const
161 {
162   // Updates the display when the slider is released
163   TGFrame *frame = (TGFrame *) gTQSender;
164   TGDoubleSlider * ds = (TGDoubleSlider *) frame;
165   int id = ds->WidgetId();
166   switch(id){
167   case kIdsRAPIDITY:
168   case kIdsMOMENTUM:
169     gAliDisplay2->Update(kmCUTS);
170     break;
171   default: break;
172   }
173 }
174
175 //_____________________________________________________________
176 void AliSliderFrame::DoPositionChanged(Int_t /*pos*/) const
177 {
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();
183   switch(id){
184   case kIdsRapidityMIN:
185   case kIdsRapidityMAX:
186   case kIdsMomentumMIN:
187   case kIdsMomentumMAX:{
188     gAliDisplay2->Update(kmCUTS);
189   }
190     break;
191   default: break;
192   }
193 }
194
195 //_____________________________________________________________
196 void AliSliderFrame::DoField(Long_t pos)
197 {
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();
202   char max[8],min[8];
203   Int_t sign=0;
204   Float_t step=gAliDisplay2->GetSliderStep();
205   if((pos/10000)==0){//Up button pressed
206     sign = 1;
207   }
208   else sign = -1;
209   
210   switch(id){
211   case kIdsMomentumMIN:{
212     fMomentumMinValue->SetNumber(fMomentumMinValue->GetNumber()+step*sign);
213     sprintf(min,"%.4f",fMomentumMinValue->GetNumber());
214     fMomentumMinValue->SetText(min);
215   }
216     break;
217   case kIdsMomentumMAX:{
218     fMomentumMaxValue->SetNumber(fMomentumMaxValue->GetNumber()+step*sign);
219     sprintf(max,"%.4f",fMomentumMaxValue->GetNumber());
220     fMomentumMaxValue->SetText(max);
221   }
222     break;
223   case kIdsRapidityMIN:{
224     fRapidityMinValue->SetNumber(fRapidityMinValue->GetNumber()+step*sign);
225     sprintf(min,"%.4f",fRapidityMinValue->GetNumber());
226     fRapidityMinValue->SetText(min);
227   }
228     break;
229   case kIdsRapidityMAX:{
230     fRapidityMaxValue->SetNumber(fRapidityMaxValue->GetNumber()+step*sign);
231     sprintf(max,"%.4f",fRapidityMaxValue->GetNumber());
232     fRapidityMaxValue->SetText(max);
233   }
234     break;
235   default:break;
236   }
237   
238   fMomentumSlider->SetPosition(fMomentumMinValue->GetNumber(),fMomentumMaxValue->GetNumber());
239   fRapiditySlider->SetPosition(fRapidityMinValue->GetNumber(),fRapidityMaxValue->GetNumber());
240   //    gAliDisplay2->Draw();
241   gAliDisplay2->Update(kmCUTS);
242 }
243
244 //_____________________________________________________________
245 void AliSliderFrame::SaveToRC() const
246 {
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);
254   rc->Save();
255 }
256
257 //_____________________________________________________________ 
258 void AliSliderFrame::LoadFromRC()
259 {
260   // Loads settings from the .alidisplayrc file
261   // and uses the default momentum and rapidity ranges
262   TEnv *rc=new TEnv(".alidisplayrc");
263   Float_t a,b;
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);
270 }
271