Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "TGo4LabelPainter.h"
00015
00016 #include "TROOT.h"
00017 #include "TVirtualPad.h"
00018
00019
00020 TGo4LabelPainter::TGo4LabelPainter() :
00021 TNamed(),
00022 fxLabel(0),
00023 fdX0(0),
00024 fdY0(0),
00025 fbIsLabStreamed(kTRUE)
00026 {
00027 InitAttributes();
00028 }
00029
00030 TGo4LabelPainter::TGo4LabelPainter(const char* name, const char* title) :
00031 TNamed(name, title ? title : "Go4 LabelPainter"),
00032 fxLabel(0),
00033 fdX0(0),
00034 fdY0(0),
00035 fbIsLabStreamed(kFALSE)
00036 {
00037 InitAttributes();
00038 }
00039
00040
00041 void TGo4LabelPainter::InitAttributes()
00042 {
00043 SetBit(kMustCleanup);
00044 fdWidth=0.25;
00045 fdHeight=0.22;
00046 SetCaption("Empty label");
00047 SetTextAlign(12);
00048
00049 SetTextSize(0);
00050 SetTextFont(102);
00051 SetTextColor(GetLineColor());
00052 }
00053
00054 TGo4LabelPainter::~TGo4LabelPainter()
00055 {
00056 if (fxLabel!=0) {
00057 delete fxLabel;
00058 fxLabel = 0;
00059 }
00060 }
00061
00062 void TGo4LabelPainter::PaintLabel(Option_t* opt)
00063 {
00064 if(gPad==0) return;
00065 if(!CheckLabel()) {
00066
00067 if(fdX0==0)
00068 fdX0=(gPad->GetUxmax()-gPad->GetUxmin())/2;
00069 if(fdY0==0)
00070 fdY0=(gPad->GetUymax()-gPad->GetUymin())/2;
00071 fxLabel=CreateCurrentLabel(fdX0,fdY0);
00072 fxLabel->AppendPad(opt);
00073 } else {
00074
00075 if (gPad->GetListOfPrimitives()->FindObject(fxLabel)==0)
00076 fxLabel->AppendPad(opt);
00077 fxLabel->SetLineColor(GetLineColor());
00078 fxLabel->Clear();
00079 }
00080 fxLabel->AddText(fxCaption.Data());
00081 fxLabel->AddText(" ");
00082 fxLabel->AddLine(0,0,0,0);
00083 }
00084
00085 void TGo4LabelPainter::UnPaintLabel(Option_t* opt)
00086 {
00087 gROOT->GetListOfCanvases()->RecursiveRemove(fxLabel);
00088
00089
00090 TString option=opt;
00091 if(option.Contains("reset")) {
00092
00093 if(CheckLabel()) {
00094 delete fxLabel;
00095 fxLabel=0;
00096 }
00097 }
00098 }
00099
00100 void TGo4LabelPainter::RePaintLabel(Option_t* opt)
00101 {
00102 if(fxLabel)
00103 fxLabel->Paint(opt);
00104
00105 }
00106
00107 void TGo4LabelPainter::DisplayToFront(Option_t* opt)
00108 {
00109 if(fxLabel)
00110 fxLabel->Pop();
00111
00112 }
00113
00114
00115
00116 TGo4Label* TGo4LabelPainter::CreateCurrentLabel(Double_t x, Double_t y)
00117 {
00118 if(gPad==0) return 0;
00119 Double_t x0=x;
00120 Double_t y0=y;
00121 Double_t xmax=0;
00122 Double_t ymax=0;
00123 LabelCoords(x0,y0,xmax,ymax);
00124 TGo4Label* label=new TGo4Label(x0,y0,xmax,ymax);
00125 label->SetOwner(this);
00126 TAttText::Copy(*label);
00127 TAttLine::Copy(*label);
00128 TAttFill::Copy(*label);
00129 return label;
00130 }
00131
00132 Bool_t TGo4LabelPainter::CheckLabel()
00133 {
00134 if(fbIsLabStreamed && fxLabel!=0) {
00135
00136 fxLabel->SetOwner(this);
00137 fbIsLabStreamed=kFALSE;
00138
00139 return kTRUE;
00140 }
00141
00142 if(TGo4Label::fxLastDeleted==(char*) fxLabel)
00143 {
00144
00145 TGo4Label::fxLastDeleted=0;
00146 fxLabel=0;
00147 return kFALSE;
00148 }
00149 return fxLabel!=0;
00150 }
00151
00152
00153 void TGo4LabelPainter::LabelCoords(Double_t &xmin, Double_t &ymin, Double_t &xmax, Double_t &ymax)
00154 {
00155 Double_t xpmin =gPad->GetUxmin();
00156 Double_t xpmax =gPad->GetUxmax();
00157 Double_t ypmin =gPad->GetUymin();
00158 Double_t ypmax =gPad->GetUymax();
00159 Double_t dx=(xpmax-xpmin);
00160 Double_t dy=(ypmax-ypmin);
00161 Double_t width=fdWidth*dx;
00162 Double_t height=fdHeight*dy;
00163 xmax=gPad->XtoPad(xmin)+width;
00164 ymax=gPad->YtoPad(ymin)+height;
00165 xmax=gPad->PadtoX(xmax);
00166 ymax=gPad->PadtoY(ymax);
00167 }
00168
00169 Double_t TGo4LabelPainter::GetLabelXlo()
00170 {
00171 if(fxLabel)
00172 return fxLabel->GetX1();
00173 else
00174 return 0;
00175 }
00176
00177 Double_t TGo4LabelPainter::GetLabelYlo()
00178 {
00179 if(fxLabel)
00180 return fxLabel->GetY1();
00181 else
00182 return 0;
00183 }
00184
00185 Double_t TGo4LabelPainter::GetLabelXup()
00186 {
00187 if(fxLabel)
00188 return fxLabel->GetX2();
00189 else
00190 return 0;
00191 }
00192
00193 Double_t TGo4LabelPainter::GetLabelYup()
00194 {
00195 if(fxLabel)
00196 return fxLabel->GetY2();
00197 else
00198 return 0;
00199 }
00200
00202
00203 char* TGo4Label::fxLastDeleted = 0;
00204
00205 void TGo4Label::Paint(Option_t* opt)
00206 {
00207 if(gPad==0) return;
00208 if(fxOwner)
00209 {
00210 TPaveText::Paint(opt);
00211 }
00212
00213
00214
00215
00216
00217 }
00218
00220 void TGo4Label::ExecuteEvent(Int_t event, Int_t px, Int_t py)
00221 {
00222 if(gPad==0) return;
00223 TPaveText::ExecuteEvent(event,px,py);
00224 if(event==kButton1Up)
00225 {
00226 TGo4LabelPainter* painter=dynamic_cast<TGo4LabelPainter*>(fxOwner);
00227 if(painter)
00228 {
00229 painter->DisplayToFront();
00230
00231 }
00232 }
00233 }
00234
00236
00237 char* TGo4LabelConnector::fxLastDeleted = 0;
00238
00240 void TGo4LabelConnector::Paint(Option_t* opt)
00241 {
00242 if(gPad==0) return;
00243 if(fxOwner) TLine::Paint(opt);
00244
00245
00246
00247
00248 }