Added some advanced menu item features

This commit is contained in:
CommanderRedYT
2022-05-21 12:58:15 +02:00
parent d0960025a2
commit ea2827d205
6 changed files with 104 additions and 13 deletions
+20
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
+17
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;
+14 -1
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
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
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