Added some advanced menu item features
This commit is contained in:
@ -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
20
src/marginmenuitem.h
Normal 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
|
@ -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;
|
||||
|
||||
|
@ -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
14
src/scrollinterface.h
Normal 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
24
src/visibleinterface.h
Normal 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
|
Reference in New Issue
Block a user