18 namespace visualization {
22 static int g_next_tab_control_id = 1;
24 int CalcTabHeight(
const Theme&
theme) {
25 auto em =
std::ceil(ImGui::GetTextLineHeight());
26 return int(
std::ceil(em + 2.0f * ImGui::GetStyle().FramePadding.y));
47 impl_->tab_names_.push_back(std::string(
" ") +
name + std::string(
" "));
51 impl_->on_changed_ = on_changed;
58 auto size = child->CalcPreferredSize(
context, constraints);
67 auto tabHeight = CalcTabHeight(
context.theme);
70 frame.height - tabHeight);
73 child->SetFrame(child_rect);
81 ImGui::SetCursorScreenPos(
82 ImVec2(
float(
frame.x),
float(
frame.y) - ImGui::GetScrollY()));
87 if (ImGui::BeginTabBar(impl_->imgui_id_.c_str())) {
88 for (
int i = 0; i < int(impl_->tab_names_.size()); ++i) {
89 if (ImGui::BeginTabItem(impl_->tab_names_[i].c_str())) {
96 if (i != impl_->current_index_) {
97 impl_->current_index_ = i;
98 if (impl_->on_changed_) {
99 impl_->on_changed_(i);
106 ImGui::PopItemWidth();
DrawResult Draw(const DrawContext &context) override
void AddTab(const char *name, std::shared_ptr< Widget > panel)
void SetOnSelectedTabChanged(std::function< void(int)> on_changed)
void Layout(const LayoutContext &context) override
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
Generic file read and write utility for python interface.
std::string to_string(const T &n)
std::function< void(int)> on_changed_
std::vector< std::string > tab_names_