Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, 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 : // $Id$
17 :
18 : #include "AliMUONPainterColorSlider.h"
19 : #include "AliMUONPainterHelper.h"
20 : #include "AliLog.h"
21 : #include <TGNumberEntry.h>
22 : #include <TGButton.h>
23 : #include <TMath.h>
24 :
25 : ///\class AliMUONPainterColorSlider
26 : ///
27 : /// A painter color palette
28 : ///
29 : ///\author Laurent Aphecetche, Subatech
30 :
31 : ///\cond CLASSIMP
32 12 : ClassImp(AliMUONPainterColorSlider)
33 : ///\endcond
34 :
35 : //_____________________________________________________________________________
36 : AliMUONPainterColorSlider::AliMUONPainterColorSlider(const TGWindow* p,
37 : UInt_t w, UInt_t h)
38 0 : : TGCompositeFrame(p,w,h,kVerticalFrame),
39 0 : fEntryMin(0x0),
40 0 : fEntryMax(0x0),
41 0 : fMin(FLT_MAX),
42 0 : fMax(-FLT_MAX),
43 0 : fAutoButton(new TGTextButton(this,"Auto")),
44 0 : fLockButton(new TGTextButton(this,"Lock")),
45 0 : fDefaultButton(new TGTextButton(this,"Back to default")),
46 0 : fSetDefaultButton(new TGTextButton(this,"Set as default"))
47 0 : {
48 : /// ctor
49 : Int_t ndivisions(20);
50 :
51 0 : Int_t hsize = (h-100)/(ndivisions+2);
52 : Int_t topBorder(5);
53 :
54 : Double_t min(0.0);
55 : Double_t max(1.0);
56 :
57 0 : Double_t step = (max-min)/ndivisions;
58 :
59 0 : for ( Int_t i = -1; i < ndivisions+1; ++i )
60 : {
61 0 : Double_t value = max - (min + step*i);
62 :
63 0 : Int_t color = AliMUONPainterHelper::Instance()->ColorFromValue(value,
64 : min,max);
65 0 : Pixel_t pixel = gVirtualX->GetPixel(color);
66 0 : TGVerticalFrame* frame = new TGVerticalFrame(this,w,hsize,kFixedSize,pixel);
67 :
68 0 : AddFrame(frame,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
69 :
70 : topBorder = 0;
71 : }
72 :
73 0 : fEntryMax = new TGNumberEntry(this);
74 :
75 0 : AddFrame(fEntryMax,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
76 :
77 0 : fEntryMin = new TGNumberEntry(this);
78 :
79 0 : AddFrame(fEntryMin,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
80 :
81 0 : AddFrame(fAutoButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
82 :
83 0 : fAutoButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"DataRangeAutoRequested()");
84 :
85 0 : AddFrame(fLockButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
86 :
87 0 : fLockButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"LockButtonWasClicked()");
88 :
89 0 : AddFrame(fDefaultButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
90 :
91 0 : fDefaultButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"DefaultButtonWasClicked()");
92 :
93 0 : AddFrame(fSetDefaultButton,new TGLayoutHints(kLHintsExpandX,0,0,topBorder,0));
94 :
95 0 : fSetDefaultButton->Connect("Clicked()","AliMUONPainterColorSlider",this,"SetDefaultButtonWasClicked(Double_t*)");
96 :
97 0 : fEntryMax->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
98 0 : fEntryMin->Connect("ValueSet(Long_t)","AliMUONPainterColorSlider",this,"DataRangeWasChanged(Double_t*)");
99 0 : }
100 :
101 : //_____________________________________________________________________________
102 0 : AliMUONPainterColorSlider::~AliMUONPainterColorSlider()
103 0 : {
104 : /// dtor
105 0 : }
106 :
107 : //_____________________________________________________________________________
108 : void
109 : AliMUONPainterColorSlider::DataRangeAutoRequested()
110 : {
111 : /// Signal that the "Auto" button was clicked
112 0 : Emit("DataRangeAutoRequested()");
113 0 : }
114 :
115 : //_____________________________________________________________________________
116 : void
117 : AliMUONPainterColorSlider::DataRangeWasChanged(Double_t*)
118 : {
119 : /// Data range was changed
120 :
121 0 : Double_t values[] = { fEntryMin->GetNumber(), fEntryMax->GetNumber() };
122 :
123 0 : Long_t param[] = { (Long_t)values };
124 :
125 0 : Emit("DataRangeWasChanged(Double_t*)",param);
126 0 : }
127 :
128 : //_____________________________________________________________________________
129 : void AliMUONPainterColorSlider::DefaultButtonWasClicked()
130 : {
131 : /// Signal that the "Default" button was clicked
132 0 : Emit("DefaultButtonWasClicked()");
133 0 : }
134 :
135 : //_____________________________________________________________________________
136 : void AliMUONPainterColorSlider::SetDefaultButtonWasClicked(Double_t*)
137 : {
138 : /// Signal that the "SetDefault" button was clicked
139 :
140 0 : Double_t values[] = { fEntryMin->GetNumber(), fEntryMax->GetNumber() };
141 :
142 0 : Long_t param[] = { (Long_t)values };
143 :
144 0 : Emit("SetDefaultButtonWasClicked(Double_t*)",param);
145 0 : }
146 :
147 : //_____________________________________________________________________________
148 : Bool_t
149 : AliMUONPainterColorSlider::IsLocked() const
150 : {
151 : /// Whether our range is locked or not
152 :
153 0 : return (fLockButton->GetString() == "Unlock"); // if we can unlock it means we are locked...
154 0 : }
155 :
156 : //_____________________________________________________________________________
157 : void AliMUONPainterColorSlider::LockDefaultButtons()
158 : {
159 0 : fDefaultButton->SetEnabled(kFALSE);
160 0 : fSetDefaultButton->SetEnabled(kFALSE);
161 0 : }
162 :
163 : //_____________________________________________________________________________
164 : void AliMUONPainterColorSlider::UnlockDefaultButtons()
165 : {
166 0 : fDefaultButton->SetEnabled(kTRUE);
167 0 : fSetDefaultButton->SetEnabled(kTRUE);
168 0 : }
169 :
170 : //_____________________________________________________________________________
171 : void
172 : AliMUONPainterColorSlider::LockButtonWasClicked()
173 : {
174 : /// Lock (toggle button) was clicked
175 :
176 0 : if ( IsLocked() )
177 : {
178 : // unlock it
179 0 : fLockButton->SetText("Lock");
180 0 : fEntryMin->SetState(kTRUE);
181 0 : fEntryMax->SetState(kTRUE);
182 0 : fAutoButton->SetEnabled(kTRUE);
183 0 : UnlockDefaultButtons();
184 0 : }
185 : else
186 : {
187 : // lock it
188 0 : fLockButton->SetText("Unlock");
189 0 : fEntryMin->SetState(kFALSE);
190 0 : fEntryMax->SetState(kFALSE);
191 0 : fAutoButton->SetEnabled(kFALSE);
192 0 : LockDefaultButtons();
193 : }
194 0 : }
195 :
196 : //_____________________________________________________________________________
197 : void
198 : AliMUONPainterColorSlider::SetRange(Double_t min, Double_t max, Bool_t emit)
199 : {
200 : /// Set the data range
201 :
202 0 : if ( !IsLocked() )
203 : {
204 0 : fMin = min;
205 0 : fMax = max;
206 :
207 0 : fEntryMin->SetNumber(fMin);
208 0 : fEntryMax->SetNumber(fMax);
209 0 : }
210 :
211 0 : if ( emit )
212 : {
213 0 : DataRangeWasChanged(0x0);
214 0 : }
215 0 : }
216 :
|