// menu_oled.h
// Affiche un menu sur LCD Oled 1306
// Affichage/Saisie depuis le menu et retourne le choix de l'utilisateur
// Castoo
// Décembre 2019

/*
menu_oled.h
- Objet destiné à être utilisé avec Arduino ou ESPxxx.
Possibilité de supporter différents LCD mais l'objet a été créée avec un OLED SD1306
Possibilité de supporter différents Encodeurs rotatifs mais l'objet a été créée avec un KY-040 30 pas
Création Jean Michel Castille décembre 2019 / castoo.fr
Cette bibliothèque est un logiciel libre;
Vous pouvez la redistribuer et ou la modifier.
Cette bibliothèque est distribuée dans l'espoir qu'elle sera utile,
mais SANS AUCUNE GARANTIE, sans même la garantie implicite de
QUALITÉ MARCHANDE ou ADÉQUATION À UN USAGE PARTICULIER. 
*/

#ifndef menu_oled_h
#define menu_oled_h

#include <Wire.h>
#include "SSD1306Wire.h"


class menu_oled{
  private:
  	SSD1306Wire *_ecran; // Ecran OLED
	uint8_t PinCLK; // Gpio x sur sortie Clk du selecteur rotatif
	uint8_t PinDT;  // Gpio x sur sortie DT du selecteur rotatif
	uint8_t PinSW;  // Gpio x sur sortie SW du selecteur rotatif
	int max_ch; // Nb max de chaine du menu
	String * _ch_menu; // Pointeur sur tableau des chaines

  public:
	// Constructeur permet de passer les cnx du bouton de commande et le nom du LCD
	menu_oled(uint8_t vclk, uint8_t vdt, uint8_t vsw, SSD1306Wire &ecran);
	
	// Initialisation du menu permet de passer le nb de choix et un tableau des chaines de choix
	uint8_t init(int nb_ch_menu, String &ch_menu);

   private:
	// Affichage du menu A
	void aff_menu(int pos);

	// Selection dans le menu A à l'aide selecteur rotatif
	uint8_t sel_menu(int max);
};

#endif