/*
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)