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
00027
00028
00029
00030
00031
00032
00033
00034 #include "TPadEditor.h"
00035 #include "TGedEditor.h"
00036 #include "TGComboBox.h"
00037 #include "TGButtonGroup.h"
00038 #include "TGLabel.h"
00039 #include "TCanvas.h"
00040
00041 ClassImp(TPadEditor)
00042
00043 enum EPadWid {
00044 kCOLOR,
00045 kPAD_FAR,
00046 kPAD_EDIT,
00047 kPAD_CROSS,
00048 kPAD_GRIDX,
00049 kPAD_GRIDY,
00050 kPAD_LOGX,
00051 kPAD_LOGY,
00052 kPAD_LOGZ,
00053 kPAD_TICKX,
00054 kPAD_TICKY,
00055 kPAD_BSIZE,
00056 kPAD_BMODE
00057 };
00058
00059
00060
00061 TPadEditor::TPadEditor(const TGWindow *p, Int_t width,
00062 Int_t height, UInt_t options, Pixel_t back)
00063 : TGedFrame(p, width, height, options | kVerticalFrame, back)
00064 {
00065
00066
00067 fPadPointer = 0;
00068
00069 MakeTitle("Pad/Canvas");
00070
00071 fFixedAR = new TGCheckButton(this, "Fixed aspect ratio", kPAD_FAR);
00072 fFixedAR->SetToolTipText("Set fixed aspect ratio");
00073 AddFrame(fFixedAR, new TGLayoutHints(kLHintsTop, 4, 1, 2, 1));
00074
00075 TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00076 TGCompositeFrame *f3 = new TGCompositeFrame(f2, 40, 20, kVerticalFrame);
00077 fCrosshair = new TGCheckButton(f3, "Crosshair", kPAD_CROSS);
00078 fCrosshair->SetToolTipText("Set crosshair");
00079 f3->AddFrame(fCrosshair, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00080 fGridX = new TGCheckButton(f3, "GridX", kPAD_GRIDX);
00081 fGridX->SetToolTipText("Set grid along X");
00082 f3->AddFrame(fGridX, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00083 fTickX = new TGCheckButton(f3, "TickX", kPAD_TICKX);
00084 fTickX->SetToolTipText("Set tick marks along X");
00085 f3->AddFrame(fTickX, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00086 f2->AddFrame(f3, new TGLayoutHints(kLHintsTop, 0, 1, 0, 0));
00087
00088 TGCompositeFrame *f4 = new TGCompositeFrame(f2, 40, 20, kVerticalFrame);
00089 fEditable = new TGCheckButton(f4, "Edit", kPAD_EDIT);
00090 fEditable->SetToolTipText("Set editable mode");
00091 f4->AddFrame(fEditable, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00092 fGridY = new TGCheckButton(f4, "GridY", kPAD_GRIDY);
00093 fGridY->SetToolTipText("Set grid along Y");
00094 f4->AddFrame(fGridY, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00095 fTickY = new TGCheckButton(f4, "TickY", kPAD_TICKY);
00096 fTickY->SetToolTipText("Set tick marks along Y");
00097 f4->AddFrame(fTickY, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
00098 f2->AddFrame(f4, new TGLayoutHints(kLHintsTop, 0, 1, 0, 0));
00099
00100 AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00101
00102 MakeTitle("Log Scale");
00103
00104 TGCompositeFrame *f5 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00105 fLogX = new TGCheckButton(f5, ":X", kPAD_LOGX);
00106 fLogX->SetToolTipText("Set logarithmic scale along X");
00107 f5->AddFrame(fLogX, new TGLayoutHints(kLHintsTop, 4, 1, 1, 1));
00108 fLogY = new TGCheckButton(f5, ":Y", kPAD_LOGY);
00109 fLogY->SetToolTipText("Set logarithmic scale along Y");
00110 f5->AddFrame(fLogY, new TGLayoutHints(kLHintsTop, 15, 1, 1, 1));
00111 fLogZ = new TGCheckButton(f5, ":Z", kPAD_LOGZ);
00112 fLogZ->SetToolTipText("Set logarithmic scale along Z");
00113 f5->AddFrame(fLogZ, new TGLayoutHints(kLHintsTop, 15, 1, 1, 1));
00114 AddFrame(f5, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00115
00116 TGCompositeFrame *f6 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00117 fBgroup = new TGButtonGroup(f6,3,1,3,0, "Border Mode");
00118 fBgroup->SetRadioButtonExclusive(kTRUE);
00119 fBmode = new TGRadioButton(fBgroup, " Sunken border", 77);
00120 fBmode->SetToolTipText("Set a sinken border of the pad/canvas");
00121 fBmode0 = new TGRadioButton(fBgroup, " No border", 78);
00122 fBmode0->SetToolTipText("Set no border of the pad/canvas");
00123 fBmode1 = new TGRadioButton(fBgroup, " Raised border", 79);
00124 fBmode1->SetToolTipText("Set a raised border of the pad/canvas");
00125 fBmodelh = new TGLayoutHints(kLHintsLeft, 0,0,3,0);
00126 fBgroup->SetLayoutHints(fBmodelh, fBmode);
00127 fBgroup->ChangeOptions(kFitWidth|kChildFrame|kVerticalFrame);
00128 f6->AddFrame(fBgroup, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4, 1, 0, 0));
00129 AddFrame(f6, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00130
00131 TGCompositeFrame *f7 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
00132 TGLabel *fSizeLbl = new TGLabel(f7, "Size:");
00133 f7->AddFrame(fSizeLbl, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 6, 1, 0, 0));
00134 fBsize = new TGLineWidthComboBox(f7, kPAD_BSIZE);
00135 fBsize->Resize(92, 20);
00136 f7->AddFrame(fBsize, new TGLayoutHints(kLHintsLeft, 13, 1, 0, 0));
00137 fBsize->Associate(this);
00138 AddFrame(f7, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
00139
00140 fInit = kTRUE;
00141 }
00142
00143
00144 TPadEditor::~TPadEditor()
00145 {
00146
00147
00148
00149 delete fBmode;
00150 delete fBmode0;
00151 delete fBmode1;
00152 delete fBmodelh;
00153 }
00154
00155
00156 void TPadEditor::ConnectSignals2Slots()
00157 {
00158
00159
00160 fFixedAR->Connect("Toggled(Bool_t)","TPadEditor",this,"DoFixedAspectRatio(Bool_t)");
00161 fCrosshair->Connect("Toggled(Bool_t)","TPadEditor",this,"DoCrosshair(Bool_t)");
00162 fEditable->Connect("Toggled(Bool_t)","TPadEditor",this,"DoEditable(Bool_t)");
00163 fGridX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoGridX(Bool_t)");
00164 fGridY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoGridY(Bool_t)");
00165 fTickX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoTickX(Bool_t)");
00166 fTickY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoTickY(Bool_t)");
00167 fLogX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogX(Bool_t)");
00168 fLogY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogY(Bool_t)");
00169 fLogZ->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogZ(Bool_t)");
00170 fBgroup->Connect("Clicked(Int_t)","TPadEditor",this,"DoBorderMode()");
00171 fBsize->Connect("Selected(Int_t)", "TPadEditor", this, "DoBorderSize(Int_t)");
00172 fInit = kFALSE;
00173 }
00174
00175
00176 void TPadEditor::SetModel(TObject* obj)
00177 {
00178
00179
00180 fPadPointer = (TPad *)obj;
00181 fAvoidSignal = kTRUE;
00182 Bool_t on;
00183
00184 on = fPadPointer->HasFixedAspectRatio();
00185 if (on) fFixedAR->SetState(kButtonDown);
00186 else fFixedAR->SetState(kButtonUp);
00187
00188 on = fPadPointer->HasCrosshair();
00189 if (on) fCrosshair->SetState(kButtonDown);
00190 else fCrosshair->SetState(kButtonUp);
00191
00192 on = fPadPointer->IsEditable();
00193 if (on) fEditable->SetState(kButtonDown);
00194 else fEditable->SetState(kButtonUp);
00195
00196 on = fPadPointer->GetGridx();
00197 if (on) fGridX->SetState(kButtonDown);
00198 else fGridX->SetState(kButtonUp);
00199
00200 on = fPadPointer->GetGridy();
00201 if (on) fGridY->SetState(kButtonDown);
00202 else fGridY->SetState(kButtonUp);
00203
00204 Int_t par;
00205 par = fPadPointer->GetLogx();
00206 if (par) fLogX->SetState(kButtonDown);
00207 else fLogX->SetState(kButtonUp);
00208
00209 par = fPadPointer->GetLogy();
00210 if (par) fLogY->SetState(kButtonDown);
00211 else fLogY->SetState(kButtonUp);
00212
00213 par = fPadPointer->GetLogz();
00214 if (par) fLogZ->SetState(kButtonDown);
00215 else fLogZ->SetState(kButtonUp);
00216
00217 par = fPadPointer->GetTickx();
00218 if (par) fTickX->SetState(kButtonDown);
00219 else fTickX->SetState(kButtonUp);
00220
00221 par = fPadPointer->GetTicky();
00222 if (par) fTickY->SetState(kButtonDown);
00223 else fTickY->SetState(kButtonUp);
00224
00225 par = fPadPointer->GetBorderMode();
00226 if (par == -1) {
00227 fBgroup->SetButton(77, kTRUE);
00228 fBsize->SetEnabled(kTRUE);
00229 } else if (par == 1) {
00230 fBgroup->SetButton(79, kTRUE);
00231 fBsize->SetEnabled(kTRUE);
00232 } else {
00233 fBgroup->SetButton(78, kTRUE);
00234 fBsize->SetEnabled(kFALSE);
00235 }
00236 par = fPadPointer->GetBorderSize();
00237 if (par < 1) par = 1;
00238 if (par > 16) par = 16;
00239 fBsize->Select(par);
00240
00241 if (fInit) ConnectSignals2Slots();
00242
00243 fAvoidSignal = kFALSE;
00244 }
00245
00246
00247 void TPadEditor::ActivateBaseClassEditors(TClass* cl)
00248 {
00249
00250
00251 fGedEditor->ExcludeClassEditor(TAttLine::Class());
00252 TGedFrame::ActivateBaseClassEditors(cl);
00253 }
00254
00255
00256 void TPadEditor::DoEditable(Bool_t on)
00257 {
00258
00259
00260 if (fAvoidSignal) return;
00261 fPadPointer->SetEditable(on);
00262 Update();
00263 }
00264
00265
00266 void TPadEditor::DoCrosshair(Bool_t on)
00267 {
00268
00269
00270 if (fAvoidSignal) return;
00271 fPadPointer->SetCrosshair(on);
00272 Update();
00273 }
00274
00275
00276 void TPadEditor::DoFixedAspectRatio(Bool_t on)
00277 {
00278
00279
00280 if (fAvoidSignal) return;
00281 fPadPointer->SetFixedAspectRatio(on);
00282 Update();
00283 }
00284
00285
00286 void TPadEditor::DoGridX(Bool_t on)
00287 {
00288
00289
00290 if (fAvoidSignal) return;
00291 fPadPointer->SetGridx(on);
00292 Update();
00293 }
00294
00295
00296 void TPadEditor::DoGridY(Bool_t on)
00297 {
00298
00299
00300 if (fAvoidSignal) return;
00301 fPadPointer->SetGridy(on);
00302 Update();
00303 }
00304
00305
00306 void TPadEditor::DoLogX(Bool_t on)
00307 {
00308
00309
00310 if (fAvoidSignal) return;
00311 fPadPointer->SetLogx(on);
00312 Update();
00313 }
00314
00315
00316 void TPadEditor::DoLogY(Bool_t on)
00317 {
00318
00319
00320 if (fAvoidSignal) return;
00321 fPadPointer->SetLogy(on);
00322 Update();
00323 }
00324
00325
00326 void TPadEditor::DoLogZ(Bool_t on)
00327 {
00328
00329
00330 if (fAvoidSignal) return;
00331 fPadPointer->SetLogz(on);
00332 Update();
00333 }
00334
00335
00336 void TPadEditor::DoTickX(Bool_t on)
00337 {
00338
00339
00340 if (fAvoidSignal) return;
00341 fPadPointer->SetTickx(on);
00342 Update();
00343 }
00344
00345
00346 void TPadEditor::DoTickY(Bool_t on)
00347 {
00348
00349
00350 if (fAvoidSignal) return;
00351 fPadPointer->SetTicky(on);
00352 Update();
00353 }
00354
00355
00356 void TPadEditor::DoBorderMode()
00357 {
00358
00359
00360 if (fAvoidSignal) return;
00361 Int_t mode = 0;
00362 if (fBmode->GetState() == kButtonDown) mode = -1;
00363 else if (fBmode0->GetState() == kButtonDown) mode = 0;
00364 else mode = 1;
00365
00366 if (!mode) {
00367 fBsize->SetEnabled(kFALSE);
00368 } else {
00369 fBsize->SetEnabled(kTRUE);
00370 }
00371 fPadPointer->SetBorderMode(mode);
00372 Update();
00373 }
00374
00375
00376 void TPadEditor::DoBorderSize(Int_t size)
00377 {
00378
00379
00380 if (fAvoidSignal) return;
00381 fPadPointer->SetBorderSize(size);
00382 Update();
00383 }