39 if ( fCanvas == 0x0 ) {
40 if ( TVirtualPad::Pad() )
41 fCanvas = TVirtualPad::Pad()->GetCanvas();
50 fCanvas->Connect(
"ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
53 "HandleMovement(Int_t, Int_t, Int_t, TObject*)");
54 fCanvas->Connect(
"Closed()",
57 "Delete(Option_t *)");
59 fCanvas->GetListOfPrimitives()->Add(
this);
61 std::cout <<
"LoupeOnPad connected to " << fCanvas->GetName() <<
std::endl;
70 if ( TQObject::Disconnect(fCanvas,
"ProcessedEvent(Int_t, Int_t, Int_t, TObject*)",
71 this,
"HandleMovement(Int_t, Int_t, Int_t, TObject*)") &&
72 TQObject::Disconnect(fCanvas,
"Closed()",
this,
"Delete(Option_t *)") ) {
73 std::cout <<
"Disconnect done for canvas" <<
std::endl;
75 else std::cout <<
"Disconnect fail canvas" <<
std::endl;
77 std::cout <<
"LoupeOnPad disconnected from " << fCanvas->GetName() <<
std::endl;
90 if ( fCanvas->GetPad(1) == 0x0 )
94 Double_t x1 = fCanvas->GetPad(1)->GetXlowNDC(); Int_t nb_x = 1, nb_tot = 2, delta_pad = 0; Bool_t count_x =
true; TPad *pad;
96 while ( (pad=(TPad *)fCanvas->GetPad(nb_tot++)) ) {
97 if ( pad->GetXlowNDC() > x1 && count_x ) {
98 x1 = pad->GetXlowNDC();
101 else { count_x =
false; }
104 delta_pad = add_x + add_y * nb_x;
105 if ( delta_pad < 0 ) {
106 padnumber = TMath::Max(0,fCurrentPadNumber+delta_pad);
109 padnumber = TMath::Min(nb_tot,fCurrentPadNumber+delta_pad);
117 TCanvas *loupe = 0x0;
120 loupe = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(
"LoupeOnPad");
123 int ww = gPad->GetWw();
124 int wh = gPad->GetWh();
125 loupe =
new TCanvas(
"LoupeOnPad",
"LoupeOnPad",1000,10,1000,(
int)1000*wh/ww);
126 loupe->ToggleToolBar();
131 int fCurrentSave = fCurrentPadNumber;
132 fCurrentPadNumber = 1;
134 while(
GetPadNumber(0,i)==fCanvas->cd(LastPadNbr)->GetNumber())
137 LastPadNbr = fCanvas->cd(
GetPadNumber(0,i))->GetNumber();
141 TPad *RefPad = (TPad*)fCanvas->cd(LastPadNbr);
143 loupe->SetRightMargin(RefPad->GetRightMargin());
144 loupe->SetTopMargin(RefPad->GetTopMargin());
145 loupe->SetLeftMargin(RefPad->GetLeftMargin());
146 loupe->SetBottomMargin(RefPad->GetBottomMargin());
148 fCurrentPadNumber = fCurrentSave;
161 TPad *pad; TObject *obj;
163 while ( (pad=(TPad *)fCanvas->GetPad(nb_tot++)) ) {
165 Bool_t modified =
false;
167 if ( (obj = pad->GetListOfPrimitives()->FindObject(
"LoupeOnPad_S")) ) {
168 pad->GetListOfPrimitives()->Remove(obj);
178 TCanvas *loupe = 0x0;
179 if ( (loupe = (TCanvas*)gROOT->FindObject(
"LoopOnPad")) == 0x0 )
182 while(loupe->GetListOfPrimitives()->GetSize()) loupe->GetListOfPrimitives()->RemoveFirst();
189 TCanvas *loupe = 0x0;
193 TObject *obj = 0x0; TPave *CurrentPave = 0x0; TVirtualPad *selectedpad = fCanvas->GetPad(padnumber);
195 if ( selectedpad == 0x0 )
return;
197 if (!selectedpad->GetListOfPrimitives()->GetSize())
199 fCurrentPadNumber = padnumber;
203 if ( (CurrentPave=(TPave*)selectedpad->GetListOfPrimitives()->FindObject(
"LoupeOnPad_S")) ) CurrentPave->SetFillColor(kRed);
206 CurrentPave =
new TPave(0.,0.,1.,1.,0,
"NDC");
207 CurrentPave->SetFillColor(kRed);
208 CurrentPave->SetFillStyle(3001);
209 CurrentPave->SetName(
"LoupeOnPad_S");
210 CurrentPave->SetBit(kCanDelete);
211 CurrentPave->SetBit(kCannotPick);
212 selectedpad->GetListOfPrimitives()->Add(CurrentPave);
215 selectedpad->Modified();
216 selectedpad->Update();
218 selectedpad = fCanvas->GetPad(fCurrentPadNumber);
220 if ( selectedpad == 0x0 )
return;
222 if ( (CurrentPave=(TPave*)selectedpad->GetListOfPrimitives()->FindObject(
"LoupeOnPad_S")) )
224 CurrentPave->SetFillColor(kGray+3);
225 selectedpad->Modified();
226 selectedpad->Update();
229 selectedpad = fCanvas->GetPad(padnumber);
232 loupe->GetListOfPrimitives()->Clear(
"nodelete");
233 TObjLink *lnk = selectedpad->GetListOfPrimitives()->FirstLink();
235 obj = lnk->GetObject();
237 TString
tmp = obj->GetName();
238 if ( tmp ==
"LoupeOnPad_S" ) {
243 lnk->GetObject()->Draw(lnk->GetOption());
247 loupe->SetFrameFillStyle(0);
249 loupe->Update(); selectedpad->Modified(
true); fCanvas->Update(); fCurrentPadNumber = padnumber;
254 Int_t addX = 0, addY = 0;
257 if( eventType == kMouseMotion)
266 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,34,19)
267 if( eventType == kArrowKeyRelease )
269 if(eventX>fLastX) addX = addX + fDeltaX;
270 if(eventX<fLastX) addX = addX - fDeltaX;
272 if(eventY>fLastY) addY = addY + fDeltaY;
273 if(eventY<fLastY) addY = addY - fDeltaY;
281 if( eventType == kKeyPress ) {
282 Int_t keysym = eventY;
288 if ( (EKeySym)keysym == kKey_t ) {
289 fToggleLoupe = !fToggleLoupe;
291 if ( (EKeySym)keysym == kKey_Left || (EKeySym)keysym == kKey_4 ) {
292 addX = addX - fDeltaX;
294 if ( (EKeySym)keysym == kKey_Up || (EKeySym)keysym == kKey_8 ) {
295 addY = addY - fDeltaY;
297 if ( (EKeySym)keysym == kKey_Right || (EKeySym)keysym == kKey_6 ) {
298 addX = addX + fDeltaX;
300 if ( (EKeySym)keysym == kKey_Down|| (EKeySym)keysym == kKey_2 ) {
301 addY = addY + fDeltaY;
303 if ( (EKeySym)keysym == kKey_7 ) {
304 addX = addX - fDeltaX;
305 addY = addY - fDeltaY;
307 if ( (EKeySym)keysym == kKey_9 ) {
308 addX = addX + fDeltaX;
309 addY = addY - fDeltaY;
311 if ( (EKeySym)keysym == kKey_3 ) {
312 addX = addX + fDeltaX;
313 addY = addY + fDeltaY;
315 if ( (EKeySym)keysym == kKey_1 ) {
316 addX = addX - fDeltaX;
317 addY = addY + fDeltaY;
331 if ( (EKeySym)keysym == kKey_c) {
334 if ( (EKeySym)keysym == kKey_Space && fToggleLoupe ) {
335 if ( fCanvas->GetSelectedPad() ) {
340 if ( (addX || addY) && fToggleLoupe ) {
343 TVirtualPad *selectedpad = fCanvas->GetPad(fCurrentPadNumber);
355 if ( c == 0x0 &&TVirtualPad::Pad() && TVirtualPad::Pad()->GetCanvas() )
356 cc = TVirtualPad::Pad()->GetCanvas();
TCanvas * CheckLoupeIsThere()
To be sure the Canvas to display loupe is there.
void HandleMovement(Int_t, Int_t, Int_t, TObject *select)
Handle mouse/keyboad catchings.
void ChangeCurrentPad(Int_t padnumber=1)
Change current pad number under loupe.
void RunLoupeOnPad(TCanvas *c=0x0)
void Clear(Option_t *="")
Remove any sign of Loupe on the pad.
LoupOnPad, a class to Loupe on a Pad in a Canvas with many pads in it.
LoupeOnPad(TCanvas *c=0x0)
ADF::LogMessage & endl(ADF::LogMessage &log)
Int_t GetPadNumber(Int_t add_x, Int_t add_y)
return pad number depending of increntation on x,y from the current position i.e the current pad ...
ClassImp(LoupeOnPad) void RunLoupeOnPad(TCanvas *c)