stamen

Stamen - static menu generator
git clone git://git.dimitrijedobrota.com/stamen.git
Log | Files | Refs | README | LICENSE

commit 87599e12d3694eca29695587e4c71cf57c6cb94b
parent ad4b84a3bae704a23f2a417764b1bf62270adfc6
Author: Dimitrije Dobrota <mail@dimitrijedobrota.com>
Date:   Sun,  3 Dec 2023 00:17:04 +0000

Update README to reflect recent changes

Diffstat:
MCMakeLists.txt | 2+-
MREADME.md | 75++++++++++++++++++++++++++-------------------------------------------------
2 files changed, 27 insertions(+), 50 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -3,7 +3,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) project( Stamen - VERSION 0.0.16 + VERSION 0.0.17 DESCRIPTION "Static menu generator" LANGUAGES C CXX ) diff --git a/README.md b/README.md @@ -24,6 +24,8 @@ maximum flexibility while maintaining minimalism. * Clone the repo * Make a build folder and cd into it * Run `cmake -DCMAKE_BUILD_TYPE=Release <path to cloned repo>` +* Run `make` +* If desired run `make install` in order to install the library and generator program ### Configuration @@ -68,74 +70,49 @@ Please reference demo folder for relevant usage example. There are a few things needed before you begin. -* Everything is contained in the `stamen namespace` -* Panel and item codes must be one word. In addition they must be valid C++ +* Panel and item codes must be one word. In addition they must be valid C/C++ function names if static menu is to be build correctly. * Each free function must have `int name(void)` signature as prescribed by -`Menu::callback_f`. -* You must set a value of the static variable `const Menu::display_f -Menu::display` to specify function used for displaying the menu. You can start -by using a build in `stamen::builtinDisplay`, just make sure to link stamen library -while building your project. +`stamen_callback_f`. +* You must set a value of the static variable `const stamen_display_f +stamen_display` to specify function used for displaying the menu. You can start +by using a build in `stamen_builtin_display`, just make sure to link stamen +library while building your project. -#### Dynamic menu - -In dynamic mode, configuration file is read every time the program is run. In -order to invoke the menu you need to add the following code to your C++ -program: - -``` -// shorthand -using stamen::Menu; - -// read the configuration -Menu::read("path to config"); - -// register free functions -Menu::insert("reference name", some_function); -... - -// start the menu on specific panel -Menu::start("panel code"); - -// print tree-like menu structure -// starting from a specific panel -// for debugging purposes -Menu::print("panel code"); -``` - #### Static menu After writing a configuration file, run `./bin/generate <config file>` which will create source file and include file in the current directory with the name -as the configuration file but with extensions `.cpp` and `.h` respectively. +as the configuration file but with extensions `.cpp` and `.hpp` respectively. +You can create files with extensions `.c` and `.h` by appending C to previous +command -Include file will contain declarations for all of the menu functions inside -`stamen` namespace. You should include this file in your code. +Include file will contain declarations for all of the menu functions. You +should include this file in your code. Source file contains definitions for the menu functions. It also includes `shared.h` file which should contain declarations for all of the free functions -you have specified in the configuration. Generated source file should be -compiled with the rest of your code. You can call any function to display the -menu starting from that specific pane. +you have specified in the configuration. + +Generated source file should be compiled with the rest of your code. + +You can call any function to display the menu starting from that specific pane. #### Custom display function -Please refer to the implementation of `stamen::builtinDisplay` to get a general +Please refer to the implementation of `stamen_builtin_display` to get a general idea of the direction. -A display function should have `int name(const std::string&, const -Menu::item_t[], std::size_t)` signature as prescribed by `Menu::display_f`. To -get information about the specific item use `getPrompt()` and `getCallback()` -member functions. +A display function should have `int name(const char*, const item_t[], int)` +signature as prescribed by `stamen_display_f`. -After prompting user to select one of the items all you have to do is call -`operator()` on selected item to invoke the next panel or free function. The -return type of int is intended to be used as a measure how many panels back -should be backtracked after a free function terminates, but you can use in any -way you see fit. +After prompting user to select one of the items all you have to do is call a +function pointed to by the callback field on selected item to invoke the next +panel or free function. The return type of int is intended to be used as a +measure how many panels back should be backtracked after a free function +terminates, but you can use in any way you see fit. ## Version History