diff --git a/src/M5StackSAM.cpp b/src/M5StackSAM.cpp index 22adbbc..347f2d3 100644 --- a/src/M5StackSAM.cpp +++ b/src/M5StackSAM.cpp @@ -35,18 +35,18 @@ void M5SAM::clearList(){ } void M5SAM::addList(String inStr){ - if(inStr.length()<=M5SAM_LIST_MAX_LABEL_SIZE and inStr.length()>0 and list_count < M5SAM_LIST_MAX_COUNT){ + if(inStr.length()<=listMaxLabelSize and inStr.length()>0 and list_count < M5SAM_LIST_MAX_COUNT){ list_labels[list_count] = inStr; list_count++; } if(list_count>0){ - if(list_count > M5SAM_LIST_PAGE_LABELS){ - list_lastpagelines = list_count % M5SAM_LIST_PAGE_LABELS; + if(list_count > listPagination){ + list_lastpagelines = list_count % listPagination; if(list_lastpagelines>0){ - list_pages = (list_count - list_lastpagelines) / M5SAM_LIST_PAGE_LABELS; + list_pages = (list_count - list_lastpagelines) / listPagination; list_pages++; }else{ - list_pages = list_count / M5SAM_LIST_PAGE_LABELS; + list_pages = list_count / listPagination; } }else{ list_pages = 1; @@ -58,18 +58,18 @@ byte M5SAM::getListID(){ return list_idx; } void M5SAM::setListID(byte idx) { - if(idx< list_page * M5SAM_LIST_PAGE_LABELS + list_lines){ + if(idx< list_page * listPagination + list_lines){ list_idx = idx; } - list_page = list_idx / M5SAM_LIST_PAGE_LABELS; + list_page = list_idx / listPagination; } String M5SAM::getListString(){ return list_labels[list_idx]; } -void M5SAM::nextList(){ - if(list_idx< list_page * M5SAM_LIST_PAGE_LABELS + list_lines - 1){ +void M5SAM::nextList( bool renderAfter ){ + if(list_idx< list_page * listPagination + list_lines - 1){ list_idx++; }else{ if(list_page",3,80+(postIDX*20),2); + M5.Lcd.drawString(list_labels[inIDX],15,listPageLabelsOffset+(postIDX*20),2); + M5.Lcd.drawString(">",3,listPageLabelsOffset+(postIDX*20),2); }else{ - M5.Lcd.drawString(list_labels[inIDX],15,80+(postIDX*20),2); + M5.Lcd.drawString(list_labels[inIDX],15,listPageLabelsOffset+(postIDX*20),2); } } void M5SAM::showList(){ windowClr(); byte labelid = 0; - M5.Lcd.drawCentreString(listCaption,M5.Lcd.width()/2,45,2); + M5.Lcd.setTextDatum( listCaptionDatum ); + //M5.Lcd.drawCentreString(listCaption,M5.Lcd.width()/2,45,2); + M5.Lcd.drawString(listCaption, listCaptionXPos, listCaptionYPos, 2); + M5.Lcd.setTextDatum( TL_DATUM ); if((list_page + 1) == list_pages){ - if(list_lastpagelines == 0 and list_count >= M5SAM_LIST_PAGE_LABELS){ - list_lines = M5SAM_LIST_PAGE_LABELS; - for(byte i = 0;i= listPagination){ + list_lines = listPagination; + for(byte i = 0;i1){ list_lines = list_lastpagelines; for(byte i = 0;i - +/* +// why was it even here ? #if defined(WIRING) && WIRING >= 100 #include #elif defined(ARDUINO) && ARDUINO >= 100 @@ -7,7 +8,7 @@ #else #include #endif - +*/ #ifndef M5StackSAM_h #define M5StackSAM_h @@ -15,13 +16,21 @@ #define M5SAM_BTN_TITLE_MAX_SIZE 6 #define M5SAM_MAX_SUBMENUS 8 -#define M5SAM_LIST_MAX_COUNT 32 -#define M5SAM_LIST_MAX_LABEL_SIZE 36 +#ifndef M5SAM_LIST_MAX_COUNT +#define M5SAM_LIST_MAX_COUNT 128 +#endif + +#define M5SAM_LIST_MAX_LABEL_SIZE 36 // list labels will be trimmed #define M5SAM_LIST_PAGE_LABELS 6 volatile static uint8_t _keyboardIRQRcvd; volatile static uint8_t _keyboardChar; +#ifdef ARDUINO_ODROID_ESP32 + #define BUTTONS_COUNT 4 +#else + #define BUTTONS_COUNT 3 +#endif class M5SAM { public: @@ -32,6 +41,9 @@ class M5SAM { void windowClr(); void setColorSchema(unsigned int inmenucolor, unsigned int inwindowcolor, unsigned int intextcolor); void drawAppMenu(String inmenuttl, String inbtnAttl, String inbtnBttl, String inbtnCttl); + #ifdef ARDUINO_ODROID_ESP32 + void drawAppMenu(String inmenuttl, String inbtnAttl, String intSpeakerttl, String inbtnBttl, String inbtnCttl); + #endif void GoToLevel(byte inlevel); unsigned int getrgb(byte inred, byte ingrn, byte inblue); void addMenuItem(byte levelID, const char *menu_title,const char *btnA_title,const char *btnB_title,const char *btnC_title, signed char goto_level, void(*function)()); @@ -41,11 +53,17 @@ class M5SAM { byte getListID(); void setListID(byte idx); String getListString(); - void nextList(); + void nextList( bool renderAfter = true ); void addList(String inLabel); void setListCaption(String inCaption); String keyboardGetString(); - String lastBtnTittle[3]; + String lastBtnTittle[BUTTONS_COUNT]; + uint8_t listMaxLabelSize = M5SAM_LIST_MAX_LABEL_SIZE; // list labels will be trimmed + uint8_t listPagination = M5SAM_LIST_PAGE_LABELS; + uint8_t listPageLabelsOffset = 80; // initially 80, pixels offset from top screen for list items + uint8_t listCaptionDatum = TC_DATUM; // initially TC_DATUM=top centered, TL_DATUM=top left (default), top/right/bottom/left + uint16_t listCaptionXPos = 160; // initially M5.Lcd.width()/2, text cursor position-x for list caption + uint16_t listCaptionYPos = 45; // initially 45, text cursor position-x for list caption private: String listCaption; @@ -55,8 +73,10 @@ class M5SAM { void keyboardEnable(); void keyboardDisable(); static void keyboardIRQ(); - void drawMenu(String inmenuttl, String inbtnAttl, String inbtnBttl, String inbtnCttl, unsigned int inmenucolor, unsigned int inwindowcolor, unsigned int intxtcolor); + #ifdef ARDUINO_ODROID_ESP32 + void drawMenu(String inmenuttl, String inbtnAttl, String intSpeakerttl, String inbtnBttl, String inbtnCttl, unsigned int inmenucolor, unsigned int inwindowcolor, unsigned int intxtcolor); + #endif struct MenuCommandCallback { char title[M5SAM_MENU_TITLE_MAX_SIZE + 1]; char btnAtitle[M5SAM_BTN_TITLE_MAX_SIZE + 1]; @@ -64,7 +84,6 @@ class M5SAM { char btnCtitle[M5SAM_BTN_TITLE_MAX_SIZE + 1]; signed char gotoLevel; void (*function)(); - }; String list_labels[M5SAM_LIST_MAX_COUNT]; byte list_lastpagelines;