Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[menu] Add optional allocator for ui menu classes #5

Merged
merged 2 commits into from
Jun 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/modm/ui/display/color_graphic_display.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

#include "graphic_display.hpp"

using namespace modm::platform;

namespace modm
{

Expand Down
11 changes: 9 additions & 2 deletions src/modm/ui/gui/view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@

// ----------------------------------------------------------------------------
modm::gui::View::View(modm::gui::GuiViewStack* stack, uint8_t identifier, modm::gui::Dimension dimension) :
AbstractView(stack, identifier),
stack(stack),
dimension(dimension)
dimension(dimension),
identifier(identifier),
alive(true)
{
this->display().clear();
}
Expand Down Expand Up @@ -161,3 +162,9 @@ void modm::gui::View::markDrawn()
(*iter)->markDrawn();
}
}

modm::ColorGraphicDisplay&
modm::gui::View::display()
{
return stack->getDisplay();
}
52 changes: 51 additions & 1 deletion src/modm/ui/gui/view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class GuiViewStack;
* @ingroup modm_ui_gui
* @author Thorsten Lajewski
*/
class View : public modm::AbstractView
class View
{
friend class GuiViewStack;

Expand All @@ -61,6 +61,14 @@ class View : public modm::AbstractView
virtual void
update();

/**
* @brief hasChanged indicates the current displayed view has changed.
* This function prevents unnecessary drawing of the display
* @return if true the display has to be redrawn.
*/
virtual bool
hasChanged() = 0;

virtual void
preUpdate()
{
Expand All @@ -75,14 +83,43 @@ class View : public modm::AbstractView
virtual void
draw();

/**
* @brief shortButtonPress handle the action for the pressed button
*/
virtual void
shortButtonPress(modm::MenuButtons::Button /*button*/)
{
// nothing to be done
}

/// Add widget to view
bool
pack(Widget *w, const modm::glcd::Point &coord);

/**
* @brief isAlive tells the ViewStack if it should remove this screen.
* @return
*/
bool
isAlive() const
{
return this->alive;
}

/// Remove the view from the screen. The viewStack handles the deletion.
void
remove();

/**
* @brief onRemove will be called right before the view gets deleted,
* can be reimplemented to reset external data.
*/
virtual void
onRemove()
{
// nothing to be done here
}

/// Set color palette for every contained widget
void
setColorPalette(ColorPalette& cp);
Expand All @@ -105,12 +142,25 @@ class View : public modm::AbstractView
return stack;
}

modm::ColorGraphicDisplay&
display();

/**
* @brief getIdentifier of the view.
*/
inline uint8_t getIdentifier(){
return this->identifier;
}

protected:
modm::gui::GuiViewStack* stack;
Dimension dimension;
WidgetContainer widgets;

modm::gui::ColorPalette colorpalette;

const uint8_t identifier;
bool alive;
};

} // namespace gui
Expand Down
2 changes: 1 addition & 1 deletion src/modm/ui/gui/view_stack.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

// ----------------------------------------------------------------------------
modm::gui::GuiViewStack::GuiViewStack(modm::ColorGraphicDisplay* display, modm::gui::inputQueue* queue) :
ViewStack(display),
display(display),
input_queue(queue)
{
}
Expand Down
24 changes: 23 additions & 1 deletion src/modm/ui/gui/view_stack.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ namespace gui
* @ingroup modm_ui_gui
* @author Thorsten Lajewski
*/
class GuiViewStack : public modm::ViewStack
class GuiViewStack
{
public:
GuiViewStack(modm::ColorGraphicDisplay* display, modm::gui::inputQueue* queue);
Expand Down Expand Up @@ -84,7 +84,29 @@ class GuiViewStack : public modm::ViewStack
virtual void
update();

/**
* @brief shortButtonPress pass the button press to the current top view
* @param button the pressed button
*/

void
shortButtonPress(modm::MenuButtons::Button button)
{
modm::gui::View* top = this->get();
top->shortButtonPress(button);
}

/**
* @brief getDisplay access underlying GraphicDisplay
*/
inline modm::ColorGraphicDisplay&
getDisplay()
{
return *this->display;
}

private:
modm::ColorGraphicDisplay *display;
modm::Stack< modm::gui::View* , modm::LinkedList< modm::gui::View* > > stack;
modm::gui::inputQueue *input_queue;
};
Expand Down
21 changes: 0 additions & 21 deletions src/modm/ui/menu/abstract_menu.cpp

This file was deleted.

9 changes: 7 additions & 2 deletions src/modm/ui/menu/abstract_menu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,17 @@ namespace modm{
* \author Thorsten Lajewski
* \ingroup modm_ui_menu
*/
class AbstractMenu: public AbstractView
template<typename Allocator = allocator::Dynamic<IAbstractView> >
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I might be misunderstanding this but why do you need a template here? Is this sort of like using Allocator as an alias for allocator::Dynamic<IAbstractView>?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a templated class. So it allows us to specify the type of Allocator we want the class to use at compile time. The part Allocator = allocator::Dynamic<IAbstractView> is a default template parameter. If no template parameter is supplied the object will use allocator::Dynamic<IAbstractView> for the allocator.

class AbstractMenu : public AbstractView<Allocator>
{
public:

AbstractMenu(modm::ViewStack* stack, uint8_t identifier);
AbstractMenu(modm::ViewStack<Allocator>* stack, uint8_t identifier) :
modm::AbstractView<Allocator>(stack, identifier)
{
}

virtual ~AbstractMenu() {}

virtual void
shortButtonPress(modm::MenuButtons::Button button) = 0;
Expand Down
68 changes: 0 additions & 68 deletions src/modm/ui/menu/abstract_view.cpp

This file was deleted.

Loading