diff --git a/src/libs/utils/images/progressindicator_big.png b/src/libs/utils/images/progressindicator_big.png new file mode 100644 index 00000000000..ac854f1e25e Binary files /dev/null and b/src/libs/utils/images/progressindicator_big.png differ diff --git a/src/libs/utils/images/progressindicator_big@2x.png b/src/libs/utils/images/progressindicator_big@2x.png new file mode 100644 index 00000000000..23b488f23ab Binary files /dev/null and b/src/libs/utils/images/progressindicator_big@2x.png differ diff --git a/src/libs/utils/images/progressindicator_small.png b/src/libs/utils/images/progressindicator_small.png new file mode 100644 index 00000000000..8ba536403d8 Binary files /dev/null and b/src/libs/utils/images/progressindicator_small.png differ diff --git a/src/libs/utils/images/progressindicator_small@2x.png b/src/libs/utils/images/progressindicator_small@2x.png new file mode 100644 index 00000000000..e6dc7cc62d1 Binary files /dev/null and b/src/libs/utils/images/progressindicator_small@2x.png differ diff --git a/src/libs/utils/progressindicator.cpp b/src/libs/utils/progressindicator.cpp new file mode 100644 index 00000000000..10e0f9a5d13 --- /dev/null +++ b/src/libs/utils/progressindicator.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://www.qt.io/licensing. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "progressindicator.h" +#include "stylehelper.h" + +#include +#include + +using namespace Utils; + +ProgressIndicator::ProgressIndicator(Size size, QWidget *parent) + : QWidget(parent), + m_rotation(0) +{ + setAttribute(Qt::WA_TransparentForMouseEvents); + m_size = size; + m_rotationStep = size == Small ? 45 : 30; + m_pixmap.load(StyleHelper::dpiSpecificImageFile( + size == Small ? QLatin1String(":/utils/images/progressindicator_small.png") + : QLatin1String(":/utils/images/progressindicator_big.png"))); + m_timer.setInterval(size == Small ? 100 : 80); + m_timer.setSingleShot(false); + connect(&m_timer, &QTimer::timeout, this, &ProgressIndicator::step); +} + +QSize ProgressIndicator::sizeHint() const +{ + return m_pixmap.size() / m_pixmap.devicePixelRatio(); +} + +void ProgressIndicator::paintEvent(QPaintEvent *) +{ + QPainter p(this); + p.setRenderHint(QPainter::SmoothPixmapTransform); + QPoint translate(rect().width() / 2, rect().height() / 2); + QTransform t; + t.translate(translate.x(), translate.y()); + t.rotate(m_rotation); + t.translate(-translate.x(), -translate.y()); + p.setTransform(t); + QSize pixmapUserSize(m_pixmap.size() / m_pixmap.devicePixelRatio()); + p.drawPixmap(QPoint((rect().width() - pixmapUserSize.width()) / 2, + (rect().height() - pixmapUserSize.height()) / 2), + m_pixmap); +} + +void ProgressIndicator::showEvent(QShowEvent *) +{ + m_timer.start(); +} + +void ProgressIndicator::hideEvent(QHideEvent *) +{ + m_timer.stop(); +} + +void ProgressIndicator::step() +{ + m_rotation = (m_rotation + m_rotationStep + 360) % 360; + update(); +} + diff --git a/src/libs/utils/progressindicator.h b/src/libs/utils/progressindicator.h new file mode 100644 index 00000000000..c75fcbe0dc9 --- /dev/null +++ b/src/libs/utils/progressindicator.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://www.qt.io/licensing. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + + +#ifndef PROGRESSINDICATOR_H +#define PROGRESSINDICATOR_H + +#include "utils_global.h" + +#include +#include + +namespace Utils { + +namespace Internal { class ProgressIndicatorPrivate; } + +class QTCREATOR_UTILS_EXPORT ProgressIndicator : public QWidget +{ + Q_OBJECT +public: + enum Size { + Small, + Large + }; + + explicit ProgressIndicator(Size size, QWidget *parent = 0); + + QSize sizeHint() const; + +protected: + void paintEvent(QPaintEvent *); + void showEvent(QShowEvent *); + void hideEvent(QHideEvent *); + +private: + void step(); + + ProgressIndicator::Size m_size; + int m_rotationStep; + int m_rotation; + QTimer m_timer; + QPixmap m_pixmap; +}; + +} // Utils + +#endif // PROGRESSINDICATOR_H diff --git a/src/libs/utils/utils.pro b/src/libs/utils/utils.pro index b857dc9b24d..c6be7af2ae3 100644 --- a/src/libs/utils/utils.pro +++ b/src/libs/utils/utils.pro @@ -17,3 +17,9 @@ linux-* { win32: LIBS += -luser32 -lshell32 # PortsGatherer win32: LIBS += -liphlpapi -lws2_32 + +HEADERS += \ + progressindicator.h + +SOURCES += \ + progressindicator.cpp diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs index 31aff7ac34e..a2260ba1b69 100644 --- a/src/libs/utils/utils.qbs +++ b/src/libs/utils/utils.qbs @@ -130,6 +130,8 @@ QtcLibrary { "persistentsettings.h", "portlist.cpp", "portlist.h", + "progressindicator.cpp", + "progressindicator.h", "projectintropage.cpp", "projectintropage.h", "projectintropage.ui", @@ -202,6 +204,10 @@ QtcLibrary { "images/crumblepath-segment-selected-end.png", "images/crumblepath-segment-selected.png", "images/crumblepath-segment.png", + "images/progressindicator_big.png", + "images/progressindicator_big@2x.png", + "images/progressindicator_small.png", + "images/progressindicator_small@2x.png", "images/triangle_vert.png", ] diff --git a/src/libs/utils/utils.qrc b/src/libs/utils/utils.qrc index 2748bccb6c8..1209225af4a 100644 --- a/src/libs/utils/utils.qrc +++ b/src/libs/utils/utils.qrc @@ -7,6 +7,10 @@ images/crumblepath-segment-hover.png images/crumblepath-segment-selected-end.png images/crumblepath-segment-selected.png + images/progressindicator_big.png + images/progressindicator_big@2x.png + images/progressindicator_small.png + images/progressindicator_small@2x.png images/triangle_vert.png diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index 2c04f551edb..853e8d1089d 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -581,6 +581,28 @@ y1="587" x2="181" y2="599" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +