stamen

Static Menu Generator
git clone git://git.dimitrijedobrota.com/stamen.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

commit 1d14de3dcbe573ba1a156facdc0d477558f3c97e
parent 260569531d18b4c35adeaa7b53c866ebea1e2d28
author Dimitrije Dobrota <mail@dimitrijedobrota.com>
date Wed, 8 Nov 2023 18:59:02 +0000

Print menu topology

Diffstat:
M include/menu.h | ++
M src/CMakeLists.txt | ++++++++++++
M src/display.cpp | ++++++++++++++++++
M src/main.cpp | ++ -

4 files changed, 34 insertions(+), 1 deletions(-)


diff --git a/ include/menu.h b/ include/menu.h

@@ -35,6 +35,7 @@ public: } }
void print(const std::string code = "main", const int depth = 1) const;
void operator()() const { get_callback("main")(); } struct record_t {

@@ -60,6 +61,7 @@ private: }; struct function_t {
friend class Menu;
function_t(const Menu &m, const std::string &n, const std::vector<item_t> &i) : menu(m), name(n), items(i) {}

diff --git a/ src/CMakeLists.txt b/ src/CMakeLists.txt

@@ -17,3 +17,15 @@ set_target_properties(demo PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" )
add_executable(generate generate.cpp)
target_include_directories(generate
PUBLIC ../include
)
set_target_properties(generate PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

diff --git a/ src/display.cpp b/ src/display.cpp

@@ -40,3 +40,21 @@ int Menu::function_t::display() const { return 1; }
void Menu::print(const std::string code, const int depth) const {
const auto it = lookup.find(code);
if (it == lookup.end()) return;
const callback_t &cb = it->second;
if (depth == 1) {
std::cout << std::format("{}({})\n", cb.menu_func->name, code);
}
if (cb.menu_func) {
for (const auto &item : cb.menu_func->items) {
std::cout << std::format("{}{}({})\n", std::string(depth << 1, ' '),
item.prompt, item.callback);
if (cb.menu_func) cb.menu_func->menu.print(item.callback, depth + 1);
}
}
}

diff --git a/ src/main.cpp b/ src/main.cpp

@@ -25,6 +25,7 @@ int main(void) { { "settings", settings}, { "finish", finish} });
menu();
// menu();
menu.print();
return 0; }