00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "TCurlyLineEditor.h"
00027 #include "TGedEditor.h"
00028 #include "TGLabel.h"
00029 #include "TGNumberEntry.h"
00030 #include "TGButton.h"
00031 #include "TCurlyLine.h"
00032 #include "iostream"
00033
00034 ClassImp(TCurlyLineEditor)
00035
00036 enum ECurlyLineWid {
00037 kCRLL_AMPL,
00038 kCRLL_WAVE,
00039 kCRLL_ISW,
00040 kCRLL_STRX,
00041 kCRLL_STRY,
00042 kCRLL_ENDX,
00043 kCRLL_ENDY
00044 };
00045
00046
00047 TCurlyLineEditor::TCurlyLineEditor(const TGWindow *p, Int_t width,
00048 Int_t height, UInt_t options, Pixel_t back)
00049 : TGedFrame(p, width, height, options | kVerticalFrame, back)
00050 {
00051
00052
00053 fCurlyLine = 0;
00054
00055 MakeTitle("Curly Line");
00056
00057 TGCompositeFrame *f3 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00058 AddFrame(f3, new TGLayoutHints(kLHintsTop, 1, 1, 3, 0));
00059
00060 TGCompositeFrame *f3a = new TGCompositeFrame(f3, 80, 20);
00061 f3->AddFrame(f3a, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00062
00063 TGLabel *fAmplitudeLabel = new TGLabel(f3a, "Amplitude:");
00064 f3a->AddFrame(fAmplitudeLabel, new TGLayoutHints(kLHintsNormal, 3, 0, 5, 5));
00065
00066 TGLabel *fWaveLengthLabel = new TGLabel(f3a, "Wavelgth:");
00067 f3a->AddFrame(fWaveLengthLabel, new TGLayoutHints(kLHintsNormal, 3, 0, 5, 5));
00068
00069 TGCompositeFrame *f3b = new TGCompositeFrame(f3, 80, 20);
00070 f3->AddFrame(f3b, new TGLayoutHints(kLHintsNormal, 0, 0, 0, 0));
00071
00072 fAmplitudeEntry = new TGNumberEntry(f3b, 0.005, 7, kCRLL_AMPL,
00073 TGNumberFormat::kNESRealThree,
00074 TGNumberFormat::kNEANonNegative,
00075 TGNumberFormat::kNELLimitMinMax, 0.005, 0.3);
00076 fAmplitudeEntry->GetNumberEntry()->SetToolTipText("Set amplitude in percent of the pad height.");
00077 f3b->AddFrame(fAmplitudeEntry, new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
00078
00079 fWaveLengthEntry = new TGNumberEntry(f3b, 0.005, 7, kCRLL_WAVE,
00080 TGNumberFormat::kNESRealThree,
00081 TGNumberFormat::kNEANonNegative,
00082 TGNumberFormat::kNELLimitMinMax, 0.005, 0.3);
00083 fWaveLengthEntry->GetNumberEntry()->SetToolTipText("Set wavelength in percent of the pad height.");
00084 fWaveLengthEntry->Associate(this);
00085 f3b->AddFrame(fWaveLengthEntry, new TGLayoutHints(kLHintsLeft, 4, 1, 3, 1));
00086
00087 fIsWavy = new TGCheckButton(this, "Gluon (Gamma)", kCRLL_ISW);
00088 fIsWavy->SetToolTipText("Toggle between wavy line (Gluon) if selected; curly line (Gamma) otherwise.");
00089 AddFrame(fIsWavy, new TGLayoutHints(kLHintsLeft, 5, 1, 5, 8));
00090
00091 fStartXFrame = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00092 AddFrame(fStartXFrame, new TGLayoutHints(kLHintsTop, 1, 1, 3, 0));
00093
00094 TGCompositeFrame *f4a = new TGCompositeFrame(fStartXFrame, 80, 20);
00095 fStartXFrame->AddFrame(f4a, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00096
00097 TGLabel *fStartXLabel = new TGLabel(f4a, "Start X:");
00098 f4a->AddFrame(fStartXLabel, new TGLayoutHints(kLHintsNormal, 21, 0, 5, 5));
00099
00100 TGLabel *fStartYLabel = new TGLabel(f4a, "Y:");
00101 f4a->AddFrame(fStartYLabel, new TGLayoutHints(kLHintsNormal, 50, 0, 5, 5));
00102
00103 TGLabel *fEndXLabel = new TGLabel(f4a, "End X:");
00104 f4a->AddFrame(fEndXLabel, new TGLayoutHints(kLHintsNormal, 24, 0, 5, 5));
00105
00106 TGLabel *fEndYLabel = new TGLabel(f4a, "Y:");
00107 f4a->AddFrame(fEndYLabel, new TGLayoutHints(kLHintsNormal, 51, 0, 5, 1));
00108
00109 TGCompositeFrame *f4b = new TGCompositeFrame(fStartXFrame, 80, 20);
00110 fStartXFrame->AddFrame(f4b, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00111
00112 fStartXEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_STRX,
00113 TGNumberFormat::kNESRealThree,
00114 TGNumberFormat::kNEANonNegative,
00115 TGNumberFormat::kNELNoLimits);
00116 fStartXEntry->GetNumberEntry()->SetToolTipText("Set start point X ccordinate of curly line.");
00117 f4b->AddFrame(fStartXEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
00118
00119 fStartYEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_STRY,
00120 TGNumberFormat::kNESRealThree,
00121 TGNumberFormat::kNEANonNegative,
00122 TGNumberFormat::kNELNoLimits);
00123 fStartYEntry->GetNumberEntry()->SetToolTipText("Set start point Y coordinate of curly line.");
00124 f4b->AddFrame(fStartYEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
00125
00126 fEndXEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_ENDX,
00127 TGNumberFormat::kNESRealThree,
00128 TGNumberFormat::kNEANonNegative,
00129 TGNumberFormat::kNELNoLimits);
00130 fEndXEntry->GetNumberEntry()->SetToolTipText("Set end point X coordinate of curly line.");
00131 f4b->AddFrame(fEndXEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
00132
00133 fEndYEntry = new TGNumberEntry(f4b, 0.0, 7, kCRLL_ENDY,
00134 TGNumberFormat::kNESRealThree,
00135 TGNumberFormat::kNEANonNegative,
00136 TGNumberFormat::kNELNoLimits);
00137 fEndYEntry->GetNumberEntry()->SetToolTipText("Set end point Y coordinate of curly line.");
00138 f4b->AddFrame(fEndYEntry, new TGLayoutHints(kLHintsLeft, 1, 1, 3, 1));
00139
00140 }
00141
00142
00143 TCurlyLineEditor::~TCurlyLineEditor()
00144 {
00145
00146 }
00147
00148
00149 void TCurlyLineEditor::ConnectSignals2Slots()
00150 {
00151
00152
00153 fStartXEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoStartXY()");
00154 (fStartXEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoStartXY()");
00155 fStartYEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoStartXY()");
00156 (fStartYEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoStartXY()");
00157 fEndXEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoEndXY()");
00158 (fEndXEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoEndXY()");
00159 fEndYEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoEndXY()");
00160 (fEndYEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoEndXY()");
00161 fAmplitudeEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoAmplitude()");
00162 (fAmplitudeEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoAmplitude()");
00163 fWaveLengthEntry->Connect("ValueSet(Long_t)", "TCurlyLineEditor", this, "DoWaveLength()");
00164 (fWaveLengthEntry->GetNumberEntry())->Connect("ReturnPressed()", "TCurlyLineEditor", this, "DoWaveLength()");
00165 fIsWavy->Connect("Clicked()", "TCurlyLineEditor", this, "DoWavy()");
00166
00167 fInit = kFALSE;
00168 }
00169
00170
00171 void TCurlyLineEditor::SetModel(TObject* obj)
00172 {
00173
00174
00175 if (obj->InheritsFrom("TCurlyArc")) {
00176 HideFrame(fStartXFrame);
00177 fStartXEntry->Disconnect("ValueSet(Long_t)");
00178 (fStartXEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
00179 fStartYEntry->Disconnect("ValueSet(Long_t)");
00180 (fStartYEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
00181 fEndXEntry->Disconnect("ValueSet(Long_t)");
00182 (fEndXEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
00183 fEndYEntry->Disconnect("ValueSet(Long_t)");
00184 (fEndYEntry->GetNumberEntry())->Disconnect("ReturnPressed()");
00185 }
00186
00187 fCurlyLine = (TCurlyLine *)obj;
00188 fAvoidSignal = kTRUE;
00189
00190 Double_t val = fCurlyLine->GetAmplitude();
00191 fAmplitudeEntry->SetNumber(val);
00192
00193 val = fCurlyLine->GetWaveLength();
00194 fWaveLengthEntry->SetNumber(val);
00195
00196 val = fCurlyLine->GetStartX();
00197 fStartXEntry->SetNumber(val);
00198
00199 val = fCurlyLine->GetEndX();
00200 fEndXEntry->SetNumber(val);
00201
00202 val = fCurlyLine->GetStartY();
00203 fStartYEntry->SetNumber(val);
00204
00205 val = fCurlyLine->GetEndY();
00206 fEndYEntry->SetNumber(val);
00207
00208 if (fCurlyLine->GetCurly())
00209 fIsWavy->SetState(kButtonDown);
00210 else
00211 fIsWavy->SetState(kButtonUp);
00212
00213 if (fInit) ConnectSignals2Slots();
00214 fAvoidSignal = kFALSE;
00215 }
00216
00217
00218 void TCurlyLineEditor::ActivateBaseClassEditors(TClass* cl)
00219 {
00220
00221
00222 fGedEditor->ExcludeClassEditor(TAttFill::Class());
00223 TGedFrame::ActivateBaseClassEditors(cl);
00224 }
00225
00226
00227 void TCurlyLineEditor::DoStartXY()
00228 {
00229
00230
00231 if (fAvoidSignal) return;
00232 fCurlyLine->SetStartPoint(fStartXEntry->GetNumber(), fStartYEntry->GetNumber());
00233 fCurlyLine->Paint(fCurlyLine->GetDrawOption());
00234 Update();
00235 }
00236
00237 void TCurlyLineEditor::DoEndXY()
00238 {
00239
00240
00241 if (fAvoidSignal) return;
00242 fCurlyLine->SetEndPoint(fEndXEntry->GetNumber(), fEndYEntry->GetNumber());
00243 fCurlyLine->Paint(fCurlyLine->GetDrawOption());
00244 Update();
00245 }
00246
00247
00248 void TCurlyLineEditor::DoAmplitude()
00249 {
00250
00251
00252 if (fAvoidSignal) return;
00253 fCurlyLine->SetAmplitude((Double_t)fAmplitudeEntry->GetNumber());
00254 fCurlyLine->Paint(fCurlyLine->GetDrawOption());
00255 Update();
00256 }
00257
00258
00259 void TCurlyLineEditor::DoWaveLength()
00260 {
00261
00262
00263 if (fAvoidSignal) return;
00264 Double_t num = fWaveLengthEntry->GetNumber();
00265 fCurlyLine->SetWaveLength(num);
00266 fCurlyLine->Paint(GetDrawOption());
00267 Update();
00268 }
00269
00270
00271 void TCurlyLineEditor::DoWavy()
00272 {
00273
00274
00275 if (fAvoidSignal) return;
00276 if (fIsWavy->GetState() == kButtonDown)
00277 fCurlyLine->SetCurly();
00278 else
00279 fCurlyLine->SetWavy();
00280 fCurlyLine->Paint(GetDrawOption());
00281 Update();
00282 }