GSI Object Oriented Online Offline (Go4)  GO4-6.3.0
TGo4HisDrawOptions.cpp
Go to the documentation of this file.
1 // $Id$
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TGo4HisDrawOptions.h"
15 
16 #include "TROOT.h"
17 #include "TPad.h"
18 #include "TColor.h"
19 #include "TAttLine.h"
20 #include "TAttFill.h"
21 #include "TAttMarker.h"
22 
23 #include "TGo4Picture.h"
24 #include "TGo4ViewPanel.h"
25 #include "TGo4MdiArea.h"
26 
27 #include <QColorDialog>
28 
29 TGo4HisDrawOptions::TGo4HisDrawOptions( QWidget *parent, const char *name, Qt::WindowFlags fl )
30  : QWidget( parent, fl )
31 {
32  setObjectName( name ? name : "Go4HisDrawOptions");
33  setupUi(this);
34 
35  QObject::connect(DrawOption, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::SetDrawOptions);
36  QObject::connect(ErrorBars, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::SetErrorBars);
37  QObject::connect(Coordinates, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::SetCoordinates);
38  QObject::connect(XStyle, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::XaxisStyle);
39  QObject::connect(YStyle, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::YaxisStyle);
40  QObject::connect(ZStyle, QOverload<int>::of(&QComboBox::activated), this, &TGo4HisDrawOptions::ZaxisStyle);
41  QObject::connect(AutoScaleBox, &QCheckBox::toggled, this, &TGo4HisDrawOptions::SetAutoScale);
42  QObject::connect(LineColor, &QPushButton::clicked, this, &TGo4HisDrawOptions::SetLineColor);
43  QObject::connect(FillColor, &QPushButton::clicked, this, &TGo4HisDrawOptions::SetFillColor);
44  QObject::connect(MarkerColor, &QPushButton::clicked, this, &TGo4HisDrawOptions::SetMarkerColor);
45 
46 
47  fbSettingPanelData = true;
48 
50 
52 
53  AutoScaleBox->setVisible(false);
54 
55  LineColor->setEnabled(false);
56  FillColor->setEnabled(false);
57  MarkerColor->setEnabled(false);
58 
59  fbSettingPanelData = false;
60 }
61 
62 void TGo4HisDrawOptions::panelSlot(TGo4ViewPanel *panel, TPad *pad, int signalid)
63 {
64  switch (signalid) {
67  break;
70  TGo4Picture *padopt = panel->GetPadOptions(pad);
71  if (!padopt) break;
72 
73  int ndim = padopt->GetFullRangeDim();
74  if (ndim <= 0) ndim = 1;
75 
76  const char *drawopt = nullptr;
77  TObject *obj = panel->GetSelectedObject(pad, &drawopt);
78 
79  int viewtype = view_Histo1;
80 
81  TString buf(drawopt);
82  buf.ToLower();
83 
84  if (obj && obj->InheritsFrom("TGraphPolar"))
85  viewtype = view_Polar;
86  else if (obj && (obj->InheritsFrom("TGraph") || obj->InheritsFrom("TMultiGraph")))
87  viewtype = view_Graph;
88  else if (ndim==1)
89  viewtype = view_Histo1;
90  else if (buf.Contains("lego") || buf.Contains("surf"))
91  viewtype = view_Histo2ext;
92  else
93  viewtype = view_Histo2;
94 
95  fbSettingPanelData = true;
96 
97  if (fiLastView!=viewtype) UpdateView(viewtype, panel->IsWebCanvas());
98 
99  int ErrorStyle = 0, CoordStyle = 0, DrawStyle = 0;
100  DecodeDrawOption(drawopt, ErrorStyle, CoordStyle, DrawStyle);
101 
102  Coordinates->setEnabled(!panel->IsWebCanvas());
103  if (panel->IsWebCanvas()) CoordStyle = 0;
104 
105  DrawOption->setCurrentIndex(DrawStyle);
106  ErrorBars->setCurrentIndex(ErrorStyle);
107  Coordinates->setCurrentIndex(CoordStyle);
108  XStyle->setCurrentIndex(padopt->GetLogScale(0));
109  YStyle->setCurrentIndex(padopt->GetLogScale(1));
110  ZStyle->setCurrentIndex(padopt->GetLogScale(2));
111  ZStyle->setEnabled(ndim>1);
112  AutoScaleBox->setChecked(padopt->IsAutoScale());
113 
114  LineColor->setEnabled(dynamic_cast<TAttLine*>(obj) != nullptr);
115  FillColor->setEnabled(dynamic_cast<TAttFill*>(obj) != nullptr);
116  MarkerColor->setEnabled(dynamic_cast<TAttMarker*>(obj) != nullptr);
117 
118  fbSettingPanelData = false;
119 
120  break; }
121  default:
122  break;
123  }
124 }
125 
126 void TGo4HisDrawOptions::UpdateView(int viewtype, bool webcanvas)
127 {
128  int lines = 30;
129  ErrorBars->clear();
130  DrawOption->clear();
131  Coordinates->clear();
132 
133  switch(viewtype) {
134  case view_Histo1:
135  DrawOption->addItem( QIcon(":/icons/h1_t.png"), " scatter");
136  DrawOption->addItem( QIcon(""), "AH no axis");
137  DrawOption->addItem( QIcon(""), "*H stars");
138  DrawOption->addItem( QIcon(""), "L lines");
139  DrawOption->addItem( QIcon(""), "LF2 lines+fill");
140  DrawOption->addItem( QIcon(""), "C curve");
141  DrawOption->addItem( QIcon(""), "B barchart");
142  DrawOption->addItem( QIcon(""), "P polymarkers");
143  DrawOption->addItem( QIcon(""), "P0 polymarkers");
144  DrawOption->addItem( QIcon(""), "9H high resol");
145  DrawOption->addItem( QIcon(""), "][ no right");
146  DrawOption->addItem( QIcon(""), "TEXT digits b/w");
147  DrawOption->addItem( QIcon(""), "BAR barchart");
148  DrawOption->addItem( QIcon(":/icons/lego.png"), " lego b/w");
149  DrawOption->addItem( QIcon(":/icons/lego1.png"), " lego1 shadow");
150  DrawOption->addItem( QIcon(":/icons/lego2.png"), " lego2 color");
151  DrawOption->addItem( QIcon(":/icons/surf.png"), " mesh b/w");
152  DrawOption->addItem( QIcon(":/icons/surf1.png"), " mesh color");
153  DrawOption->addItem( QIcon(":/icons/surf2.png"), " surf c");
154  DrawOption->addItem( QIcon(":/icons/surf3.png"), " mesh+contour");
155  DrawOption->addItem( QIcon(":/icons/surf4.png"), " gourand");
156  DrawOption->addItem( QIcon(":/icons/surf5.png"), " col contour");
157  DrawOption->addItem( QIcon(""), "");
158  lines=30;
159  break;
160  case view_Histo2:
161  case view_Histo2ext:
162  DrawOption->addItem( QIcon(":/icons/h1_t.png"), " scatter");
163  DrawOption->addItem( QIcon(":/icons/col.png"), " pixel c");
164  DrawOption->addItem( QIcon(":/icons/cont0.png")," cont0 c");
165  DrawOption->addItem( QIcon(":/icons/lego2.png")," lego2 color");
166  DrawOption->addItem( QIcon(":/icons/surf2.png")," surf c");
167  DrawOption->addItem( QIcon(":/icons/surf1.png")," mesh color");
168  DrawOption->addItem( QIcon(":/icons/cont1.png")," cont1 c");
169  DrawOption->addItem( QIcon(":/icons/cont1.png")," cont4");
170  DrawOption->addItem( QIcon(":/icons/lego1.png")," lego1 shadow");
171  DrawOption->addItem( QIcon(":/icons/lego.png"), " lego b/w");
172  DrawOption->addItem( QIcon(":/icons/cont2.png")," cont2 dot b/w");
173  DrawOption->addItem( QIcon(":/icons/cont3.png")," cont3 b/w");
174  DrawOption->addItem( QIcon(":/icons/surf.png"), " mesh b/w");
175  DrawOption->addItem( QIcon(":/icons/surf3.png")," mesh+contour");
176  DrawOption->addItem( QIcon(":/icons/surf4.png")," gourand");
177  DrawOption->addItem( QIcon(":/icons/surf5.png")," col contour");
178  DrawOption->addItem( QIcon(""), "ARR arrow mode");
179  DrawOption->addItem( QIcon(""), "BOX boxes");
180  DrawOption->addItem( QIcon(""), "TEXT content");
181  lines = 30;
182 #ifndef __NOGO4ASI__
183  if (!webcanvas) DrawOption->addItem( QIcon(":/icons/asimage.png"), " ASImage");
184  DrawOption->addItem( QIcon(""), "");
185 #else
186  DrawOption->addItem( QIcon(""), "");
187 #endif
188  break;
189  case view_Graph:
190  DrawOption->addItem("P: default");
191  DrawOption->addItem("*: stars");
192  DrawOption->addItem("L: line");
193  DrawOption->addItem("F: fill");
194  DrawOption->addItem("F1: fill 1");
195  DrawOption->addItem("F2: fill 2");
196  DrawOption->addItem("C: smooth");
197  DrawOption->addItem("B: bar");
198  DrawOption->addItem("LP: line + mark");
199  DrawOption->addItem("L*: line + *");
200  DrawOption->addItem("FP: fill + mark");
201  DrawOption->addItem("F*: fill + *");
202  DrawOption->addItem("CP: smooth + mark");
203  DrawOption->addItem("C*: smooth + *");
204  DrawOption->addItem("BP: smooth + mark");
205  DrawOption->addItem("B*: smooth + *");
206  lines=30;
207  break;
208  case view_Polar:
209  DrawOption->addItem(": opt as is");
210  DrawOption->addItem("P: polym");
211  DrawOption->addItem("F: fill");
212  DrawOption->addItem("PF: P+F");
213  lines = 10;
214  break;
215  }
216 
217  DrawOption->setMaxVisibleItems(lines);
218 
219  switch(viewtype) {
220  case view_Histo1:
221  ErrorBars->addItem("No Errors");
222  ErrorBars->addItem("E: simple");
223  ErrorBars->addItem("E1: edges");
224  ErrorBars->addItem("E2: rectangles");
225  ErrorBars->addItem("E3: fill");
226  ErrorBars->addItem("E4: contour");
227  break;
228  case view_Histo2:
229  ErrorBars->addItem("No palette");
230  ErrorBars->addItem(QIcon(":/icons/colz.png")," +scale");
231  break;
232  case view_Histo2ext:
233  ErrorBars->addItem("No palette");
234  ErrorBars->addItem(QIcon(":/icons/colz.png")," +scale");
235  ErrorBars->addItem(" - front");
236  ErrorBars->addItem(" - back");
237  ErrorBars->addItem(" - fr & bk");
238  ErrorBars->addItem(QIcon(":/icons/colz.png")," scale - fr");
239  ErrorBars->addItem(QIcon(":/icons/colz.png"), " scale - bk");
240  ErrorBars->addItem(QIcon(":/icons/colz.png"), " scale - fr & bk");
241  break;
242  case view_Graph:
243  ErrorBars->addItem("errors as is");
244  ErrorBars->addItem("X: no errors");
245  ErrorBars->addItem(">: arrow");
246  ErrorBars->addItem("|>: full arrow");
247  ErrorBars->addItem("2: err opt 2");
248  ErrorBars->addItem("3: err opt 3");
249  ErrorBars->addItem("4: err opt 4");
250  ErrorBars->addItem("[]: asym err");
251  break;
252  case view_Polar:
253  ErrorBars->addItem(": err as is");
254  ErrorBars->addItem("E: error bars");
255  ErrorBars->addItem("N: no labels");
256  ErrorBars->addItem("EN: E+N");
257  break;
258  }
259 
260  switch(viewtype) {
261  case view_Histo1:
262  case view_Histo2:
263  case view_Histo2ext:
264  Coordinates->addItem("Cartesian");
265  Coordinates->addItem("Polar");
266  Coordinates->addItem("Spheric");
267  Coordinates->addItem("Rapidity");
268  Coordinates->addItem("Cylindric");
269  break;
270  case view_Graph:
271  Coordinates->addItem("A: norm axis");
272  Coordinates->addItem("AI: supp. axis");
273  Coordinates->addItem("AX+: top");
274  Coordinates->addItem("AY+: right");
275  Coordinates->addItem("AX+Y+: x & y");
276  Coordinates->addItem("A1: ylow = ymin");
277  break;
278  case view_Polar:
279  Coordinates->addItem(": axis as is");
280  Coordinates->addItem("A: force axis");
281  Coordinates->addItem("O: orthogonal");
282  Coordinates->addItem("AO: A+O");
283  break;
284  }
285 
286  fiLastView = viewtype;
287 }
288 
290 {
291  if (fbSettingPanelData) return;
292 
294  if (!panel) return;
295 
296  TString buf;
297  const char *drawopt = nullptr;
298 
299  if ((kind >= 0) && (kind <= 2)) {
300  CodeDrawOptions(ErrorBars->currentIndex(), Coordinates->currentIndex(), DrawOption->currentIndex(), buf);
301  if (buf.Length() > 0)
302  drawopt = buf.Data();
303  }
304 
305  panel->ChangeDrawOption(kind, value, drawopt);
306 }
307 
309 {
311 }
312 
314 {
316 }
317 
319 {
321 }
322 
324 {
326 }
327 
329 {
331 }
332 
334 {
336 }
337 
339 {
340  ChangeDrawOptionForCurrentPanel(10, on ? 1 : 0);
341 }
342 
343 void TGo4HisDrawOptions::DecodeDrawOption(const char *drawopt,
344  int& HisErrorStyle,
345  int& HisCoordStyle,
346  int& HisDrawStyle)
347 {
348  HisDrawStyle = 0;
349  HisErrorStyle = 0;
350  HisCoordStyle = 0;
351  if (fiLastView==view_Histo2) HisDrawStyle = 1;
352 
353  if (!drawopt || (*drawopt == 0)) return;
354 
355  TString buf(drawopt);
356  buf.ToLower();
357 
358 // check for error options in string:
359 
360  if (fiLastView==view_Polar) {
361  if (buf.Contains("p") && buf.Contains("f")) HisDrawStyle = 3; else
362  if (buf.Contains("f")) HisDrawStyle = 2; else
363  if (buf.Contains("p")) HisDrawStyle = 1; else HisDrawStyle = 0;
364 
365  if (buf.Contains("a") && buf.Contains("o")) HisCoordStyle = 3; else
366  if (buf.Contains("o")) HisCoordStyle = 2; else
367  if (buf.Contains("a")) HisCoordStyle = 1; else HisCoordStyle = 0;
368 
369  if (buf.Contains("e") && buf.Contains("n")) HisErrorStyle = 3; else
370  if (buf.Contains("n")) HisErrorStyle = 2; else
371  if (buf.Contains("e")) HisErrorStyle = 1; else HisErrorStyle = 0;
372 
373  return;
374  }
375 
376  if (fiLastView==view_Graph) {
377 
378  if (buf.Contains("b") && buf.Contains("*")) HisDrawStyle = 15; else
379  if (buf.Contains("b") && buf.Contains("p")) HisDrawStyle = 14; else
380  if (buf.Contains("c") && buf.Contains("*")) HisDrawStyle = 13; else
381  if (buf.Contains("c") && buf.Contains("p")) HisDrawStyle = 12; else
382  if (buf.Contains("f") && buf.Contains("*")) HisDrawStyle = 11; else
383  if (buf.Contains("f") && buf.Contains("p")) HisDrawStyle = 10; else
384  if (buf.Contains("l") && buf.Contains("*")) HisDrawStyle = 9; else
385  if (buf.Contains("l") && buf.Contains("p")) HisDrawStyle = 8; else
386  if (buf.Contains("b")) HisDrawStyle = 7; else
387  if (buf.Contains("c")) HisDrawStyle = 6; else
388  if (buf.Contains("f2")) HisDrawStyle = 5; else
389  if (buf.Contains("f1")) HisDrawStyle = 4; else
390  if (buf.Contains("f")) HisDrawStyle = 3; else
391  if (buf.Contains("l")) HisDrawStyle = 2; else
392  if (buf.Contains("*")) HisDrawStyle = 1;
393 
394  if (buf.Contains("x+") && buf.Contains("y+")) HisCoordStyle = 4; else
395  if (buf.Contains("y+")) HisCoordStyle = 3; else
396  if (buf.Contains("x+")) HisCoordStyle = 2; else
397  if (buf.Contains("a1")) HisCoordStyle = 5; else
398  if (buf.Contains("ai")) HisCoordStyle = 1; else
399  if (buf.Contains("a")) HisCoordStyle = 0; else HisCoordStyle = 1;
400 
401  if (buf.Contains("x") && (HisCoordStyle!=4) && (HisCoordStyle!=2)) HisErrorStyle = 1; else
402  if (buf.Contains("|>")) HisErrorStyle = 3; else
403  if (buf.Contains(">")) HisErrorStyle = 2; else
404  if (buf.Contains("2") && (HisDrawStyle != 5)) HisErrorStyle = 4; else
405  if (buf.Contains("3")) HisErrorStyle = 5; else
406  if (buf.Contains("4")) HisErrorStyle = 6; else
407  if (buf.Contains("[]")) HisErrorStyle = 7;
408 
409  return;
410  }
411 
412  if (fiLastView==view_Histo1) {
413  if(buf.Contains("e1")) HisErrorStyle = 2; else
414  if(buf.Contains("e2")) HisErrorStyle = 3; else
415  if(buf.Contains("e3")) HisErrorStyle = 4; else
416  if(buf.Contains("e4")) HisErrorStyle = 5; else
417  if(buf.Contains("e") && !buf.Contains("text") && !buf.Contains("lego") && !buf.Contains("image")) HisErrorStyle = 1;
418  } else { // Histo2
419  if (buf.Contains("lego") || buf.Contains("surf")) {
420  if (buf.Contains("fb") && buf.Contains("bb") && buf.Contains("z")) HisErrorStyle = 7; else
421  if (buf.Contains("bb") && buf.Contains("z")) HisErrorStyle = 6; else
422  if (buf.Contains("fb") && buf.Contains("z")) HisErrorStyle = 5; else
423  if (buf.Contains("fb") && buf.Contains("bb")) HisErrorStyle = 4; else
424  if (buf.Contains("bb")) HisErrorStyle = 3; else
425  if (buf.Contains("fb")) HisErrorStyle = 2; else
426  if (buf.Contains("z")) HisErrorStyle = 1;
427  } else
428  if (buf.Contains("z")) HisErrorStyle = 1;
429  }
430 
431  // check coordinate specs in string:
432  if(buf.Contains(",pol")) HisCoordStyle = 1; else
433  if(buf.Contains(",sph")) HisCoordStyle = 2; else
434  if(buf.Contains(",psr")) HisCoordStyle = 3; else
435  if(buf.Contains(",cyl")) HisCoordStyle = 4;
436 
437  // check draw options itself:
438 
439  if (fiLastView==view_Histo1) {
440  if(buf.Contains("surf5")) HisDrawStyle = 21; else
441  if(buf.Contains("surf4")) HisDrawStyle = 20; else
442  if(buf.Contains("surf3")) HisDrawStyle = 19; else
443  if(buf.Contains("surf2")) HisDrawStyle = 18; else
444  if(buf.Contains("surf1")) HisDrawStyle = 17; else
445  if(buf.Contains("surf")) HisDrawStyle = 16; else
446  if(buf.Contains("lego2")) HisDrawStyle = 15; else
447  if(buf.Contains("lego1")) HisDrawStyle = 14; else
448  if(buf.Contains("lego")) HisDrawStyle = 13; else
449  if(buf.Contains("lego3")) HisDrawStyle = 13; else // from gededitor
450  if(buf.Contains("bar")) HisDrawStyle = 12; else
451  if(buf.Contains("text")) HisDrawStyle = 11; else
452  if(buf.Contains("][")) HisDrawStyle = 10; else
453  if(buf.Contains("9h")) HisDrawStyle = 9; else
454  if(buf.Contains("p0")) HisDrawStyle = 8; else
455  if(*drawopt == 'p') HisDrawStyle = 7; else
456  if(*drawopt == 'P') HisDrawStyle = 7; else
457  if(*drawopt == 'b') HisDrawStyle = 6; else
458  if(*drawopt == 'B') HisDrawStyle = 6; else
459  if((*drawopt == 'c') && !buf.Contains("nostack")) HisDrawStyle = 5; else
460  if((*drawopt == 'C') && !buf.Contains("nostack")) HisDrawStyle = 5; else
461  if(buf.Contains("lf2")) HisDrawStyle = 4; else
462  if(*drawopt == 'l') HisDrawStyle = 3; else
463  if(*drawopt == 'L') HisDrawStyle = 3; else
464  if(buf.Contains("*h")) HisDrawStyle = 2; else
465  if(buf.Contains("ah")) HisDrawStyle = 1;
466 
467  if ((HisDrawStyle >= 16) && ((HisCoordStyle == 0) || (HisCoordStyle == 2)))
468  HisCoordStyle = 1;
469  } else { // Histo2
470  if(buf.Contains("hist")) HisDrawStyle = 0; else
471  if(buf.Contains("col")) HisDrawStyle = 1; else
472  if(buf.Contains("lego3")) HisDrawStyle = 9; else // from gededitor
473  if(buf.Contains("lego1")) HisDrawStyle = 8; else
474  if(buf.Contains("lego2")) HisDrawStyle = 3; else
475  if(buf.Contains("lego")) HisDrawStyle = 9; else
476  if(buf.Contains("cont0")) HisDrawStyle = 2; else
477  if(buf.Contains("cont1")) HisDrawStyle = 6; else
478  if(buf.Contains("cont2")) HisDrawStyle = 10; else
479  if(buf.Contains("cont3")) HisDrawStyle = 11; else
480  if(buf.Contains("cont4")) HisDrawStyle = 7; else
481  if(buf.Contains("cont")) HisDrawStyle = 2; else
482  if(buf.Contains("surf1")) HisDrawStyle = 5; else
483  if(buf.Contains("surf2")) HisDrawStyle = 4; else
484  if(buf.Contains("surf3")) HisDrawStyle = 13; else
485  if(buf.Contains("surf4")) HisDrawStyle = 14; else
486  if(buf.Contains("surf5")) HisDrawStyle = 15; else
487  if(buf.Contains("surf")) HisDrawStyle = 12; else
488  if(buf.Contains("arr")) HisDrawStyle = 16; else
489  if(buf.Contains("box")) HisDrawStyle = 17; else
490  if(buf.Contains("text")) HisDrawStyle = 18; else
491  if(buf.Contains("asimage")) HisDrawStyle = 19;
492  }
493 }
494 
495 void TGo4HisDrawOptions::CodeDrawOptions(int HisErrorStyle,
496  int HisCoordStyle,
497  int HisDrawStyle,
498  TString &buf)
499 {
500  buf = "";
501 
502  if (fiLastView==view_Polar) {
503  switch (HisDrawStyle) {
504  case 0: buf = ""; break;
505  case 1: buf = "P"; break;
506  case 2: buf = "F"; break;
507  case 3: buf = "PF"; break;
508  }
509 
510  switch (HisErrorStyle) {
511  case 0: break;
512  case 1: buf.Append("E"); break;
513  case 2: buf.Append("N"); break;
514  case 3: buf.Append("EN"); break;
515  }
516 
517  switch (HisCoordStyle) {
518  case 0: break;
519  case 1: buf.Append("A"); break;
520  case 2: buf.Append("O"); break;
521  case 3: buf.Append("AO"); break;
522  }
523  return;
524  }
525 
526  if (fiLastView == view_Graph) {
527 
528  switch (HisDrawStyle) {
529  case 0: buf = "P"; break;
530  case 1: buf = "*"; break;
531  case 2: buf = "L"; break;
532  case 3: buf = "F"; break;
533  case 4: buf = "F1"; break;
534  case 5: buf = "F2"; break;
535  case 6: buf = "C"; break;
536  case 7: buf = "B"; break;
537  case 8: buf = "LP"; break;
538  case 9: buf = "L*"; break;
539  case 10: buf = "FP"; break;
540  case 11: buf = "F*"; break;
541  case 12: buf = "CP"; break;
542  case 13: buf = "C*"; break;
543  case 14: buf = "BP"; break;
544  case 15: buf = "B*"; break;
545  default: buf = "P";
546  }
547 
548  switch (HisErrorStyle) {
549  case 0: break;
550  case 1: buf.Append("X"); break;
551  case 2: buf.Append(">"); break;
552  case 3: buf.Append("|>"); break;
553  case 4: buf.Append("2"); break;
554  case 5: buf.Append("3"); break;
555  case 6: buf.Append("4"); break;
556  case 7: buf.Append("[]"); break;
557  }
558 
559  switch (HisCoordStyle) {
560  case 0: buf.Append("A"); break;
561  case 1: buf.Append("AI"); break;
562  case 2: buf.Append("AX+"); break;
563  case 3: buf.Append("AY+"); break;
564  case 4: buf.Append("AX+Y+"); break;
565  case 5: buf.Append("A1"); break;
566  }
567 
568  return;
569  }
570 
571  if (fiLastView==view_Histo1) {
572 
573  switch (HisDrawStyle) {
574  case 0: buf = ""; break;
575  case 1: buf = "ah"; break;
576  case 2: buf = "*h"; break;
577  case 3: buf = "l"; break;
578  case 4: buf = "lf2"; break;
579  case 5: buf = "c"; break;
580  case 6: buf = "b"; break;
581  case 7: buf = "p"; break;
582  case 8: buf = "p0"; break;
583  case 9: buf = "9h"; break;
584  case 10: buf = "]["; break;
585  case 11: buf = "text"; break;
586  case 12: buf = "bar"; break;
587  case 13: buf = "lego3"; break; // for geditor, "lego"
588  case 14: buf = "lego1"; break;
589  case 15: buf = "lego2"; break;
590  case 16: buf = "surf"; break;
591  case 17: buf = "surf1"; break;
592  case 18: buf = "surf2"; break;
593  case 19: buf = "surf3"; break;
594  case 20: buf = "surf4"; break;
595  case 21: buf = "surf5"; break;
596  }
597  if ((HisDrawStyle >= 16) && ((HisCoordStyle == 0) || (HisCoordStyle == 2)))
598  HisCoordStyle = 1;
599  } else // Histo2
600 
601  switch (HisDrawStyle) {
602  case 0: buf = "hist"; break;
603  case 1: buf = "col"; break;
604  case 2: buf = "cont0"; break;
605  case 3: buf = "lego2"; break;
606  case 4: buf = "surf2"; break;
607  case 5: buf = "surf1"; break;
608  case 6: buf = "cont1"; break;
609  case 7: buf = "cont4"; break;
610  case 8: buf = "lego1"; break;
611  case 9: buf = "lego3"; break;
612  case 10: buf = "cont2"; break;
613  case 11: buf = "cont3"; break;
614  case 12: buf = "surf"; break;
615  case 13: buf = "surf3"; break;
616  case 14: buf = "surf4"; break;
617  case 15: buf = "surf5"; break;
618  case 16: buf = "arr"; break;
619  case 17: buf = "box"; break;
620  case 18: buf = "text"; break;
621 #ifndef __NOGO4ASI__
622  case 19: buf = "asimage"; break;
623 #else
624  case 19: buf = ""; break;
625 #endif
626  }
627 
628  switch (HisCoordStyle) {
629  case 0: break;
630  case 1: buf.Append(",pol"); break;
631  case 2: buf.Append(",sph"); break;
632  case 3: buf.Append(",psr"); break;
633  case 4: buf.Append(",cyl"); break;
634  }
635 
636  if (fiLastView==view_Histo1)
637  switch (HisErrorStyle) {
638  case 0: break;
639  case 1: buf.Append("E"); break;
640  case 2: buf.Append("E1"); break;
641  case 3: buf.Append("E2"); break;
642  case 4: buf.Append("E3"); break;
643  case 5: buf.Append("E4"); break;
644  }
645  else
646  switch (HisErrorStyle) {
647  case 0: break;
648  case 1: buf.Append("Z"); break;
649  case 2: buf.Append("FB"); break;
650  case 3: buf.Append("BB"); break;
651  case 4: buf.Append("BBFB"); break;
652  case 5: buf.Append("ZFB"); break;
653  case 6: buf.Append("ZBB"); break;
654  case 7: buf.Append("ZBBFB"); break;
655  }
656 }
657 
658 
660 {
661  ChangeColor(0);
662 }
663 
665 {
666  ChangeColor(1);
667 }
668 
670 {
671  ChangeColor(2);
672 }
673 
675 {
677  if (!panel) return;
678 
679  TPad *pad = panel->GetActivePad();
680  TObject *obj = panel->GetSelectedObject(pad, nullptr);
681 
682  Color_t icol = 0;
683 
684  switch (kind) {
685  case 0: {
686  TAttLine* att = dynamic_cast<TAttLine*> (obj);
687  if (!att) return;
688  icol = att->GetLineColor();
689  break;
690  }
691  case 1: {
692  TAttFill* att = dynamic_cast<TAttFill*> (obj);
693  if (!att) return;
694  icol = att->GetFillColor();
695  break;
696  }
697  case 2: {
698  TAttMarker* att = dynamic_cast<TAttMarker*> (obj);
699  if (!att) return;
700  icol = att->GetMarkerColor();
701  break;
702  }
703  }
704 
705  TColor* rcol = gROOT->GetColor(icol);
706 
707  QColor qcol;
708 
709  if (rcol)
710  qcol.setRgb(rcol->GetRed(), rcol->GetGreen(), rcol->GetBlue());
711 
712  QColor c = QColorDialog::getColor(qcol);
713  if (!c.isValid()) return;
714 
715  icol = TColor::GetColor(c.red(), c.green(), c.blue());
716 
717  switch (kind) {
718  case 0: {
719  TAttLine* att = dynamic_cast<TAttLine*> (obj);
720  if (att) att->SetLineColor(icol);
721  break;
722  }
723  case 1: {
724  TAttFill* att = dynamic_cast<TAttFill*> (obj);
725  if (att) att->SetFillColor(icol);
726  break;
727  }
728  case 2: {
729  TAttMarker* att = dynamic_cast<TAttMarker*> (obj);
730  if (att) att->SetMarkerColor(icol);
731  break;
732  }
733  }
734 
735  panel->MarkPadModified(pad);
736 
737  panel->ShootRepaintTimer(pad);
738 
739  panel->ActivateInGedEditor(obj);
740 }
virtual void ShootRepaintTimer()
bool IsAutoScale() const
virtual void SetMarkerColor()
virtual void ZaxisStyle(int t)
virtual void SetCoordinates(int t)
virtual void XaxisStyle(int t)
virtual void ActivateInGedEditor(TObject *obj)
virtual void UpdateView(int viewtype, bool webcanvas=false)
virtual void panelSlot(TGo4ViewPanel *panel, TPad *pad, int signalid)
virtual void SetDrawOptions(int t)
TGo4HisDrawOptions(QWidget *parent=nullptr, const char *name=nullptr, Qt::WindowFlags fl=Qt::Widget)
static TGo4MdiArea * Instance()
Definition: TGo4MdiArea.cpp:26
virtual void ChangeColor(int kind)
Int_t GetLogScale(Int_t nscale=0) const
virtual void SetFillColor()
virtual void CodeDrawOptions(int HisErrorStyle, int HisCoordStyle, int HisDrawStyle, TString &buf)
virtual void MarkPadModified(TPad *pad)
TGo4ViewPanel * GetActivePanel()
Definition: TGo4MdiArea.cpp:60
virtual void SetAutoScale(bool on)
virtual TGo4Picture * GetPadOptions(TPad *pad)
virtual void DecodeDrawOption(const char *drawopt, int &HisErrorStyle, int &HisCoordStyle, int &HisDrawStyle)
virtual void ChangeDrawOptionForCurrentPanel(int kind, int value)
virtual bool IsWebCanvas() const
Int_t GetFullRangeDim() const
virtual void SetLineColor()
virtual void ChangeDrawOption(int kind, int value, const char *drawopt)
virtual TPad * GetActivePad()
virtual TObject * GetSelectedObject(TPad *pad, const char **drawopt)
void panelSignal(TGo4ViewPanel *, TPad *, int)
virtual void YaxisStyle(int t)
virtual void SetErrorBars(int t)