#include "SARibbonCtrlContainer.h"
#include <QHBoxLayout>
#include <QPainter>
#include <QPaintEvent>
#include <QStylePainter>
#include <QDebug>
#include <QLabel>
#include <QApplication>
#include <QScreen>
/**
 * @brief The SARibbonCtrlContainerPrivate class
 */
class SARibbonCtrlContainer::PrivateData
{
    SA_RIBBON_DECLARE_PUBLIC(SARibbonCtrlContainer)
public:
    QWidget* mContainerWidget { nullptr };
    QHBoxLayout* mHorizontalLayout { nullptr };
    QLabel* mLabelPixmap { nullptr };
    QLabel* mLabelText { nullptr };
    QSize mIconSize { 24, 24 };
    QIcon mIcon;
    PrivateData(SARibbonCtrlContainer* p) : q_ptr(p)
    {
        mHorizontalLayout = new QHBoxLayout(p);
        mHorizontalLayout->setSpacing(0);
        mHorizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
        mHorizontalLayout->setContentsMargins(0, 0, 0, 0);

        mLabelPixmap = new QLabel(p);
        mLabelPixmap->setObjectName(QString::fromUtf8("labelPixmap"));
        mLabelPixmap->setAlignment(Qt::AlignCenter);
        mHorizontalLayout->addWidget(mLabelPixmap);

        mLabelText = new QLabel(p);
        mLabelText->setObjectName(QString::fromUtf8("labelText"));
        mHorizontalLayout->addWidget(mLabelText);
    }

    void setContainerWidget(QWidget* w)
    {
        if (mContainerWidget) {
            // 原来有widget
            QWidget* oldwidget = mContainerWidget;
            takeContainerWidget(oldwidget);
            oldwidget->deleteLater();
        }
        mContainerWidget = w;
        if (!w) {
            return;
        }
        if (w->parent() != q_ptr) {
            w->setParent(q_ptr);
        }
        // ContainerWidget永远在最右边
        mHorizontalLayout->insertWidget(mHorizontalLayout->count(), w);
        QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
        sizePolicy.setHorizontalStretch(0);
        sizePolicy.setVerticalStretch(0);
        w->setSizePolicy(sizePolicy);
    }

    void takeContainerWidget(QWidget* w)
    {
        int i = mHorizontalLayout->indexOf(w);
        if (i >= 0) {
            QLayoutItem* item = mHorizontalLayout->takeAt(i);
            delete item;
        }
    }
};

//===================================================
// SARibbonCtrlContainer
//===================================================
SARibbonCtrlContainer::SARibbonCtrlContainer(QWidget* parent)
    : QWidget(parent), d_ptr(new SARibbonCtrlContainer::PrivateData(this))
{
}

SARibbonCtrlContainer::~SARibbonCtrlContainer()
{
}

QWidget* SARibbonCtrlContainer::containerWidget()
{
    return (d_ptr->mContainerWidget);
}

const QWidget* SARibbonCtrlContainer::containerWidget() const
{
    return (d_ptr->mContainerWidget);
}

void SARibbonCtrlContainer::setEnableShowIcon(bool b)
{
    d_ptr->mLabelPixmap->setVisible(b);
}

void SARibbonCtrlContainer::setEnableShowTitle(bool b)
{
    d_ptr->mLabelText->setVisible(b);
}

/**
 * @brief 判断是否存在容器窗口
 * @return
 */
bool SARibbonCtrlContainer::hasContainerWidget() const
{
    return (d_ptr->mContainerWidget != nullptr);
}

/**
 * @brief 设置图标
 * @param i
 */
void SARibbonCtrlContainer::setIcon(const QIcon& i)
{
    d_ptr->mIcon   = i;
    QPixmap pixmap = i.pixmap(d_ptr->mIconSize);
    d_ptr->mLabelPixmap->setPixmap(pixmap);
}

void SARibbonCtrlContainer::setIcon(const QPixmap& pixmap)
{
    d_ptr->mLabelPixmap->setPixmap(pixmap);
}

/**
 * @brief 获取图标
 * @return
 */
QIcon SARibbonCtrlContainer::icon() const
{
    return d_ptr->mIcon;
}

/**
 * @brief 设置文字
 * @param t
 */
void SARibbonCtrlContainer::setText(const QString& t)
{
    d_ptr->mLabelText->setText(t);
}

/**
 * @brief 获取文字
 * @return
 */
QString SARibbonCtrlContainer::text() const
{
    return d_ptr->mLabelText->text();
}

void SARibbonCtrlContainer::setContainerWidget(QWidget* w)
{
    d_ptr->setContainerWidget(w);
}

/**
 * @brief 获取显示icon的窗口
 * @return
 */
QWidget* SARibbonCtrlContainer::iconWidget() const
{
    return d_ptr->mLabelPixmap;
}
