class CollapsibleMenu : public Container
{
public:
enum ExpandDirection
{
LEFT,
RIGHT
};
CollapsibleMenu();
virtual ~CollapsibleMenu();
void addMenuElement(const Bitmap& elementBitmap, const Bitmap& elementPressedBitmap);
void finilizeInitialization();
void setElementSpace(uint16_t space);
void setExpandDirection(ExpandDirection direction);
void collapseMenu();
void expandMenu();
void setTimeout(int newTimeout);
void fadeIn(int duration = 14);
void fadeInAndExpand(int duration = 14);
void fadeOut(int duration = 14);
bool isFadedOut();
uint8_t getSelectedElementIndex();
void setStateChangedCallback(touchgfx::GenericCallback<const CollapsibleMenu&, const bool>& callback)
{
stateChangedAction = &callback;
}
private:
static const uint8_t MAX_NUMBER_OF_ELEMENTS = 10;
enum AnimationState
{
ANIMATE_TO_EXPANDED,
ANIMATE_TO_COLLAPSED,
FADE_OUT,
FADE_IN,
FADE_IN_AND_EXPAND,
NO_ANIMATION
};
AnimationState currentAnimationState;
uint8_t size;
bool isExpanded;
uint16_t elementSpace;
ExpandDirection expandDirection;
bool fadedOut;
int timeout;
int timeoutCounter;
FadeAnimator<MoveAnimator<Button> > menuElements[MAX_NUMBER_OF_ELEMENTS];
uint8_t selectedElementIndex;
Callback<CollapsibleMenu, const AbstractButton&> onButtonPressed;
Callback<CollapsibleMenu, const MoveAnimator<Button>& > menuElementMoveAnimationEndedCallback;
Callback<CollapsibleMenu, const FadeAnimator<MoveAnimator<Button> >& > menuElementFadeAnimationEndedCallback;
GenericCallback<const CollapsibleMenu&, const bool>* stateChangedAction;
void buttonPressedHandler(const AbstractButton& button);
void menuElementMoveAnimationEndedHandler(const MoveAnimator<Button>& element);
void menuElementFadeAnimationEndedHandler(const FadeAnimator<MoveAnimator<Button> >& element);
bool anyFadeAnimationRunning();
virtual void handleTickEvent();
};