1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
18 #include "ZTransEditor.h"
19 #include <Reve/ZTrans.h>
20 #include <Reve/RGValuators.h>
22 #include <TVirtualPad.h>
30 //______________________________________________________________________
34 ClassImp(ZTransSubEditor)
36 ZTransSubEditor::ZTransSubEditor(TGWindow* p) :
56 fTopHorFrame = new TGHorizontalFrame(this);
58 fUseTrans = new TGCheckButton(fTopHorFrame, "UseTrans");
59 fTopHorFrame->AddFrame(fUseTrans, new TGLayoutHints(kLHintsLeft, 1,2,0,0));
60 fUseTrans->Connect("Toggled(Bool_t)", "Reve::ZTransSubEditor", this, "DoUseTrans()");
61 fEditTrans = new TGCheckButton(fTopHorFrame, "EditTrans");
62 fTopHorFrame->AddFrame(fEditTrans, new TGLayoutHints(kLHintsLeft, 2,1,0,0));
63 fEditTrans->Connect("Toggled(Bool_t)"," Reve::ZTransSubEditor", this, "DoEditTrans()");
65 AddFrame(fTopHorFrame, new TGLayoutHints(kLHintsTop, 0,0,2,1));
68 // --- Trans edit part
70 fEditTransFrame = new TGVerticalFrame(this);
72 fPos = new RGTriVecValuator(fEditTransFrame, "Pos", 160, 20);
73 fPos->SetLabelWidth(17);
75 fPos->Build(kFALSE, "x", "y", "z");
76 fPos->SetLimits(-1e5, 1e5, TGNumberFormat::kNESRealThree);
77 fEditTransFrame->AddFrame(fPos, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
79 fRot = new RGTriVecValuator(fEditTransFrame, "Rot", 160, 20);
80 fRot->SetLabelWidth(17);
82 fRot->Build(kFALSE, "Rz", "RY", "Rx");
83 fRot->SetLimits(-360, 360, TGNumberFormat::kNESRealOne);
84 fEditTransFrame->AddFrame(fRot, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
86 fScale = new RGTriVecValuator(fEditTransFrame, "Scale", 160, 20);
87 fScale->SetLabelWidth(17);
88 fScale->SetNELength(6);
89 fScale->Build(kFALSE, "Sx", "Sy", "Sz");
90 fScale->SetLimits(1e-2, 1e2, TGNumberFormat::kNESRealTwo);
91 fEditTransFrame->AddFrame(fScale, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,0,0));
93 fPos ->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
94 fRot ->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
95 fScale->Connect("ValueSet()", "Reve::ZTransSubEditor", this, "DoTransChanged()");
98 TGHorizontalFrame* hframe = new TGHorizontalFrame(fEditTransFrame);
100 fAutoUpdate = new TGCheckButton(hframe, "AutoUpdate");
101 hframe->AddFrame(fAutoUpdate, new TGLayoutHints(kLHintsLeft, 1,10,1,1));
102 fUpdate = new TGTextButton(hframe, "Update");
103 hframe->AddFrame(fUpdate, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5,5,1,1));
104 fUpdate->Connect("Clicked()", "Reve::ZTransSubEditor", this, "TransChanged()");
106 fEditTransFrame->AddFrame(hframe, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,4,0));
109 AddFrame(fEditTransFrame, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0,0,1,2));
112 /**************************************************************************/
114 void ZTransSubEditor::SetDataFromTrans(ZTrans* t)
118 fUseTrans ->SetState(fTrans->fUseTrans ? kButtonDown : kButtonUp);
119 fEditTrans->SetState(fTrans->fEditTrans ? kButtonDown : kButtonUp);
120 if (fTrans->fEditTrans)
121 fEditTransFrame->MapWindow();
123 fEditTransFrame->UnmapWindow();
124 ((TGMainFrame*)fEditTransFrame->GetMainFrame())->Layout();
126 fPos->SetValues(fTrans->ArrT());
128 fTrans->GetRotAngles(a);
129 a[0] *= TMath::RadToDeg();
130 a[1] *= TMath::RadToDeg();
131 a[2] *= TMath::RadToDeg();
134 fTrans->GetScale(x, y, z);
135 fScale->SetValues(x, y, z);
138 void ZTransSubEditor::SetTransFromData()
143 fTrans->SetRotByAngles(v[0]*TMath::DegToRad(), v[1]*TMath::DegToRad(), v[2]*TMath::DegToRad());
146 fScale->GetValues(v);
147 fTrans->Scale(v[0], v[1], v[2]);
150 /**************************************************************************/
152 void ZTransSubEditor::UseTrans()
157 void ZTransSubEditor::TransChanged()
160 Emit("TransChanged()");
163 /**************************************************************************/
165 void ZTransSubEditor::DoUseTrans()
167 fTrans->SetUseTrans(fUseTrans->IsOn());
171 void ZTransSubEditor::DoEditTrans()
173 fTrans->SetEditTrans(fEditTrans->IsOn());
174 if (fEditTrans->IsOn())
175 fEditTransFrame->MapWindow();
177 fEditTransFrame->UnmapWindow();
178 ((TGMainFrame*)fEditTransFrame->GetMainFrame())->Layout();
181 void ZTransSubEditor::DoTransChanged()
183 if (fAutoUpdate->IsOn())
187 /**************************************************************************/
188 /**************************************************************************/
189 /**************************************************************************/
191 //______________________________________________________________________
195 ClassImp(ZTransEditor)
197 ZTransEditor::ZTransEditor(const TGWindow *p, Int_t width, Int_t height,
198 UInt_t options, Pixel_t back) :
199 TGedFrame(p, width, height, options | kVerticalFrame, back),
201 // Initialize widget pointers to 0
206 // fXYZZ = new TGSomeWidget(this, ...);
207 // AddFrame(fXYZZ, new TGLayoutHints(...));
208 // fXYZZ->Connect("SignalName()", "Reve::ZTransEditor", this, "DoXYZZ()");
211 ZTransEditor::~ZTransEditor()
214 /**************************************************************************/
216 void ZTransEditor::SetModel(TObject* obj)
218 fM = dynamic_cast<ZTrans*>(obj);
220 // Set values of widgets
221 // fXYZZ->SetValue(fM->GetXYZZ());
224 /**************************************************************************/
226 // Implements callback/slot methods
228 // void ZTransEditor::DoXYZZ()
230 // fM->SetXYZZ(fXYZZ->GetValue());