TPadEditor.cxx

Go to the documentation of this file.
00001 // @(#)root/ged:$Id: TPadEditor.cxx 20882 2007-11-19 11:31:26Z rdm $
00002 // Author: Ilka Antcheva   24/06/04
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 
00013 //////////////////////////////////////////////////////////////////////////
00014 //                                                                      //
00015 //  TPadEditor                                                          //
00016 //                                                                      //
00017 //  Editor of pad/canvas objects.                                       //
00018 //       color and fill style,                                          //             
00019 //      'Edit' check box sets pad/canvad editable,                      //
00020 //      'Crosshair' sets a cross hair on the pad,                       //
00021 //      'Fixed aspect ratio' can be set when resizing the pad           //
00022 //      'TickX' and 'TickY' set ticks along the X and Y axis            //
00023 //      'GridX' and 'GridY' set a grid along the X and Y axis           //
00024 //       pad/canvas border size can be set if a sinken or a raised      //
00025 //       border mode is selected; no border mode can be set to          //
00026 //                                                                      //
00027 //////////////////////////////////////////////////////////////////////////
00028 //Begin_Html
00029 /*
00030 <img src="gif/TPadEditor.gif">
00031 */
00032 //End_Html
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    // Constructor of TPad editor GUI.
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    // Destructor of fill editor.
00147 
00148    // children of TGButonGroup are not deleted
00149    delete fBmode;
00150    delete fBmode0;
00151    delete fBmode1;
00152    delete fBmodelh;
00153 }
00154 
00155 //______________________________________________________________________________
00156 void TPadEditor::ConnectSignals2Slots()
00157 { 
00158    // Connect signals to slots.
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    // Pick up the used fill attributes.
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    // Exclude TAttLineEditor from this interface.
00250 
00251    fGedEditor->ExcludeClassEditor(TAttLine::Class());
00252    TGedFrame::ActivateBaseClassEditors(cl);
00253 }
00254 
00255 //______________________________________________________________________________
00256 void TPadEditor::DoEditable(Bool_t on)
00257 {
00258    // Slot connected to the check box 'Editable'.
00259 
00260    if (fAvoidSignal) return;
00261    fPadPointer->SetEditable(on);
00262    Update();
00263 }
00264 
00265 //______________________________________________________________________________
00266 void TPadEditor::DoCrosshair(Bool_t on)
00267 {
00268    // Slot connected to the check box 'Crosshair'.
00269 
00270    if (fAvoidSignal) return;
00271    fPadPointer->SetCrosshair(on);
00272    Update();
00273 }
00274 
00275 //______________________________________________________________________________
00276 void TPadEditor::DoFixedAspectRatio(Bool_t on)
00277 {
00278    // Slot connected to the check box 'Fixed aspect ratio'.
00279 
00280    if (fAvoidSignal) return;
00281    fPadPointer->SetFixedAspectRatio(on);
00282    Update();
00283 }
00284 
00285 //______________________________________________________________________________
00286 void TPadEditor::DoGridX(Bool_t on)
00287 {
00288    // Slot connected to the check box 'GridX'.
00289 
00290    if (fAvoidSignal) return;
00291    fPadPointer->SetGridx(on);
00292    Update();
00293 }
00294 
00295 //______________________________________________________________________________
00296 void TPadEditor::DoGridY(Bool_t on)
00297 {
00298    // Slot connected to the check box 'GridY'.
00299 
00300    if (fAvoidSignal) return;
00301    fPadPointer->SetGridy(on);
00302    Update();
00303 }
00304 
00305 //______________________________________________________________________________
00306 void TPadEditor::DoLogX(Bool_t on)
00307 {
00308    // Slot connected to the check box 'LogX'.
00309 
00310    if (fAvoidSignal) return;
00311    fPadPointer->SetLogx(on);
00312    Update();
00313 }
00314 
00315 //______________________________________________________________________________
00316 void TPadEditor::DoLogY(Bool_t on)
00317 {
00318    // Slot connected to the check box 'LogY'.
00319 
00320    if (fAvoidSignal) return;
00321    fPadPointer->SetLogy(on);
00322    Update();
00323 }
00324 
00325 //______________________________________________________________________________
00326 void TPadEditor::DoLogZ(Bool_t on)
00327 {
00328    // Slot connected to the check box 'LogZ'.
00329 
00330    if (fAvoidSignal) return;
00331    fPadPointer->SetLogz(on);
00332    Update();
00333 }
00334 
00335 //______________________________________________________________________________
00336 void TPadEditor::DoTickX(Bool_t on)
00337 {
00338    // Slot connected to the check box 'TickX'.
00339 
00340    if (fAvoidSignal) return;
00341    fPadPointer->SetTickx(on);
00342    Update();
00343 }
00344 
00345 //______________________________________________________________________________
00346 void TPadEditor::DoTickY(Bool_t on)
00347 {
00348    // Slot connected to the check box 'TickY'.
00349 
00350    if (fAvoidSignal) return;
00351    fPadPointer->SetTicky(on);
00352    Update();
00353 }
00354 
00355 //______________________________________________________________________________
00356 void TPadEditor::DoBorderMode()
00357 {
00358    // Slot connected to the border mode settings.
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    // Slot connected to the border size settings.
00379 
00380    if (fAvoidSignal) return;
00381    fPadPointer->SetBorderSize(size);
00382    Update();
00383 }

Generated on Tue Jul 5 14:19:48 2011 for ROOT_528-00b_version by  doxygen 1.5.1