/** \brief Header file for the IMGUI widgets
 *
 * \todo [med] Cyclying through widgets via tab and shift-tab
 */
#ifndef _IMGUICONTROLS_H
#define _IMGUICONTROLS_H

#include <SDL/SDL.h>
#include <string>

namespace Engine {

/** \brief IMGUI widgets and functions
 */
namespace GUI {

/** \brief Checks whether the mouse is in the given rectangle */
bool regionhit (int x, int y, int w, int h);

void DrawRoundedBlock (int x, int y, int w, int h);

/** \brief Draws a label at the given position with vertical center at y */
void Label (int id, const char* caption, int x, int y);
/** \brief Draws a label centered at the given position with vertical center at y */
void LabelCentered (int id, const char* caption, int x, int y);


/** \brief Draws a button at the given position
 *
 * The caption will be centered in the middle of the clickable area.
 *
 * \returns true if it was clicked
 *
 */
bool Button (int id, const char* caption, int x, int y, int w, int h);

bool CheckButton (int id, const char* caption, bool state, int x, int y, int w, int h);

bool LineEdit (int id, int x, int y, std::string &text_value, const int &maxlength);

bool LineEditMasked (int id, int x, int y, std::string &text_value, const int &maxlength, const std::string &valid_chars);

float VerticalSlider (int id, int x, int y, int w, int h, float min_value, float max_value, float &value);

/** \brief Checks whether a given key is currently pressed
 *
 * This function can be used to check whether a single key (e.g. ESC) is currently 
 * pressed. This is useful when one wants to abort an action or quit from the
 * main screen by pressing a single key.
 */
bool CheckKeyPress (int keycode);

/** \brief Checks whether a key press was completed for a given key
 *
 */
bool CheckKeyPressed (int keycode);

};

};

#endif /* _IMGUICONTROLS_H */
