Add documentation to ProgressIndicator

Change-Id: I40dd1168aa7df0fd1db221c29468868abb850af7
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
This commit is contained in:
Eike Ziller
2017-11-03 10:50:40 +01:00
parent a6cda6dbe0
commit 0e1953a0f4

View File

@@ -33,6 +33,46 @@
#include <QPainter>
#include <QPixmap>
/*!
\class Utils::ProgressIndicator
\brief The ProgressIndicator class shows an circular, endlessly animated progress indicator.
Use it if you want to indicate that some work is being done, but you do not have the detailed
progress information needed for a progress bar. You can either create the widget on demand,
or create the widget once and only show it on demand. The animation only runs while the widget
is visible.
\inmodule Qt Creator
*/
/*!
\class Utils::ProgressIndicatorPainter
\brief The ProgressIndicatorPainter class is the painting backend for the ProgressIndicator
class.
You can use it to paint a circular, endlessly animated progress indicator directly onto a
QPaintDevice, for example, if you want to show a progress indicator where you cannot use
a QWidget.
\inmodule Qt Creator
*/
/*!
\enum Utils::ProgressIndicatorSize
Size of a progress indicator.
\sa Utils::ProgressIndicator
\sa Utils::ProgressIndicatorPainter
\value Small
Small icon size. Useful for tool bars, status bars, rows in tree views,
and so on.
\value Medium
Larger progress indicator useful for covering whole medium sized widgets.
\value Large
Very large progress indicator that can be used to cover large parts of a UI.
*/
namespace {
static QString imageFileNameForIndicatorSize(Utils::ProgressIndicatorSize size)
@@ -52,6 +92,11 @@ static QString imageFileNameForIndicatorSize(Utils::ProgressIndicatorSize size)
namespace Utils {
/*!
Constructs a progress indicator painter for the indicator \a size.
\sa setUpdateCallback
*/
ProgressIndicatorPainter::ProgressIndicatorPainter(ProgressIndicatorSize size)
{
m_timer.setSingleShot(false);
@@ -64,6 +109,13 @@ ProgressIndicatorPainter::ProgressIndicatorPainter(ProgressIndicatorSize size)
setIndicatorSize(size);
}
/*!
Changes the size of the progress indicator to \a size. Users of the class need
to adapt their painting or layouting code to the change in resulting pixel size.
\sa indicatorSize
\sa size
*/
void ProgressIndicatorPainter::setIndicatorSize(ProgressIndicatorSize size)
{
m_size = size;
@@ -73,22 +125,43 @@ void ProgressIndicatorPainter::setIndicatorSize(ProgressIndicatorSize size)
Theme::PanelTextColorMid}}, Icon::Tint).pixmap();
}
/*!
Returns the current indicator size. Use \l size to get the resulting
pixel size.
\sa setIndicatorSize
*/
ProgressIndicatorSize ProgressIndicatorPainter::indicatorSize() const
{
return m_size;
}
/*!
Sets the callback \a cb that is called whenever the progress indicator needs a repaint, because
its animation progressed. The callback is a void function taking no parameters, and should
usually trigger a QWidget::update on the widget that does the actual painting.
*/
void ProgressIndicatorPainter::setUpdateCallback(const UpdateCallback &cb)
{
m_callback = cb;
}
/*!
Returns the size of the progress indicator in device independent pixels.
\sa setIndicatorSize
\sa paint
*/
QSize ProgressIndicatorPainter::size() const
{
return m_pixmap.size() / m_pixmap.devicePixelRatio();
}
// Paint indicator centered on the rect
/*!
Paints the progress indicator centered in the \a rect on the given \a painter.
\sa size
*/
void ProgressIndicatorPainter::paint(QPainter &painter, const QRect &rect) const
{
painter.save();
@@ -106,22 +179,46 @@ void ProgressIndicatorPainter::paint(QPainter &painter, const QRect &rect) const
painter.restore();
}
/*!
Starts the progress indicator animation.
\sa setUpdateCallback
\sa stopAnimation
*/
void ProgressIndicatorPainter::startAnimation()
{
QTC_ASSERT(m_callback, return);
m_timer.start();
}
/*!
Stops the progress indicator animation.
\sa setUpdateCallback
\sa startAnimation
*/
void ProgressIndicatorPainter::stopAnimation()
{
m_timer.stop();
}
/*!
\internal
*/
void Utils::ProgressIndicatorPainter::nextAnimationStep()
{
m_rotation = (m_rotation + m_rotationStep + 360) % 360;
}
/*!
Constructs a ProgressIndicator of the size \a size and with the parent \a parent.
Use \l attachToWidget to make the progress indicator automatically resize and center on the
parent widget.
\sa attachToWidget
\sa setIndicatorSize
*/
ProgressIndicator::ProgressIndicator(ProgressIndicatorSize size, QWidget *parent)
: QWidget(parent), m_paint(size)
{
@@ -130,17 +227,31 @@ ProgressIndicator::ProgressIndicator(ProgressIndicatorSize size, QWidget *parent
updateGeometry();
}
/*!
Changes the size of the progress indicator to \a size.
\sa indicatorSize
*/
void ProgressIndicator::setIndicatorSize(ProgressIndicatorSize size)
{
m_paint.setIndicatorSize(size);
updateGeometry();
}
/*!
Returns the size of the indicator in device independent pixels.
\sa indicatorSize
*/
QSize ProgressIndicator::sizeHint() const
{
return m_paint.size();
}
/*!
Makes the indicator a child of \a parent, automatically centering on it,
and adapting to size changes.
*/
void ProgressIndicator::attachToWidget(QWidget *parent)
{
if (parentWidget())
@@ -151,22 +262,34 @@ void ProgressIndicator::attachToWidget(QWidget *parent)
raise();
}
/*!
\internal
*/
void ProgressIndicator::paintEvent(QPaintEvent *)
{
QPainter p(this);
m_paint.paint(p, rect());
}
/*!
\internal
*/
void ProgressIndicator::showEvent(QShowEvent *)
{
m_paint.startAnimation();
}
/*!
\internal
*/
void ProgressIndicator::hideEvent(QHideEvent *)
{
m_paint.stopAnimation();
}
/*!
\internal
*/
bool ProgressIndicator::eventFilter(QObject *obj, QEvent *ev)
{
if (obj == parent() && ev->type() == QEvent::Resize) {
@@ -175,6 +298,9 @@ bool ProgressIndicator::eventFilter(QObject *obj, QEvent *ev)
return QWidget::eventFilter(obj, ev);
}
/*!
\internal
*/
void ProgressIndicator::resizeToParent()
{
QTC_ASSERT(parentWidget(), return);