Program Listing for File tabwidget.h

Return to documentation for file (nanogui/tabwidget.h)

/*
    nanogui/tabwidget.h -- A wrapper around the widgets TabHeader and StackedWidget
    which hooks the two classes together.

    The tab widget was contributed by Stefan Ivanov.

    NanoGUI was developed by Wenzel Jakob <wenzel.jakob@epfl.ch>.
    The widget drawing code is based on the NanoVG demo application
    by Mikko Mononen.

    All rights reserved. Use of this source code is governed by a
    BSD-style license that can be found in the LICENSE.txt file.
*/
#pragma once

#include <nanogui/widget.h>
#include <functional>

NAMESPACE_BEGIN(nanogui)


class NANOGUI_EXPORT TabWidget : public Widget {
public:
    TabWidget(Widget *parent);

    virtual void addChild(int index, Widget *widget) override;

    void setActiveTab(int tabIndex);
    int activeTab() const;
    int tabCount() const;

    void setCallback(const std::function<void(int)> &callback) { mCallback = callback; };
    const std::function<void(int)> &callback() const { return mCallback; }

    Widget *createTab(const std::string &label);
    Widget *createTab(int index, const std::string &label);

    void addTab(const std::string &label, Widget *tab);

    void addTab(int index, const std::string &label, Widget *tab);

    bool removeTab(const std::string &label);

    void removeTab(int index);

    const std::string &tabLabelAt(int index) const;

    int tabLabelIndex(const std::string &label);

    int tabIndex(Widget* tab);

    void ensureTabVisible(int index);

    const Widget *tab(const std::string &label) const;

    Widget *tab(const std::string &label);

    const Widget *tab(int index) const;

    Widget *tab(int index);

    virtual void performLayout(NVGcontext* ctx) override;
    virtual Vector2i preferredSize(NVGcontext* ctx) const override;
    virtual void draw(NVGcontext* ctx) override;

private:
    TabHeader* mHeader;
    StackedWidget* mContent;
    std::function<void(int)> mCallback;
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

NAMESPACE_END(nanogui)