Merge pull request #9 from CommanderRedYT/advanced-menuitems
Added some advanced menu item features
This commit is contained in:
@ -1,6 +1,14 @@
|
|||||||
set(headers
|
set(headers
|
||||||
src/accessorinterface.h
|
src/accessorinterface.h
|
||||||
src/actioninterface.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/backinterface.h
|
||||||
src/buttonsinterface.h
|
src/buttonsinterface.h
|
||||||
src/changevaluedisplay.h
|
src/changevaluedisplay.h
|
||||||
@ -22,27 +30,22 @@ set(headers
|
|||||||
src/graphdisplay.h
|
src/graphdisplay.h
|
||||||
src/icon.h
|
src/icon.h
|
||||||
src/iconinterface.h
|
src/iconinterface.h
|
||||||
|
src/icons/back.h
|
||||||
|
src/icons/checked.h
|
||||||
|
src/icons/unchecked.h
|
||||||
|
src/marginmenuitem.h
|
||||||
src/menudisplay.h
|
src/menudisplay.h
|
||||||
src/menuitem.h
|
src/menuitem.h
|
||||||
src/messagepopupdisplay.h
|
src/messagepopupdisplay.h
|
||||||
src/popupdisplay.h
|
src/popupdisplay.h
|
||||||
src/richtextrenderer.h
|
src/richtextrenderer.h
|
||||||
src/screenmanager.h
|
src/screenmanager.h
|
||||||
|
src/scrollinterface.h
|
||||||
src/splitgraphdisplay.h
|
src/splitgraphdisplay.h
|
||||||
src/tftinstance.h
|
|
||||||
src/textinterface.h
|
src/textinterface.h
|
||||||
src/textwithvaluehelper.h
|
src/textwithvaluehelper.h
|
||||||
src/actions/backproxyaction.h
|
src/tftinstance.h
|
||||||
src/actions/dummyaction.h
|
src/visibleinterface.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/widgets/graph.h
|
src/widgets/graph.h
|
||||||
src/widgets/label.h
|
src/widgets/label.h
|
||||||
src/widgets/progressbar.h
|
src/widgets/progressbar.h
|
||||||
|
19
src/marginmenuitem.h
Normal file
19
src/marginmenuitem.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#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 ScrollInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void triggered() override {}
|
||||||
|
bool skipScroll() const override { return true; }
|
||||||
|
};
|
||||||
|
} // namespace espgui
|
@ -68,6 +68,18 @@ void MenuDisplay::update()
|
|||||||
runForEveryMenuItem([&](MenuItem &item){
|
runForEveryMenuItem([&](MenuItem &item){
|
||||||
item.update();
|
item.update();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (getMenuItem(m_selectedIndex).skipScroll())
|
||||||
|
{
|
||||||
|
if (offset > 0)
|
||||||
|
{
|
||||||
|
m_rotateOffset++;
|
||||||
|
}
|
||||||
|
else if (offset < 0)
|
||||||
|
{
|
||||||
|
m_rotateOffset--;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -103,6 +115,11 @@ void MenuDisplay::redraw()
|
|||||||
runForEveryMenuItem([&](MenuItem &item){
|
runForEveryMenuItem([&](MenuItem &item){
|
||||||
const auto index = i++;
|
const auto index = i++;
|
||||||
|
|
||||||
|
if (!item.visible())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (index < m_scrollOffset)
|
if (index < m_scrollOffset)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
#include "colorinterface.h"
|
#include "colorinterface.h"
|
||||||
#include "iconinterface.h"
|
#include "iconinterface.h"
|
||||||
#include "actioninterface.h"
|
#include "actioninterface.h"
|
||||||
|
#include "visibleinterface.h"
|
||||||
|
#include "scrollinterface.h"
|
||||||
|
|
||||||
namespace espgui {
|
namespace espgui {
|
||||||
using MenuItemIconInterface = IconInterface<24, 24>;
|
using MenuItemIconInterface = IconInterface<24, 24>;
|
||||||
@ -20,7 +22,9 @@ class MenuItem :
|
|||||||
public virtual TextInterface,
|
public virtual TextInterface,
|
||||||
public virtual FontInterface,
|
public virtual FontInterface,
|
||||||
public virtual ColorInterface,
|
public virtual ColorInterface,
|
||||||
public virtual MenuItemIconInterface
|
public virtual MenuItemIconInterface,
|
||||||
|
public virtual VisibleInterface,
|
||||||
|
public virtual ScrollInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~MenuItem() = default;
|
virtual ~MenuItem() = default;
|
||||||
@ -38,4 +42,12 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
T &m_menu;
|
T &m_menu;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EmptyMenuItem :
|
||||||
|
public MenuItem,
|
||||||
|
public EmptyText
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void triggered() override {}
|
||||||
|
};
|
||||||
} // namespace espgui
|
} // 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