/*
 * tool_bar.h
 * Copyright 2014 William Pitcock
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions, and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions, and the following disclaimer in the documentation
 *    provided with the distribution.
 *
 * This software is provided "as is" and without any warranty, express or
 * implied. In no event shall the authors be liable for any damages arising from
 * the use of this software.
 */

#ifndef TOOL_BAR_H
#define TOOL_BAR_H

#include <QToolBar>

#include <libaudcore/objects.h>

struct ToolBarItem
{
    const char * icon_name;
    const char * name;
    const char * tooltip_text;

    void (*callback)();
    void (*toggled)(bool on);

    QWidget * widget;

    bool sep;

    QAction ** action_ptr;
};

class ToolBar : public QToolBar
{
public:
    ToolBar(QWidget * parent, ArrayRef<ToolBarItem> items);
};

constexpr ToolBarItem ToolBarAction(const char * icon_name, const char * name,
                                    const char * tooltip_text,
                                    void (*callback)(),
                                    QAction ** action_ptr = nullptr)
{
    return {icon_name, name,    tooltip_text, callback,
            nullptr,   nullptr, false,        action_ptr};
}

constexpr ToolBarItem ToolBarAction(const char * icon_name, const char * name,
                                    const char * tooltip_text,
                                    void (*toggled)(bool),
                                    QAction ** action_ptr = nullptr)
{
    return {icon_name, name,    tooltip_text, nullptr,
            toggled,   nullptr, false,        action_ptr};
}

constexpr ToolBarItem ToolBarCustom(QWidget * item,
                                    QAction ** action_ptr = nullptr)
{
    return {nullptr, nullptr, nullptr, nullptr,
            nullptr, item,    false,   action_ptr};
}

constexpr ToolBarItem ToolBarSeparator()
{
    return {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, true};
}

#endif
