ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Menu.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
9 
10 #include <set>
11 
14 
15 namespace cloudViewer {
16 namespace visualization {
17 namespace gui {
18 
19 struct Menu::Impl {
20  std::shared_ptr<MenuBase> menu;
21  std::set<std::shared_ptr<MenuBase>> submenus; // to keep shared_ptr alive
22 };
23 
24 Menu::Menu() : impl_(new Menu::Impl()) {
25  impl_->menu = std::shared_ptr<MenuBase>(
26  Application::GetInstance().GetWindowSystem().CreateOSMenu());
27 }
28 
30 
31 void Menu::AddItem(const char* name,
32  ItemId item_id /*= NO_ITEM*/,
33  KeyName key /*= KEY_NONE*/) {
34  impl_->menu->AddItem(name, item_id, key);
35 }
36 
37 void Menu::AddMenu(const char* name, std::shared_ptr<MenuBase> submenu) {
38  auto menu_submenu = std::dynamic_pointer_cast<Menu>(submenu);
39  if (menu_submenu) {
40  impl_->menu->AddMenu(name, menu_submenu->impl_->menu);
41  impl_->submenus.insert(submenu);
42  } else {
43  impl_->menu->AddMenu(name, submenu);
44  }
45 }
46 
47 void Menu::AddSeparator() { impl_->menu->AddSeparator(); }
48 
49 void Menu::InsertItem(int index,
50  const char* name,
51  ItemId item_id /*= NO_ITEM*/,
52  KeyName key /*= KEY_NONE*/) {
53  impl_->menu->InsertItem(index, name, item_id, key);
54 }
55 
56 void Menu::InsertMenu(int index,
57  const char* name,
58  std::shared_ptr<MenuBase> submenu) {
59  auto menu_submenu = std::dynamic_pointer_cast<Menu>(submenu);
60  if (menu_submenu) {
61  impl_->menu->InsertMenu(index, name, menu_submenu->impl_->menu);
62  impl_->submenus.insert(submenu);
63  } else {
64  impl_->menu->InsertMenu(index, name, submenu);
65  }
66 }
67 
68 void Menu::InsertSeparator(int index) { impl_->menu->InsertSeparator(index); }
69 
70 int Menu::GetNumberOfItems() const { return impl_->menu->GetNumberOfItems(); }
71 
72 bool Menu::IsEnabled(ItemId item_id) const {
73  return impl_->menu->IsEnabled(item_id);
74 }
75 
76 void Menu::SetEnabled(ItemId item_id, bool enabled) {
77  impl_->menu->SetEnabled(item_id, enabled);
78 }
79 
80 bool Menu::IsChecked(ItemId item_id) const {
81  return impl_->menu->IsChecked(item_id);
82 }
83 
84 void Menu::SetChecked(ItemId item_id, bool checked) {
85  impl_->menu->SetChecked(item_id, checked);
86 }
87 
88 int Menu::CalcHeight(const Theme& theme) const {
89  return impl_->menu->CalcHeight(theme);
90 }
91 
93  return impl_->menu->CheckVisibilityChange();
94 }
95 
97  bool is_enabled) {
98  return impl_->menu->DrawMenuBar(context, is_enabled);
99 }
100 
102  const char* name,
103  bool is_enabled) {
104  return impl_->menu->Draw(context, name, is_enabled);
105 }
106 
107 void* Menu::GetNativePointer() { return impl_->menu->GetNativePointer(); }
108 
109 } // namespace gui
110 } // namespace visualization
111 } // namespace cloudViewer
std::string name
bool IsEnabled(ItemId item_id) const override
Definition: Menu.cpp:72
void InsertItem(int index, const char *name, ItemId item_id=NO_ITEM, KeyName key=KEY_NONE) override
Definition: Menu.cpp:49
ItemId DrawMenuBar(const DrawContext &context, bool is_enabled) override
Definition: Menu.cpp:96
bool IsChecked(ItemId item_id) const override
Definition: Menu.cpp:80
int GetNumberOfItems() const override
Definition: Menu.cpp:70
void AddMenu(const char *name, std::shared_ptr< MenuBase > submenu) override
Definition: Menu.cpp:37
void SetEnabled(ItemId item_id, bool enabled) override
Definition: Menu.cpp:76
void InsertSeparator(int index) override
Definition: Menu.cpp:68
int CalcHeight(const Theme &theme) const override
Definition: Menu.cpp:88
void * GetNativePointer() override
Definition: Menu.cpp:107
bool CheckVisibilityChange() const override
Returns true if submenu visibility changed on last call to DrawMenuBar.
Definition: Menu.cpp:92
void AddItem(const char *name, ItemId item_id=NO_ITEM, KeyName key=KEY_NONE) override
Definition: Menu.cpp:31
void SetChecked(ItemId item_id, bool checked) override
Definition: Menu.cpp:84
void InsertMenu(int index, const char *name, std::shared_ptr< MenuBase > submenu) override
Definition: Menu.cpp:56
ItemId Draw(const DrawContext &context, const char *name, bool is_enabled) override
Definition: Menu.cpp:101
ImGuiContext * context
Definition: Window.cpp:76
const Theme * theme
Definition: Window.cpp:74
Generic file read and write utility for python interface.
std::shared_ptr< MenuBase > menu
Definition: Menu.cpp:20
std::set< std::shared_ptr< MenuBase > > submenus
Definition: Menu.cpp:21