// For license of this file, see /LICENSE.md. #include "gui/guiutilities.h" #include "definitions/definitions.h" #include #include #if defined(Q_OS_ANDROID) #include #include #include #endif void GuiUtilities::setLabelAsNotice(QLabel& label, bool is_warning, bool set_margins) { if (set_margins) { label.setMargin(6); } if (is_warning) { label.setStyleSheet(QSL("font-weight: bold; font-style: italic; color: red")); } else { label.setStyleSheet(QSL("font-style: italic;")); } } void GuiUtilities::applyDialogProperties(QWidget& widget, const QIcon& icon, const QString& title) { widget.setWindowFlags(Qt::WindowType::Dialog | Qt::WindowType::WindowTitleHint | Qt::WindowType::WindowMaximizeButtonHint | Qt::WindowType::WindowCloseButtonHint); widget.setWindowIcon(icon); if (!title.isEmpty()) { widget.setWindowTitle(title); } // We fix too big dialog size or out-of-bounds position. auto size_widget = widget.size(); auto size_screen = widget.screen()->availableSize(); if (size_widget.width() > size_screen.width()) { size_widget.setWidth(size_screen.width() * 0.9); } if (size_widget.height() > size_screen.height()) { size_widget.setHeight(size_screen.height() * 0.9); } if (size_widget != widget.size()) { widget.resize(size_widget); } } void GuiUtilities::restoreState(QWidget* wdg, QByteArray state) { QHash> props; QDataStream str(&state, QIODevice::OpenModeFlag::ReadOnly); str >> props; QList to_process = {wdg}; while (!to_process.isEmpty()) { QObject* act = to_process.takeFirst(); if (props.contains(act->objectName())) { auto saved_props = props.value(act->objectName()); auto saved_props_names = saved_props.keys(); for (const QString& saved_key : saved_props_names) { act->setProperty(saved_key.toLocal8Bit().constData(), saved_props.value(saved_key)); } } to_process.append(act->children()); } } QByteArray GuiUtilities::saveState(QWidget* wdg) { QHash props_to_serialize{{QSL("QCheckBox"), {QSL("checked")}}, {QSL("QSpinBox"), {QSL("value")}}}; QHash> props; QList to_process = {wdg}; while (!to_process.isEmpty()) { QObject* act = to_process.takeFirst(); const QMetaObject* meta = act->metaObject(); auto act_props = props_to_serialize.value(meta->className()); QHash props_obj; for (const QString& prop : act_props) { props_obj.insert(prop, act->property(prop.toLocal8Bit().constData())); } if (!props_obj.isEmpty()) { props.insert(act->objectName(), props_obj); } to_process.append(act->children()); } QByteArray arr; QDataStream str(&arr, QIODevice::OpenModeFlag::WriteOnly); str << props; return arr; }