// @(#)root/ged:$Name: TPadEditor.cxx
// Author: Ilka Antcheva 24/06/04
/*************************************************************************
* Copyright (C) 1995-2002, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
//////////////////////////////////////////////////////////////////////////
// //
// TPadEditor //
// //
// Editor of pad/canvas objects. //
// color and fill style, //
// 'Edit' check box sets pad/canvad editable, //
// 'Crosshair' sets a cross hair on the pad, //
// 'Fixed aspect ratio' can be set when resizing the pad //
// 'TickX' and 'TickY' set ticks along the X and Y axis //
// 'GridX' and 'GridY' set a grid along the X and Y axis //
// pad/canvas border size can be set if a sinken or a raised //
// border mode is selected; no border mode can be set to //
// //
//////////////////////////////////////////////////////////////////////////
//
/*
*/
//
#include "TPadEditor.h"
#include "TGClient.h"
#include "TGButton.h"
#include "TGComboBox.h"
#include "TGButtonGroup.h"
#include "TGLabel.h"
#include "TColor.h"
#include "TCanvas.h"
ClassImp(TPadEditor)
enum EPadWid {
kCOLOR,
kPAD_FAR,
kPAD_EDIT,
kPAD_CROSS,
kPAD_GRIDX,
kPAD_GRIDY,
kPAD_LOGX,
kPAD_LOGY,
kPAD_LOGZ,
kPAD_TICKX,
kPAD_TICKY,
kPAD_BSIZE,
kPAD_BMODE
};
//______________________________________________________________________________
TPadEditor::TPadEditor(const TGWindow *p, Int_t id, Int_t width,
Int_t height, UInt_t options, Pixel_t back)
: TGedFrame(p, id, width, height, options | kVerticalFrame, back)
{
// Constructor of TPad editor GUI.
fPadPointer = 0;
MakeTitle("Pad/Canvas");
fFixedAR = new TGCheckButton(this, "Fixed aspect ratio", kPAD_FAR);
fFixedAR->SetToolTipText("Set fixed aspect ratio");
AddFrame(fFixedAR, new TGLayoutHints(kLHintsTop, 4, 1, 2, 1));
TGCompositeFrame *f2 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
TGCompositeFrame *f3 = new TGCompositeFrame(f2, 40, 20, kVerticalFrame);
f2->AddFrame(f3, new TGLayoutHints(kLHintsTop, 0, 1, 0, 0));
fCrosshair = new TGCheckButton(f3, "Crosshair", kPAD_CROSS);
fCrosshair->SetToolTipText("Set crosshair");
f3->AddFrame(fCrosshair, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
fGridX = new TGCheckButton(f3, "GridX", kPAD_GRIDX);
fGridX->SetToolTipText("Set grid along X");
f3->AddFrame(fGridX, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
fTickX = new TGCheckButton(f3, "TickX", kPAD_TICKX);
fTickX->SetToolTipText("Set tick marks along X");
f3->AddFrame(fTickX, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
TGCompositeFrame *f4 = new TGCompositeFrame(f2, 40, 20, kVerticalFrame);
f2->AddFrame(f4, new TGLayoutHints(kLHintsTop, 0, 1, 0, 0));
fEditable = new TGCheckButton(f4, "Edit", kPAD_EDIT);
fEditable->SetToolTipText("Set editable mode");
f4->AddFrame(fEditable, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
fGridY = new TGCheckButton(f4, "GridY", kPAD_GRIDY);
fGridY->SetToolTipText("Set grid along Y");
f4->AddFrame(fGridY, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
fTickY = new TGCheckButton(f4, "TickY", kPAD_TICKY);
fTickY->SetToolTipText("Set tick marks along Y");
f4->AddFrame(fTickY, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
AddFrame(f2, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
MakeTitle("Log Scale");
TGCompositeFrame *f5 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
fLogX = new TGCheckButton(f5, ":X", kPAD_LOGX);
fLogX->SetToolTipText("Set logarithmic scale along X");
f5->AddFrame(fLogX, new TGLayoutHints(kLHintsTop, 4, 1, 1, 1));
fLogY = new TGCheckButton(f5, ":Y", kPAD_LOGY);
fLogY->SetToolTipText("Set logarithmic scale along Y");
f5->AddFrame(fLogY, new TGLayoutHints(kLHintsTop, 15, 1, 1, 1));
fLogZ = new TGCheckButton(f5, ":Z", kPAD_LOGZ);
fLogZ->SetToolTipText("Set logarithmic scale along Z");
f5->AddFrame(fLogZ, new TGLayoutHints(kLHintsTop, 15, 1, 1, 1));
AddFrame(f5, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
TGCompositeFrame *f6 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
TGButtonGroup *bgr = new TGButtonGroup(f6,3,1,3,0, "Border Mode");
bgr->SetRadioButtonExclusive(kTRUE);
fBmode = new TGRadioButton(bgr, " Sunken border", 77);
fBmode->SetToolTipText("Set a sinken border of the pad/canvas");
fBmode0 = new TGRadioButton(bgr, " No border", 78);
fBmode0->SetToolTipText("Set no border of the pad/canvas");
fBmode1 = new TGRadioButton(bgr, " Raised border", 79);
fBmode1->SetToolTipText("Set a raised border of the pad/canvas");
bgr->SetButton(79, kTRUE);
bgr->SetLayoutHints(new TGLayoutHints(kLHintsLeft, 0,0,3,0), fBmode);
bgr->Show();
bgr->ChangeOptions(kFitWidth|kChildFrame|kVerticalFrame);
f6->AddFrame(bgr, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 4, 1, 0, 0));
AddFrame(f6, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
f7 = new TGCompositeFrame(this, 80, 20, kHorizontalFrame);
TGLabel *fSizeLbl = new TGLabel(f7, "Size:");
f7->AddFrame(fSizeLbl, new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 6, 1, 0, 0));
fBsize = new TGLineWidthComboBox(f7, kPAD_BSIZE);
fBsize->Connect("Selected(Int_t)", "TPadEditor", this, "DoBorderSize(Int_t)");
fBsize->Resize(92, 20);
f7->AddFrame(fBsize, new TGLayoutHints(kLHintsLeft, 13, 1, 0, 0));
fBsize->Associate(this);
AddFrame(f7, new TGLayoutHints(kLHintsTop, 1, 1, 0, 0));
MapSubwindows();
Layout();
MapWindow();
TClass *cl = TPad::Class();
TGedElement *ge = new TGedElement;
ge->fGedFrame = this;
ge->fCanvas = 0;
cl->GetEditorList()->Add(ge);
fInit = kTRUE;
}
//______________________________________________________________________________
TPadEditor::~TPadEditor()
{
// Destructor of fill editor.
TGFrameElement *el;
TIter next(GetList());
while ((el = (TGFrameElement *)next())) {
if (!strcmp(el->fFrame->ClassName(), "TGCompositeFrame"))
((TGCompositeFrame *)el->fFrame)->Cleanup();
}
Cleanup();
}
//______________________________________________________________________________
void TPadEditor::ConnectSignals2Slots()
{
// Connect signals to slots.
fFixedAR->Connect("Toggled(Bool_t)","TPadEditor",this,"DoFixedAspectRatio(Bool_t)");
fCrosshair->Connect("Toggled(Bool_t)","TPadEditor",this,"DoCrosshair(Bool_t)");
fEditable->Connect("Toggled(Bool_t)","TPadEditor",this,"DoEditable(Bool_t)");
fGridX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoGridX(Bool_t)");
fGridY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoGridY(Bool_t)");
fTickX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoTickX(Bool_t)");
fTickY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoTickY(Bool_t)");
fLogX->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogX(Bool_t)");
fLogY->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogY(Bool_t)");
fLogZ->Connect("Toggled(Bool_t)","TPadEditor",this,"DoLogZ(Bool_t)");
fBmode->Connect("Toggled(Bool_t)","TPadEditor",this,"DoBorderMode()");
fBmode0->Connect("Toggled(Bool_t)","TPadEditor",this,"DoBorderMode()");
fBmode1->Connect("Toggled(Bool_t)","TPadEditor",this,"DoBorderMode()");
fInit = kFALSE;
}
//______________________________________________________________________________
void TPadEditor::SetModel(TVirtualPad* pad, TObject* obj, Int_t)
{
// Pick up the used fill attributes.
fModel = 0;
fPad = 0;
if (obj == 0 || !obj->InheritsFrom("TPad")) {
SetActive(kFALSE);
return;
}
fModel = obj;
fPad = pad;
fPadPointer = (TPad *)fModel;
Bool_t on;
on = fPadPointer->HasFixedAspectRatio();
if (on) fFixedAR->SetState(kButtonDown);
else fFixedAR->SetState(kButtonUp);
on = fPadPointer->HasCrosshair();
if (on) fCrosshair->SetState(kButtonDown);
else fCrosshair->SetState(kButtonUp);
on = fPadPointer->IsEditable();
if (on) fEditable->SetState(kButtonDown);
else fEditable->SetState(kButtonUp);
on = fPadPointer->GetGridx();
if (on) fGridX->SetState(kButtonDown);
else fGridX->SetState(kButtonUp);
on = fPadPointer->GetGridy();
if (on) fGridY->SetState(kButtonDown);
else fGridY->SetState(kButtonUp);
Int_t par;
par = fPadPointer->GetLogx();
if (par) fLogX->SetState(kButtonDown);
else fLogX->SetState(kButtonUp);
par = fPadPointer->GetLogy();
if (par) fLogY->SetState(kButtonDown);
else fLogY->SetState(kButtonUp);
par = fPadPointer->GetLogz();
if (par) fLogZ->SetState(kButtonDown);
else fLogZ->SetState(kButtonUp);
par = fPadPointer->GetTickx();
if (par) fTickX->SetState(kButtonDown);
else fTickX->SetState(kButtonUp);
par = fPadPointer->GetTicky();
if (par) fTickY->SetState(kButtonDown);
else fTickY->SetState(kButtonUp);
par = fPadPointer->GetBorderMode();
if (par == -1) fBmode->SetState(kButtonDown);
else if (par == 1) fBmode1->SetState(kButtonDown);
else fBmode0->SetState(kButtonDown);
par = fPadPointer->GetBorderSize();
if (par < 1) par = 1;
if (par > 16) par = 16;
fBsize->Select(par);
if (fInit) ConnectSignals2Slots();
SetActive();
}
//______________________________________________________________________________
void TPadEditor::DoEditable(Bool_t on)
{
// Slot connected to the check box 'Editable'.
fPadPointer->SetEditable(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoCrosshair(Bool_t on)
{
// Slot connected to the check box 'Crosshair'.
fPadPointer->SetCrosshair(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoFixedAspectRatio(Bool_t on)
{
// Slot connected to the check box 'Fixed aspect ratio'.
fPadPointer->SetFixedAspectRatio(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoGridX(Bool_t on)
{
// Slot connected to the check box 'GridX'.
fPadPointer->SetGridx(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoGridY(Bool_t on)
{
// Slot connected to the check box 'GridY'.
fPadPointer->SetGridy(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoLogX(Bool_t on)
{
// Slot connected to the check box 'LogX'.
fPadPointer->SetLogx(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoLogY(Bool_t on)
{
// Slot connected to the check box 'LogY'.
fPadPointer->SetLogy(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoLogZ(Bool_t on)
{
// Slot connected to the check box 'LogZ'.
fPadPointer->SetLogz(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoTickX(Bool_t on)
{
// Slot connected to the check box 'TickX'.
fPadPointer->SetTickx(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoTickY(Bool_t on)
{
// Slot connected to the check box 'TickY'.
fPadPointer->SetTicky(on);
Update();
}
//______________________________________________________________________________
void TPadEditor::DoBorderMode()
{
// Slot connected to the border mode settings.
Int_t mode = 0;
if (fBmode->GetState() == kButtonDown) mode = -1;
else if (fBmode0->GetState() == kButtonDown) mode = 0;
else mode = 1;
if (!mode) HideFrame(f7);
else ShowFrame(f7);
Layout();
fPadPointer->SetBorderMode(mode);
Update();
gPad->Modified();
gPad->Update();
}
//______________________________________________________________________________
void TPadEditor::DoBorderSize(Int_t size)
{
// Slot connected to the border size settings.
fPadPointer->SetBorderSize(size);
Update();
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.