Added some advanced menu item features

This commit is contained in:
CommanderRedYT
2022-03-22 22:32:42 +01:00
parent d0960025a2
commit ea2827d205
6 changed files with 104 additions and 13 deletions

View File

@ -1,6 +1,14 @@
set(headers
src/accessorinterface.h
src/actioninterface.h
src/actions/backproxyaction.h
src/actions/dummyaction.h
src/actions/multiaction.h
src/actions/popscreenaction.h
src/actions/pushscreenaction.h
src/actions/setvalueaction.h
src/actions/switchscreenaction.h
src/actions/toggleboolaction.h
src/backinterface.h
src/buttonsinterface.h
src/changevaluedisplay.h
@ -22,27 +30,22 @@ set(headers
src/graphdisplay.h
src/icon.h
src/iconinterface.h
src/icons/back.h
src/icons/checked.h
src/icons/unchecked.h
src/marginmenuitem.h
src/menudisplay.h
src/menuitem.h
src/messagepopupdisplay.h
src/popupdisplay.h
src/richtextrenderer.h
src/screenmanager.h
src/scrollinterface.h
src/splitgraphdisplay.h
src/tftinstance.h
src/textinterface.h
src/textwithvaluehelper.h
src/actions/backproxyaction.h
src/actions/dummyaction.h
src/actions/multiaction.h
src/actions/pushscreenaction.h
src/actions/popscreenaction.h
src/actions/setvalueaction.h
src/actions/switchscreenaction.h
src/actions/toggleboolaction.h
src/icons/back.h
src/icons/checked.h
src/icons/unchecked.h
src/tftinstance.h
src/visibleinterface.h
src/widgets/graph.h
src/widgets/label.h
src/widgets/progressbar.h

20
src/marginmenuitem.h Normal file
View File

@ -0,0 +1,20 @@
#pragma once
// local includes
#include "actioninterface.h"
#include "menuitem.h"
#include "textinterface.h"
#include "scrollinterface.h"
namespace espgui {
class MarginMenuItem :
public virtual MenuItem,
public EmptyText,
public virtual ActionInterface,
public virtual ScrollInterface
{
public:
void triggered() override {}
bool skipScroll() const override { return true; }
};
} // namespace espgui

View File

@ -68,6 +68,18 @@ void MenuDisplay::update()
runForEveryMenuItem([&](MenuItem &item){
item.update();
});
if (getMenuItem(m_selectedIndex).skipScroll())
{
if (offset > 0)
{
m_rotateOffset++;
}
else if (offset < 0)
{
m_rotateOffset--;
}
}
}
else
{
@ -103,6 +115,11 @@ void MenuDisplay::redraw()
runForEveryMenuItem([&](MenuItem &item){
const auto index = i++;
if (!item.visible())
{
return;
}
if (index < m_scrollOffset)
return;

View File

@ -6,6 +6,8 @@
#include "colorinterface.h"
#include "iconinterface.h"
#include "actioninterface.h"
#include "visibleinterface.h"
#include "scrollinterface.h"
namespace espgui {
using MenuItemIconInterface = IconInterface<24, 24>;
@ -20,7 +22,9 @@ class MenuItem :
public virtual TextInterface,
public virtual FontInterface,
public virtual ColorInterface,
public virtual MenuItemIconInterface
public virtual MenuItemIconInterface,
public virtual VisibleInterface,
public virtual ScrollInterface
{
public:
virtual ~MenuItem() = default;
@ -38,4 +42,13 @@ public:
protected:
T &m_menu;
};
class EmptyMenuItem :
public MenuItem,
public EmptyText,
public virtual ActionInterface
{
public:
void triggered() override {}
};
} // namespace espgui

14
src/scrollinterface.h Normal file
View File

@ -0,0 +1,14 @@
#pragma once
namespace espgui {
class ScrollInterface {
public:
virtual bool skipScroll() const { return false; }
};
template<bool TScroll>
class StaticScrollBehaviour : public ScrollInterface {
public:
bool skipScroll() const override { return TScroll; }
};
} // namespace espgui

24
src/visibleinterface.h Normal file
View File

@ -0,0 +1,24 @@
#pragma once
namespace espgui {
class VisibleInterface {
public:
virtual bool visible() const { return true; }
};
template<bool TVisible>
class StaticVisibility : public virtual VisibleInterface
{
public:
bool visible() const override { return TVisible; }
};
class ChangeableVisibility : public virtual VisibleInterface
{
public:
void setVisible(bool visible) { m_visible = visible; }
bool visible() const override { return m_visible; }
private:
bool m_visible = true;
};
} // namespace espgui