/* * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include "QtViewPaneEffects.h" #include #include #include #include namespace AzQtComponents { static const char* s_viewPaneManagerDisableEffectPropertyName = "QtViewPaneManagerDisableEffect"; static const float s_disabledPaneOpacity = 0.4f; // put the widget into a grayed out state to indicate it cannot be interacted with static void DisableViewPaneDisabledGraphicsEffect(QWidget* widget) { // only remove effects from widgets that we added them to QGraphicsEffect* effect = widget->graphicsEffect(); if (effect != nullptr && !effect->property(s_viewPaneManagerDisableEffectPropertyName).isNull()) { widget->setGraphicsEffect(nullptr); } } // force the widget to be repainted static void ForceWidgetRedraw(QWidget* widget) { widget->hide(); widget->resize(widget->size()); widget->show(); } // restore the widget to its normal state to show it can now be interacted with static void EnableViewPaneDisabledGraphicsEffect(QWidget* widget) { // only apply effects to widgets that didn't have them already... if (widget->graphicsEffect() == nullptr) { auto effect = AZStd::make_unique(); effect->setOpacity(s_disabledPaneOpacity); // flag this as our effect so we can get rid of it later effect->setProperty(s_viewPaneManagerDisableEffectPropertyName, true); widget->setGraphicsEffect(effect.release()); // ensure the widget is redrawn with the updated graphical effect ForceWidgetRedraw(widget); } } void SetWidgetInteractEnabled(QWidget* widget, const bool on) { widget->setEnabled(on); if (on) { DisableViewPaneDisabledGraphicsEffect(widget); } else { EnableViewPaneDisabledGraphicsEffect(widget); } } } // namespace AzQtComponents