/*
 * Screens.h
 *
 * Created: Fri Apr 02 2021 13:46:52
 *  Author Chris
 */

#ifndef SCREENS_H_
#define SCREENS_H_

// ============================================================================================
// Includes
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

#include "Easings.h"
#include "Display_Objects_Datatypes.h"


// ============================================================================================
// Defines


// ============================================================================================
// Variables (do not edit)
extern void (*_Screen_Tick)(void);
extern void (*_Screen_Click)(uint button_return_value);
extern void (*_Screen_Touch_Event)(int16_t x, int16_t y);
extern void (*_Screen_Action_CW)(Object_ID object_id);
extern void (*_Screen_Action_CCW)(Object_ID object_id);
extern void (*_Screen_On_Objects_Focused)(Object_ID object_id);
extern void (*_Screen_On_Objects_Defocused)(Object_ID object_id);
extern void (*_Screen_On_Object_Select)(Object_ID object_id);
extern void (*_Screen_On_Object_Deselect)(Object_ID object_id);


// ============================================================================================
// List of all Screen Setups as extern
extern void Screen_Setup_Loading();
extern void Screen_Setup_Menu_Main(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, bool do_menu_animation, uint32_t selected_entry);
extern void Screen_Setup_Mode(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration);
extern void Screen_Setup_MIDI_Log(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration);
extern void Screen_Setup_Graph(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration);


extern void Screen_Setup_Settings(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, int32_t selected_item);

extern void Screen_Setup_Settings_MIDI(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, int32_t selected_item);
extern void Screen_Setup_Settings_MIDI_Config(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, int32_t selected_item);

extern void Screen_Setup_Settings_About(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration);

extern void Screen_Setup_Select_Bool(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, char* title, uint32_t title_length, uint8_t *value, void (*return_function)(Screen_Transition_Direction, Screen_Transition_Direction, Easing, uint32_t, int32_t), int32_t return_value);
extern void Screen_Setup_Select_RGB(Screen_Transition_Direction direction_out, Screen_Transition_Direction direction_in, Easing type, uint32_t frame_duration, RGB_Color* rgb_color);


#endif /* SCREENS_H_ */