/*  -*-  mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8  -*-  */
/************************************************************************************
 **                                                                                **
 **                                        UHSDR                                   **
 **               a powerful firmware for STM32 based SDR transceivers             **
 **                                                                                **
 **--------------------------------------------------------------------------------**
 **                                                                                **
 **  File name:		ui_vkeybrd.h                                                   **
 **  Description:   Virtual keyboard definitions header file                       **
 **  Licence:		GNU GPLv3                                                      **
 **  Author: 		Slawomir Balon/SP9BSL                                          **
 ************************************************************************************/

#ifndef UI_UI_VKEYBRD_H_
#define UI_UI_VKEYBRD_H_


typedef uint8_t (*VKeyStateFunc)(uint8_t KeyNum, uint32_t param);
typedef void (*TouchFunc)(uint8_t KeyNum, uint32_t param);
typedef void (*VKeyRedrawFunc)(void);

typedef struct
{
	char KeyText[16];
	uint8_t SizeX;	//multiply of normal key size, 0=normal size defined by VKeypad's KeyWidth
	uint8_t SizeY;	//multiply of normal key size, 0=normal size defined by VKeypad's KeyHeight
	VKeyStateFunc KeyWarning;	//if function is present, this key will be marked with warning if result of function is 1
	uint16_t TextColor;	//Color Of Key Text when key is not pressed
	uint16_t PressedTextColor;	//Color Of Key Text when key is pressed
	TouchFunc ShortFnc;		//called function for short press
	uint32_t ShortPar;		//short press function calling parameter
	TouchFunc LongFnc;		//called function for short press
	uint32_t LongPar;		//long press function calling parameter
	uint8_t KeyFont;		//font number
} VKey;


typedef struct
{
	uint8_t NumberOfKeys;	//Number of keys in keyborad (see UiVk_MaxKeyCount and increase if more wanted)
	uint8_t Rows;			//Numer of rows
	uint8_t Columns;		//Numer of columns
	uint16_t KeyWidth;		//Width of single key
	uint16_t KeyHeight;		//Height of single key
	uint8_t KeySpacing;		//gap between keys
	uint8_t Backgr_Wnlarge;	//background of keyboard width enlarge
	uint8_t Backgr_Hnlarge;	//background of keyboard width enlarge
	const VKey* Keys;		//pointer to keyboard data
	uint8_t VKeyGroupMode;	//type of key press: see Vkey_Group_
	VKeyStateFunc VKeyStateCallBack;	//pointer to callback function which controls the displayed state of the button
	uint16_t YtopMargin;	//size of additional top margin between top edge and first key
	VKeyRedrawFunc RedrawFunct;	//pointer to callback function for redraw
} VKeypad;

#define UiVk_MaxKeyCount 24

#define Vbtn_State_Normal 0
#define Vbtn_State_Selected 1
#define Vbtn_State_Disabled 2
#define Vbtn_State_Pressed 8

enum Vkey_Group_ {Vkey_Group_OneAllowed=0, Vkey_Group_MultipleAllowed};


//void UiVk_RedrawDSPVirtualKeys();
bool UiVk_Process_VirtualKeypad(bool LongPress);
void UiVk_Redraw(void);

void UiVk_DSPVirtualKeys(void);
void UiVk_ModeVirtualKeys(void);
void UiVk_RedrawModeVirtualKeys(void);

//void UiVk_RedrawBndSelVirtualKeys();
void UiVk_BndSelVirtualKeys(void);

//void UiVk_RedrawBndFreqSetVirtualKeys();
void UiVk_BndFreqSetVirtualKeys(void);

//void UiVk_RedrawModSelVirtualKeys();
void UiVk_ModSelVirtualKeys(void);
#endif /* UI_UI_VKEYBRD_H_ */
