/****************************************************************************
 **
 ** Copyright (C) 2016 Ivan Vizir <define-true-false@yandex.com>
 ** Copyright (C) 2016 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the QtWinExtras module of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
 ** 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 The Qt Company. For licensing terms
 ** and conditions see https://www.qt.io/terms-conditions. For further
 ** information use the contact form at https://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 3 as published by the Free Software
 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
 ** packaging of this file. Please review the following information to
 ** ensure the GNU Lesser General Public License version 3 requirements
 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
 **
 ** GNU General Public License Usage
 ** Alternatively, this file may be used under the terms of the GNU
 ** General Public License version 2.0 or (at your option) the GNU General
 ** Public license version 3 or any later version approved by the KDE Free
 ** Qt Foundation. The licenses are as published by the Free Software
 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
 ** included in the packaging of this file. Please review the following
 ** information to ensure the GNU General Public License requirements will
 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
 ** https://www.gnu.org/licenses/gpl-3.0.html.
 **
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/

#include "qwinthumbnailtoolbutton.h"
#include "qwinthumbnailtoolbutton_p.h"

QT_BEGIN_NAMESPACE

/*!
    \class QWinThumbnailToolButton
    \inmodule QtWinExtras
    \since 5.2
    \brief The QWinThumbnailToolButton class represents a button in a thumbnail toolbar.

    Buttons in a QWinThumbnailToolBar are instances of QWinThumbnailToolButton.
    It provides a set of properties for specifying the attributes of a thumbnail
    toolbar button. It also provides a signal that is emitted whenever the button
    is \l{clicked()}{clicked}, and a slot to perform \l{click()}{clicks}
    programmatically.

    \sa QWinThumbnailToolBar
 */

/*!
    \fn void QWinThumbnailToolButton::clicked()

    This signal is emitted when the button is clicked.
 */

/*!
    \internal
    \fn void QWinThumbnailToolButton::changed()
 */

/*!
    Constructs a QWinThumbnailToolButton with the specified \a parent.
 */
QWinThumbnailToolButton::QWinThumbnailToolButton(QObject *parent) :
    QObject(parent), d_ptr(new QWinThumbnailToolButtonPrivate)
{
}

/*!
    Destroys the QWinThumbnailToolButton.
 */
QWinThumbnailToolButton::~QWinThumbnailToolButton() = default;

/*!
    \property QWinThumbnailToolButton::toolTip
    \brief the tooltip of the button
 */
void QWinThumbnailToolButton::setToolTip(const QString &toolTip)
{
    Q_D(QWinThumbnailToolButton);
    if (d->toolTip != toolTip) {
        d->toolTip = toolTip;
        emit changed();
    }
}

QString QWinThumbnailToolButton::toolTip() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->toolTip;
}

/*!
    \property QWinThumbnailToolButton::icon
    \brief the icon of the button
 */
void QWinThumbnailToolButton::setIcon(const QIcon &icon)
{
    Q_D(QWinThumbnailToolButton);
    if (d->icon.cacheKey() != icon.cacheKey()) {
        d->icon = icon;
        emit changed();
    }
}

QIcon QWinThumbnailToolButton::icon() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->icon;
}

/*!
    \property QWinThumbnailToolButton::enabled
    \brief whether the button is enabled

    The default value is \c true.

    A disabled button does not react to user interaction,
    and is also visually disabled.

    \sa interactive
 */
void QWinThumbnailToolButton::setEnabled(bool enabled)
{
    Q_D(QWinThumbnailToolButton);
    if (d->enabled != enabled) {
        d->enabled = enabled;
        emit changed();
    }
}

bool QWinThumbnailToolButton::isEnabled() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->enabled;
}

/*!
    \property QWinThumbnailToolButton::interactive
    \brief whether the button is interactive

    The default value is \c true.

    A non-interactive button does not react to user interaction,
    but is still visually enabled. A typical use case for non-
    interactive buttons are notification icons.

    \sa enabled
 */
void QWinThumbnailToolButton::setInteractive(bool interactive)
{
    Q_D(QWinThumbnailToolButton);
    if (d->interactive != interactive) {
        d->interactive = interactive;
        emit changed();
    }
}

bool QWinThumbnailToolButton::isInteractive() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->interactive;
}

/*!
    \property QWinThumbnailToolButton::visible
    \brief whether the button is visible

    The default value is \c true.
 */
void QWinThumbnailToolButton::setVisible(bool visible)
{
    Q_D(QWinThumbnailToolButton);
    if (d->visible != visible) {
        d->visible = visible;
        emit changed();
    }
}

bool QWinThumbnailToolButton::isVisible() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->visible;
}

/*!
    \property QWinThumbnailToolButton::dismissOnClick
    \brief whether the window thumbnail is dismissed after a button click

    The default value is \c false.
 */
void QWinThumbnailToolButton::setDismissOnClick(bool dismiss)
{
    Q_D(QWinThumbnailToolButton);
    if (d->dismiss != dismiss) {
        d->dismiss = dismiss;
        emit changed();
    }
}

bool QWinThumbnailToolButton::dismissOnClick() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->dismiss;
}

/*!
    \property QWinThumbnailToolButton::flat
    \brief whether the button is flat

    The default value is \c false.

    A flat button does not draw a background nor a frame - only an icon.
 */
void QWinThumbnailToolButton::setFlat(bool flat)
{
    Q_D(QWinThumbnailToolButton);
    if (d->flat != flat) {
        d->flat = flat;
        emit changed();
    }
}

bool QWinThumbnailToolButton::isFlat() const
{
    Q_D(const QWinThumbnailToolButton);
    return d->flat;
}

/*!
    Performs a click. The clicked() signal is emitted as appropriate.

    This function does nothing if the button is \l{enabled}{disabled}
    or \l{interactive}{non-interactive}.
 */
void QWinThumbnailToolButton::click()
{
    Q_D(QWinThumbnailToolButton);
    if (d->enabled && d->interactive)
        emit clicked();
}

QT_END_NAMESPACE
