30 #include <QHBoxLayout>
32 #include <QStringList>
39 static const std::string config_key_imrecman =
"imrecman_name";
40 static const std::string config_key_start_in =
"start_in";
46 DEFAULT_SETTINGS_CUSTOM_TEXT(
"custom text")
51 widget.clear->setStyleSheet(
"background-color: green;");
60 demoStateManagerName =
62 ->value(QString::fromStdString(::config_key_imrecman),
"DemoStateManagerInterface")
72 settings->setValue(QString::fromStdString(::config_key_imrecman),
73 QString::fromStdString(demoStateManagerName));
81 if (not demoStateManagerName.empty())
92 getProxy(demoStateManagerPrx, demoStateManagerName);
93 Q_ASSERT(widget.clear !=
nullptr);
110 this->defaultStateValues = demoStateManagerPrx->getDefaultStates();
112 QObject::disconnect(
this,
117 catch (Ice::Exception
const&)
128 QLayout* existingLayout = container->layout();
130 this->layoutNormal =
new QHBoxLayout();
131 this->layoutWarning =
new QHBoxLayout();
132 this->layoutError =
new QHBoxLayout();
133 this->layoutFatal =
new QHBoxLayout();
137 existingLayout =
new QVBoxLayout(container);
138 container->setLayout(existingLayout);
142 createButtons(QString::fromStdString(this->defaultStateValues));
144 if (QVBoxLayout* hLayout = qobject_cast<QVBoxLayout*>(existingLayout))
146 hLayout->addLayout(this->layoutNormal);
147 hLayout->addLayout(this->layoutWarning);
148 hLayout->addLayout(this->layoutError);
149 hLayout->addLayout(this->layoutFatal);
159 this->demoStateManagerPrx->clear();
161 catch (Ice::Exception
const&)
170 QString newState = this->widget.newState->toPlainText();
171 int newSeverity = this->widget.severty->currentIndex();
179 QString newState = text.toStdString() ==
"" ? this->widget.newState->toPlainText() : text;
180 int newSeverity = severity == -1 ? this->widget.severty->currentIndex() : severity;
182 if (this->buttonText.find(newState.toStdString()) != this->buttonText.end())
185 <<
" already exists!";
189 this->buttonText.insert(newState.toStdString());
191 armarx::severity::SeverityEnum buttonSeverity =
192 static_cast<armarx::severity::SeverityEnum
>(newSeverity);
194 QPushButton* button =
new QPushButton(newState,
getWidget());
196 QString color = QString::fromStdString(mapColor(buttonSeverity));
197 if (!color.isEmpty())
199 QPalette palette = button->palette();
200 palette.setColor(QPalette::Button, QColor(color));
201 button->setPalette(palette);
202 button->setStyleSheet(
"background-color: " + color +
";");
204 switch (buttonSeverity)
206 case armarx::severity::SeverityEnum::normal:
207 this->layoutNormal->addWidget(button);
209 case armarx::severity::SeverityEnum::warning:
210 this->layoutWarning->addWidget(button);
212 case armarx::severity::SeverityEnum::error:
213 this->layoutError->addWidget(button);
215 case armarx::severity::SeverityEnum::fatal:
216 this->layoutFatal->addWidget(button);
221 &QPushButton::clicked,
223 [
this, newState, buttonSeverity]()
230 std::string newState = text.toStdString() ==
""
231 ? this->widget.newState->toPlainText().toStdString()
232 : text.toStdString();
233 int newSeverity = severity == -1 ? this->widget.severty->currentIndex() : severity;
237 this->demoStateManagerPrx->setState(
238 newState,
static_cast<armarx::severity::SeverityEnum
>(newSeverity));
240 catch (Ice::Exception
const&)
247 OperatorViewWidgetController::createButtons(
const QString&
input)
249 QStringList pairs =
input.split(
";");
251 for (
const QString& pair : pairs)
253 QStringList keyValue = pair.split(
":");
254 if (keyValue.size() == 2)
256 QString text = keyValue[0].trimmed();
257 int value = keyValue[1].toInt();
258 armarx::severity::SeverityEnum buttonSeverity =
259 static_cast<armarx::severity::SeverityEnum
>(
value);
261 QPushButton* button =
new QPushButton(text,
getWidget());
263 QString color = QString::fromStdString(mapColor(buttonSeverity));
264 if (!color.isEmpty())
266 QPalette palette = button->palette();
267 palette.setColor(QPalette::Button, QColor(color));
268 button->setPalette(palette);
269 button->setStyleSheet(
"background-color: " + color +
";");
271 this->buttonText.insert(text.toStdString());
272 switch (buttonSeverity)
274 case armarx::severity::SeverityEnum::normal:
275 this->layoutNormal->addWidget(button);
277 case armarx::severity::SeverityEnum::warning:
278 this->layoutWarning->addWidget(button);
280 case armarx::severity::SeverityEnum::error:
281 this->layoutError->addWidget(button);
283 case armarx::severity::SeverityEnum::fatal:
284 this->layoutFatal->addWidget(button);
289 &QPushButton::clicked,
291 [
this, text, buttonSeverity]()
299 armarx::severity::SeverityEnum severity)
303 this->demoStateManagerPrx->setState(state, severity);
305 catch (Ice::Exception
const&)
314 std::string exportProperty =
"";
315 QList<QPushButton*> normalButtons = getButtonsFromLayout(this->layoutNormal);
316 QList<QPushButton*> warningButtons = getButtonsFromLayout(this->layoutWarning);
317 QList<QPushButton*> errorButtons = getButtonsFromLayout(this->layoutError);
318 QList<QPushButton*> fatalButtons = getButtonsFromLayout(this->layoutFatal);
319 std::vector<QList<QPushButton*>> buttons;
320 buttons.push_back(normalButtons);
321 buttons.push_back(warningButtons);
322 buttons.push_back(errorButtons);
323 buttons.push_back(fatalButtons);
325 for (
unsigned long i = 0; i < buttons.size(); i++)
327 auto buttonList = buttons[i];
329 for (
auto it = buttonList.begin(); it != buttonList.end(); ++it)
331 std::string buttonText = (*it)->text().toStdString();
332 exportProperty.append(buttonText +
":" +
std::to_string(i) +
";");
335 QClipboard* clipboard = QGuiApplication::clipboard();
336 clipboard->setText(QString::fromStdString(exportProperty));
337 ARMARX_INFO <<
"Button configuration: " << exportProperty;
341 OperatorViewWidgetController::getButtonsFromLayout(QLayout* layout)
343 QList<QPushButton*> buttons;
348 for (
int i = 0; i < layout->count(); ++i)
350 if (
auto* button = qobject_cast<QPushButton*>(layout->itemAt(i)->widget()))
352 buttons.append(button);
360 OperatorViewWidgetController::mapColor(severity::SeverityEnum severity)
365 case severity::SeverityEnum::normal:
368 case severity::SeverityEnum::warning:
371 case severity::SeverityEnum::error:
374 case severity::SeverityEnum::fatal:
387 QObject::disconnect(widget.clear, SIGNAL(clicked()),
this, SLOT(
clearButtonPressed()));
396 clearLayout(this->layoutNormal);
397 clearLayout(this->layoutWarning);
398 clearLayout(this->layoutError);
399 clearLayout(this->layoutFatal);
401 delete this->layoutNormal;
402 delete this->layoutWarning;
403 delete this->layoutError;
404 delete this->layoutFatal;
406 this->layoutNormal =
nullptr;
407 this->layoutWarning =
nullptr;
408 this->layoutError =
nullptr;
409 this->layoutFatal =
nullptr;
411 this->buttonText.clear();
417 OperatorViewWidgetController::clearLayout(QLayout* layout)
422 while (QLayoutItem* item = layout->takeAt(0))
424 if (QWidget* widget = item->widget())
426 widget->deleteLater();
428 else if (QLayout* subLayout = item->layout())
430 clearLayout(subLayout);
455 if (not m_config_dialog)
459 {::config_key_imrecman,
"Demo State Manager",
"*"});
461 return qobject_cast<QDialog*>(m_config_dialog);
471 demoStateManagerName = m_config_dialog->getProxyName(::config_key_imrecman);