QmlDesigner Fix: Select Background Color doesn't clear Environment Color checkbox

Task-number: QDS-7439
Change-Id: I5546e02f7cc2d0bcf3197f94a6ccc557cfb84e7b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Samuel Ghinet
2022-10-25 18:24:19 +03:00
parent e3e5524f88
commit 61c133f48a
6 changed files with 66 additions and 40 deletions

View File

@@ -13,12 +13,13 @@ using namespace QmlDesigner;
void BackgroundColorSelection::showBackgroundColorSelectionWidget(QWidget *parent,
const QByteArray &key,
AbstractView *view,
View3DActionType actionType)
View3DActionType actionType,
const std::function<void()> &colorSelected)
{
if (m_dialog)
return;
m_dialog = BackgroundColorSelection::createColorDialog(parent, key, view, actionType);
m_dialog = BackgroundColorSelection::createColorDialog(parent, key, view, actionType, colorSelected);
QTC_ASSERT(m_dialog, return);
QObject::connect(m_dialog, &QWidget::destroyed, m_dialog, [&]() {
@@ -29,32 +30,36 @@ void BackgroundColorSelection::showBackgroundColorSelectionWidget(QWidget *paren
QColorDialog *BackgroundColorSelection::createColorDialog(QWidget *parent,
const QByteArray &key,
AbstractView *view,
View3DActionType actionType)
View3DActionType actionType,
const std::function<void()> &colorSelected)
{
auto dialog = new QColorDialog(parent);
dialog->setModal(true);
dialog->setAttribute(Qt::WA_DeleteOnClose);
QList<QColor> oldColorConfig = Edit3DViewConfig::load(key);
QList<QColor> oldColorConfig = Edit3DViewConfig::loadColor(key);
dialog->show();
QObject::connect(dialog,
&QColorDialog::currentColorChanged,
dialog,
QObject::connect(dialog, &QColorDialog::currentColorChanged, dialog,
[actionType, view](const QColor &color) {
Edit3DViewConfig::set(view, actionType, color);
Edit3DViewConfig::setColor(view, actionType, color);
});
QObject::connect(dialog, &QColorDialog::colorSelected, dialog, [key](const QColor &color) {
Edit3DViewConfig::save(key, color);
});
QObject::connect(dialog, &QColorDialog::colorSelected, dialog,
[key, colorSelected](const QColor &color) {
if (colorSelected)
colorSelected();
if (Edit3DViewConfig::isValid(oldColorConfig)) {
QObject::connect(dialog, &QColorDialog::rejected, dialog, [actionType, oldColorConfig, view]() {
Edit3DViewConfig::set(view, actionType, oldColorConfig);
});
Edit3DViewConfig::saveColor(key, color);
});
if (Edit3DViewConfig::isColorValid(oldColorConfig)) {
QObject::connect(dialog, &QColorDialog::rejected, dialog,
[actionType, oldColorConfig, view]() {
Edit3DViewConfig::setColor(view, actionType, oldColorConfig);
});
}
return dialog;

View File

@@ -25,13 +25,15 @@ public:
static void showBackgroundColorSelectionWidget(QWidget *parent,
const QByteArray &key,
AbstractView *view,
View3DActionType actionType);
View3DActionType actionType,
const std::function<void()> &colorSelected = {});
private:
static QColorDialog *createColorDialog(QWidget *parent,
const QByteArray &key,
AbstractView *view,
View3DActionType actionType);
View3DActionType actionType,
const std::function<void ()> &colorSelected);
inline static QColorDialog *m_dialog = nullptr;
};

View File

@@ -315,19 +315,25 @@ void Edit3DView::setSeeker(SeekerSlider *slider)
m_seeker = slider;
}
Edit3DAction *Edit3DView::createSelectBackgrounColorAction()
Edit3DAction *Edit3DView::createSelectBackgroundColorAction(QAction *syncBackgroundColorAction)
{
QString description = QCoreApplication::translate("SelectBackgroundColorAction",
"Select Background Color");
QString tooltip = QCoreApplication::translate("SelectBackgroundColorAction",
"Select a color for the background of the 3D view.");
auto operation = [this](const SelectionContext &) {
auto operation = [this, syncBackgroundColorAction](const SelectionContext &) {
BackgroundColorSelection::showBackgroundColorSelectionWidget(
edit3DWidget(),
DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR,
this,
View3DActionType::SelectBackgroundColor);
View3DActionType::SelectBackgroundColor,
[this, syncBackgroundColorAction]() {
if (syncBackgroundColorAction->isChecked()) {
Edit3DViewConfig::set(this, View3DActionType::SyncBackgroundColor, false);
syncBackgroundColorAction->setChecked(false);
}
});
};
return new Edit3DAction(Constants::EDIT3D_EDIT_SELECT_BACKGROUND_COLOR,
@@ -370,21 +376,26 @@ Edit3DAction *Edit3DView::createGridColorSelectionAction()
tooltip);
}
Edit3DAction *Edit3DView::createResetColorAction()
Edit3DAction *Edit3DView::createResetColorAction(QAction *syncBackgroundColorAction)
{
QString description = QCoreApplication::translate("ResetEdit3DColorsAction", "Reset Colors");
QString tooltip = QCoreApplication::translate("ResetEdit3DColorsAction",
"Reset the background color and the color of the "
"grid lines of the 3D view to the default values.");
auto operation = [&](const SelectionContext &) {
auto operation = [this, syncBackgroundColorAction](const SelectionContext &) {
QList<QColor> bgColors = {QRgb(0x222222), QRgb(0x999999)};
Edit3DViewConfig::set(this, View3DActionType::SelectBackgroundColor, bgColors);
Edit3DViewConfig::save(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR, bgColors);
Edit3DViewConfig::setColor(this, View3DActionType::SelectBackgroundColor, bgColors);
Edit3DViewConfig::saveColor(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR, bgColors);
QColor gridColor{0xaaaaaa};
Edit3DViewConfig::set(this, View3DActionType::SelectGridColor, gridColor);
Edit3DViewConfig::save(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR, gridColor);
Edit3DViewConfig::setColor(this, View3DActionType::SelectGridColor, gridColor);
Edit3DViewConfig::saveColor(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR, gridColor);
if (syncBackgroundColorAction->isChecked()) {
Edit3DViewConfig::set(this, View3DActionType::SyncBackgroundColor, false);
syncBackgroundColorAction->setChecked(false);
}
};
return new Edit3DAction(QmlDesigner::Constants::EDIT3D_EDIT_RESET_BACKGROUND_COLOR,
@@ -772,10 +783,11 @@ void Edit3DView::createEdit3DActions()
m_visibilityToggleActions << m_showCameraFrustumAction;
m_visibilityToggleActions << m_showParticleEmitterAction;
m_backgroundColorActions << createSelectBackgrounColorAction();
Edit3DAction *syncBackgroundColorAction = createSyncBackgroundColorAction();
m_backgroundColorActions << createSelectBackgroundColorAction(syncBackgroundColorAction->action());
m_backgroundColorActions << createGridColorSelectionAction();
m_backgroundColorActions << createSyncBackgroundColorAction();
m_backgroundColorActions << createResetColorAction();
m_backgroundColorActions << syncBackgroundColorAction;
m_backgroundColorActions << createResetColorAction(syncBackgroundColorAction->action());
}
QVector<Edit3DAction *> Edit3DView::leftActions() const

View File

@@ -15,6 +15,7 @@
QT_BEGIN_NAMESPACE
class QInputEvent;
class QAction;
QT_END_NAMESPACE
namespace QmlDesigner {
@@ -77,9 +78,9 @@ private:
void checkImports();
void handleEntriesChanged();
Edit3DAction *createSelectBackgrounColorAction();
Edit3DAction *createSelectBackgroundColorAction(QAction *syncBackgroundColorAction);
Edit3DAction *createGridColorSelectionAction();
Edit3DAction *createResetColorAction();
Edit3DAction *createResetColorAction(QAction *syncBackgroundColorAction);
Edit3DAction *createSyncBackgroundColorAction();
QPointer<Edit3DWidget> m_edit3DWidget;

View File

@@ -14,7 +14,7 @@ namespace QmlDesigner {
class Edit3DViewConfig
{
public:
static QList<QColor> load(const char key[])
static QList<QColor> loadColor(const char key[])
{
QVariant var = QmlDesignerPlugin::settings().value(key);
@@ -28,20 +28,26 @@ public:
});
}
static void set(AbstractView *view, View3DActionType type, const QList<QColor> &colorConfig)
static void setColor(AbstractView *view, View3DActionType type, const QList<QColor> &colorConfig)
{
if (colorConfig.size() == 1)
set(view, type, colorConfig.at(0));
setColor(view, type, colorConfig.at(0));
else
setVariant(view, type, QVariant::fromValue(colorConfig));
}
static void set(AbstractView *view, View3DActionType type, const QColor &color)
static void setColor(AbstractView *view, View3DActionType type, const QColor &color)
{
setVariant(view, type, QVariant::fromValue(color));
}
static void save(const QByteArray &key, const QList<QColor> &colorConfig)
template <typename T>
static void set(AbstractView *view, View3DActionType type, const T &value)
{
setVariant(view, type, QVariant::fromValue(value));
}
static void saveColor(const QByteArray &key, const QList<QColor> &colorConfig)
{
QStringList colorNames = Utils::transform(colorConfig, [](const QColor &color) {
return color.name();
@@ -50,12 +56,12 @@ public:
saveVariant(key, QVariant::fromValue(colorNames));
}
static void save(const QByteArray &key, const QColor &color)
static void saveColor(const QByteArray &key, const QColor &color)
{
saveVariant(key, QVariant::fromValue(color.name()));
}
static bool isValid(const QList<QColor> &colorConfig) { return !colorConfig.isEmpty(); }
static bool isColorValid(const QList<QColor> &colorConfig) { return !colorConfig.isEmpty(); }
private:
static void setVariant(AbstractView *view, View3DActionType type, const QVariant &colorConfig)

View File

@@ -62,12 +62,12 @@ QString ExternalDependencies::currentProjectDirPath() const
QList<QColor> ExternalDependencies::designerSettingsEdit3DViewBackgroundColor() const
{
return Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR);
return Edit3DViewConfig::loadColor(DesignerSettingsKey::EDIT3DVIEW_BACKGROUND_COLOR);
}
QColor ExternalDependencies::designerSettingsEdit3DViewGridColor() const
{
QList<QColor> gridColorList = Edit3DViewConfig::load(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR);
QList<QColor> gridColorList = Edit3DViewConfig::loadColor(DesignerSettingsKey::EDIT3DVIEW_GRID_COLOR);
if (!gridColorList.isEmpty())
return gridColorList.front();