]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Reve/ZTransEditor.cxx
Changed inheritance to include Reve::RenderElement; use ZTrans to store transformatio...
[u/mrichter/AliRoot.git] / EVE / Reve / ZTransEditor.cxx
1 // $Header$
2
3 #include "ZTransEditor.h"
4 #include <Reve/ZTrans.h>
5 #include <Reve/RGValuators.h>
6
7 #include <TVirtualPad.h>
8
9 #include <TGButton.h>
10
11
12 using namespace Reve;
13
14 //______________________________________________________________________
15 // ZTransSubEditor
16 //
17
18 ClassImp(ZTransSubEditor)
19
20 ZTransSubEditor::ZTransSubEditor(TGWindow* p) :
21   TGVerticalFrame(p),
22   fTrans  (0)
23 {
24   // --- Top controls
25
26   fTopHorFrame = new TGHorizontalFrame(this);
27
28   fUseTrans  = new TGCheckButton(fTopHorFrame, "UseTrans");
29   fTopHorFrame->AddFrame(fUseTrans, new TGLayoutHints(kLHintsLeft, 1,2,0,0));
30   fUseTrans->Connect("Toggled(Bool_t)", "Reve::ZTransSubEditor", this, "DoUseTrans()");
31   fEditTrans = new TGCheckButton(fTopHorFrame, "EditTrans");
32   fTopHorFrame->AddFrame(fEditTrans, new TGLayoutHints(kLHintsLeft, 2,1,0,0));  
33   fEditTrans->Connect("Toggled(Bool_t)"," Reve::ZTransSubEditor", this, "DoEditTrans()");
34
35   AddFrame(fTopHorFrame, new TGLayoutHints(kLHintsTop, 0,0,2,1));
36
37
38   // --- Trans edit part
39
40   fEditTransFrame = new TGVerticalFrame(this);
41
42   fPos = new RGTriVecValuator(fEditTransFrame, "Pos", 160, 20);
43   fPos->SetLabelWidth(9);
44   fPos->SetNELength(6);
45   fPos->Build(kFALSE, "x", "y", "z");
46   fPos->SetLimits(-1e5, 1e5, TGNumberFormat::kNESRealThree);
47   fEditTransFrame->AddFrame(fPos, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
48
49   fRot = new RGTriVecValuator(fEditTransFrame, "Rot", 160, 20);
50   fRot->SetLabelWidth(17);
51   fRot->SetNELength(5);
52   fRot->Build(kFALSE, "Rz", "RY", "Rx");
53   fRot->SetLimits(-360, 360, TGNumberFormat::kNESRealOne);
54   fEditTransFrame->AddFrame(fRot, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
55
56   fScale = new RGTriVecValuator(fEditTransFrame, "Scale", 160, 20);
57   fScale->SetLabelWidth(17);
58   fScale->SetNELength(5);
59   fScale->Build(kFALSE, "Sx", "Sy", "Sz");
60   fScale->SetLimits(1e-2, 1e2, TGNumberFormat::kNESRealTwo);
61   fEditTransFrame->AddFrame(fScale, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
62
63   fPos  ->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
64   fRot  ->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
65   fScale->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
66
67   {
68     TGHorizontalFrame* hframe = new TGHorizontalFrame(fEditTransFrame);
69
70     fAutoUpdate = new TGCheckButton(hframe, "AutoUpdate");
71     hframe->AddFrame(fAutoUpdate, new TGLayoutHints(kLHintsLeft, 1,10,1,1));
72     fUpdate = new TGTextButton(hframe, "Update");
73     hframe->AddFrame(fUpdate, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5,5,1,1));
74     fUpdate->Connect("Clicked()", "Reve::ZTransSubEditor", this, "TransChanged()");
75
76     fEditTransFrame->AddFrame(hframe, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
77   }
78
79   AddFrame(fEditTransFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,1,2));
80 }
81
82 /**************************************************************************/
83
84 void ZTransSubEditor::SetDataFromTrans(ZTrans* t)
85 {
86   fTrans = t;
87
88   fUseTrans ->SetState(fTrans->fUseTrans  ? kButtonDown : kButtonUp);
89   fEditTrans->SetState(fTrans->fEditTrans ? kButtonDown : kButtonUp);
90   if (fTrans->fEditTrans)
91     fEditTransFrame->MapWindow();
92   else
93     fEditTransFrame->UnmapWindow();
94   ((TGMainFrame*)fEditTransFrame->GetMainFrame())->Layout();
95
96   fPos->SetValues(fTrans->ArrT());
97   Float_t a[3];
98   fTrans->GetRotAngles(a);
99   a[0] *= TMath::RadToDeg();
100   a[1] *= TMath::RadToDeg();
101   a[2] *= TMath::RadToDeg();
102   fRot->SetValues(a);
103   Double_t x, y, z;
104   fTrans->GetScale(x, y, z);
105   fScale->SetValues(x, y, z);
106 }
107
108 void ZTransSubEditor::SetTransFromData()
109 {
110   Double_t v[3];
111   fTrans->UnitTrans();
112   fRot->GetValues(v);
113   fTrans->SetRotByAngles(v[0]*TMath::DegToRad(), v[1]*TMath::DegToRad(), v[2]*TMath::DegToRad());
114   fPos->GetValues(v);
115   fTrans->SetPos(v);
116   fScale->GetValues(v);
117   fTrans->Scale(v[0], v[1], v[2]);
118 }
119
120 /**************************************************************************/
121
122 void ZTransSubEditor::UseTrans()
123 {
124   Emit("UseTrans()");
125 }
126
127 void ZTransSubEditor::TransChanged()
128 {
129   SetTransFromData();
130   Emit("TransChanged()");
131 }
132
133 /**************************************************************************/
134
135 void ZTransSubEditor::DoUseTrans()
136 {
137   fTrans->SetUseTrans(fUseTrans->IsOn());
138   UseTrans();
139 }
140
141 void ZTransSubEditor::DoEditTrans()
142 {
143   fTrans->SetEditTrans(fEditTrans->IsOn());
144   if (fEditTrans->IsOn())
145     fEditTransFrame->MapWindow();
146   else
147     fEditTransFrame->UnmapWindow();
148   ((TGMainFrame*)fEditTransFrame->GetMainFrame())->Layout();
149 }
150
151 void ZTransSubEditor::DoTransChanged()
152 {
153   if (fAutoUpdate->IsOn())
154     TransChanged();
155 }
156
157 /**************************************************************************/
158 /**************************************************************************/
159 /**************************************************************************/
160
161 //______________________________________________________________________
162 // ZTransEditor
163 //
164
165 ClassImp(ZTransEditor)
166
167 ZTransEditor::ZTransEditor(const TGWindow *p, Int_t width, Int_t height,
168                            UInt_t options, Pixel_t back) :
169   TGedFrame(p, width, height, options | kVerticalFrame, back),
170   fM(0)
171   // Initialize widget pointers to 0
172 {
173   MakeTitle("ZTrans");
174
175   // Create widgets
176   // fXYZZ = new TGSomeWidget(this, ...);
177   // AddFrame(fXYZZ, new TGLayoutHints(...));
178   // fXYZZ->Connect("SignalName()", "Reve::ZTransEditor", this, "DoXYZZ()");
179 }
180
181 ZTransEditor::~ZTransEditor()
182 {}
183
184 /**************************************************************************/
185
186 void ZTransEditor::SetModel(TObject* obj)
187 {
188   fM = dynamic_cast<ZTrans*>(obj);
189
190   // Set values of widgets
191   // fXYZZ->SetValue(fM->GetXYZZ());
192 }
193
194 /**************************************************************************/
195
196 // Implements callback/slot methods
197
198 // void ZTransEditor::DoXYZZ()
199 // {
200 //   fM->SetXYZZ(fXYZZ->GetValue());
201 //   Update();
202 // }