eurorack/deprecated/midi2cv/menu/menu.h

47 lines
1.1 KiB
C
Raw Permalink Normal View History

2020-01-03 21:09:11 +00:00
#pragma once
#include "menu_items.h"
2020-02-23 10:15:27 +00:00
#include <U8g2lib.h>
2020-01-03 21:09:11 +00:00
#define MAXIMUM_MENU_ITEM_COUNT 16
class Menu {
private:
AbstractMenuItem* items[MAXIMUM_MENU_ITEM_COUNT];
2020-02-26 18:16:33 +00:00
AbstractMenuItem* visibleItems[MAXIMUM_MENU_ITEM_COUNT];
2020-01-03 21:09:11 +00:00
uint8_t itemCount;
2020-02-26 18:16:33 +00:00
uint8_t visibleItemCount;
uint8_t selectedVisibleItem;
uint8_t currentVisibleScrollStart; // index we start rendering the menu from (for scrolling)
int8_t currentEditingVisibleItem;
bool visibility_dirty;
2020-02-26 18:16:33 +00:00
uint8_t width, height;
2020-01-03 21:09:11 +00:00
2020-02-26 18:16:33 +00:00
void update_visible_items();
2020-01-03 21:09:11 +00:00
public:
Menu()
2020-02-26 18:16:33 +00:00
: selectedVisibleItem(0)
, currentVisibleScrollStart(0)
, currentEditingVisibleItem(-1)
, visibility_dirty(true)
, width(10)
, height(10) {};
2020-01-03 21:09:11 +00:00
void up();
void down();
2020-02-23 10:15:27 +00:00
bool back(); // returns true true if nothing happened here and the action can be delegated to up
bool enter(); // returns true if it wants to give up control
2020-01-03 21:09:11 +00:00
void add_item(AbstractMenuItem* item)
{
if (itemCount < MAXIMUM_MENU_ITEM_COUNT) {
items[itemCount++] = item;
}
this->visibility_dirty = true;
}
2020-02-23 10:15:27 +00:00
void render(U8G2* u8g2_, uint8_t x, uint8_t y, uint8_t width, uint8_t height);
2020-01-03 21:09:11 +00:00
};