37#include <QColorDialog>
38#include <QDoubleSpinBox>
82 c->Connect(
"Selected(TVirtualPad*,TObject*,Int_t)",
"ROOT::Experimental::TQt6GedEditor",
this,
83 "SetModel(TVirtualPad*,TObject*,Int_t)");
92 Disconnect(
fCanvas,
"Selected(TVirtualPad*,TObject*,Int_t)",
this,
"SetModel(TVirtualPad*,TObject*,Int_t)");
120 if (!
gROOT->GetListOfCleanups()->FindObject(
this))
121 gROOT->GetListOfCleanups()->Add(
this);
125 fDialog->setWindowTitle(
"Edit Attributes");
131 fDialog->resize(200, widget->height());
132 QPoint pos = widget->mapToGlobal(QPoint(0, 0));
136 auto mainLayout =
new QVBoxLayout(
fDialog);
143 QHBoxLayout *buttonLayout =
new QHBoxLayout();
144 QPushButton *okButton =
new QPushButton(
"OK");
145 QPushButton *cancelButton =
new QPushButton(
"Cancel");
146 buttonLayout->addStretch();
147 buttonLayout->addWidget(okButton);
148 buttonLayout->addWidget(cancelButton);
149 mainLayout->addLayout(buttonLayout);
151 QObject::connect(okButton, &QPushButton::clicked,
fDialog, &QDialog::accept);
152 QObject::connect(cancelButton, &QPushButton::clicked,
fDialog, &QDialog::reject);
154 fDialog->setAttribute(Qt::WA_DeleteOnClose);
156 QObject::connect(
fDialog, &QDialog::finished, [
this]([[maybe_unused]]
int result) {
170 QHBoxLayout *layout =
new QHBoxLayout(container);
171 layout->setContentsMargins(0, 5, 0, 5);
173 QFrame *leftLine =
new QFrame(
fDialog);
174 leftLine->setFrameShape(QFrame::HLine);
176 QLabel *label =
new QLabel(lbl,
fDialog);
178 QFrame *rightLine =
new QFrame(
fDialog);
179 rightLine->setFrameShape(QFrame::HLine);
181 layout->addWidget(leftLine, 1);
182 layout->addWidget(label, 0);
183 layout->addWidget(rightLine, 4);
185 f->addRow(container);
191 QColor initialColor = Qt::black;
192 int initialAlpha255 = 255;
195 initialColor = QColor(rootColor->
GetRed() * 255, rootColor->
GetGreen() * 255, rootColor->
GetBlue() * 255);
196 initialAlpha255 =
static_cast<int>(rootColor->
GetAlpha() * 255);
198 initialColor.setAlpha(initialAlpha255);
200 auto colorButton =
new QPushButton(
fDialog);
201 colorButton->setFixedWidth(80);
203 QSlider *alphaSlider =
new QSlider(Qt::Horizontal);
204 alphaSlider->setRange(0, 255);
205 alphaSlider->setValue(initialAlpha255);
208 auto selectedColor = std::make_shared<QColor>(initialColor);
210 auto updateColorElements = [colorButton, selectedColor, callback]() {
211 QString qss = QString(
"background-color: rgba(%1, %2, %3, %4); border: 1px solid gray;")
212 .arg(selectedColor->red())
213 .arg(selectedColor->green())
214 .arg(selectedColor->blue())
215 .arg(selectedColor->alpha() / 255.0);
216 colorButton->setStyleSheet(qss);
218 selectedColor->green(),
219 selectedColor->blue(),
220 selectedColor->alpha() / 255.0);
221 callback(newColorIdx);
224 updateColorElements();
226 QObject::connect(colorButton, &QPushButton::clicked, [selectedColor, updateColorElements]() {
227 QColor col = QColorDialog::getColor(*selectedColor,
nullptr,
"Select Color");
229 selectedColor->setRed(col.red());
230 selectedColor->setGreen(col.green());
231 selectedColor->setBlue(col.blue());
232 updateColorElements();
237 QObject::connect(alphaSlider, &QSlider::valueChanged, [selectedColor, updateColorElements](
int value) {
238 selectedColor->setAlpha(
value);
239 updateColorElements();
242 layout->addRow(
"Color:", colorButton);
244 layout->addRow(
"Opacity:", alphaSlider);
261 attline->SetLineColor(colindx);
265 QComboBox *styleCombo =
new QComboBox();
266 styleCombo->addItem(
"None (0)", 0);
267 styleCombo->addItem(
"Solid (1)", 1);
268 styleCombo->addItem(
"Dashed (2)", 2);
269 styleCombo->addItem(
"Dotted (3)", 3);
270 styleCombo->addItem(
"Dash-Dot (4)", 4);
271 styleCombo->addItem(
"Dash-Dot (5)", 5);
272 styleCombo->addItem(
"Dash-Dot-Dot-Dot (6)", 6);
273 styleCombo->addItem(
"Dashed medium (7)", 7);
274 styleCombo->addItem(
"Dash-Dot-Dot (8)", 8);
275 styleCombo->addItem(
"Dashed long (9)", 9);
276 styleCombo->addItem(
"Dash-Dot long (10)", 10);
280 int styleIdx = styleCombo->findData(currentStyle);
282 styleCombo->setCurrentIndex(styleIdx);
284 styleCombo->addItem(QString(
"Custom (%1)").arg(currentStyle), currentStyle);
286 QObject::connect(styleCombo, &QComboBox::currentIndexChanged, [
this, attline, styleCombo](
int) {
287 attline->
SetLineStyle(styleCombo->currentData().toInt());
294 widthSpin->setRange(1, 20);
297 QObject::connect(widthSpin, &QSpinBox::valueChanged, [
this, attline](
int v) {
310 attfill->SetFillColor(colindx);
314 QComboBox *styleCombo =
new QComboBox();
315 styleCombo->addItem(
"None (0)", 0);
316 styleCombo->addItem(
"Solid (1001)", 1001);
317 for (
int s = 3001; s <= 3025; ++s)
318 styleCombo->addItem(QString(
"Style %1").arg(s), s);
319 for (
int s = 3144; s <= 3944; s += 100)
320 styleCombo->addItem(QString(
"Style %1").arg(s), s);
321 for (
int s = 3305; s <= 3395; s += 10)
322 styleCombo->addItem(QString(
"Style %1").arg(s), s);
323 for (
int s = 3350; s <= 3359; s += 1)
324 styleCombo->addItem(QString(
"Style %1").arg(s), s);
325 for (
int s = 3409; s <= 3490; s += 9)
326 styleCombo->addItem(QString(
"Style %1").arg(s), s);
327 for (
int s = 3609; s <= 3690; s += 9)
328 styleCombo->addItem(QString(
"Style %1").arg(s), s);
332 int styleIdx = styleCombo->findData(currentStyle);
334 styleCombo->setCurrentIndex(styleIdx);
336 styleCombo->addItem(QString(
"Style %1").arg(currentStyle), currentStyle);
338 QObject::connect(styleCombo, &QComboBox::currentIndexChanged, [
this, attfill, styleCombo](
int) {
339 attfill->
SetFillStyle(styleCombo->currentData().toInt());
350 if (
value == 0)
return "Default";
351 return QDoubleSpinBox::textFromValue(
value);
355 if (
text ==
"Default")
return 0.;
356 return QDoubleSpinBox::valueFromText(
text);
363 if (
value == 0)
return "Default";
364 return QSpinBox::textFromValue(
value);
368 if (
text ==
"Default")
return 0;
369 return QSpinBox::valueFromText(
text);
379 atttext->SetTextColor(colindx);
383 QComboBox *fontCombo =
new QComboBox();
384 fontCombo->addItem(
"1. Times italic", 1);
385 fontCombo->addItem(
"2. Times bold", 2);
386 fontCombo->addItem(
"3. Times bold italic", 3);
387 fontCombo->addItem(
"4. Helvetica", 4);
388 fontCombo->addItem(
"5. Helvetica italic", 5);
389 fontCombo->addItem(
"6. Helvetica bold", 6);
390 fontCombo->addItem(
"7. Helvetica bold italic", 7);
391 fontCombo->addItem(
"8. Courier", 8);
392 fontCombo->addItem(
"9. Courier italic", 9);
393 fontCombo->addItem(
"10. Courier bold", 10);
394 fontCombo->addItem(
"11. Courier bold italic", 11);
395 fontCombo->addItem(
"12. Symbol", 12);
396 fontCombo->addItem(
"13. Times", 13);
397 fontCombo->addItem(
"14. Wingdings", 14);
398 fontCombo->addItem(
"15. Symbol italic", 15);
403 int styleIdx = fontCombo->findData(currentFont);
405 fontCombo->setCurrentIndex(styleIdx);
407 fontCombo->addItem(QString(
"Font %1").arg(currentFont), currentFont);
409 QObject::connect(fontCombo, &QComboBox::currentIndexChanged, [
this, atttext, fontCombo, currentPrec](
int) {
410 atttext->
SetTextFont(fontCombo->currentData().toInt() * 10 + currentPrec);
419 if (currentPrec == 2) {
421 floatSpinBox->setRange(0.0, 1.0);
422 floatSpinBox->setSingleStep(0.01);
423 floatSpinBox->setDecimals(3);
426 QObject::connect(floatSpinBox, &QDoubleSpinBox::valueChanged, [
this, atttext](
double v) {
434 intSpinBox->setRange(0, 128);
437 QObject::connect(intSpinBox, &QSpinBox::valueChanged, [
this, atttext](
int v) {
445 QComboBox *alignCombo =
new QComboBox();
446 alignCombo->addItem(
"11. Left Bottom", 11);
447 alignCombo->addItem(
"12. Left Center", 12);
448 alignCombo->addItem(
"13. Left Top", 13);
449 alignCombo->addItem(
"21. Middle Bottom", 21);
450 alignCombo->addItem(
"22. Middle Center", 22);
451 alignCombo->addItem(
"23. Middle Top", 23);
452 alignCombo->addItem(
"31. Right Bottom", 31);
453 alignCombo->addItem(
"32. Right Center", 32);
454 alignCombo->addItem(
"33. Right Top", 33);
457 int alignIdx = alignCombo->findData(atttext->
GetTextAlign());
459 alignIdx = alignCombo->findData(11);
460 alignCombo->setCurrentIndex(alignIdx);
462 QObject::connect(alignCombo, &QComboBox::currentIndexChanged, [
this, atttext, alignCombo](
int) {
463 atttext->
SetTextAlign(alignCombo->currentData().toInt());
477 attmarker->SetMarkerColor(colindx);
481 QComboBox *styleCombo =
new QComboBox();
482 for (
int s = 1; s <= 49; ++s)
483 styleCombo->addItem(QString(
"Style %1").arg(s), s);
487 int styleIdx = styleCombo->findData(currentStyle);
489 styleCombo->setCurrentIndex(styleIdx);
491 styleCombo->addItem(QString(
"Style %1").arg(currentStyle), currentStyle);
493 QObject::connect(styleCombo, &QComboBox::currentIndexChanged, [
this, attmarker, styleCombo](
int) {
501 floatSpinBox->setRange(0.0, 100.0);
502 floatSpinBox->setSingleStep(1);
503 floatSpinBox->setDecimals(1);
507 QObject::connect(floatSpinBox, &QDoubleSpinBox::valueChanged, [
this, attmarker](
double v) {
530 FillGed(base->GetClassPointer());
544 if (
QWidget *widget = item->widget())
545 widget->deleteLater();
559 gROOT->GetListOfCleanups()->Remove(
this);
571 }
else if (obj ==
fPad) {
short Color_t
Color number (short)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char text
QString textFromValue(double value) const override
double valueFromText(const QString &text) const override
QString textFromValue(int value) const override
int valueFromText(const QString &text) const override
QCanvasWidget * GetCanvasWidget() const
QFormLayout * fFormLayout
void AddTAttLine(TAttLine *)
void AddTAttFill(TAttFill *)
void ConnectToCanvas(TCanvas *c)
Connect this editor to the Selected signal of canvas 'c'.
void FillDialogsElements()
void DisconnectFromCanvas()
Disconnect this editor from the Selected signal of fCanvas.
TClass * IsA() const override
void AddHLine(QFormLayout *f, const char *lbl)
void AddColorElements(int colindx, QFormLayout *layout, std::function< void(int)> callback)
void AddTAttMarker(TAttMarker *)
void AddTAttText(TAttText *)
void RecursiveRemove(TObject *obj) override
Recursively remove this object from a list.
void SetCanvas(TCanvas *c)
virtual void SetModel(TVirtualPad *pad, TObject *obj, Int_t event)
Activate object editors according to the selected object.
Fill Area Attributes class.
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
virtual Float_t GetTextSize() const
Return the text size.
virtual void SetTextAlign(Short_t align=11)
Set the text alignment.
virtual Short_t GetTextAlign() const
Return the text alignment.
virtual Font_t GetTextFont() const
Return the text font.
virtual Color_t GetTextColor() const
Return the text color.
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
virtual void SetTextSize(Float_t tsize=1)
Set the text size.
Each class (see TClass) has a linked list of its base class(es).
TObject * GetClickSelected() const
TVirtualPad * GetClickSelectedPad() const
TCanvasImp * GetCanvasImp() const override
TVirtualPad * GetSelectedPad() const override
TClass instances represent classes, structs and namespaces in the ROOT type system.
void * DynamicCast(const TClass *base, void *obj, Bool_t up=kTRUE)
Cast obj of this class type up to baseclass cl if up is true.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
The color creation and management class.
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
Method or function calling interface.
void Execute(const char *, const char *, int *=nullptr) override
Execute method on this object with the given parameter string, e.g.
const char * GetName() const override
Returns name of object.
Mother of all ROOT objects.
virtual TClass * IsA() const
void ModifiedUpdate() override
Short cut to call Modified() and Update() in a single call.
Bool_t Disconnect(const char *signal=nullptr, void *receiver=nullptr, const char *slot=nullptr)
Disconnects signal of this object from slot of receiver.
const char * Data() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
Namespace for ROOT features in testing.