combine with desktop project

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2025-04-10 23:20:19 +02:00
parent b6fb4eb65c
commit b3bf03999b
72 changed files with 65538 additions and 132 deletions

View File

@@ -0,0 +1,39 @@
#pragma once
#include <functional>
#include "MenuOptions.h"
#include "Widget.h"
#include "data/MenuItem.h"
typedef std::function<void(uint8_t)> MenuCallback;
class PSMenu : public Widget {
public:
explicit PSMenu(menu_options_t* options);
~PSMenu() override;
void render() override;
void onButtonClicked(uint8_t button) override;
void addText(const std::string& text, const MenuCallback& callback);
void addSwitch(const std::string& text, std::string& value, const MenuCallback& callback);
void addNumber(const std::string& text, std::string& value, const MenuCallback& callback);
private:
void onPressedDown();
void onPressedUp();
void onPressedLeft();
void onPressedRight();
void onPressedSelect() const;
void onPressedBack() const;
void drawScrollBar() const;
void drawSelectionBox() const;
void renderWidget(uint8_t type, const uint8_t *font, int x, int y, const char *text) const;
size_t m_selected_item = 0;
std::vector<MenuItem> m_items;
menu_options_t *m_options;
};

View File

@@ -0,0 +1,23 @@
#pragma once
#include "MenuOptions.h"
#include "Widget.h"
class ScrollBar final : public Widget {
public:
ScrollBar(const menu_options_t *options, size_t x, size_t y, size_t width, size_t height);
void render() override;
void refresh(size_t value, size_t max, size_t min = 0);
private:
size_t m_x;
size_t m_y;
size_t m_width;
size_t m_height;
size_t m_value;
size_t m_max;
size_t m_min;
size_t m_thumbHeight;
size_t m_thumbY;
};

View File

@@ -0,0 +1,21 @@
#pragma once
#include <cstdint>
#include "u8g2.h"
class Widget {
public:
explicit Widget(u8g2_t* u8g2);
virtual ~Widget() = default;
virtual void update(uint64_t dt);
virtual void render();
virtual void onButtonClicked(uint8_t button);
protected:
u8g2_t* u8g2;
};