aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-06 17:33:25 -0500
commit7167ce41b61d2ba2cdb526777a4233eb84a3b66a (patch)
treea35c14143716e1f2c98f808c81f89426045a946f /SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp
Imported Upstream version 2.99.6upstream/2.99.6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp209
1 files changed, 209 insertions, 0 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp b/SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp
new file mode 100644
index 0000000..7cc6a4e
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/common/widgetcover.cpp
@@ -0,0 +1,209 @@
+#include "widgetcover.h"
+#include "common/unused.h"
+#include <QVariantAnimation>
+#include <QDebug>
+#include <QGraphicsBlurEffect>
+#include <QPushButton>
+#include <QGridLayout>
+#include <QEvent>
+#include <QPushButton>
+#include <QProgressBar>
+
+WidgetCover::WidgetCover(QWidget *parent) :
+ QWidget(parent)
+{
+ init();
+}
+
+WidgetCover::WidgetCover(const QEasingCurve& easingCurve, QWidget* parent)
+ : QWidget(parent), easingCurve(easingCurve)
+{
+ init();
+}
+
+WidgetCover::~WidgetCover()
+{
+ interruptAction();
+}
+
+void WidgetCover::init()
+{
+ parentWidget()->installEventFilter(this);
+
+ setLayout(new QGridLayout(this));
+ layout()->setAlignment(Qt::AlignCenter);
+
+ container = new QWidget(this);
+ container->setVisible(false);
+ layout()->addWidget(container);
+
+ containerLayout = new QGridLayout(container);
+ containerLayout->setSizeConstraint(QLayout::SetFixedSize);
+
+ animation = new QVariantAnimation(this);
+ animation->setEasingCurve(easingCurve);
+ animation->setDuration(duration);
+ connect(animation, SIGNAL(valueChanged(QVariant)), this, SLOT(animationUpdate(QVariant)));
+ connect(animation, SIGNAL(finished()), this, SLOT(animationFinished()));
+
+ setAutoFillBackground(true);
+ resetBackground();
+ move(0, 0);
+ widgetResized();
+ hide();
+}
+
+void WidgetCover::interruptAction()
+{
+ setVisible(false);
+ animation->stop();
+}
+
+void WidgetCover::resetBackground()
+{
+ QPalette pal = palette();
+ pal.setBrush(QPalette::Window, QColor(0, 0, 0, 0));
+ setPalette(pal);
+}
+
+void WidgetCover::animationUpdate(const QVariant& value)
+{
+ QPalette pal = palette();
+ pal.setBrush(QPalette::Window, value.value<QColor>());
+ setPalette(pal);
+}
+
+void WidgetCover::animationFinished()
+{
+ switch (actionInProgres)
+ {
+ case Action::HIDING:
+ {
+ setVisible(false);
+ resetBackground();
+ break;
+ }
+ case Action::SHOWING:
+ {
+ container->setVisible(true);
+ break;
+ }
+ default:
+ break;
+ }
+
+ actionInProgres = Action::NONE;
+}
+
+void WidgetCover::widgetResized()
+{
+// qDebug() << parentWidget()->size();
+ setFixedSize(parentWidget()->size());
+}
+
+void WidgetCover::show()
+{
+ if (actionInProgres == Action::SHOWING)
+ return;
+
+ if (actionInProgres == Action::HIDING)
+ animation->stop();
+
+ actionInProgres = Action::SHOWING;
+
+ if (cancelButton)
+ cancelButton->setEnabled(true);
+
+ QPalette pal = palette();
+ animation->setStartValue(QVariant(pal.brush(QPalette::Window).color()));
+ animation->setEndValue(QVariant(QColor(0, 0, 0, transparency)));
+ setVisible(true);
+ container->setVisible(true);
+ animation->start();
+}
+
+void WidgetCover::hide()
+{
+ if (actionInProgres == Action::HIDING)
+ return;
+
+ if (actionInProgres == Action::SHOWING)
+ animation->stop();
+
+ actionInProgres = Action::HIDING;
+
+ container->setVisible(false);
+
+ QPalette pal = palette();
+ animation->setStartValue(QVariant(pal.brush(QPalette::Window).color()));
+ animation->setEndValue(QVariant(QColor(0, 0, 0, 0)));
+ animation->start();
+}
+
+QEasingCurve WidgetCover::getEasingCurve() const
+{
+ return easingCurve;
+}
+
+void WidgetCover::setEasingCurve(const QEasingCurve& value)
+{
+ easingCurve = value;
+ animation->setEasingCurve(easingCurve);
+}
+
+int WidgetCover::getDuration() const
+{
+ return duration;
+}
+
+void WidgetCover::setDuration(int value)
+{
+ duration = value;
+ animation->setDuration(duration);
+}
+
+int WidgetCover::getTransparency() const
+{
+ return transparency;
+}
+
+void WidgetCover::setTransparency(int value)
+{
+ if (value < 0)
+ value = 0;
+
+ if (value > 255)
+ value = 255;
+
+ transparency = value;
+}
+
+QGridLayout* WidgetCover::getContainerLayout()
+{
+ return containerLayout;
+}
+
+bool WidgetCover::eventFilter(QObject* obj, QEvent* e)
+{
+ UNUSED(obj);
+ if (e->type() == QEvent::Resize)
+ widgetResized();
+
+ return false;
+}
+
+void WidgetCover::initWithInterruptContainer(const QString& interruptButtonText)
+{
+ cancelButton = new QPushButton();
+ cancelButton->setText(interruptButtonText.isNull() ? tr("Interrupt") : interruptButtonText);
+
+ busyBar = new QProgressBar();
+ busyBar->setRange(0, 0);
+ busyBar->setTextVisible(false);
+
+ containerLayout->addWidget(busyBar, 0, 0);
+ containerLayout->addWidget(cancelButton, 1, 0);
+
+ connect(cancelButton, &QPushButton::clicked, [=]() {cancelButton->setEnabled(false);});
+ connect(cancelButton, SIGNAL(clicked()), this, SIGNAL(cancelClicked()));
+}