#pragma once

#include <QLayout>
#include <QWidget>
#include <boost/variant.hpp>

namespace chatterino {

using LayoutItem = boost::variant<QWidget *, QLayout *>;

template <typename T>
T *makeLayout(std::initializer_list<LayoutItem> items)
{
    auto t = new T;

    for (auto &item : items)
    {
        switch (item.which())
        {
            case 0:
                t->addItem(new QWidgetItem(boost::get<QWidget *>(item)));
                break;
            case 1:
                t->addItem(boost::get<QLayout *>(item));
                break;
        }
    }

    return t;
}

template <typename T, typename With>
T *makeWidget(With with)
{
    auto t = new T;

    with(t);

    return t;
}

}  // namespace chatterino