69 std::shared_ptr<GLogger> logger,
71 : QWidget(parent), log(logger), gopts(gopt) {
77 scaleCheck = decorationCheckBox(tr(
"Scale"), decorations.scale,
this);
78 axesCheck = decorationCheckBox(tr(
"Axes"), decorations.axes,
this);
79 eventIDCheck = decorationCheckBox(tr(
"Event ID"), decorations.eventID,
this);
80 dateCheck = decorationCheckBox(tr(
"Date"), decorations.date,
this);
81 logo2DCheck = decorationCheckBox(tr(
"Logo 2D"), decorations.logo2D,
this);
82 logo3DCheck = decorationCheckBox(tr(
"Logo 3D"), decorations.logo,
this);
83 frameCheck = decorationCheckBox(tr(
"Frame"), decorations.frame,
this);
85 scaleLengthSpin = doubleSpin(decorations.scaleLength, 0.0, 100000.0, 1.0,
this);
86 scaleUnitEdit =
new QLineEdit(QString::fromStdString(decorations.scaleUnit),
this);
87 scaleDirectionCombo =
new QComboBox(
this);
88 addItemsWithCurrent(scaleDirectionCombo, {
"x",
"y",
"z"},
89 QString::fromStdString(decorations.scaleDirection));
91 frameLineWidthSpin = doubleSpin(decorations.frameLineWidth, 0.1, 20.0, 0.5,
this);
94 scaleColor = qcolorFromG4(decorations.scaleColor);
95 frameColor = qcolorFromG4(decorations.frameColor);
96 textColor = Qt::black;
99 const QString spinBorderStyle =
"QSpinBox { border: 1px solid #888; border-radius: 3px; padding: 1px 3px; }";
101 eventIDSizeSpin =
new QSpinBox(
this);
102 eventIDSizeSpin->setRange(8, 100);
103 eventIDSizeSpin->setValue(decorations.eventIDSize);
104 eventIDSizeSpin->setToolTip(tr(
"Event ID font size"));
105 eventIDSizeSpin->setStyleSheet(spinBorderStyle);
107 dateSizeSpin =
new QSpinBox(
this);
108 dateSizeSpin->setRange(8, 100);
109 dateSizeSpin->setValue(decorations.dateSize);
110 dateSizeSpin->setToolTip(tr(
"Date font size"));
111 dateSizeSpin->setStyleSheet(spinBorderStyle);
114 auto makeColorBtn = [
this](QColor& colorRef,
const QString& title) {
115 auto* btn =
new QToolButton(
this);
116 btn->setToolTip(title);
117 btn->setAutoRaise(
true);
118 btn->setIconSize(QSize(18, 18));
119 btn->setIcon(colorSwatchIcon(colorRef));
120 connect(btn, &QToolButton::clicked,
this, [
this, btn, &colorRef, title]() {
121 QColor c = QColorDialog::getColor(colorRef,
this, title);
124 btn->setIcon(colorSwatchIcon(c));
130 auto* scaleColorBtn = makeColorBtn(scaleColor, tr(
"Scale color"));
131 auto* frameColorBtn = makeColorBtn(frameColor, tr(
"Frame color"));
132 textColorBtn = makeColorBtn(textColor, tr(
"Text color"));
135 auto makeTightPair = [
this](QWidget* left, QWidget* right) {
136 auto* container =
new QWidget(
this);
137 auto* hbox =
new QHBoxLayout(container);
138 hbox->setContentsMargins(0, 0, 0, 0);
140 hbox->addWidget(left);
141 hbox->addWidget(right);
147 auto* decorationGrid =
new QGridLayout;
149 decorationGrid->addWidget(makeTightPair(scaleCheck, scaleColorBtn), 0, 0, 1, 2);
150 decorationGrid->addWidget(axesCheck, 0, 2);
152 decorationGrid->addWidget(makeTightPair(eventIDCheck, eventIDSizeSpin), 1, 0, 1, 2);
153 decorationGrid->addWidget(makeTightPair(dateCheck, dateSizeSpin), 1, 2, 1, 2);
155 decorationGrid->addWidget(logo2DCheck, 2, 0);
156 decorationGrid->addWidget(logo3DCheck, 2, 2);
158 decorationGrid->addWidget(makeTightPair(frameCheck, frameColorBtn), 3, 0, 1, 2);
159 decorationGrid->addWidget(
new QLabel(tr(
"Scale Length:")), 4, 0);
160 decorationGrid->addWidget(scaleLengthSpin, 4, 1, 1, 2);
161 decorationGrid->addWidget(
new QLabel(tr(
"Scale Unit:")), 5, 0);
162 decorationGrid->addWidget(scaleUnitEdit, 5, 1, 1, 2);
163 decorationGrid->addWidget(
new QLabel(tr(
"Scale Direction:")), 6, 0);
164 decorationGrid->addWidget(scaleDirectionCombo, 6, 1, 1, 2);
165 decorationGrid->addWidget(
new QLabel(tr(
"Frame Line Width:")),7, 0);
166 decorationGrid->addWidget(frameLineWidthSpin, 7, 1, 1, 2);
168 auto* applyDecorationsButton =
new QPushButton(tr(
"Apply Decorations"),
this);
169 connect(applyDecorationsButton, &QPushButton::clicked,
this, &G4DisplayUtilities::applyDecorations);
171 auto* decorationLayout =
new QVBoxLayout;
172 decorationLayout->addLayout(decorationGrid);
173 decorationLayout->addWidget(applyDecorationsButton);
175 auto* decorationGroup =
new QGroupBox(tr(
"Scene Decorations"),
this);
176 decorationGroup->setLayout(decorationLayout);
178 textKindCombo =
new QComboBox(
this);
179 textKindCombo->addItems({
"2D",
"3D"});
181 textLayoutCombo =
new QComboBox(
this);
182 textLayoutCombo->addItems({
"",
"left",
"centre",
"center",
"right"});
184 textEdit =
new QLineEdit(
this);
185 textEdit->setPlaceholderText(tr(
"Text"));
187 textXSpin = doubleSpin(0.9, -100000.0, 100000.0, 0.1,
this);
188 textYSpin = doubleSpin(-0.9, -100000.0, 100000.0, 0.1,
this);
189 textZSpin = doubleSpin(0.0, -100000.0, 100000.0, 0.1,
this);
190 textSizeSpin =
new QSpinBox(
this);
191 textSizeSpin->setRange(1, 1000);
192 textSizeSpin->setValue(24);
193 textDxSpin = doubleSpin(4.0, -100000.0, 100000.0, 0.5,
this);
194 textDySpin = doubleSpin(4.0, -100000.0, 100000.0, 0.5,
this);
195 textUnitEdit =
new QLineEdit(tr(
"cm"),
this);
197 textDxSpin->setToolTip(tr(
"Pixel offset from the projected text anchor."));
198 textDySpin->setToolTip(tr(
"Pixel offset from the projected text anchor."));
200 auto* textPositionGrid =
new QGridLayout;
201 textPositionGrid->addWidget(
new QLabel(tr(
"X:")), 0, 0);
202 textPositionGrid->addWidget(textXSpin, 0, 1);
203 textPositionGrid->addWidget(
new QLabel(tr(
"Y:")), 1, 0);
204 textPositionGrid->addWidget(textYSpin, 1, 1);
205 textPositionGrid->addWidget(
new QLabel(tr(
"Z:")), 2, 0);
206 textPositionGrid->addWidget(textZSpin, 2, 1);
207 textPositionGrid->addWidget(
new QLabel(tr(
"Size:")), 3, 0);
208 textPositionGrid->addWidget(textSizeSpin, 3, 1);
210 auto* textSettingsGrid =
new QGridLayout;
211 textSettingsGrid->addWidget(
new QLabel(tr(
"Kind:")), 0, 0);
212 textSettingsGrid->addWidget(textKindCombo, 0, 1);
213 textSettingsGrid->addWidget(
new QLabel(tr(
"Text:")), 1, 0);
214 textSettingsGrid->addWidget(textEdit, 1, 1);
215 textSettingsGrid->addWidget(textColorBtn, 1, 2);
216 textSettingsGrid->addWidget(
new QLabel(tr(
"Layout:")), 2, 0);
217 textSettingsGrid->addWidget(textLayoutCombo, 2, 1);
218 textSettingsGrid->addWidget(
new QLabel(tr(
"Unit:")), 3, 0);
219 textSettingsGrid->addWidget(textUnitEdit, 3, 1);
220 textSettingsGrid->addWidget(
new QLabel(tr(
"dX (px):")), 4, 0);
221 textSettingsGrid->addWidget(textDxSpin, 4, 1);
222 textSettingsGrid->addWidget(
new QLabel(tr(
"dY (px):")), 5, 0);
223 textSettingsGrid->addWidget(textDySpin, 5, 1);
225 auto* textGrid =
new QHBoxLayout;
226 textGrid->addLayout(textPositionGrid);
227 textGrid->addLayout(textSettingsGrid);
229 auto* addTextButton =
new QPushButton(tr(
"Add Text"),
this);
230 connect(addTextButton, &QPushButton::clicked,
this, &G4DisplayUtilities::addText);
232 auto* clearTextButton =
new QPushButton(tr(
"Clear Text"),
this);
233 connect(clearTextButton, &QPushButton::clicked,
this, &G4DisplayUtilities::clearTexts);
235 auto* textButtonLayout =
new QHBoxLayout;
236 textButtonLayout->addWidget(addTextButton);
237 textButtonLayout->addWidget(clearTextButton);
239 auto* textLayout =
new QVBoxLayout;
240 textLayout->addLayout(textGrid);
241 textLayout->addLayout(textButtonLayout);
243 auto* textGroup =
new QGroupBox(tr(
"Scene Text"),
this);
244 textGroup->setLayout(textLayout);
246 auto* mainLayout =
new QVBoxLayout;
247 mainLayout->addWidget(decorationGroup);
248 mainLayout->addWidget(textGroup);
249 mainLayout->addStretch();
250 setLayout(mainLayout);