Added some advanced menu item features
This commit is contained in:
@@ -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
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user